@memberjunction/ng-core-entity-forms 5.22.0 → 5.24.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 (215) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
  6. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
  8. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
  15. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
  35. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
  39. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
  43. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
  48. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
  50. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  51. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
  52. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
  54. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
  56. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
  58. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
  60. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  61. package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
  62. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  63. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  64. package/dist/lib/custom/Actions/action-form.component.js +93 -94
  65. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  66. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +22 -0
  67. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -0
  68. package/dist/lib/custom/ContentSources/content-source-form.component.js +165 -0
  69. package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -0
  70. package/dist/lib/custom/Entities/entity-form.component.js +2 -2
  71. package/dist/lib/custom/Lists/list-form.component.js +61 -63
  72. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
  74. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  75. package/dist/lib/custom/Queries/query-form.component.js +354 -360
  76. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  77. package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
  78. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  79. package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
  80. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
  82. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
  84. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  85. package/dist/lib/custom/Templates/templates-form.component.js +34 -36
  86. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/test-form.component.js +8 -9
  88. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
  90. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-run-form.component.js +7 -7
  92. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Tests/test-suite-form.component.js +6 -7
  94. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  95. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -7
  96. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  97. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
  98. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  99. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
  104. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
  106. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  107. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  108. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
  109. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  110. package/dist/lib/custom/custom-forms.module.d.ts +25 -29
  111. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  112. package/dist/lib/custom/custom-forms.module.js +57 -82
  113. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  114. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
  115. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  116. package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
  117. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  119. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
  120. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
  122. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
  123. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
  124. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
  125. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
  126. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
  127. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
  128. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
  129. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  130. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +98 -44
  131. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +35 -17
  134. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +79 -20
  137. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.d.ts +10 -0
  139. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.d.ts.map +1 -0
  140. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js +73 -0
  141. package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js.map +1 -0
  142. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -6
  143. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.d.ts.map +1 -1
  145. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js +49 -8
  146. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.d.ts +10 -0
  148. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.d.ts.map +1 -0
  149. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js +107 -0
  150. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js.map +1 -0
  151. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.d.ts +10 -0
  152. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.d.ts.map +1 -0
  153. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js +57 -0
  154. package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js.map +1 -0
  155. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +71 -24
  157. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +43 -15
  160. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +43 -17
  163. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +21 -11
  165. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +19 -13
  167. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  168. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  169. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
  170. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  172. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +78 -60
  173. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
  175. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +24 -6
  176. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  178. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
  179. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js +23 -5
  182. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.d.ts +10 -0
  184. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.d.ts.map +1 -0
  185. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js +77 -0
  186. package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js.map +1 -0
  187. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.d.ts.map +1 -1
  188. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +22 -4
  189. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +1 -1
  190. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  191. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +139 -19
  192. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  193. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.d.ts +10 -0
  194. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.d.ts.map +1 -0
  195. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js +67 -0
  196. package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js.map +1 -0
  197. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.d.ts +10 -0
  198. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.d.ts.map +1 -0
  199. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js +65 -0
  200. package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js.map +1 -0
  201. package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js +10 -8
  202. package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js.map +1 -1
  203. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  204. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +226 -154
  205. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
  207. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +41 -5
  208. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  209. package/dist/lib/generated/generated-forms.module.d.ts +286 -279
  210. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  211. package/dist/lib/generated/generated-forms.module.js +192 -214
  212. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  213. package/dist/lib/shared/components/template-editor.component.js +14 -15
  214. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  215. package/package.json +34 -41
@@ -16,16 +16,12 @@ import { AITestHarnessDialogService } from '@memberjunction/ng-ai-test-harness';
16
16
  import { AIPromptManagementService } from './ai-prompt-management.service';
17
17
  import * as i0 from "@angular/core";
18
18
  import * as i1 from "@angular/forms";
19
- import * as i2 from "@progress/kendo-angular-layout";
20
- import * as i3 from "@progress/kendo-angular-dialog";
21
- import * as i4 from "@progress/kendo-angular-inputs";
22
- import * as i5 from "@progress/kendo-angular-dropdowns";
23
- import * as i6 from "@progress/kendo-angular-buttons";
24
- import * as i7 from "@memberjunction/ng-base-forms";
25
- import * as i8 from "@memberjunction/ng-code-editor";
26
- import * as i9 from "@memberjunction/ng-ai-test-harness";
27
- import * as i10 from "../../shared/components/template-editor.component";
28
- import * as i11 from "@angular/common";
19
+ import * as i2 from "@memberjunction/ng-ui-components";
20
+ import * as i3 from "@memberjunction/ng-base-forms";
21
+ import * as i4 from "@memberjunction/ng-code-editor";
22
+ import * as i5 from "@memberjunction/ng-ai-test-harness";
23
+ import * as i6 from "../../shared/components/template-editor.component";
24
+ import * as i7 from "@angular/common";
29
25
  const _c0 = ["templateEditor"];
30
26
  const _c1 = () => ({ text: "Active", value: "Active" });
31
27
  const _c2 = () => ({ text: "Pending", value: "Pending" });
@@ -38,18 +34,18 @@ function _forTrack0($index, $item) { return this.getModelTrackId($item) || $inde
38
34
  const _forTrack1 = ($index, $item) => $item.ID;
39
35
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
40
36
  const _r1 = i0.ɵɵgetCurrentView();
41
- i0.ɵɵelementStart(0, "kendo-textbox", 52);
42
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_9_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
37
+ i0.ɵɵelementStart(0, "input", 51);
38
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
43
39
  i0.ɵɵelementEnd();
44
40
  } if (rf & 2) {
45
41
  const ctx_r1 = i0.ɵɵnextContext(2);
46
42
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
47
43
  } }
48
44
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
49
- i0.ɵɵelementStart(0, "h4", 53);
45
+ i0.ɵɵelementStart(0, "h4", 52);
50
46
  i0.ɵɵtext(1);
51
47
  i0.ɵɵelementEnd();
52
- i0.ɵɵelementStart(2, "span", 54);
48
+ i0.ɵɵelementStart(2, "span", 53);
53
49
  i0.ɵɵtext(3);
54
50
  i0.ɵɵelementEnd();
55
51
  } if (rf & 2) {
@@ -62,48 +58,48 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_10_Template(r
62
58
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
63
59
  } }
64
60
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵelementStart(0, "div", 57);
66
- i0.ɵɵelement(1, "i", 59);
61
+ i0.ɵɵelementStart(0, "div", 56);
62
+ i0.ɵɵelement(1, "i", 58);
67
63
  i0.ɵɵtext(2, " Loading types... ");
68
64
  i0.ɵɵelementEnd();
69
65
  } }
70
66
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
71
67
  const _r4 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 60);
73
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_11_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TypeID, $event) || (ctx_r1.record.TypeID = $event); return i0.ɵɵresetView($event); });
68
+ i0.ɵɵelementStart(0, "mj-dropdown", 59);
69
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_11_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TypeID, $event) || (ctx_r1.record.TypeID = $event); return i0.ɵɵresetView($event); });
74
70
  i0.ɵɵelementEnd();
75
71
  } if (rf & 2) {
76
72
  const ctx_r1 = i0.ɵɵnextContext(3);
77
73
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.TypeID);
78
- i0.ɵɵproperty("data", ctx_r1.availablePromptTypes)("valuePrimitive", true)("filterable", true);
74
+ i0.ɵɵproperty("Data", ctx_r1.availablePromptTypes)("ValuePrimitive", true)("Filterable", true);
79
75
  } }
80
76
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
81
77
  const _r3 = i0.ɵɵgetCurrentView();
82
- i0.ɵɵelementStart(0, "div", 14)(1, "div")(2, "label", 46);
78
+ i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label", 45);
83
79
  i0.ɵɵtext(3, "Status");
84
80
  i0.ɵɵelementEnd();
85
- i0.ɵɵelementStart(4, "kendo-dropdownlist", 55);
86
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
81
+ i0.ɵɵelementStart(4, "mj-dropdown", 54);
82
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
87
83
  i0.ɵɵelementEnd()();
88
- i0.ɵɵelementStart(5, "div")(6, "label", 46);
84
+ i0.ɵɵelementStart(5, "div")(6, "label", 45);
89
85
  i0.ɵɵtext(7, " Type ");
90
- i0.ɵɵelementStart(8, "span", 56);
86
+ i0.ɵɵelementStart(8, "span", 55);
91
87
  i0.ɵɵtext(9, "*");
92
88
  i0.ɵɵelementEnd()();
93
- i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_10_Template, 3, 0, "div", 57)(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_11_Template, 1, 4, "kendo-dropdownlist", 58);
89
+ i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_10_Template, 3, 0, "div", 56)(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Conditional_11_Template, 1, 4, "mj-dropdown", 57);
94
90
  i0.ɵɵelementEnd()();
95
91
  } if (rf & 2) {
96
92
  const ctx_r1 = i0.ɵɵnextContext(2);
97
93
  i0.ɵɵadvance(4);
98
94
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Status);
99
- i0.ɵɵproperty("data", i0.ɵɵpureFunction3(7, _c4, i0.ɵɵpureFunction0(4, _c1), i0.ɵɵpureFunction0(5, _c2), i0.ɵɵpureFunction0(6, _c3)))("valuePrimitive", true);
95
+ i0.ɵɵproperty("Data", i0.ɵɵpureFunction3(7, _c4, i0.ɵɵpureFunction0(4, _c1), i0.ɵɵpureFunction0(5, _c2), i0.ɵɵpureFunction0(6, _c3)))("ValuePrimitive", true);
100
96
  i0.ɵɵadvance(6);
101
97
  i0.ɵɵconditional(ctx_r1.isLoadingPromptTypes ? 10 : 11);
102
98
  } }
103
99
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
104
100
  const _r5 = i0.ɵɵgetCurrentView();
105
- i0.ɵɵelementStart(0, "kendo-textarea", 61);
106
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_12_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
101
+ i0.ɵɵelementStart(0, "textarea", 60);
102
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_12_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
107
103
  i0.ɵɵelementEnd();
108
104
  } if (rf & 2) {
109
105
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -111,7 +107,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_12_Template(r
111
107
  i0.ɵɵproperty("rows", 2);
112
108
  } }
113
109
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
114
- i0.ɵɵelementStart(0, "p", 16);
110
+ i0.ɵɵelementStart(0, "p", 15);
115
111
  i0.ɵɵtext(1);
116
112
  i0.ɵɵelementEnd();
117
113
  } if (rf & 2) {
@@ -120,12 +116,12 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_13_Template(r
120
116
  i0.ɵɵtextInterpolate(ctx_r1.record.Description);
121
117
  } }
122
118
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelementStart(0, "div", 18);
124
- i0.ɵɵelement(1, "i", 62);
125
- i0.ɵɵelementStart(2, "span", 20);
119
+ i0.ɵɵelementStart(0, "div", 17);
120
+ i0.ɵɵelement(1, "i", 61);
121
+ i0.ɵɵelementStart(2, "span", 19);
126
122
  i0.ɵɵtext(3, "Type:");
127
123
  i0.ɵɵelementEnd();
128
- i0.ɵɵelementStart(4, "span", 21);
124
+ i0.ɵɵelementStart(4, "span", 20);
129
125
  i0.ɵɵtext(5);
130
126
  i0.ɵɵelementEnd()();
131
127
  } if (rf & 2) {
@@ -134,19 +130,19 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_15_Template(r
134
130
  i0.ɵɵtextInterpolate(ctx_r1.getPromptTypeDisplayName(ctx_r1.record.TypeID));
135
131
  } }
136
132
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
137
- i0.ɵɵelementStart(0, "div", 18);
138
- i0.ɵɵelement(1, "i", 63);
139
- i0.ɵɵelementStart(2, "span", 64);
133
+ i0.ɵɵelementStart(0, "div", 17);
134
+ i0.ɵɵelement(1, "i", 62);
135
+ i0.ɵɵelementStart(2, "span", 63);
140
136
  i0.ɵɵtext(3, "Caching Enabled");
141
137
  i0.ɵɵelementEnd()();
142
138
  } }
143
139
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
144
- i0.ɵɵelementStart(0, "div", 18);
145
- i0.ɵɵelement(1, "i", 65);
146
- i0.ɵɵelementStart(2, "span", 20);
140
+ i0.ɵɵelementStart(0, "div", 17);
141
+ i0.ɵɵelement(1, "i", 64);
142
+ i0.ɵɵelementStart(2, "span", 19);
147
143
  i0.ɵɵtext(3, "Effort Level:");
148
144
  i0.ɵɵelementEnd();
149
- i0.ɵɵelementStart(4, "span", 21);
145
+ i0.ɵɵelementStart(4, "span", 20);
150
146
  i0.ɵɵtext(5);
151
147
  i0.ɵɵelementEnd()();
152
148
  } if (rf & 2) {
@@ -156,13 +152,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_29_Template(r
156
152
  } }
157
153
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
158
154
  const _r6 = i0.ɵɵgetCurrentView();
159
- i0.ɵɵelementStart(0, "button", 66);
155
+ i0.ɵɵelementStart(0, "button", 65);
160
156
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
161
- i0.ɵɵelement(1, "i", 67);
157
+ i0.ɵɵelement(1, "i", 66);
162
158
  i0.ɵɵtext(2, " Run ");
163
159
  i0.ɵɵelementEnd();
164
- } if (rf & 2) {
165
- i0.ɵɵproperty("themeColor", "primary")("size", "large");
166
160
  } }
167
161
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Conditional_1_Template(rf, ctx) { if (rf & 1) {
168
162
  i0.ɵɵtext(0, " \u2022 Prompt must be Active");
@@ -177,7 +171,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Conditiona
177
171
  i0.ɵɵelement(1, "br");
178
172
  } }
179
173
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
180
- i0.ɵɵelementStart(0, "div", 27);
174
+ i0.ɵɵelementStart(0, "div", 26);
181
175
  i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Conditional_1_Template, 2, 0);
182
176
  i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Conditional_2_Template, 2, 0);
183
177
  i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Conditional_3_Template, 2, 0);
@@ -192,7 +186,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Template(r
192
186
  i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
193
187
  } }
194
188
  function MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
195
- i0.ɵɵelementStart(0, "span", 69);
189
+ i0.ɵɵelementStart(0, "span", 68);
196
190
  i0.ɵɵtext(1);
197
191
  i0.ɵɵelementEnd();
198
192
  } if (rf & 2) {
@@ -201,10 +195,10 @@ function MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Conditiona
201
195
  i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name);
202
196
  } }
203
197
  function MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Template(rf, ctx) { if (rf & 1) {
204
- i0.ɵɵelementStart(0, "span", 68);
205
- i0.ɵɵelement(1, "i", 22);
198
+ i0.ɵɵelementStart(0, "span", 67);
199
+ i0.ɵɵelement(1, "i", 21);
206
200
  i0.ɵɵtext(2, " Template Editor ");
207
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Conditional_3_Template, 2, 1, "span", 69);
201
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Conditional_3_Template, 2, 1, "span", 68);
208
202
  i0.ɵɵelementEnd();
209
203
  } if (rf & 2) {
210
204
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -212,43 +206,39 @@ function MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Template(r
212
206
  i0.ɵɵconditional(ctx_r1.template ? 3 : -1);
213
207
  } }
214
208
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_38_Template(rf, ctx) { if (rf & 1) {
215
- i0.ɵɵelementStart(0, "div", 32);
216
- i0.ɵɵelement(1, "i", 70);
209
+ i0.ɵɵelementStart(0, "div", 31);
210
+ i0.ɵɵelement(1, "i", 69);
217
211
  i0.ɵɵtext(2, " Loading template... ");
218
212
  i0.ɵɵelementEnd();
219
213
  } }
220
214
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_7_Template(rf, ctx) { if (rf & 1) {
221
215
  const _r7 = i0.ɵɵgetCurrentView();
222
- i0.ɵɵelementStart(0, "button", 77);
216
+ i0.ɵɵelementStart(0, "button", 76);
223
217
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
224
- i0.ɵɵelement(1, "i", 78);
218
+ i0.ɵɵelement(1, "i", 77);
225
219
  i0.ɵɵtext(2, " Create New Template ");
226
220
  i0.ɵɵelementEnd();
227
- } if (rf & 2) {
228
- i0.ɵɵproperty("themeColor", "primary");
229
221
  } }
230
222
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_8_Template(rf, ctx) { if (rf & 1) {
231
223
  const _r8 = i0.ɵɵgetCurrentView();
232
- i0.ɵɵelementStart(0, "button", 79);
224
+ i0.ɵɵelementStart(0, "button", 78);
233
225
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
234
- i0.ɵɵelement(1, "i", 80);
226
+ i0.ɵɵelement(1, "i", 79);
235
227
  i0.ɵɵtext(2, " Link Existing Template ");
236
228
  i0.ɵɵelementEnd();
237
- } if (rf & 2) {
238
- i0.ɵɵproperty("fillMode", "outline");
239
229
  } }
240
230
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
241
- i0.ɵɵelementStart(0, "div", 33);
242
- i0.ɵɵelement(1, "i", 71);
243
- i0.ɵɵelementStart(2, "h5", 72);
231
+ i0.ɵɵelementStart(0, "div", 32);
232
+ i0.ɵɵelement(1, "i", 70);
233
+ i0.ɵɵelementStart(2, "h5", 71);
244
234
  i0.ɵɵtext(3, "No Template Associated");
245
235
  i0.ɵɵelementEnd();
246
- i0.ɵɵelementStart(4, "p", 73);
236
+ i0.ɵɵelementStart(4, "p", 72);
247
237
  i0.ɵɵtext(5, " This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one. ");
248
238
  i0.ɵɵelementEnd();
249
- i0.ɵɵelementStart(6, "div", 74);
250
- i0.ɵɵconditionalCreate(7, MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_7_Template, 3, 1, "button", 75);
251
- i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_8_Template, 3, 1, "button", 76);
239
+ i0.ɵɵelementStart(6, "div", 73);
240
+ i0.ɵɵconditionalCreate(7, MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_7_Template, 3, 0, "button", 74);
241
+ i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Conditional_8_Template, 3, 0, "button", 75);
252
242
  i0.ɵɵelementEnd()();
253
243
  } if (rf & 2) {
254
244
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -259,62 +249,54 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Template(r
259
249
  } }
260
250
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Conditional_10_Template(rf, ctx) { if (rf & 1) {
261
251
  const _r10 = i0.ɵɵgetCurrentView();
262
- i0.ɵɵelementStart(0, "button", 77);
252
+ i0.ɵɵelementStart(0, "button", 76);
263
253
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
264
- i0.ɵɵelement(1, "i", 78);
254
+ i0.ɵɵelement(1, "i", 77);
265
255
  i0.ɵɵtext(2, " Create New Template ");
266
256
  i0.ɵɵelementEnd();
267
- } if (rf & 2) {
268
- i0.ɵɵproperty("themeColor", "primary");
269
257
  } }
270
258
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Template(rf, ctx) { if (rf & 1) {
271
259
  const _r9 = i0.ɵɵgetCurrentView();
272
- i0.ɵɵelementStart(0, "div", 34);
273
- i0.ɵɵelement(1, "i", 81);
274
- i0.ɵɵelementStart(2, "h5", 82);
260
+ i0.ɵɵelementStart(0, "div", 33);
261
+ i0.ɵɵelement(1, "i", 80);
262
+ i0.ɵɵelementStart(2, "h5", 81);
275
263
  i0.ɵɵtext(3, "Template Not Found");
276
264
  i0.ɵɵelementEnd();
277
- i0.ɵɵelementStart(4, "p", 73);
265
+ i0.ɵɵelementStart(4, "p", 72);
278
266
  i0.ɵɵtext(5, " The referenced template could not be loaded. It may have been deleted or moved. ");
279
267
  i0.ɵɵelementEnd();
280
- i0.ɵɵelementStart(6, "div", 74)(7, "button", 79);
268
+ i0.ɵɵelementStart(6, "div", 73)(7, "button", 78);
281
269
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
282
- i0.ɵɵelement(8, "i", 83);
270
+ i0.ɵɵelement(8, "i", 82);
283
271
  i0.ɵɵtext(9, " Retry Loading ");
284
272
  i0.ɵɵelementEnd();
285
- i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Conditional_10_Template, 3, 1, "button", 75);
273
+ i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Conditional_10_Template, 3, 0, "button", 74);
286
274
  i0.ɵɵelementEnd()();
287
275
  } if (rf & 2) {
288
276
  const ctx_r1 = i0.ɵɵnextContext(2);
289
- i0.ɵɵadvance(7);
290
- i0.ɵɵproperty("fillMode", "outline");
291
- i0.ɵɵadvance(3);
277
+ i0.ɵɵadvance(10);
292
278
  i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 10 : -1);
293
279
  } }
294
280
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
295
281
  const _r12 = i0.ɵɵgetCurrentView();
296
- i0.ɵɵelementStart(0, "button", 89);
282
+ i0.ɵɵelementStart(0, "button", 88);
297
283
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
298
- i0.ɵɵelement(1, "i", 90);
284
+ i0.ɵɵelement(1, "i", 89);
299
285
  i0.ɵɵtext(2, " Change Template ");
300
286
  i0.ɵɵelementEnd();
301
- } if (rf & 2) {
302
- i0.ɵɵproperty("fillMode", "outline")("size", "small");
303
287
  } }
304
288
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
305
289
  const _r13 = i0.ɵɵgetCurrentView();
306
- i0.ɵɵelementStart(0, "button", 91);
290
+ i0.ɵɵelementStart(0, "button", 90);
307
291
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
308
- i0.ɵɵelement(1, "i", 92);
292
+ i0.ɵɵelement(1, "i", 91);
309
293
  i0.ɵɵtext(2, " Open in New Window ");
310
294
  i0.ɵɵelementEnd();
311
- } if (rf & 2) {
312
- i0.ɵɵproperty("fillMode", "outline")("size", "small");
313
295
  } }
314
296
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Template(rf, ctx) { if (rf & 1) {
315
- i0.ɵɵelementStart(0, "div", 84);
316
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_1_Template, 3, 2, "button", 87);
317
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_2_Template, 3, 2, "button", 88);
297
+ i0.ɵɵelementStart(0, "div", 83);
298
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button", 86);
299
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button", 87);
318
300
  i0.ɵɵelementEnd();
319
301
  } if (rf & 2) {
320
302
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -325,9 +307,9 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditiona
325
307
  } }
326
308
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template(rf, ctx) { if (rf & 1) {
327
309
  const _r11 = i0.ɵɵgetCurrentView();
328
- i0.ɵɵelementStart(0, "div", 35);
329
- i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Template, 3, 2, "div", 84);
330
- i0.ɵɵelementStart(2, "div", 85)(3, "mj-template-editor", 86, 1);
310
+ i0.ɵɵelementStart(0, "div", 34);
311
+ i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Conditional_1_Template, 3, 2, "div", 83);
312
+ i0.ɵɵelementStart(2, "div", 84)(3, "mj-template-editor", 85, 1);
331
313
  i0.ɵɵlistener("contentChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template_mj_template_editor_runTemplate_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
332
314
  i0.ɵɵelementEnd()()();
333
315
  } if (rf & 2) {
@@ -338,7 +320,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template(r
338
320
  i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
339
321
  } }
340
322
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
341
- i0.ɵɵelementStart(0, "span", 96);
323
+ i0.ɵɵelementStart(0, "span", 95);
342
324
  i0.ɵɵtext(1);
343
325
  i0.ɵɵelementEnd();
344
326
  } if (rf & 2) {
@@ -347,12 +329,12 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_templat
347
329
  i0.ɵɵtextInterpolate1(" ", ctx_r1.promptModels.length, " ");
348
330
  } }
349
331
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
350
- i0.ɵɵelementStart(0, "span", 68);
351
- i0.ɵɵelement(1, "i", 95);
332
+ i0.ɵɵelementStart(0, "span", 67);
333
+ i0.ɵɵelement(1, "i", 94);
352
334
  i0.ɵɵtext(2, " Models ");
353
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 96);
354
- i0.ɵɵelementStart(4, "span", 97);
355
- i0.ɵɵelement(5, "i", 98);
335
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 95);
336
+ i0.ɵɵelementStart(4, "span", 96);
337
+ i0.ɵɵelement(5, "i", 97);
356
338
  i0.ɵɵtext(6, " Priority order (first available model will be used) ");
357
339
  i0.ɵɵelementEnd()();
358
340
  } if (rf & 2) {
@@ -361,24 +343,24 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_templat
361
343
  i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
362
344
  } }
363
345
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
364
- i0.ɵɵelementStart(0, "div", 94);
365
- i0.ɵɵelement(1, "i", 59);
346
+ i0.ɵɵelementStart(0, "div", 93);
347
+ i0.ɵɵelement(1, "i", 58);
366
348
  i0.ɵɵtext(2, " Loading models... ");
367
349
  i0.ɵɵelementEnd();
368
350
  } }
369
351
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
370
352
  const _r14 = i0.ɵɵgetCurrentView();
371
- i0.ɵɵelementStart(0, "div", 101)(1, "button", 102);
353
+ i0.ɵɵelementStart(0, "div", 100)(1, "button", 101);
372
354
  i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
373
- i0.ɵɵelement(2, "i", 78);
355
+ i0.ɵɵelement(2, "i", 77);
374
356
  i0.ɵɵtext(3, " Add Model ");
375
357
  i0.ɵɵelementEnd()();
376
358
  } }
377
359
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
378
- i0.ɵɵelementStart(0, "div", 99);
379
- i0.ɵɵelement(1, "i", 100);
360
+ i0.ɵɵelementStart(0, "div", 98);
361
+ i0.ɵɵelement(1, "i", 99);
380
362
  i0.ɵɵtext(2, " No models configured ");
381
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 101);
363
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 100);
382
364
  i0.ɵɵelementEnd();
383
365
  } if (rf & 2) {
384
366
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -386,14 +368,14 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
386
368
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 3 : -1);
387
369
  } }
388
370
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
389
- i0.ɵɵelementStart(0, "div", 103);
390
- i0.ɵɵelement(1, "i", 108);
371
+ i0.ɵɵelementStart(0, "div", 102);
372
+ i0.ɵɵelement(1, "i", 107);
391
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. ");
392
374
  i0.ɵɵelementEnd();
393
375
  } }
394
376
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
395
- i0.ɵɵelement(0, "i", 124);
396
- i0.ɵɵelementStart(1, "span", 125);
377
+ i0.ɵɵelement(0, "i", 123);
378
+ i0.ɵɵelementStart(1, "span", 124);
397
379
  i0.ɵɵtext(2);
398
380
  i0.ɵɵelementEnd();
399
381
  } if (rf & 2) {
@@ -402,7 +384,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
402
384
  i0.ɵɵtextInterpolate1("#", ɵ$index_312_r16 + 1);
403
385
  } }
404
386
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
405
- i0.ɵɵelementStart(0, "span", 111);
387
+ i0.ɵɵelementStart(0, "span", 110);
406
388
  i0.ɵɵtext(1);
407
389
  i0.ɵɵelementEnd();
408
390
  } if (rf & 2) {
@@ -415,18 +397,18 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
415
397
  } }
416
398
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
417
399
  const _r19 = i0.ɵɵgetCurrentView();
418
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 126);
419
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const model_r18 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ModelID, $event) || (model_r18.ModelID = $event); return i0.ɵɵresetView($event); });
420
- i0.ɵɵlistener("valueChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ɵ$index_312_r16 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_312_r16)); });
400
+ i0.ɵɵelementStart(0, "mj-dropdown", 125);
401
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const model_r18 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ModelID, $event) || (model_r18.ModelID = $event); return i0.ɵɵresetView($event); });
402
+ i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ɵ$index_312_r16 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_312_r16)); });
421
403
  i0.ɵɵelementEnd();
422
404
  } if (rf & 2) {
423
405
  const model_r18 = i0.ɵɵnextContext().$implicit;
424
406
  const ctx_r1 = i0.ɵɵnextContext(5);
425
407
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ModelID);
426
- i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r18))("data", ctx_r1.availableModels)("valuePrimitive", true)("filterable", true);
408
+ i0.ɵɵproperty("name", "modelId_" + ctx_r1.getModelTrackId(model_r18))("Data", ctx_r1.availableModels)("ValuePrimitive", true)("Filterable", true);
427
409
  } }
428
410
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template(rf, ctx) { if (rf & 1) {
429
- i0.ɵɵelementStart(0, "span", 23);
411
+ i0.ɵɵelementStart(0, "span", 22);
430
412
  i0.ɵɵtext(1);
431
413
  i0.ɵɵelementEnd();
432
414
  } if (rf & 2) {
@@ -435,43 +417,16 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
435
417
  i0.ɵɵadvance();
436
418
  i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r18.ModelID));
437
419
  } }
438
- function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
439
- i0.ɵɵelementStart(0, "span", 131);
440
- i0.ɵɵtext(1);
441
- i0.ɵɵelementEnd();
442
- } if (rf & 2) {
443
- const dataItem_r21 = i0.ɵɵnextContext().$implicit;
444
- const model_r18 = i0.ɵɵnextContext(4).$implicit;
445
- const ctx_r1 = i0.ɵɵnextContext(5);
446
- i0.ɵɵadvance();
447
- i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r18.ModelID, dataItem_r21.ID), ")");
448
- } }
449
- function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
450
- i0.ɵɵelementStart(0, "span");
451
- i0.ɵɵtext(1);
452
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template, 2, 1, "span", 131);
453
- i0.ɵɵelementEnd();
454
- } if (rf & 2) {
455
- const dataItem_r21 = ctx.$implicit;
456
- const model_r18 = i0.ɵɵnextContext(4).$implicit;
457
- const ctx_r1 = i0.ɵɵnextContext(5);
458
- i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r18.ModelID, dataItem_r21.ID));
459
- i0.ɵɵadvance();
460
- i0.ɵɵtextInterpolate1(" ", dataItem_r21.Name, " ");
461
- i0.ɵɵadvance();
462
- i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r18.ModelID, dataItem_r21.ID) !== "Active" ? 2 : -1);
463
- } }
464
420
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
465
421
  const _r20 = i0.ɵɵgetCurrentView();
466
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 129);
467
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.VendorID, $event) || (model_r18.VendorID = $event); return i0.ɵɵresetView($event); });
468
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template, 3, 4, "ng-template", 130);
422
+ i0.ɵɵelementStart(0, "mj-dropdown", 128);
423
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.VendorID, $event) || (model_r18.VendorID = $event); return i0.ɵɵresetView($event); });
469
424
  i0.ɵɵelementEnd();
470
425
  } if (rf & 2) {
471
426
  const model_r18 = i0.ɵɵnextContext(3).$implicit;
472
427
  const ctx_r1 = i0.ɵɵnextContext(5);
473
428
  i0.ɵɵtwoWayProperty("ngModel", model_r18.VendorID);
474
- i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r18))("data", ctx_r1.getVendorsForModelSync(model_r18.ModelID))("valuePrimitive", true)("filterable", true);
429
+ i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r18))("Data", ctx_r1.getVendorsForModelSync(model_r18.ModelID))("ValuePrimitive", true)("Filterable", true);
475
430
  } }
476
431
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
477
432
  i0.ɵɵelementStart(0, "span", 131);
@@ -484,7 +439,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
484
439
  i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r18.ModelID, ctx_r1.getVendorsForModelSync(model_r18.ModelID)[0].ID), ")");
485
440
  } }
486
441
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
487
- i0.ɵɵelementStart(0, "span", 133);
442
+ i0.ɵɵelementStart(0, "span", 130);
488
443
  i0.ɵɵtext(1);
489
444
  i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 131);
490
445
  i0.ɵɵelementEnd();
@@ -498,31 +453,31 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
498
453
  i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r18.ModelID, ctx_r1.getVendorsForModelSync(model_r18.ModelID)[0].ID) !== "Active" ? 2 : -1);
499
454
  } }
500
455
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
501
- i0.ɵɵelementStart(0, "span", 127);
456
+ i0.ɵɵelementStart(0, "span", 126);
502
457
  i0.ɵɵtext(1, "No vendors available");
503
458
  i0.ɵɵelementEnd();
504
459
  } }
505
460
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
506
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 132)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 127);
461
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 129)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 126);
507
462
  } if (rf & 2) {
508
463
  const model_r18 = i0.ɵɵnextContext(3).$implicit;
509
464
  const ctx_r1 = i0.ɵɵnextContext(5);
510
465
  i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r18.ModelID).length === 1 ? 0 : 1);
511
466
  } }
512
467
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
513
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 2, 5, "kendo-dropdownlist", 128)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
468
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 1, 5, "mj-dropdown", 127)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
514
469
  } if (rf & 2) {
515
470
  const model_r18 = i0.ɵɵnextContext(2).$implicit;
516
471
  const ctx_r1 = i0.ɵɵnextContext(5);
517
472
  i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r18.ModelID) ? 0 : 1);
518
473
  } }
519
474
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
520
- i0.ɵɵelementStart(0, "span", 127);
475
+ i0.ɵɵelementStart(0, "span", 126);
521
476
  i0.ɵɵtext(1, "Select model first");
522
477
  i0.ɵɵelementEnd();
523
478
  } }
524
479
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
525
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 127);
480
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 126);
526
481
  } if (rf & 2) {
527
482
  const model_r18 = i0.ɵɵnextContext().$implicit;
528
483
  i0.ɵɵconditional(model_r18.ModelID ? 0 : 1);
@@ -538,7 +493,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
538
493
  i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r18.ModelID, model_r18.VendorID), ")");
539
494
  } }
540
495
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
541
- i0.ɵɵelementStart(0, "span", 116);
496
+ i0.ɵɵelementStart(0, "span", 115);
542
497
  i0.ɵɵtext(1);
543
498
  i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 131);
544
499
  i0.ɵɵelementEnd();
@@ -552,48 +507,42 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
552
507
  i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r18.ModelID, model_r18.VendorID) !== "Active" ? 2 : -1);
553
508
  } }
554
509
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "span", 135);
510
+ i0.ɵɵelementStart(0, "span", 133);
556
511
  i0.ɵɵtext(1, "-");
557
512
  i0.ɵɵelementEnd();
558
513
  } }
559
514
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
560
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 134)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 135);
515
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 132)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 133);
561
516
  } if (rf & 2) {
562
517
  const model_r18 = i0.ɵɵnextContext().$implicit;
563
518
  i0.ɵɵconditional(model_r18.VendorID && model_r18.ModelID ? 0 : 1);
564
519
  } }
565
520
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
566
- i0.ɵɵelementStart(0, "div", 136);
567
- i0.ɵɵelement(1, "i", 59);
521
+ i0.ɵɵelementStart(0, "div", 134);
522
+ i0.ɵɵelement(1, "i", 58);
568
523
  i0.ɵɵtext(2, " Loading... ");
569
524
  i0.ɵɵelementEnd();
570
525
  } }
571
- function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {
572
- i0.ɵɵelementStart(0, "div", 140);
573
- i0.ɵɵtext(1, " No configurations available ");
574
- i0.ɵɵelementEnd();
575
- } }
576
526
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
577
- const _r22 = i0.ɵɵgetCurrentView();
578
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 138);
579
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ConfigurationID, $event) || (model_r18.ConfigurationID = $event); return i0.ɵɵresetView($event); });
580
- i0.ɵɵlistener("valueChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_312_r16)); });
581
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_ng_template_1_Template, 2, 0, "ng-template", 139);
527
+ const _r21 = i0.ɵɵgetCurrentView();
528
+ i0.ɵɵelementStart(0, "mj-dropdown", 136);
529
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ConfigurationID, $event) || (model_r18.ConfigurationID = $event); return i0.ɵɵresetView($event); });
530
+ i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_312_r16)); });
582
531
  i0.ɵɵelementEnd();
583
532
  } if (rf & 2) {
584
533
  const model_r18 = i0.ɵɵnextContext(2).$implicit;
585
534
  const ctx_r1 = i0.ɵɵnextContext(5);
586
535
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ConfigurationID);
587
- i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r18))("data", ctx_r1.availableConfigurations)("valuePrimitive", true)("filterable", true);
536
+ i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r18))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
588
537
  } }
589
538
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
590
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 136)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 2, 5, "kendo-dropdownlist", 137);
539
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 134)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 135);
591
540
  } if (rf & 2) {
592
541
  const ctx_r1 = i0.ɵɵnextContext(6);
593
542
  i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
594
543
  } }
595
544
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
596
- i0.ɵɵelementStart(0, "span", 116);
545
+ i0.ɵɵelementStart(0, "span", 115);
597
546
  i0.ɵɵtext(1);
598
547
  i0.ɵɵelementEnd();
599
548
  } if (rf & 2) {
@@ -603,7 +552,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
603
552
  i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r18.ConfigurationID));
604
553
  } }
605
554
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
606
- i0.ɵɵelementStart(0, "span", 118);
555
+ i0.ɵɵelementStart(0, "span", 117);
607
556
  i0.ɵɵtext(1);
608
557
  i0.ɵɵpipe(2, "date");
609
558
  i0.ɵɵelementEnd();
@@ -613,19 +562,19 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
613
562
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r18.__mj_CreatedAt, "short"));
614
563
  } }
615
564
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
616
- i0.ɵɵelementStart(0, "span", 119);
565
+ i0.ɵɵelementStart(0, "span", 118);
617
566
  i0.ɵɵtext(1, "New");
618
567
  i0.ɵɵelementEnd();
619
568
  } }
620
569
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
621
- const _r23 = i0.ɵɵgetCurrentView();
622
- i0.ɵɵelementStart(0, "button", 143);
623
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_312_r16)); });
624
- i0.ɵɵelement(1, "i", 144);
570
+ const _r22 = i0.ɵɵgetCurrentView();
571
+ i0.ɵɵelementStart(0, "button", 139);
572
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_312_r16)); });
573
+ i0.ɵɵelement(1, "i", 140);
625
574
  i0.ɵɵelementEnd();
626
- i0.ɵɵelementStart(2, "button", 145);
627
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_312_r16)); });
628
- i0.ɵɵelement(3, "i", 146);
575
+ i0.ɵɵelementStart(2, "button", 141);
576
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r22); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_312_r16)); });
577
+ i0.ɵɵelement(3, "i", 142);
629
578
  i0.ɵɵelementEnd();
630
579
  } if (rf & 2) {
631
580
  const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index;
@@ -635,17 +584,17 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
635
584
  i0.ɵɵproperty("disabled", ɵ$index_312_r16 === ctx_r1.promptModels.length - 1);
636
585
  } }
637
586
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
638
- const _r24 = i0.ɵɵgetCurrentView();
639
- i0.ɵɵelementStart(0, "button", 147);
640
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_312_r16)); });
641
- i0.ɵɵelement(1, "i", 148);
587
+ const _r23 = i0.ɵɵgetCurrentView();
588
+ i0.ɵɵelementStart(0, "button", 143);
589
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_312_r16 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_312_r16)); });
590
+ i0.ɵɵelement(1, "i", 144);
642
591
  i0.ɵɵelementEnd();
643
592
  } }
644
593
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
645
- i0.ɵɵelementStart(0, "div", 141);
594
+ i0.ɵɵelementStart(0, "div", 137);
646
595
  i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
647
596
  i0.ɵɵelementEnd();
648
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 142);
597
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 138);
649
598
  } if (rf & 2) {
650
599
  const ctx_r1 = i0.ɵɵnextContext(6);
651
600
  i0.ɵɵadvance();
@@ -665,12 +614,12 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
665
614
  i0.ɵɵtextInterpolate1(" ", model_r18.Status);
666
615
  } }
667
616
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
668
- const _r26 = i0.ɵɵgetCurrentView();
669
- i0.ɵɵelementStart(0, "div")(1, "label", 153);
617
+ const _r25 = i0.ɵɵgetCurrentView();
618
+ i0.ɵɵelementStart(0, "div")(1, "label", 149);
670
619
  i0.ɵɵtext(2, "Parallel Count");
671
620
  i0.ɵɵelementEnd();
672
- i0.ɵɵelementStart(3, "kendo-numerictextbox", 155);
673
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_kendo_numerictextbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r26); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelCount, $event) || (model_r18.ParallelCount = $event); return i0.ɵɵresetView($event); });
621
+ i0.ɵɵelementStart(3, "mj-numeric-input", 151);
622
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_mj_numeric_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r25); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelCount, $event) || (model_r18.ParallelCount = $event); return i0.ɵɵresetView($event); });
674
623
  i0.ɵɵelementEnd()();
675
624
  } if (rf & 2) {
676
625
  const ctx_r16 = i0.ɵɵnextContext(3);
@@ -678,15 +627,15 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
678
627
  const ɵ$index_312_r16 = ctx_r16.$index;
679
628
  i0.ɵɵadvance(3);
680
629
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ParallelCount);
681
- i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_312_r16)("min", 1)("step", 1)("format", "n0");
630
+ i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_312_r16)("Min", 1)("Step", 1)("Format", "n0");
682
631
  } }
683
632
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
684
- const _r27 = i0.ɵɵgetCurrentView();
685
- i0.ɵɵelementStart(0, "div")(1, "label", 153);
633
+ const _r26 = i0.ɵɵgetCurrentView();
634
+ i0.ɵɵelementStart(0, "div")(1, "label", 149);
686
635
  i0.ɵɵtext(2, "Config Parameter");
687
636
  i0.ɵɵelementEnd();
688
- i0.ɵɵelementStart(3, "kendo-textbox", 156);
689
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_kendo_textbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelConfigParam, $event) || (model_r18.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
637
+ i0.ɵɵelementStart(3, "input", 152);
638
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r26); const model_r18 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelConfigParam, $event) || (model_r18.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
690
639
  i0.ɵɵelementEnd()();
691
640
  } if (rf & 2) {
692
641
  const ctx_r16 = i0.ɵɵnextContext(3);
@@ -697,12 +646,12 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
697
646
  i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_312_r16);
698
647
  } }
699
648
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
700
- const _r25 = i0.ɵɵgetCurrentView();
701
- i0.ɵɵelementStart(0, "div", 151)(1, "div")(2, "label", 153);
649
+ const _r24 = i0.ɵɵgetCurrentView();
650
+ i0.ɵɵelementStart(0, "div", 147)(1, "div")(2, "label", 149);
702
651
  i0.ɵɵtext(3, "Parallel Mode");
703
652
  i0.ɵɵelementEnd();
704
- i0.ɵɵelementStart(4, "kendo-dropdownlist", 154);
705
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r25); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelizationMode, $event) || (model_r18.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
653
+ i0.ɵɵelementStart(4, "mj-dropdown", 150);
654
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r24); const model_r18 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r18.ParallelizationMode, $event) || (model_r18.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
706
655
  i0.ɵɵelementEnd()();
707
656
  i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
708
657
  i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template, 4, 2, "div");
@@ -713,7 +662,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
713
662
  const ɵ$index_312_r16 = ctx_r16.$index;
714
663
  i0.ɵɵadvance(4);
715
664
  i0.ɵɵtwoWayProperty("ngModel", model_r18.ParallelizationMode);
716
- i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_312_r16)("data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("valuePrimitive", true);
665
+ i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_312_r16)("Data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("ValuePrimitive", true);
717
666
  i0.ɵɵadvance();
718
667
  i0.ɵɵconditional(model_r18.ParallelizationMode === "StaticCount" ? 5 : -1);
719
668
  i0.ɵɵadvance();
@@ -753,7 +702,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
753
702
  i0.ɵɵtextInterpolate1(" ", model_r18.ParallelConfigParam);
754
703
  } }
755
704
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
756
- i0.ɵɵelementStart(0, "div", 152);
705
+ i0.ɵɵelementStart(0, "div", 148);
757
706
  i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
758
707
  i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
759
708
  i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
@@ -768,11 +717,11 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
768
717
  i0.ɵɵconditional(model_r18.ParallelConfigParam ? 3 : -1);
769
718
  } }
770
719
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
771
- i0.ɵɵelementStart(0, "div", 123)(1, "div", 149);
772
- i0.ɵɵelement(2, "i", 150);
720
+ i0.ɵɵelementStart(0, "div", 122)(1, "div", 145);
721
+ i0.ɵɵelement(2, "i", 146);
773
722
  i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
774
723
  i0.ɵɵelementEnd();
775
- i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 151)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 152);
724
+ i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 147)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 148);
776
725
  i0.ɵɵelementEnd();
777
726
  } if (rf & 2) {
778
727
  const ctx_r1 = i0.ɵɵnextContext(6);
@@ -781,32 +730,32 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
781
730
  } }
782
731
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
783
732
  const _r15 = i0.ɵɵgetCurrentView();
784
- i0.ɵɵelementStart(0, "div", 109);
733
+ i0.ɵɵelementStart(0, "div", 108);
785
734
  i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_312_r16 = i0.ɵɵrestoreView(_r15).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_312_r16)); })("dragover", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_drop_0_listener($event) { const ɵ$index_312_r16 = i0.ɵɵrestoreView(_r15).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_312_r16)); })("dragend", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
786
- i0.ɵɵelementStart(1, "div", 110);
787
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 111);
735
+ i0.ɵɵelementStart(1, "div", 109);
736
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 110);
788
737
  i0.ɵɵelementEnd();
789
- i0.ɵɵelementStart(4, "div", 112);
790
- i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "kendo-dropdownlist", 113)(6, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 23);
738
+ i0.ɵɵelementStart(4, "div", 111);
739
+ i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 112)(6, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
791
740
  i0.ɵɵelementEnd();
792
- i0.ɵɵelementStart(7, "div", 114);
741
+ i0.ɵɵelementStart(7, "div", 113);
793
742
  i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
794
743
  i0.ɵɵelementEnd();
795
- i0.ɵɵelementStart(10, "div", 115);
796
- i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 116);
744
+ i0.ɵɵelementStart(10, "div", 114);
745
+ i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 115);
797
746
  i0.ɵɵelementEnd();
798
- i0.ɵɵelementStart(13, "div", 117);
799
- i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 118)(15, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 119);
747
+ i0.ɵɵelementStart(13, "div", 116);
748
+ i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 117)(15, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 118);
800
749
  i0.ɵɵelementEnd();
801
- i0.ɵɵelementStart(16, "div", 120);
750
+ i0.ɵɵelementStart(16, "div", 119);
802
751
  i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
803
752
  i0.ɵɵelementEnd()();
804
- i0.ɵɵelementStart(18, "div", 121);
753
+ i0.ɵɵelementStart(18, "div", 120);
805
754
  i0.ɵɵelement(19, "div");
806
- i0.ɵɵelementStart(20, "div")(21, "div", 122);
755
+ i0.ɵɵelementStart(20, "div")(21, "div", 121);
807
756
  i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
808
757
  i0.ɵɵelementEnd();
809
- i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 123);
758
+ i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 122);
810
759
  i0.ɵɵelementEnd()();
811
760
  } if (rf & 2) {
812
761
  const model_r18 = ctx.$implicit;
@@ -832,21 +781,21 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
832
781
  i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 23 : -1);
833
782
  } }
834
783
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
835
- const _r28 = i0.ɵɵgetCurrentView();
836
- i0.ɵɵelementStart(0, "div", 107)(1, "button", 157);
837
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
838
- i0.ɵɵelement(2, "i", 78);
784
+ const _r27 = i0.ɵɵgetCurrentView();
785
+ i0.ɵɵelementStart(0, "div", 106)(1, "button", 153);
786
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
787
+ i0.ɵɵelement(2, "i", 77);
839
788
  i0.ɵɵtext(3, " Add Model ");
840
789
  i0.ɵɵelementEnd()();
841
790
  } }
842
791
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
843
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 103);
844
- i0.ɵɵelementStart(1, "div", 104)(2, "div", 105);
845
- i0.ɵɵelement(3, "i", 106);
792
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 102);
793
+ i0.ɵɵelementStart(1, "div", 103)(2, "div", 104);
794
+ i0.ɵɵelement(3, "i", 105);
846
795
  i0.ɵɵelementEnd();
847
796
  i0.ɵɵelementStart(4, "div");
848
797
  i0.ɵɵtext(5, "AI Model ");
849
- i0.ɵɵelementStart(6, "span", 56);
798
+ i0.ɵɵelementStart(6, "span", 55);
850
799
  i0.ɵɵtext(7, "*");
851
800
  i0.ɵɵelementEnd()();
852
801
  i0.ɵɵelementStart(8, "div");
@@ -862,7 +811,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
862
811
  i0.ɵɵtext(15, "Actions");
863
812
  i0.ɵɵelementEnd()();
864
813
  i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
865
- i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 107);
814
+ i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 106);
866
815
  } if (rf & 2) {
867
816
  const ctx_r1 = i0.ɵɵnextContext(4);
868
817
  i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
@@ -872,66 +821,66 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditiona
872
821
  i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
873
822
  } }
874
823
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
875
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Template, 4, 1, "div", 99)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
824
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_0_Template, 4, 1, "div", 98)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
876
825
  } if (rf & 2) {
877
826
  const ctx_r1 = i0.ɵɵnextContext(3);
878
827
  i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
879
828
  } }
880
829
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Template(rf, ctx) { if (rf & 1) {
881
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
882
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 30);
883
- i0.ɵɵelementStart(2, "div", 36)(3, "div", 93);
884
- i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_4_Template, 3, 0, "div", 94)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Template, 2, 1);
830
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
831
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 29);
832
+ i0.ɵɵelementStart(2, "div", 35)(3, "div", 92);
833
+ i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_4_Template, 3, 0, "div", 93)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Conditional_5_Template, 2, 1);
885
834
  i0.ɵɵelementEnd()()();
886
835
  } if (rf & 2) {
887
836
  const ctx_r1 = i0.ɵɵnextContext(2);
888
- i0.ɵɵproperty("expanded", true);
837
+ i0.ɵɵproperty("Expanded", true);
889
838
  i0.ɵɵadvance(4);
890
839
  i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
891
840
  } }
892
841
  function MJAIPromptFormComponentExtended_Conditional_2_ng_template_44_Template(rf, ctx) { if (rf & 1) {
893
- i0.ɵɵelementStart(0, "span", 68);
894
- i0.ɵɵelement(1, "i", 158);
842
+ i0.ɵɵelementStart(0, "span", 67);
843
+ i0.ɵɵelement(1, "i", 154);
895
844
  i0.ɵɵtext(2, " Advanced Configuration ");
896
845
  i0.ɵɵelementEnd();
897
846
  } }
898
847
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
899
- i0.ɵɵelement(0, "mj-form-field", 39);
848
+ i0.ɵɵelement(0, "mj-form-field", 38);
900
849
  } if (rf & 2) {
901
850
  const ctx_r1 = i0.ɵɵnextContext(2);
902
851
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
903
852
  } }
904
853
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_50_Template(rf, ctx) { if (rf & 1) {
905
- i0.ɵɵelement(0, "mj-form-field", 40);
854
+ i0.ɵɵelement(0, "mj-form-field", 39);
906
855
  } if (rf & 2) {
907
856
  const ctx_r1 = i0.ɵɵnextContext(2);
908
857
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
909
858
  } }
910
859
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_0_Template(rf, ctx) { if (rf & 1) {
911
- i0.ɵɵelementStart(0, "div", 159);
912
- i0.ɵɵelement(1, "i", 59);
860
+ i0.ɵɵelementStart(0, "div", 155);
861
+ i0.ɵɵelement(1, "i", 58);
913
862
  i0.ɵɵtext(2, " Loading prompts... ");
914
863
  i0.ɵɵelementEnd();
915
864
  } }
916
865
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template(rf, ctx) { if (rf & 1) {
917
- const _r29 = i0.ɵɵgetCurrentView();
918
- i0.ɵɵelementStart(0, "kendo-dropdowntree", 161);
919
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template_kendo_dropdowntree_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
920
- i0.ɵɵlistener("valueChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template_kendo_dropdowntree_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
866
+ const _r28 = i0.ɵɵgetCurrentView();
867
+ i0.ɵɵelementStart(0, "mj-dropdown", 157);
868
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
869
+ i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
921
870
  i0.ɵɵelementEnd();
922
871
  } if (rf & 2) {
923
872
  const ctx_r1 = i0.ɵɵnextContext(3);
924
873
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
925
- i0.ɵɵproperty("data", ctx_r1.resultSelectorTreeData)("valuePrimitive", true)("filterable", true);
874
+ i0.ɵɵproperty("Data", ctx_r1.resultSelectorTreeData)("ValuePrimitive", true)("Filterable", true);
926
875
  } }
927
876
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Template(rf, ctx) { if (rf & 1) {
928
- i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_0_Template, 3, 0, "div", 159)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template, 1, 4, "kendo-dropdowntree", 160);
877
+ i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_0_Template, 3, 0, "div", 155)(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Conditional_1_Template, 1, 4, "mj-dropdown", 156);
929
878
  } if (rf & 2) {
930
879
  const ctx_r1 = i0.ɵɵnextContext(2);
931
880
  i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
932
881
  } }
933
882
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_60_Template(rf, ctx) { if (rf & 1) {
934
- i0.ɵɵelementStart(0, "span", 47);
883
+ i0.ɵɵelementStart(0, "span", 46);
935
884
  i0.ɵɵtext(1);
936
885
  i0.ɵɵelementEnd();
937
886
  } if (rf & 2) {
@@ -940,20 +889,20 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_60_Template(r
940
889
  i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
941
890
  } }
942
891
  function MJAIPromptFormComponentExtended_Conditional_2_ng_template_62_Template(rf, ctx) { if (rf & 1) {
943
- i0.ɵɵelementStart(0, "span", 68);
944
- i0.ɵɵelement(1, "i", 162);
892
+ i0.ɵɵelementStart(0, "span", 67);
893
+ i0.ɵɵelement(1, "i", 158);
945
894
  i0.ɵɵtext(2, " Prefill & Output Control ");
946
895
  i0.ɵɵelementEnd();
947
896
  } }
948
897
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_ng_template_1_Template(rf, ctx) { if (rf & 1) {
949
- i0.ɵɵelementStart(0, "span", 68);
950
- i0.ɵɵelement(1, "i", 163);
898
+ i0.ɵɵelementStart(0, "span", 67);
899
+ i0.ɵɵelement(1, "i", 159);
951
900
  i0.ɵɵtext(2, " Template Parameters ");
952
- i0.ɵɵelementStart(3, "span", 164);
901
+ i0.ɵɵelementStart(3, "span", 160);
953
902
  i0.ɵɵtext(4);
954
903
  i0.ɵɵelementEnd();
955
- i0.ɵɵelementStart(5, "span", 97);
956
- i0.ɵɵelement(6, "i", 165);
904
+ i0.ɵɵelementStart(5, "span", 96);
905
+ i0.ɵɵelement(6, "i", 161);
957
906
  i0.ɵɵtext(7, " Parameters defined in the template ");
958
907
  i0.ɵɵelementEnd()();
959
908
  } if (rf & 2) {
@@ -962,173 +911,173 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_ng_templat
962
911
  i0.ɵɵtextInterpolate1(" ", ctx_r1.templateParams.length, " ");
963
912
  } }
964
913
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_3_Template(rf, ctx) { if (rf & 1) {
965
- i0.ɵɵelementStart(0, "div", 94);
966
- i0.ɵɵelement(1, "i", 59);
914
+ i0.ɵɵelementStart(0, "div", 93);
915
+ i0.ɵɵelement(1, "i", 58);
967
916
  i0.ɵɵtext(2, " Loading template parameters... ");
968
917
  i0.ɵɵelementEnd();
969
918
  } }
970
919
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_4_Template(rf, ctx) { if (rf & 1) {
971
- i0.ɵɵelementStart(0, "div", 99);
972
- i0.ɵɵelement(1, "i", 100);
920
+ i0.ɵɵelementStart(0, "div", 98);
921
+ i0.ɵɵelement(1, "i", 99);
973
922
  i0.ɵɵtext(2, " This template has no parameters defined ");
974
923
  i0.ɵɵelementEnd();
975
924
  } }
976
925
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
977
- i0.ɵɵelementStart(0, "span", 177);
926
+ i0.ɵɵelementStart(0, "span", 173);
978
927
  i0.ɵɵtext(1, "*");
979
928
  i0.ɵɵelementEnd();
980
929
  } }
981
930
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
982
- i0.ɵɵelementStart(0, "span", 179);
931
+ i0.ɵɵelementStart(0, "span", 175);
983
932
  i0.ɵɵtext(1, "Required");
984
933
  i0.ɵɵelementEnd();
985
934
  } }
986
935
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
987
- i0.ɵɵelementStart(0, "span", 180);
936
+ i0.ɵɵelementStart(0, "span", 176);
988
937
  i0.ɵɵtext(1, "Optional");
989
938
  i0.ɵɵelementEnd();
990
939
  } }
991
940
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
992
- i0.ɵɵelementStart(0, "p", 181);
941
+ i0.ɵɵelementStart(0, "p", 177);
993
942
  i0.ɵɵtext(1);
994
943
  i0.ɵɵelementEnd();
995
944
  } if (rf & 2) {
996
- const param_r30 = i0.ɵɵnextContext().$implicit;
945
+ const param_r29 = i0.ɵɵnextContext().$implicit;
997
946
  i0.ɵɵadvance();
998
- i0.ɵɵtextInterpolate1(" ", param_r30.Description, " ");
947
+ i0.ɵɵtextInterpolate1(" ", param_r29.Description, " ");
999
948
  } }
1000
949
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1001
- i0.ɵɵelementStart(0, "div", 186)(1, "label", 187);
950
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1002
951
  i0.ɵɵtext(2, "Default Value");
1003
952
  i0.ɵɵelementEnd();
1004
- i0.ɵɵelementStart(3, "code", 188);
953
+ i0.ɵɵelementStart(3, "code", 184);
1005
954
  i0.ɵɵtext(4);
1006
955
  i0.ɵɵelementEnd()();
1007
956
  } if (rf & 2) {
1008
- const param_r30 = i0.ɵɵnextContext().$implicit;
957
+ const param_r29 = i0.ɵɵnextContext().$implicit;
1009
958
  i0.ɵɵadvance(4);
1010
- i0.ɵɵtextInterpolate(param_r30.DefaultValue);
959
+ i0.ɵɵtextInterpolate(param_r29.DefaultValue);
1011
960
  } }
1012
961
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1013
- i0.ɵɵelementStart(0, "div", 186)(1, "label", 187);
962
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1014
963
  i0.ɵɵtext(2, "Entity");
1015
964
  i0.ɵɵelementEnd();
1016
- i0.ɵɵelementStart(3, "span", 182);
965
+ i0.ɵɵelementStart(3, "span", 178);
1017
966
  i0.ɵɵtext(4);
1018
967
  i0.ɵɵelementEnd()();
1019
968
  } if (rf & 2) {
1020
- const param_r30 = i0.ɵɵnextContext().$implicit;
969
+ const param_r29 = i0.ɵɵnextContext().$implicit;
1021
970
  i0.ɵɵadvance(4);
1022
- i0.ɵɵtextInterpolate(param_r30.Entity || "Entity ID: " + param_r30.EntityID);
971
+ i0.ɵɵtextInterpolate(param_r29.Entity || "Entity ID: " + param_r29.EntityID);
1023
972
  } }
1024
973
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1025
974
  i0.ɵɵtext(0);
1026
975
  } if (rf & 2) {
1027
- const param_r30 = i0.ɵɵnextContext(2).$implicit;
1028
- i0.ɵɵtextInterpolate1(" (", param_r30.LinkedParameterField, ") ");
976
+ const param_r29 = i0.ɵɵnextContext(2).$implicit;
977
+ i0.ɵɵtextInterpolate1(" (", param_r29.LinkedParameterField, ") ");
1029
978
  } }
1030
979
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1031
- i0.ɵɵelementStart(0, "div", 186)(1, "label", 187);
980
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1032
981
  i0.ɵɵtext(2, "Linked To");
1033
982
  i0.ɵɵelementEnd();
1034
- i0.ɵɵelementStart(3, "span", 182);
983
+ i0.ɵɵelementStart(3, "span", 178);
1035
984
  i0.ɵɵtext(4);
1036
985
  i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
1037
986
  i0.ɵɵelementEnd()();
1038
987
  } if (rf & 2) {
1039
- const param_r30 = i0.ɵɵnextContext().$implicit;
988
+ const param_r29 = i0.ɵɵnextContext().$implicit;
1040
989
  i0.ɵɵadvance(4);
1041
- i0.ɵɵtextInterpolate1(" ", param_r30.LinkedParameterName, " ");
990
+ i0.ɵɵtextInterpolate1(" ", param_r29.LinkedParameterName, " ");
1042
991
  i0.ɵɵadvance();
1043
- i0.ɵɵconditional(param_r30.LinkedParameterField ? 5 : -1);
992
+ i0.ɵɵconditional(param_r29.LinkedParameterField ? 5 : -1);
1044
993
  } }
1045
994
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1046
- i0.ɵɵelementStart(0, "div", 186)(1, "label", 187);
995
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1047
996
  i0.ɵɵtext(2, "Filter");
1048
997
  i0.ɵɵelementEnd();
1049
- i0.ɵɵelementStart(3, "code", 189);
998
+ i0.ɵɵelementStart(3, "code", 185);
1050
999
  i0.ɵɵtext(4);
1051
1000
  i0.ɵɵelementEnd()();
1052
1001
  } if (rf & 2) {
1053
- const param_r30 = i0.ɵɵnextContext().$implicit;
1002
+ const param_r29 = i0.ɵɵnextContext().$implicit;
1054
1003
  i0.ɵɵadvance(4);
1055
- i0.ɵɵtextInterpolate(param_r30.ExtraFilter);
1004
+ i0.ɵɵtextInterpolate(param_r29.ExtraFilter);
1056
1005
  } }
1057
1006
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1058
- i0.ɵɵelementStart(0, "div", 186)(1, "label", 187);
1007
+ i0.ɵɵelementStart(0, "div", 182)(1, "label", 183);
1059
1008
  i0.ɵɵtext(2, "Record ID");
1060
1009
  i0.ɵɵelementEnd();
1061
- i0.ɵɵelementStart(3, "code", 182);
1010
+ i0.ɵɵelementStart(3, "code", 178);
1062
1011
  i0.ɵɵtext(4);
1063
1012
  i0.ɵɵelementEnd()();
1064
1013
  } if (rf & 2) {
1065
- const param_r30 = i0.ɵɵnextContext().$implicit;
1014
+ const param_r29 = i0.ɵɵnextContext().$implicit;
1066
1015
  i0.ɵɵadvance(4);
1067
- i0.ɵɵtextInterpolate(param_r30.RecordID);
1016
+ i0.ɵɵtextInterpolate(param_r29.RecordID);
1068
1017
  } }
1069
1018
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
1070
- i0.ɵɵelementStart(0, "div", 172)(1, "div", 173)(2, "div", 174);
1071
- i0.ɵɵelement(3, "i", 175);
1072
- i0.ɵɵelementStart(4, "h6", 176);
1019
+ i0.ɵɵelementStart(0, "div", 168)(1, "div", 169)(2, "div", 170);
1020
+ i0.ɵɵelement(3, "i", 171);
1021
+ i0.ɵɵelementStart(4, "h6", 172);
1073
1022
  i0.ɵɵtext(5);
1074
- i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 177);
1023
+ i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 173);
1075
1024
  i0.ɵɵelementEnd()();
1076
- i0.ɵɵelementStart(7, "div", 174)(8, "span", 178);
1025
+ i0.ɵɵelementStart(7, "div", 170)(8, "span", 174);
1077
1026
  i0.ɵɵtext(9);
1078
1027
  i0.ɵɵelementEnd();
1079
- i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 179)(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 180);
1028
+ i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 175)(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 176);
1080
1029
  i0.ɵɵelementEnd()();
1081
- i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 181);
1082
- i0.ɵɵelementStart(13, "div", 182)(14, "span", 183);
1083
- i0.ɵɵelement(15, "i", 184);
1030
+ i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 177);
1031
+ i0.ɵɵelementStart(13, "div", 178)(14, "span", 179);
1032
+ i0.ɵɵelement(15, "i", 180);
1084
1033
  i0.ɵɵtext(16);
1085
1034
  i0.ɵɵelementEnd()();
1086
- i0.ɵɵelementStart(17, "div", 185);
1087
- i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 186);
1088
- i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 186);
1089
- i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 186);
1090
- i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 186);
1091
- i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 186);
1035
+ i0.ɵɵelementStart(17, "div", 181);
1036
+ i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 182);
1037
+ i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 182);
1038
+ i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 182);
1039
+ i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 182);
1040
+ i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 182);
1092
1041
  i0.ɵɵelementEnd()();
1093
1042
  } if (rf & 2) {
1094
- const param_r30 = ctx.$implicit;
1043
+ const param_r29 = ctx.$implicit;
1095
1044
  const ctx_r1 = i0.ɵɵnextContext(4);
1096
- i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r30.Type));
1045
+ i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r29.Type));
1097
1046
  i0.ɵɵadvance(3);
1098
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r30.Type));
1099
- i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r30.Type));
1047
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r29.Type));
1048
+ i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r29.Type));
1100
1049
  i0.ɵɵadvance(2);
1101
- i0.ɵɵtextInterpolate1(" ", param_r30.Name, " ");
1050
+ i0.ɵɵtextInterpolate1(" ", param_r29.Name, " ");
1102
1051
  i0.ɵɵadvance();
1103
- i0.ɵɵconditional(param_r30.IsRequired ? 6 : -1);
1052
+ i0.ɵɵconditional(param_r29.IsRequired ? 6 : -1);
1104
1053
  i0.ɵɵadvance(2);
1105
- i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r30.Type));
1054
+ i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r29.Type));
1106
1055
  i0.ɵɵadvance();
1107
- i0.ɵɵtextInterpolate1(" ", param_r30.Type, " ");
1056
+ i0.ɵɵtextInterpolate1(" ", param_r29.Type, " ");
1108
1057
  i0.ɵɵadvance();
1109
- i0.ɵɵconditional(param_r30.IsRequired ? 10 : 11);
1058
+ i0.ɵɵconditional(param_r29.IsRequired ? 10 : 11);
1110
1059
  i0.ɵɵadvance(2);
1111
- i0.ɵɵconditional(param_r30.Description ? 12 : -1);
1060
+ i0.ɵɵconditional(param_r29.Description ? 12 : -1);
1112
1061
  i0.ɵɵadvance(4);
1113
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r30), " ");
1062
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r29), " ");
1114
1063
  i0.ɵɵadvance(2);
1115
- i0.ɵɵconditional(param_r30.DefaultValue ? 18 : -1);
1064
+ i0.ɵɵconditional(param_r29.DefaultValue ? 18 : -1);
1116
1065
  i0.ɵɵadvance();
1117
- i0.ɵɵconditional(param_r30.EntityID ? 19 : -1);
1066
+ i0.ɵɵconditional(param_r29.EntityID ? 19 : -1);
1118
1067
  i0.ɵɵadvance();
1119
- i0.ɵɵconditional(param_r30.LinkedParameterName ? 20 : -1);
1068
+ i0.ɵɵconditional(param_r29.LinkedParameterName ? 20 : -1);
1120
1069
  i0.ɵɵadvance();
1121
- i0.ɵɵconditional(param_r30.ExtraFilter ? 21 : -1);
1070
+ i0.ɵɵconditional(param_r29.ExtraFilter ? 21 : -1);
1122
1071
  i0.ɵɵadvance();
1123
- i0.ɵɵconditional(param_r30.RecordID ? 22 : -1);
1072
+ i0.ɵɵconditional(param_r29.RecordID ? 22 : -1);
1124
1073
  } }
1125
1074
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1126
- i0.ɵɵelementStart(0, "div", 166);
1127
- i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Template, 23, 19, "div", 167, _forTrack1);
1075
+ i0.ɵɵelementStart(0, "div", 162);
1076
+ i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_For_2_Template, 23, 19, "div", 163, _forTrack1);
1128
1077
  i0.ɵɵelementEnd();
1129
- i0.ɵɵelementStart(3, "div", 168)(4, "div", 169);
1130
- i0.ɵɵelement(5, "i", 170);
1131
- i0.ɵɵelementStart(6, "div", 171)(7, "strong");
1078
+ i0.ɵɵelementStart(3, "div", 164)(4, "div", 165);
1079
+ i0.ɵɵelement(5, "i", 166);
1080
+ i0.ɵɵelementStart(6, "div", 167)(7, "strong");
1132
1081
  i0.ɵɵtext(8, "Using Template Parameters:");
1133
1082
  i0.ɵɵelementEnd();
1134
1083
  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. ");
@@ -1139,32 +1088,32 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditiona
1139
1088
  i0.ɵɵrepeater(ctx_r1.templateParams);
1140
1089
  } }
1141
1090
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Template(rf, ctx) { if (rf & 1) {
1142
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1143
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_ng_template_1_Template, 8, 1, "ng-template", 30);
1144
- i0.ɵɵelementStart(2, "div", 36);
1145
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_3_Template, 3, 0, "div", 94)(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_4_Template, 3, 0, "div", 99)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_Template, 10, 0);
1091
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1092
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_ng_template_1_Template, 8, 1, "ng-template", 29);
1093
+ i0.ɵɵelementStart(2, "div", 35);
1094
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_3_Template, 3, 0, "div", 93)(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_4_Template, 3, 0, "div", 98)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Conditional_5_Template, 10, 0);
1146
1095
  i0.ɵɵelementEnd()();
1147
1096
  } if (rf & 2) {
1148
1097
  const ctx_r1 = i0.ɵɵnextContext(2);
1149
- i0.ɵɵproperty("expanded", false);
1098
+ i0.ɵɵproperty("Expanded", false);
1150
1099
  i0.ɵɵadvance(3);
1151
1100
  i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
1152
1101
  } }
1153
1102
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1154
- i0.ɵɵelementStart(0, "span", 68);
1155
- i0.ɵɵelement(1, "i", 22);
1103
+ i0.ɵɵelementStart(0, "span", 67);
1104
+ i0.ɵɵelement(1, "i", 21);
1156
1105
  i0.ɵɵtext(2, " Output Example (JSON) ");
1157
- i0.ɵɵelementStart(3, "span", 193);
1106
+ i0.ɵɵelementStart(3, "span", 189);
1158
1107
  i0.ɵɵtext(4, "\u2022 Required for object output type");
1159
1108
  i0.ɵɵelementEnd()();
1160
1109
  } }
1161
1110
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1162
- const _r31 = i0.ɵɵgetCurrentView();
1163
- i0.ɵɵelementStart(0, "mj-code-editor", 194);
1164
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
1111
+ const _r30 = i0.ɵɵgetCurrentView();
1112
+ i0.ɵɵelementStart(0, "mj-code-editor", 190);
1113
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
1165
1114
  i0.ɵɵelementEnd();
1166
- i0.ɵɵelementStart(1, "div", 195);
1167
- i0.ɵɵelement(2, "i", 100);
1115
+ i0.ɵɵelementStart(1, "div", 191);
1116
+ i0.ɵɵelement(2, "i", 99);
1168
1117
  i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
1169
1118
  i0.ɵɵelementEnd();
1170
1119
  } if (rf & 2) {
@@ -1172,7 +1121,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditiona
1172
1121
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
1173
1122
  } }
1174
1123
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1175
- i0.ɵɵelementStart(0, "div", 191);
1124
+ i0.ɵɵelementStart(0, "div", 187);
1176
1125
  i0.ɵɵtext(1);
1177
1126
  i0.ɵɵelementEnd();
1178
1127
  } if (rf & 2) {
@@ -1181,25 +1130,25 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditiona
1181
1130
  i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
1182
1131
  } }
1183
1132
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1184
- i0.ɵɵelementStart(0, "div", 192);
1185
- i0.ɵɵelement(1, "i", 196);
1133
+ i0.ɵɵelementStart(0, "div", 188);
1134
+ i0.ɵɵelement(1, "i", 192);
1186
1135
  i0.ɵɵtext(2, " Output example is required when output type is 'object' ");
1187
1136
  i0.ɵɵelementEnd();
1188
1137
  } }
1189
1138
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Template(rf, ctx) { if (rf & 1) {
1190
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1191
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_ng_template_1_Template, 5, 0, "ng-template", 30);
1192
- i0.ɵɵelementStart(2, "div", 190);
1193
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_4_Template, 2, 1, "div", 191)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_5_Template, 3, 0, "div", 192);
1139
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1140
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_ng_template_1_Template, 5, 0, "ng-template", 29);
1141
+ i0.ɵɵelementStart(2, "div", 186);
1142
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_4_Template, 2, 1, "div", 187)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Conditional_5_Template, 3, 0, "div", 188);
1194
1143
  i0.ɵɵelementEnd()();
1195
1144
  } if (rf & 2) {
1196
1145
  const ctx_r1 = i0.ɵɵnextContext(2);
1197
- i0.ɵɵproperty("expanded", true);
1146
+ i0.ɵɵproperty("Expanded", true);
1198
1147
  i0.ɵɵadvance(3);
1199
1148
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
1200
1149
  } }
1201
1150
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1202
- i0.ɵɵelementStart(0, "span", 199);
1151
+ i0.ɵɵelementStart(0, "span", 195);
1203
1152
  i0.ɵɵtext(1);
1204
1153
  i0.ɵɵelementEnd();
1205
1154
  } if (rf & 2) {
@@ -1208,10 +1157,10 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_templat
1208
1157
  i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
1209
1158
  } }
1210
1159
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1211
- i0.ɵɵelementStart(0, "span", 68);
1212
- i0.ɵɵelement(1, "i", 198);
1160
+ i0.ɵɵelementStart(0, "span", 67);
1161
+ i0.ɵɵelement(1, "i", 194);
1213
1162
  i0.ɵɵtext(2, " Execution History ");
1214
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_template_1_Conditional_3_Template, 2, 1, "span", 199);
1163
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_template_1_Conditional_3_Template, 2, 1, "span", 195);
1215
1164
  i0.ɵɵelementEnd();
1216
1165
  } if (rf & 2) {
1217
1166
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1219,318 +1168,318 @@ function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_templat
1219
1168
  i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
1220
1169
  } }
1221
1170
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1222
- i0.ɵɵelementStart(0, "div", 197);
1223
- i0.ɵɵelement(1, "i", 200);
1171
+ i0.ɵɵelementStart(0, "div", 193);
1172
+ i0.ɵɵelement(1, "i", 196);
1224
1173
  i0.ɵɵelementStart(2, "p");
1225
1174
  i0.ɵɵtext(3, "Loading execution history...");
1226
1175
  i0.ɵɵelementEnd()();
1227
1176
  } }
1228
1177
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1229
- i0.ɵɵelementStart(0, "div", 197);
1230
- i0.ɵɵelement(1, "i", 201);
1178
+ i0.ɵɵelementStart(0, "div", 193);
1179
+ i0.ɵɵelement(1, "i", 197);
1231
1180
  i0.ɵɵelementStart(2, "p");
1232
1181
  i0.ɵɵtext(3, "No execution history yet");
1233
1182
  i0.ɵɵelementEnd();
1234
- i0.ɵɵelementStart(4, "p", 116);
1183
+ i0.ɵɵelementStart(4, "p", 115);
1235
1184
  i0.ɵɵtext(5, "Run this prompt to see execution history here");
1236
1185
  i0.ɵɵelementEnd()();
1237
1186
  } }
1238
1187
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1239
- i0.ɵɵelement(0, "i", 214);
1188
+ i0.ɵɵelement(0, "i", 210);
1240
1189
  } if (rf & 2) {
1241
1190
  const ctx_r1 = i0.ɵɵnextContext(4);
1242
1191
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1243
1192
  } }
1244
1193
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1245
- i0.ɵɵelement(0, "i", 214);
1194
+ i0.ɵɵelement(0, "i", 210);
1246
1195
  } if (rf & 2) {
1247
1196
  const ctx_r1 = i0.ɵɵnextContext(4);
1248
1197
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1249
1198
  } }
1250
1199
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1251
- i0.ɵɵelement(0, "i", 214);
1200
+ i0.ɵɵelement(0, "i", 210);
1252
1201
  } if (rf & 2) {
1253
1202
  const ctx_r1 = i0.ɵɵnextContext(4);
1254
1203
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1255
1204
  } }
1256
1205
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1257
- i0.ɵɵelement(0, "i", 214);
1206
+ i0.ɵɵelement(0, "i", 210);
1258
1207
  } if (rf & 2) {
1259
1208
  const ctx_r1 = i0.ɵɵnextContext(4);
1260
1209
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
1261
1210
  } }
1262
1211
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1263
- i0.ɵɵelementStart(0, "span", 221);
1212
+ i0.ɵɵelementStart(0, "span", 217);
1264
1213
  i0.ɵɵtext(1);
1265
1214
  i0.ɵɵelementEnd();
1266
1215
  } if (rf & 2) {
1267
- const run_r34 = i0.ɵɵnextContext().$implicit;
1216
+ const run_r33 = i0.ɵɵnextContext().$implicit;
1268
1217
  i0.ɵɵadvance();
1269
- i0.ɵɵtextInterpolate1(" ", run_r34.RunType, " ");
1218
+ i0.ɵɵtextInterpolate1(" ", run_r33.RunType, " ");
1270
1219
  } }
1271
1220
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
1272
- const _r33 = i0.ɵɵgetCurrentView();
1273
- i0.ɵɵelementStart(0, "tr", 215)(1, "td", 216)(2, "span", 217);
1221
+ const _r32 = i0.ɵɵgetCurrentView();
1222
+ i0.ɵɵelementStart(0, "tr", 211)(1, "td", 212)(2, "span", 213);
1274
1223
  i0.ɵɵelement(3, "i");
1275
- i0.ɵɵelementStart(4, "span", 23);
1224
+ i0.ɵɵelementStart(4, "span", 22);
1276
1225
  i0.ɵɵtext(5);
1277
1226
  i0.ɵɵelementEnd()()();
1278
- i0.ɵɵelementStart(6, "td", 218);
1227
+ i0.ɵɵelementStart(6, "td", 214);
1279
1228
  i0.ɵɵtext(7);
1280
1229
  i0.ɵɵpipe(8, "date");
1281
1230
  i0.ɵɵelementEnd();
1282
- i0.ɵɵelementStart(9, "td", 218)(10, "span", 217);
1283
- i0.ɵɵelement(11, "i", 95);
1231
+ i0.ɵɵelementStart(9, "td", 214)(10, "span", 213);
1232
+ i0.ɵɵelement(11, "i", 94);
1284
1233
  i0.ɵɵtext(12);
1285
1234
  i0.ɵɵelementEnd()();
1286
- i0.ɵɵelementStart(13, "td", 218);
1235
+ i0.ɵɵelementStart(13, "td", 214);
1287
1236
  i0.ɵɵtext(14);
1288
1237
  i0.ɵɵelementEnd();
1289
- i0.ɵɵelementStart(15, "td", 219);
1238
+ i0.ɵɵelementStart(15, "td", 215);
1290
1239
  i0.ɵɵtext(16);
1291
1240
  i0.ɵɵelementEnd();
1292
- i0.ɵɵelementStart(17, "td", 219);
1241
+ i0.ɵɵelementStart(17, "td", 215);
1293
1242
  i0.ɵɵtext(18);
1294
1243
  i0.ɵɵelementEnd();
1295
- i0.ɵɵelementStart(19, "td", 220);
1296
- i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 221);
1244
+ i0.ɵɵelementStart(19, "td", 216);
1245
+ i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 217);
1297
1246
  i0.ɵɵelementEnd();
1298
- i0.ɵɵelementStart(21, "td", 220)(22, "button", 222);
1299
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Template_button_click_22_listener() { const run_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r34.ID)); });
1300
- i0.ɵɵelement(23, "i", 223);
1247
+ i0.ɵɵelementStart(21, "td", 216)(22, "button", 218);
1248
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Template_button_click_22_listener() { const run_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r33.ID)); });
1249
+ i0.ɵɵelement(23, "i", 219);
1301
1250
  i0.ɵɵelementEnd()()();
1302
1251
  } if (rf & 2) {
1303
- const run_r34 = ctx.$implicit;
1304
- const ɵ$index_867_r35 = ctx.$index;
1252
+ const run_r33 = ctx.$implicit;
1253
+ const ɵ$index_853_r34 = ctx.$index;
1305
1254
  const ctx_r1 = i0.ɵɵnextContext(4);
1306
- i0.ɵɵclassProp("even-row", ɵ$index_867_r35 % 2 === 0);
1255
+ i0.ɵɵclassProp("even-row", ɵ$index_853_r34 % 2 === 0);
1307
1256
  i0.ɵɵadvance(3);
1308
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r34.Success));
1309
- i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
1257
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r33.Success));
1258
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r33.Success));
1310
1259
  i0.ɵɵadvance();
1311
- i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
1260
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r33.Success));
1312
1261
  i0.ɵɵadvance();
1313
- i0.ɵɵtextInterpolate1(" ", run_r34.Success === true ? "Success" : run_r34.Success === false ? "Failed" : "Running", " ");
1262
+ i0.ɵɵtextInterpolate1(" ", run_r33.Success === true ? "Success" : run_r33.Success === false ? "Failed" : "Running", " ");
1314
1263
  i0.ɵɵadvance(2);
1315
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r34.RunAt, "short"), " ");
1264
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r33.RunAt, "short"), " ");
1316
1265
  i0.ɵɵadvance(5);
1317
- i0.ɵɵtextInterpolate1(" ", run_r34.Model || "Unknown", " ");
1266
+ i0.ɵɵtextInterpolate1(" ", run_r33.Model || "Unknown", " ");
1318
1267
  i0.ɵɵadvance(2);
1319
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r34.ExecutionTimeMS), " ");
1268
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r33.ExecutionTimeMS), " ");
1320
1269
  i0.ɵɵadvance(2);
1321
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r34.TokensUsed), " ");
1270
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r33.TokensUsed), " ");
1322
1271
  i0.ɵɵadvance(2);
1323
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r34.TotalCost || run_r34.Cost), " ");
1272
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r33.TotalCost || run_r33.Cost), " ");
1324
1273
  i0.ɵɵadvance(2);
1325
- i0.ɵɵconditional(run_r34.RunType ? 20 : -1);
1274
+ i0.ɵɵconditional(run_r33.RunType ? 20 : -1);
1326
1275
  } }
1327
1276
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1328
- const _r32 = i0.ɵɵgetCurrentView();
1329
- i0.ɵɵelementStart(0, "div", 202)(1, "div", 135);
1277
+ const _r31 = i0.ɵɵgetCurrentView();
1278
+ i0.ɵɵelementStart(0, "div", 198)(1, "div", 133);
1330
1279
  i0.ɵɵtext(2);
1331
1280
  i0.ɵɵelementEnd();
1332
- i0.ɵɵelementStart(3, "div", 203)(4, "span", 180);
1281
+ i0.ɵɵelementStart(3, "div", 199)(4, "span", 176);
1333
1282
  i0.ɵɵtext(5, "Sort by:");
1334
1283
  i0.ɵɵelementEnd();
1335
- i0.ɵɵelementStart(6, "kendo-buttongroup", 204)(7, "button", 205);
1336
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1284
+ i0.ɵɵelementStart(6, "div", 200)(7, "button", 201);
1285
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1337
1286
  i0.ɵɵtext(8, " Date ");
1338
- i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_9_Template, 1, 2, "i", 206);
1287
+ i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_9_Template, 1, 2, "i", 202);
1339
1288
  i0.ɵɵelementEnd();
1340
- i0.ɵɵelementStart(10, "button", 205);
1341
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1289
+ i0.ɵɵelementStart(10, "button", 201);
1290
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1342
1291
  i0.ɵɵtext(11, " Duration ");
1343
- i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_12_Template, 1, 2, "i", 206);
1292
+ i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_12_Template, 1, 2, "i", 202);
1344
1293
  i0.ɵɵelementEnd();
1345
- i0.ɵɵelementStart(13, "button", 205);
1346
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1294
+ i0.ɵɵelementStart(13, "button", 201);
1295
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1347
1296
  i0.ɵɵtext(14, " Tokens ");
1348
- i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_15_Template, 1, 2, "i", 206);
1297
+ i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_15_Template, 1, 2, "i", 202);
1349
1298
  i0.ɵɵelementEnd();
1350
- i0.ɵɵelementStart(16, "button", 205);
1351
- i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1299
+ i0.ɵɵelementStart(16, "button", 201);
1300
+ i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1352
1301
  i0.ɵɵtext(17, " Cost ");
1353
- i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_18_Template, 1, 2, "i", 206);
1302
+ i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Conditional_18_Template, 1, 2, "i", 202);
1354
1303
  i0.ɵɵelementEnd()()()();
1355
- i0.ɵɵelementStart(19, "div", 207)(20, "table", 208)(21, "thead")(22, "tr", 209)(23, "th", 210);
1304
+ i0.ɵɵelementStart(19, "div", 203)(20, "table", 204)(21, "thead")(22, "tr", 205)(23, "th", 206);
1356
1305
  i0.ɵɵtext(24, "Status");
1357
1306
  i0.ɵɵelementEnd();
1358
- i0.ɵɵelementStart(25, "th", 210);
1307
+ i0.ɵɵelementStart(25, "th", 206);
1359
1308
  i0.ɵɵtext(26, "Date & Time");
1360
1309
  i0.ɵɵelementEnd();
1361
- i0.ɵɵelementStart(27, "th", 210);
1310
+ i0.ɵɵelementStart(27, "th", 206);
1362
1311
  i0.ɵɵtext(28, "Model");
1363
1312
  i0.ɵɵelementEnd();
1364
- i0.ɵɵelementStart(29, "th", 210);
1313
+ i0.ɵɵelementStart(29, "th", 206);
1365
1314
  i0.ɵɵtext(30, "Duration");
1366
1315
  i0.ɵɵelementEnd();
1367
- i0.ɵɵelementStart(31, "th", 211);
1316
+ i0.ɵɵelementStart(31, "th", 207);
1368
1317
  i0.ɵɵtext(32, "Tokens");
1369
1318
  i0.ɵɵelementEnd();
1370
- i0.ɵɵelementStart(33, "th", 211);
1319
+ i0.ɵɵelementStart(33, "th", 207);
1371
1320
  i0.ɵɵtext(34, "Cost");
1372
1321
  i0.ɵɵelementEnd();
1373
- i0.ɵɵelementStart(35, "th", 212);
1322
+ i0.ɵɵelementStart(35, "th", 208);
1374
1323
  i0.ɵɵtext(36, "Type");
1375
1324
  i0.ɵɵelementEnd();
1376
- i0.ɵɵelementStart(37, "th", 212);
1325
+ i0.ɵɵelementStart(37, "th", 208);
1377
1326
  i0.ɵɵtext(38, "Actions");
1378
1327
  i0.ɵɵelementEnd()()();
1379
1328
  i0.ɵɵelementStart(39, "tbody");
1380
- i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Template, 24, 18, "tr", 213, _forTrack1);
1329
+ i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_For_41_Template, 24, 18, "tr", 209, _forTrack1);
1381
1330
  i0.ɵɵelementEnd()()();
1382
1331
  } if (rf & 2) {
1383
1332
  const ctx_r1 = i0.ɵɵnextContext(3);
1384
1333
  i0.ɵɵadvance(2);
1385
1334
  i0.ɵɵtextInterpolate1(" Showing ", ctx_r1.executionHistory.length, " executions ");
1386
1335
  i0.ɵɵadvance(5);
1387
- i0.ɵɵproperty("selected", ctx_r1.historySortField === "runAt");
1336
+ i0.ɵɵclassProp("active", ctx_r1.historySortField === "runAt");
1388
1337
  i0.ɵɵadvance(2);
1389
1338
  i0.ɵɵconditional(ctx_r1.historySortField === "runAt" ? 9 : -1);
1390
1339
  i0.ɵɵadvance();
1391
- i0.ɵɵproperty("selected", ctx_r1.historySortField === "executionTime");
1340
+ i0.ɵɵclassProp("active", ctx_r1.historySortField === "executionTime");
1392
1341
  i0.ɵɵadvance(2);
1393
1342
  i0.ɵɵconditional(ctx_r1.historySortField === "executionTime" ? 12 : -1);
1394
1343
  i0.ɵɵadvance();
1395
- i0.ɵɵproperty("selected", ctx_r1.historySortField === "tokens");
1344
+ i0.ɵɵclassProp("active", ctx_r1.historySortField === "tokens");
1396
1345
  i0.ɵɵadvance(2);
1397
1346
  i0.ɵɵconditional(ctx_r1.historySortField === "tokens" ? 15 : -1);
1398
1347
  i0.ɵɵadvance();
1399
- i0.ɵɵproperty("selected", ctx_r1.historySortField === "cost");
1348
+ i0.ɵɵclassProp("active", ctx_r1.historySortField === "cost");
1400
1349
  i0.ɵɵadvance(2);
1401
1350
  i0.ɵɵconditional(ctx_r1.historySortField === "cost" ? 18 : -1);
1402
1351
  i0.ɵɵadvance(22);
1403
1352
  i0.ɵɵrepeater(ctx_r1.executionHistory);
1404
1353
  } }
1405
1354
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Template(rf, ctx) { if (rf & 1) {
1406
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1407
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_template_1_Template, 4, 1, "ng-template", 30);
1408
- i0.ɵɵelementStart(2, "div", 190);
1409
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_3_Template, 4, 0, "div", 197)(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_4_Template, 6, 0, "div", 197)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template, 42, 9);
1355
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1356
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_ng_template_1_Template, 4, 1, "ng-template", 29);
1357
+ i0.ɵɵelementStart(2, "div", 186);
1358
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_3_Template, 4, 0, "div", 193)(4, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_4_Template, 6, 0, "div", 193)(5, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Conditional_5_Template, 42, 13);
1410
1359
  i0.ɵɵelementEnd()();
1411
1360
  } if (rf & 2) {
1412
1361
  const ctx_r1 = i0.ɵɵnextContext(2);
1413
- i0.ɵɵproperty("expanded", false);
1362
+ i0.ɵɵproperty("Expanded", false);
1414
1363
  i0.ɵɵadvance(3);
1415
1364
  i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
1416
1365
  } }
1417
1366
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1418
- i0.ɵɵelementStart(0, "span", 68);
1419
- i0.ɵɵelement(1, "i", 225);
1367
+ i0.ɵɵelementStart(0, "span", 67);
1368
+ i0.ɵɵelement(1, "i", 221);
1420
1369
  i0.ɵɵtext(2, " Result Cache ");
1421
1370
  i0.ɵɵelementEnd();
1422
1371
  } }
1423
1372
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_Template(rf, ctx) { if (rf & 1) {
1424
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1425
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_ng_template_1_Template, 3, 0, "ng-template", 30);
1426
- i0.ɵɵelementStart(2, "div", 36);
1427
- i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 224);
1373
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1374
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_ng_template_1_Template, 3, 0, "ng-template", 29);
1375
+ i0.ɵɵelementStart(2, "div", 35);
1376
+ i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 220);
1428
1377
  i0.ɵɵelementEnd()();
1429
1378
  } if (rf & 2) {
1430
1379
  const ctx_r1 = i0.ɵɵnextContext(2);
1431
- i0.ɵɵproperty("expanded", false);
1380
+ i0.ɵɵproperty("Expanded", false);
1432
1381
  i0.ɵɵadvance(3);
1433
1382
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Result Cache"))("AllowLoad", true)("ShowToolbar", false);
1434
1383
  } }
1435
1384
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1436
- i0.ɵɵelementStart(0, "span", 68);
1437
- i0.ɵɵelement(1, "i", 227);
1385
+ i0.ɵɵelementStart(0, "span", 67);
1386
+ i0.ɵɵelement(1, "i", 223);
1438
1387
  i0.ɵɵtext(2, " Related Items ");
1439
1388
  i0.ɵɵelementEnd();
1440
1389
  } }
1441
1390
  function MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_Template(rf, ctx) { if (rf & 1) {
1442
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1443
- i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_ng_template_1_Template, 3, 0, "ng-template", 30);
1444
- i0.ɵɵelementStart(2, "div", 36)(3, "div", 37)(4, "div")(5, "h6", 226);
1391
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
1392
+ i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_ng_template_1_Template, 3, 0, "ng-template", 29);
1393
+ i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6", 222);
1445
1394
  i0.ɵɵtext(6, "AI Agents Using This Prompt");
1446
1395
  i0.ɵɵelementEnd();
1447
- i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 224);
1396
+ i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 220);
1448
1397
  i0.ɵɵelementEnd();
1449
- i0.ɵɵelementStart(8, "div")(9, "h6", 226);
1398
+ i0.ɵɵelementStart(8, "div")(9, "h6", 222);
1450
1399
  i0.ɵɵtext(10, "Prompts Using This as Result Selector");
1451
1400
  i0.ɵɵelementEnd();
1452
- i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 224);
1401
+ i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 220);
1453
1402
  i0.ɵɵelementEnd()()()();
1454
1403
  } if (rf & 2) {
1455
1404
  const ctx_r1 = i0.ɵɵnextContext(2);
1456
- i0.ɵɵproperty("expanded", false);
1405
+ i0.ɵɵproperty("Expanded", false);
1457
1406
  i0.ɵɵadvance(7);
1458
1407
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Agent Prompts", "PromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Agent Prompts"))("AllowLoad", true)("ShowToolbar", false);
1459
1408
  i0.ɵɵadvance(4);
1460
1409
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Prompts", "ResultSelectorPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Prompts"))("AllowLoad", true)("ShowToolbar", false);
1461
1410
  } }
1462
1411
  function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1463
- i0.ɵɵelementStart(0, "form", 4, 0);
1464
- i0.ɵɵelement(2, "mj-form-toolbar", 6);
1465
- i0.ɵɵelementStart(3, "div", 7)(4, "div", 8)(5, "div", 9)(6, "div", 10)(7, "div", 11);
1466
- i0.ɵɵelement(8, "i", 12);
1467
- i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_2_Conditional_9_Template, 1, 1, "kendo-textbox", 13)(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_10_Template, 4, 4);
1468
- i0.ɵɵelementEnd();
1469
- i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Template, 12, 11, "div", 14);
1470
- i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_12_Template, 1, 2, "kendo-textarea", 15)(13, MJAIPromptFormComponentExtended_Conditional_2_Conditional_13_Template, 2, 1, "p", 16);
1471
- i0.ɵɵelementStart(14, "div", 17);
1472
- i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_2_Conditional_15_Template, 6, 1, "div", 18);
1473
- i0.ɵɵelementStart(16, "div", 18);
1474
- i0.ɵɵelement(17, "i", 19);
1475
- i0.ɵɵelementStart(18, "span", 20);
1412
+ i0.ɵɵelementStart(0, "form", 3, 0);
1413
+ i0.ɵɵelement(2, "mj-form-toolbar", 5);
1414
+ i0.ɵɵelementStart(3, "div", 6)(4, "div", 7)(5, "div", 8)(6, "div", 9)(7, "div", 10);
1415
+ i0.ɵɵelement(8, "i", 11);
1416
+ i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_2_Conditional_9_Template, 1, 1, "input", 12)(10, MJAIPromptFormComponentExtended_Conditional_2_Conditional_10_Template, 4, 4);
1417
+ i0.ɵɵelementEnd();
1418
+ i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_2_Conditional_11_Template, 12, 11, "div", 13);
1419
+ i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_2_Conditional_12_Template, 1, 2, "textarea", 14)(13, MJAIPromptFormComponentExtended_Conditional_2_Conditional_13_Template, 2, 1, "p", 15);
1420
+ i0.ɵɵelementStart(14, "div", 16);
1421
+ i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_2_Conditional_15_Template, 6, 1, "div", 17);
1422
+ i0.ɵɵelementStart(16, "div", 17);
1423
+ i0.ɵɵelement(17, "i", 18);
1424
+ i0.ɵɵelementStart(18, "span", 19);
1476
1425
  i0.ɵɵtext(19, "Parallelization:");
1477
1426
  i0.ɵɵelementEnd();
1478
- i0.ɵɵelementStart(20, "span", 21);
1427
+ i0.ɵɵelementStart(20, "span", 20);
1479
1428
  i0.ɵɵtext(21);
1480
1429
  i0.ɵɵelementEnd()();
1481
- i0.ɵɵelementStart(22, "div", 18);
1482
- i0.ɵɵelement(23, "i", 22);
1483
- i0.ɵɵelementStart(24, "span", 20);
1430
+ i0.ɵɵelementStart(22, "div", 17);
1431
+ i0.ɵɵelement(23, "i", 21);
1432
+ i0.ɵɵelementStart(24, "span", 19);
1484
1433
  i0.ɵɵtext(25, "Output:");
1485
1434
  i0.ɵɵelementEnd();
1486
- i0.ɵɵelementStart(26, "span", 23);
1435
+ i0.ɵɵelementStart(26, "span", 22);
1487
1436
  i0.ɵɵtext(27);
1488
1437
  i0.ɵɵelementEnd()();
1489
- i0.ɵɵconditionalCreate(28, MJAIPromptFormComponentExtended_Conditional_2_Conditional_28_Template, 4, 0, "div", 18);
1490
- i0.ɵɵconditionalCreate(29, MJAIPromptFormComponentExtended_Conditional_2_Conditional_29_Template, 6, 1, "div", 18);
1438
+ i0.ɵɵconditionalCreate(28, MJAIPromptFormComponentExtended_Conditional_2_Conditional_28_Template, 4, 0, "div", 17);
1439
+ i0.ɵɵconditionalCreate(29, MJAIPromptFormComponentExtended_Conditional_2_Conditional_29_Template, 6, 1, "div", 17);
1491
1440
  i0.ɵɵelementEnd()();
1492
- i0.ɵɵelementStart(30, "div", 24)(31, "div", 25);
1493
- i0.ɵɵconditionalCreate(32, MJAIPromptFormComponentExtended_Conditional_2_Conditional_32_Template, 3, 2, "button", 26);
1441
+ i0.ɵɵelementStart(30, "div", 23)(31, "div", 24);
1442
+ i0.ɵɵconditionalCreate(32, MJAIPromptFormComponentExtended_Conditional_2_Conditional_32_Template, 3, 0, "button", 25);
1494
1443
  i0.ɵɵelementEnd();
1495
- i0.ɵɵconditionalCreate(33, MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Template, 4, 3, "div", 27);
1444
+ i0.ɵɵconditionalCreate(33, MJAIPromptFormComponentExtended_Conditional_2_Conditional_33_Template, 4, 3, "div", 26);
1496
1445
  i0.ɵɵelementEnd()()();
1497
- i0.ɵɵelementStart(34, "div", 28)(35, "kendo-expansionpanel", 29);
1498
- i0.ɵɵtemplate(36, MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Template, 4, 1, "ng-template", 30);
1499
- i0.ɵɵelementStart(37, "div", 31);
1500
- i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_2_Conditional_38_Template, 3, 0, "div", 32)(39, MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Template, 9, 2, "div", 33)(40, MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Template, 11, 2, "div", 34)(41, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template, 5, 3, "div", 35);
1446
+ i0.ɵɵelementStart(34, "div", 27)(35, "mj-accordion-panel", 28);
1447
+ i0.ɵɵtemplate(36, MJAIPromptFormComponentExtended_Conditional_2_ng_template_36_Template, 4, 1, "ng-template", 29);
1448
+ i0.ɵɵelementStart(37, "div", 30);
1449
+ i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_2_Conditional_38_Template, 3, 0, "div", 31)(39, MJAIPromptFormComponentExtended_Conditional_2_Conditional_39_Template, 9, 2, "div", 32)(40, MJAIPromptFormComponentExtended_Conditional_2_Conditional_40_Template, 11, 1, "div", 33)(41, MJAIPromptFormComponentExtended_Conditional_2_Conditional_41_Template, 5, 3, "div", 34);
1501
1450
  i0.ɵɵelementEnd()();
1502
- i0.ɵɵconditionalCreate(42, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Template, 6, 2, "kendo-expansionpanel", 29);
1503
- i0.ɵɵelementStart(43, "kendo-expansionpanel", 29);
1504
- i0.ɵɵtemplate(44, MJAIPromptFormComponentExtended_Conditional_2_ng_template_44_Template, 3, 0, "ng-template", 30);
1505
- i0.ɵɵelementStart(45, "div", 36)(46, "div", 37)(47, "div");
1506
- i0.ɵɵelement(48, "mj-form-field", 38);
1507
- i0.ɵɵconditionalCreate(49, MJAIPromptFormComponentExtended_Conditional_2_Conditional_49_Template, 1, 3, "mj-form-field", 39);
1508
- i0.ɵɵconditionalCreate(50, MJAIPromptFormComponentExtended_Conditional_2_Conditional_50_Template, 1, 3, "mj-form-field", 40);
1509
- i0.ɵɵelement(51, "mj-form-field", 41)(52, "mj-form-field", 42);
1451
+ i0.ɵɵconditionalCreate(42, MJAIPromptFormComponentExtended_Conditional_2_Conditional_42_Template, 6, 2, "mj-accordion-panel", 28);
1452
+ i0.ɵɵelementStart(43, "mj-accordion-panel", 28);
1453
+ i0.ɵɵtemplate(44, MJAIPromptFormComponentExtended_Conditional_2_ng_template_44_Template, 3, 0, "ng-template", 29);
1454
+ i0.ɵɵelementStart(45, "div", 35)(46, "div", 36)(47, "div");
1455
+ i0.ɵɵelement(48, "mj-form-field", 37);
1456
+ i0.ɵɵconditionalCreate(49, MJAIPromptFormComponentExtended_Conditional_2_Conditional_49_Template, 1, 3, "mj-form-field", 38);
1457
+ i0.ɵɵconditionalCreate(50, MJAIPromptFormComponentExtended_Conditional_2_Conditional_50_Template, 1, 3, "mj-form-field", 39);
1458
+ i0.ɵɵelement(51, "mj-form-field", 40)(52, "mj-form-field", 41);
1510
1459
  i0.ɵɵelementEnd();
1511
1460
  i0.ɵɵelementStart(53, "div");
1512
- i0.ɵɵelement(54, "mj-form-field", 43)(55, "mj-form-field", 44);
1513
- i0.ɵɵelementStart(56, "div", 45)(57, "label", 46);
1461
+ i0.ɵɵelement(54, "mj-form-field", 42)(55, "mj-form-field", 43);
1462
+ i0.ɵɵelementStart(56, "div", 44)(57, "label", 45);
1514
1463
  i0.ɵɵtext(58, " Result Selector Prompt ");
1515
1464
  i0.ɵɵelementEnd();
1516
- i0.ɵɵconditionalCreate(59, MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Template, 2, 1)(60, MJAIPromptFormComponentExtended_Conditional_2_Conditional_60_Template, 2, 1, "span", 47);
1465
+ i0.ɵɵconditionalCreate(59, MJAIPromptFormComponentExtended_Conditional_2_Conditional_59_Template, 2, 1)(60, MJAIPromptFormComponentExtended_Conditional_2_Conditional_60_Template, 2, 1, "span", 46);
1517
1466
  i0.ɵɵelementEnd()()()()();
1518
- i0.ɵɵelementStart(61, "kendo-expansionpanel", 29);
1519
- i0.ɵɵtemplate(62, MJAIPromptFormComponentExtended_Conditional_2_ng_template_62_Template, 3, 0, "ng-template", 30);
1520
- i0.ɵɵelementStart(63, "div", 36)(64, "p", 48);
1467
+ i0.ɵɵelementStart(61, "mj-accordion-panel", 28);
1468
+ i0.ɵɵtemplate(62, MJAIPromptFormComponentExtended_Conditional_2_ng_template_62_Template, 3, 0, "ng-template", 29);
1469
+ i0.ɵɵelementStart(63, "div", 35)(64, "p", 47);
1521
1470
  i0.ɵɵtext(65, " Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered. ");
1522
1471
  i0.ɵɵelementEnd();
1523
- i0.ɵɵelementStart(66, "div", 37)(67, "div");
1524
- i0.ɵɵelement(68, "mj-form-field", 49)(69, "mj-form-field", 50);
1472
+ i0.ɵɵelementStart(66, "div", 36)(67, "div");
1473
+ i0.ɵɵelement(68, "mj-form-field", 48)(69, "mj-form-field", 49);
1525
1474
  i0.ɵɵelementEnd();
1526
1475
  i0.ɵɵelementStart(70, "div");
1527
- i0.ɵɵelement(71, "mj-form-field", 51);
1476
+ i0.ɵɵelement(71, "mj-form-field", 50);
1528
1477
  i0.ɵɵelementEnd()()()();
1529
- i0.ɵɵconditionalCreate(72, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Template, 6, 2, "kendo-expansionpanel", 29);
1530
- i0.ɵɵconditionalCreate(73, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Template, 6, 2, "kendo-expansionpanel", 29);
1531
- i0.ɵɵconditionalCreate(74, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Template, 6, 2, "kendo-expansionpanel", 29);
1532
- i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_Template, 4, 5, "kendo-expansionpanel", 29);
1533
- i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_Template, 12, 9, "kendo-expansionpanel", 29);
1478
+ i0.ɵɵconditionalCreate(72, MJAIPromptFormComponentExtended_Conditional_2_Conditional_72_Template, 6, 2, "mj-accordion-panel", 28);
1479
+ i0.ɵɵconditionalCreate(73, MJAIPromptFormComponentExtended_Conditional_2_Conditional_73_Template, 6, 2, "mj-accordion-panel", 28);
1480
+ i0.ɵɵconditionalCreate(74, MJAIPromptFormComponentExtended_Conditional_2_Conditional_74_Template, 6, 2, "mj-accordion-panel", 28);
1481
+ i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_2_Conditional_75_Template, 4, 5, "mj-accordion-panel", 28);
1482
+ i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_2_Conditional_76_Template, 12, 9, "mj-accordion-panel", 28);
1534
1483
  i0.ɵɵelementEnd()()();
1535
1484
  } if (rf & 2) {
1536
1485
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1559,13 +1508,13 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
1559
1508
  i0.ɵɵadvance();
1560
1509
  i0.ɵɵconditional(!ctx_r1.canExecute && ctx_r1.record.ID ? 33 : -1);
1561
1510
  i0.ɵɵadvance(2);
1562
- i0.ɵɵproperty("expanded", true);
1511
+ i0.ɵɵproperty("Expanded", true);
1563
1512
  i0.ɵɵadvance(3);
1564
1513
  i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 38 : !ctx_r1.record.TemplateID ? 39 : ctx_r1.templateNotFoundInDatabase ? 40 : 41);
1565
1514
  i0.ɵɵadvance(4);
1566
1515
  i0.ɵɵconditional(ctx_r1.record.IsSaved ? 42 : -1);
1567
1516
  i0.ɵɵadvance();
1568
- i0.ɵɵproperty("expanded", false);
1517
+ i0.ɵɵproperty("Expanded", false);
1569
1518
  i0.ɵɵadvance(5);
1570
1519
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1571
1520
  i0.ɵɵadvance();
@@ -1583,7 +1532,7 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
1583
1532
  i0.ɵɵadvance(4);
1584
1533
  i0.ɵɵconditional(ctx_r1.EditMode ? 59 : 60);
1585
1534
  i0.ɵɵadvance(2);
1586
- i0.ɵɵproperty("expanded", false);
1535
+ i0.ɵɵproperty("Expanded", false);
1587
1536
  i0.ɵɵadvance(7);
1588
1537
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1589
1538
  i0.ɵɵadvance();
@@ -1602,15 +1551,15 @@ function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (r
1602
1551
  i0.ɵɵconditional(ctx_r1.record.IsSaved ? 76 : -1);
1603
1552
  } }
1604
1553
  function MJAIPromptFormComponentExtended_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1605
- const _r36 = i0.ɵɵgetCurrentView();
1606
- i0.ɵɵelementStart(0, "kendo-window", 228);
1607
- i0.ɵɵlistener("close", function MJAIPromptFormComponentExtended_Conditional_3_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1608
- i0.ɵɵelementStart(1, "mj-ai-test-harness", 229);
1609
- i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_3_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1554
+ const _r35 = i0.ɵɵgetCurrentView();
1555
+ i0.ɵɵelementStart(0, "mj-window", 224);
1556
+ i0.ɵɵlistener("Close", function MJAIPromptFormComponentExtended_Conditional_3_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1557
+ i0.ɵɵelementStart(1, "mj-ai-test-harness", 225);
1558
+ i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_3_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1610
1559
  i0.ɵɵelementEnd()();
1611
1560
  } if (rf & 2) {
1612
1561
  const ctx_r1 = i0.ɵɵnextContext();
1613
- i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Run AI Prompt - ", ctx_r1.record.Name || "Untitled"))("width", 1200)("height", 800)("minWidth", 800)("minHeight", 600)("draggable", true)("resizable", true)("state", "default");
1562
+ i0.ɵɵproperty("Width", 1200)("Height", 800)("MinWidth", 800)("MinHeight", 600)("Draggable", true)("Resizable", true)("Visible", true)("Title", "Run AI Prompt - " + (ctx_r1.record.Name || "Untitled"));
1614
1563
  i0.ɵɵadvance();
1615
1564
  i0.ɵɵproperty("entity", ctx_r1.record)("mode", "prompt")("isVisible", ctx_r1.showTestHarness);
1616
1565
  } }
@@ -3086,18 +3035,18 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
3086
3035
  } if (rf & 2) {
3087
3036
  let _t;
3088
3037
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateEditor = _t.first);
3089
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [1, "record-form-container", 2, "height", "100%", "display", "flex", "flex-direction", "column"], ["kendoDialogContainer", ""], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "Form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "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"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "themeColor", "size"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "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...", 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)"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "click", "themeColor", "size"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "var(--mj-text-secondary)"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["kendoButton", "", 3, "themeColor"], ["kendoButton", "", 3, "fillMode"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-plus"], ["kendoButton", "", 3, "click", "fillMode"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid 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"], ["kendoButton", "", "title", "Change to a different template", 3, "fillMode", "size"], ["kendoButton", "", "title", "Open template in new window", 3, "fillMode", "size"], ["kendoButton", "", "title", "Change to a different template", 3, "click", "fillMode", "size"], [1, "fa-solid", "fa-exchange-alt"], ["kendoButton", "", "title", "Open template in new window", 3, "click", "fillMode", "size"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["kendoButton", "", "fillMode", "outline", "themeColor", "primary", "size", "small", 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"], ["kendoDropDownListItemTemplate", ""], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "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"], ["kendoDropDownListNoDataTemplate", ""], [2, "padding", "8px", "text-align", "center", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "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"], ["placeholder", "Parameter name...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["kendoButton", "", "fillMode", "outline", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "textField", "text", "valueField", "value", "placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "data", "valuePrimitive", "filterable"], ["name", "resultSelectorPromptID", "textField", "text", "valueField", "value", "placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "data", "valuePrimitive", "filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "var(--mj-brand-primary)", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], ["selection", "single"], ["kendoButton", "", "size", "small", 3, "click", "selected"], [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"], ["kendoButton", "", "fillMode", "flat", "size", "small", "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", "state", "title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
3038
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [1, "record-form-container", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 3, "click"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "var(--mj-text-secondary)"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "var(--mj-brand-primary)", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
3090
3039
  i0.ɵɵelementStart(0, "div", 2);
3091
- i0.ɵɵelement(1, "div", 3);
3092
- i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 77, 50, "form", 4);
3093
- i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_3_Template, 2, 12, "kendo-window", 5);
3040
+ i0.ɵɵelement(1, "div");
3041
+ i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 77, 50, "form", 3);
3042
+ i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_3_Template, 2, 11, "mj-window", 4);
3094
3043
  i0.ɵɵelementEnd();
3095
3044
  } if (rf & 2) {
3096
3045
  i0.ɵɵadvance(2);
3097
3046
  i0.ɵɵconditional(ctx.record ? 2 : -1);
3098
3047
  i0.ɵɵadvance();
3099
3048
  i0.ɵɵconditional(ctx.showTestHarness ? 3 : -1);
3100
- } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.ExpansionPanelComponent, i2.ExpansionPanelTitleDirective, i3.DialogContainerDirective, i3.WindowComponent, i4.TextBoxComponent, i4.NumericTextBoxComponent, i4.TextAreaComponent, i5.ItemTemplateDirective, i5.NoDataTemplateDirective, i5.DropDownListComponent, i5.DropDownTreeComponent, i6.ButtonComponent, i6.ButtonGroupComponent, i7.MjFormToolbarComponent, i7.MjFormFieldComponent, i7.ExplorerEntityDataGridComponent, i8.CodeEditorComponent, i9.AITestHarnessComponent, i10.TemplateEditorComponent, i11.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%], \n.no-template-state[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
3049
+ } }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormToolbarComponent, i3.MjFormFieldComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%], \n.no-template-state[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
3101
3050
  };
3102
3051
  MJAIPromptFormComponentExtended = __decorate([
3103
3052
  RegisterClass(BaseFormComponent, 'MJ: AI Prompts')
@@ -3105,7 +3054,7 @@ MJAIPromptFormComponentExtended = __decorate([
3105
3054
  export { MJAIPromptFormComponentExtended };
3106
3055
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptFormComponentExtended, [{
3107
3056
  type: Component,
3108
- args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Dialog container for Kendo dialogs -->\n <div kendoDialogContainer></div>\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: 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 <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: 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 <kendo-dropdownlist [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [data]=\"availablePromptTypes\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: 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 kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @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 <kendo-expansionpanel\n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: 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;\">\u2022 {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: var(--mj-text-secondary);\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters.\n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button kendoButton\n [fillMode]=\"'outline'\"\n [size]=\"'small'\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button kendoButton\n [fillMode]=\"'outline'\"\n [size]=\"'small'\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- 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 </kendo-expansionpanel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode && UserCanCreatePromptModels) {\n <div style=\"margin-top: 10px;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"primary\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: 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 <kendo-dropdownlist [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($event, i)\"\n style=\"width: 100%;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <kendo-dropdownlist [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [data]=\"getVendorsForModelSync(model.ModelID)\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <span [style.color]=\"getVendorStatusColor(model.ModelID, dataItem.ID)\">\n {{ dataItem.Name }}\n @if (getModelVendorStatus(model.ModelID, dataItem.ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, dataItem.ID) }})</span>\n }\n </span>\n </ng-template>\n </kendo-dropdownlist>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: 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 <kendo-dropdownlist [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [data]=\"availableConfigurations\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Default\"\n (valueChange)=\"onConfigurationChange($event, i)\"\n style=\"width: 100%;\">\n <ng-template kendoDropDownListNoDataTemplate>\n <div style=\"padding: 8px; text-align: center; color: var(--mj-text-muted);\">\n No configurations available\n </div>\n </ng-template>\n </kendo-dropdownlist>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- 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 kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button kendoButton fillMode=\"flat\" themeColor=\"error\" size=\"small\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- 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 <kendo-dropdownlist [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-dropdownlist>\n </div>\n <!-- 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 <kendo-numerictextbox [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [min]=\"1\"\n [step]=\"1\"\n [format]=\"'n0'\"\n placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-numerictextbox>\n </div>\n }\n <!-- 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 <kendo-textbox [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-textbox>\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @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 kendoButton fillMode=\"outline\" themeColor=\"success\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <kendo-expansionpanel\n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <kendo-dropdowntree\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [data]=\"resultSelectorTreeData\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (valueChange)=\"onResultSelectorChange($event)\">\n </kendo-dropdowntree>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n <!-- Prefill & Output Control Expansion Panel -->\n <kendo-expansionpanel\n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-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 </kendo-expansionpanel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <kendo-expansionpanel\n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Template Parameters\n <span class=\"badge\" style=\"background: var(--mj-brand-primary); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This template has no parameters defined\n </div>\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <kendo-expansionpanel\n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">\u2022 Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <kendo-buttongroup selection=\"single\">\n <button kendoButton\n [selected]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"small\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton\n [selected]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"small\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton\n [selected]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"small\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton\n [selected]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"small\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </kendo-buttongroup>\n </div>\n </div>\n <!-- 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 kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <kendo-expansionpanel\n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: 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 </kendo-expansionpanel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: 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 </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n }\n\n\n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <kendo-window\n [width]=\"1200\"\n [height]=\"800\"\n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run AI Prompt - {{ record.Name || 'Untitled' }}\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </kendo-window>\n }\n</div>", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
3057
+ args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Dialog container -->\n <div></div>\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">&bull; {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: var(--mj-text-secondary);\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters.\n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode && UserCanCreatePromptModels) {\n <div style=\"margin-top: 10px;\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-text-muted);\"></i>\n Prefill &amp; Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Template Parameters\n <span class=\"badge\" style=\"background: var(--mj-brand-primary); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This template has no parameters defined\n </div>\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">&bull; Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n }\n\n\n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n }\n</div>", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
3109
3058
  }], null, { templateEditor: [{
3110
3059
  type: ViewChild,
3111
3060
  args: ['templateEditor']