@memberjunction/ng-core-entity-forms 2.52.0 → 2.54.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 (433) hide show
  1. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +20 -0
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +188 -40
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +5 -7
  6. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  7. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +19 -1
  8. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +680 -395
  10. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  11. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +1 -0
  12. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/Actions/action-execution-log-form.component.js +212 -293
  14. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  15. package/dist/lib/custom/Actions/action-form.component.js +6 -8
  16. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  17. package/dist/lib/custom/Entities/entities-form.component.js +14 -16
  18. package/dist/lib/custom/Entities/entities-form.component.js.map +1 -1
  19. package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -12
  20. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  21. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +37 -0
  22. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -0
  23. package/dist/lib/custom/Templates/template-params-grid.component.js +537 -0
  24. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -0
  25. package/dist/lib/custom/Templates/templates-form.component.js +20 -25
  26. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  27. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +25 -0
  28. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -0
  29. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +261 -0
  30. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -0
  31. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +73 -0
  32. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -0
  33. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +510 -0
  34. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -0
  35. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +40 -0
  36. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -0
  37. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +490 -0
  38. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -0
  39. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts +31 -2
  40. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts.map +1 -1
  41. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js +167 -65
  42. package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js.map +1 -1
  43. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts +44 -2
  44. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts.map +1 -1
  45. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js +487 -247
  46. package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js.map +1 -1
  47. package/dist/lib/custom/custom-forms.module.d.ts +39 -33
  48. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  49. package/dist/lib/custom/custom-forms.module.js +36 -3
  50. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  51. package/dist/lib/generated/Entities/AIAction/aiaction.form.component.js +6 -8
  52. package/dist/lib/generated/Entities/AIAction/aiaction.form.component.js.map +1 -1
  53. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +14 -16
  54. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  55. package/dist/lib/generated/Entities/AIAgentAction/aiagentaction.form.component.js +3 -5
  56. package/dist/lib/generated/Entities/AIAgentAction/aiagentaction.form.component.js.map +1 -1
  57. package/dist/lib/generated/Entities/AIAgentLearningCycle/aiagentlearningcycle.form.component.js +3 -5
  58. package/dist/lib/generated/Entities/AIAgentLearningCycle/aiagentlearningcycle.form.component.js.map +1 -1
  59. package/dist/lib/generated/Entities/AIAgentModel/aiagentmodel.form.component.js +3 -5
  60. package/dist/lib/generated/Entities/AIAgentModel/aiagentmodel.form.component.js.map +1 -1
  61. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js +3 -5
  62. package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/AIAgentNoteType/aiagentnotetype.form.component.js +5 -7
  64. package/dist/lib/generated/Entities/AIAgentNoteType/aiagentnotetype.form.component.js.map +1 -1
  65. package/dist/lib/generated/Entities/AIAgentPrompt/aiagentprompt.form.component.js +3 -5
  66. package/dist/lib/generated/Entities/AIAgentPrompt/aiagentprompt.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/AIAgentRequest/aiagentrequest.form.component.js +3 -5
  68. package/dist/lib/generated/Entities/AIAgentRequest/aiagentrequest.form.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +7 -9
  70. package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
  71. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +3 -5
  72. package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
  73. package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.d.ts.map +1 -1
  74. package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.js +13 -4
  75. package/dist/lib/generated/Entities/AIAgentRunStep/sections/details.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js +5 -7
  77. package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +9 -11
  79. package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/AIConfigurationParam/aiconfigurationparam.form.component.js +3 -5
  81. package/dist/lib/generated/Entities/AIConfigurationParam/aiconfigurationparam.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +17 -19
  83. package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/AIModelAction/aimodelaction.form.component.js +3 -5
  85. package/dist/lib/generated/Entities/AIModelAction/aimodelaction.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js +3 -5
  87. package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js +5 -7
  89. package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js.map +1 -1
  90. package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js +5 -7
  91. package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +6 -8
  93. package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.js +3 -5
  95. package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.js.map +1 -1
  96. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +13 -15
  97. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
  98. package/dist/lib/generated/Entities/AIPromptCategory/aipromptcategory.form.component.js +6 -8
  99. package/dist/lib/generated/Entities/AIPromptCategory/aipromptcategory.form.component.js.map +1 -1
  100. package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.js +3 -5
  101. package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +6 -8
  103. package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
  104. package/dist/lib/generated/Entities/AIPromptType/aiprompttype.form.component.js +5 -7
  105. package/dist/lib/generated/Entities/AIPromptType/aiprompttype.form.component.js.map +1 -1
  106. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js +3 -5
  107. package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +10 -12
  109. package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/AIVendorType/aivendortype.form.component.js +3 -5
  111. package/dist/lib/generated/Entities/AIVendorType/aivendortype.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/AIVendorTypeDefinition/aivendortypedefinition.form.component.js +6 -8
  113. package/dist/lib/generated/Entities/AIVendorTypeDefinition/aivendortypedefinition.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/Action/action.form.component.js +24 -15
  115. package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
  116. package/dist/lib/generated/Entities/Action/sections/code.component.js +3 -4
  117. package/dist/lib/generated/Entities/Action/sections/code.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/Action/sections/details.component.d.ts.map +1 -1
  119. package/dist/lib/generated/Entities/Action/sections/details.component.js +24 -4
  120. package/dist/lib/generated/Entities/Action/sections/details.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js +3 -5
  122. package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.js +6 -8
  124. package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.js.map +1 -1
  125. package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js +3 -5
  126. package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/ActionContextType/actioncontexttype.form.component.js +5 -7
  128. package/dist/lib/generated/Entities/ActionContextType/actioncontexttype.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/ActionExecutionLog/actionexecutionlog.form.component.js +3 -5
  130. package/dist/lib/generated/Entities/ActionExecutionLog/actionexecutionlog.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/ActionFilter/actionfilter.form.component.js +5 -7
  132. package/dist/lib/generated/Entities/ActionFilter/actionfilter.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/ActionLibrary/actionlibrary.form.component.js +3 -5
  134. package/dist/lib/generated/Entities/ActionLibrary/actionlibrary.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/ActionParam/actionparam.form.component.js +6 -8
  136. package/dist/lib/generated/Entities/ActionParam/actionparam.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/ActionResultCode/actionresultcode.form.component.js +3 -5
  138. package/dist/lib/generated/Entities/ActionResultCode/actionresultcode.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/Application/application.form.component.js +9 -11
  140. package/dist/lib/generated/Entities/Application/application.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/ApplicationEntity/applicationentity.form.component.js +3 -5
  142. package/dist/lib/generated/Entities/ApplicationEntity/applicationentity.form.component.js.map +1 -1
  143. package/dist/lib/generated/Entities/ApplicationSetting/applicationsetting.form.component.js +3 -5
  144. package/dist/lib/generated/Entities/ApplicationSetting/applicationsetting.form.component.js.map +1 -1
  145. package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js +5 -7
  146. package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js.map +1 -1
  147. package/dist/lib/generated/Entities/AuditLog/auditlog.form.component.js +3 -5
  148. package/dist/lib/generated/Entities/AuditLog/auditlog.form.component.js.map +1 -1
  149. package/dist/lib/generated/Entities/AuditLogType/auditlogtype.form.component.js +6 -8
  150. package/dist/lib/generated/Entities/AuditLogType/auditlogtype.form.component.js.map +1 -1
  151. package/dist/lib/generated/Entities/Authorization/authorization.form.component.js +9 -11
  152. package/dist/lib/generated/Entities/Authorization/authorization.form.component.js.map +1 -1
  153. package/dist/lib/generated/Entities/AuthorizationRole/authorizationrole.form.component.js +3 -5
  154. package/dist/lib/generated/Entities/AuthorizationRole/authorizationrole.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/CommunicationBaseMessageType/communicationbasemessagetype.form.component.js +6 -8
  156. package/dist/lib/generated/Entities/CommunicationBaseMessageType/communicationbasemessagetype.form.component.js.map +1 -1
  157. package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js +3 -5
  158. package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/CommunicationProvider/communicationprovider.form.component.js +7 -9
  160. package/dist/lib/generated/Entities/CommunicationProvider/communicationprovider.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/CommunicationProviderMessageType/communicationprovidermessagetype.form.component.js +5 -7
  162. package/dist/lib/generated/Entities/CommunicationProviderMessageType/communicationprovidermessagetype.form.component.js.map +1 -1
  163. package/dist/lib/generated/Entities/CommunicationRun/communicationrun.form.component.js +5 -7
  164. package/dist/lib/generated/Entities/CommunicationRun/communicationrun.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/Company/company.form.component.js +7 -9
  166. package/dist/lib/generated/Entities/Company/company.form.component.js.map +1 -1
  167. package/dist/lib/generated/Entities/CompanyIntegration/companyintegration.form.component.js +8 -10
  168. package/dist/lib/generated/Entities/CompanyIntegration/companyintegration.form.component.js.map +1 -1
  169. package/dist/lib/generated/Entities/CompanyIntegrationRecordMap/companyintegrationrecordmap.form.component.js +3 -5
  170. package/dist/lib/generated/Entities/CompanyIntegrationRecordMap/companyintegrationrecordmap.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/CompanyIntegrationRun/companyintegrationrun.form.component.js +7 -9
  172. package/dist/lib/generated/Entities/CompanyIntegrationRun/companyintegrationrun.form.component.js.map +1 -1
  173. package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js +3 -5
  174. package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js.map +1 -1
  175. package/dist/lib/generated/Entities/CompanyIntegrationRunDetail/companyintegrationrundetail.form.component.js +5 -7
  176. package/dist/lib/generated/Entities/CompanyIntegrationRunDetail/companyintegrationrundetail.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js +6 -8
  178. package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js.map +1 -1
  179. package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js +6 -8
  180. package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js.map +1 -1
  181. package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js +3 -5
  182. package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js +3 -5
  184. package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js.map +1 -1
  185. package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js +3 -5
  186. package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js.map +1 -1
  187. package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js +7 -9
  188. package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js.map +1 -1
  189. package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js +3 -5
  190. package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js.map +1 -1
  191. package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js +6 -8
  192. package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js.map +1 -1
  193. package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js +3 -5
  194. package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js.map +1 -1
  195. package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js +6 -8
  196. package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js.map +1 -1
  197. package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js +3 -5
  198. package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js.map +1 -1
  199. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +8 -10
  200. package/dist/lib/generated/Entities/Conversation/conversation.form.component.js.map +1 -1
  201. package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js +7 -9
  202. package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js.map +1 -1
  203. package/dist/lib/generated/Entities/ConversationArtifactPermission/conversationartifactpermission.form.component.js +3 -5
  204. package/dist/lib/generated/Entities/ConversationArtifactPermission/conversationartifactpermission.form.component.js.map +1 -1
  205. package/dist/lib/generated/Entities/ConversationArtifactVersion/conversationartifactversion.form.component.js +5 -7
  206. package/dist/lib/generated/Entities/ConversationArtifactVersion/conversationartifactversion.form.component.js.map +1 -1
  207. package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js +5 -7
  208. package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js.map +1 -1
  209. package/dist/lib/generated/Entities/Dashboard/dashboard.form.component.js +6 -8
  210. package/dist/lib/generated/Entities/Dashboard/dashboard.form.component.js.map +1 -1
  211. package/dist/lib/generated/Entities/DashboardCategory/dashboardcategory.form.component.js +6 -8
  212. package/dist/lib/generated/Entities/DashboardCategory/dashboardcategory.form.component.js.map +1 -1
  213. package/dist/lib/generated/Entities/DashboardUserPreference/dashboarduserpreference.form.component.js +3 -5
  214. package/dist/lib/generated/Entities/DashboardUserPreference/dashboarduserpreference.form.component.js.map +1 -1
  215. package/dist/lib/generated/Entities/DashboardUserState/dashboarduserstate.form.component.js +3 -5
  216. package/dist/lib/generated/Entities/DashboardUserState/dashboarduserstate.form.component.js.map +1 -1
  217. package/dist/lib/generated/Entities/DataContext/datacontext.form.component.js +7 -9
  218. package/dist/lib/generated/Entities/DataContext/datacontext.form.component.js.map +1 -1
  219. package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.js +3 -5
  220. package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.js.map +1 -1
  221. package/dist/lib/generated/Entities/Dataset/dataset.form.component.js +5 -7
  222. package/dist/lib/generated/Entities/Dataset/dataset.form.component.js.map +1 -1
  223. package/dist/lib/generated/Entities/DatasetItem/datasetitem.form.component.js +3 -5
  224. package/dist/lib/generated/Entities/DatasetItem/datasetitem.form.component.js.map +1 -1
  225. package/dist/lib/generated/Entities/DuplicateRun/duplicaterun.form.component.js +5 -7
  226. package/dist/lib/generated/Entities/DuplicateRun/duplicaterun.form.component.js.map +1 -1
  227. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js +5 -7
  228. package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js.map +1 -1
  229. package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js +3 -5
  230. package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js.map +1 -1
  231. package/dist/lib/generated/Entities/Employee/employee.form.component.js +9 -11
  232. package/dist/lib/generated/Entities/Employee/employee.form.component.js.map +1 -1
  233. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js +3 -5
  234. package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js.map +1 -1
  235. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js +3 -5
  236. package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js.map +1 -1
  237. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js +3 -5
  238. package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js.map +1 -1
  239. package/dist/lib/generated/Entities/Entity/entity.form.component.js +41 -43
  240. package/dist/lib/generated/Entities/Entity/entity.form.component.js.map +1 -1
  241. package/dist/lib/generated/Entities/Entity/sections/ui.component.js +3 -4
  242. package/dist/lib/generated/Entities/Entity/sections/ui.component.js.map +1 -1
  243. package/dist/lib/generated/Entities/EntityAIAction/entityaiaction.form.component.js +3 -5
  244. package/dist/lib/generated/Entities/EntityAIAction/entityaiaction.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/EntityAction/entityaction.form.component.js +7 -9
  246. package/dist/lib/generated/Entities/EntityAction/entityaction.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js +3 -5
  248. package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js.map +1 -1
  249. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js +3 -5
  250. package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js.map +1 -1
  251. package/dist/lib/generated/Entities/EntityActionInvocationType/entityactioninvocationtype.form.component.js +5 -7
  252. package/dist/lib/generated/Entities/EntityActionInvocationType/entityactioninvocationtype.form.component.js.map +1 -1
  253. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js +3 -5
  254. package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js.map +1 -1
  255. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js +3 -5
  256. package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/EntityCommunicationMessageType/entitycommunicationmessagetype.form.component.js +5 -7
  258. package/dist/lib/generated/Entities/EntityCommunicationMessageType/entitycommunicationmessagetype.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/EntityDocument/entitydocument.form.component.js +7 -9
  260. package/dist/lib/generated/Entities/EntityDocument/entitydocument.form.component.js.map +1 -1
  261. package/dist/lib/generated/Entities/EntityDocumentRun/entitydocumentrun.form.component.js +3 -5
  262. package/dist/lib/generated/Entities/EntityDocumentRun/entitydocumentrun.form.component.js.map +1 -1
  263. package/dist/lib/generated/Entities/EntityDocumentSetting/entitydocumentsetting.form.component.js +3 -5
  264. package/dist/lib/generated/Entities/EntityDocumentSetting/entitydocumentsetting.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/EntityDocumentType/entitydocumenttype.form.component.js +5 -7
  266. package/dist/lib/generated/Entities/EntityDocumentType/entitydocumenttype.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/EntityField/entityfield.form.component.js +5 -7
  268. package/dist/lib/generated/Entities/EntityField/entityfield.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js +3 -5
  270. package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js.map +1 -1
  271. package/dist/lib/generated/Entities/EntityPermission/entitypermission.form.component.js +3 -5
  272. package/dist/lib/generated/Entities/EntityPermission/entitypermission.form.component.js.map +1 -1
  273. package/dist/lib/generated/Entities/EntityRecordDocument/entityrecorddocument.form.component.js +3 -5
  274. package/dist/lib/generated/Entities/EntityRecordDocument/entityrecorddocument.form.component.js.map +1 -1
  275. package/dist/lib/generated/Entities/EntityRelationship/entityrelationship.form.component.js +3 -5
  276. package/dist/lib/generated/Entities/EntityRelationship/entityrelationship.form.component.js.map +1 -1
  277. package/dist/lib/generated/Entities/EntityRelationshipDisplayComponent/entityrelationshipdisplaycomponent.form.component.js +5 -7
  278. package/dist/lib/generated/Entities/EntityRelationshipDisplayComponent/entityrelationshipdisplaycomponent.form.component.js.map +1 -1
  279. package/dist/lib/generated/Entities/EntitySetting/entitysetting.form.component.js +3 -5
  280. package/dist/lib/generated/Entities/EntitySetting/entitysetting.form.component.js.map +1 -1
  281. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js +3 -5
  282. package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js.map +1 -1
  283. package/dist/lib/generated/Entities/ExplorerNavigationItem/explorernavigationitem.form.component.js +3 -5
  284. package/dist/lib/generated/Entities/ExplorerNavigationItem/explorernavigationitem.form.component.js.map +1 -1
  285. package/dist/lib/generated/Entities/File/file.form.component.js +5 -7
  286. package/dist/lib/generated/Entities/File/file.form.component.js.map +1 -1
  287. package/dist/lib/generated/Entities/FileCategory/filecategory.form.component.js +6 -8
  288. package/dist/lib/generated/Entities/FileCategory/filecategory.form.component.js.map +1 -1
  289. package/dist/lib/generated/Entities/FileEntityRecordLink/fileentityrecordlink.form.component.js +3 -5
  290. package/dist/lib/generated/Entities/FileEntityRecordLink/fileentityrecordlink.form.component.js.map +1 -1
  291. package/dist/lib/generated/Entities/FileStorageProvider/filestorageprovider.form.component.js +5 -7
  292. package/dist/lib/generated/Entities/FileStorageProvider/filestorageprovider.form.component.js.map +1 -1
  293. package/dist/lib/generated/Entities/GeneratedCode/generatedcode.form.component.js +3 -5
  294. package/dist/lib/generated/Entities/GeneratedCode/generatedcode.form.component.js.map +1 -1
  295. package/dist/lib/generated/Entities/GeneratedCodeCategory/generatedcodecategory.form.component.js +6 -8
  296. package/dist/lib/generated/Entities/GeneratedCodeCategory/generatedcodecategory.form.component.js.map +1 -1
  297. package/dist/lib/generated/Entities/Integration/integration.form.component.js +7 -9
  298. package/dist/lib/generated/Entities/Integration/integration.form.component.js.map +1 -1
  299. package/dist/lib/generated/Entities/IntegrationURLFormat/integrationurlformat.form.component.js +3 -5
  300. package/dist/lib/generated/Entities/IntegrationURLFormat/integrationurlformat.form.component.js.map +1 -1
  301. package/dist/lib/generated/Entities/Library/library.form.component.js +6 -8
  302. package/dist/lib/generated/Entities/Library/library.form.component.js.map +1 -1
  303. package/dist/lib/generated/Entities/LibraryItem/libraryitem.form.component.js +3 -5
  304. package/dist/lib/generated/Entities/LibraryItem/libraryitem.form.component.js.map +1 -1
  305. package/dist/lib/generated/Entities/List/list.form.component.js +6 -8
  306. package/dist/lib/generated/Entities/List/list.form.component.js.map +1 -1
  307. package/dist/lib/generated/Entities/ListCategory/listcategory.form.component.js +6 -8
  308. package/dist/lib/generated/Entities/ListCategory/listcategory.form.component.js.map +1 -1
  309. package/dist/lib/generated/Entities/ListDetail/listdetail.form.component.js +3 -5
  310. package/dist/lib/generated/Entities/ListDetail/listdetail.form.component.js.map +1 -1
  311. package/dist/lib/generated/Entities/OutputDeliveryType/outputdeliverytype.form.component.js +5 -7
  312. package/dist/lib/generated/Entities/OutputDeliveryType/outputdeliverytype.form.component.js.map +1 -1
  313. package/dist/lib/generated/Entities/OutputFormatType/outputformattype.form.component.js +5 -7
  314. package/dist/lib/generated/Entities/OutputFormatType/outputformattype.form.component.js.map +1 -1
  315. package/dist/lib/generated/Entities/OutputTriggerType/outputtriggertype.form.component.js +5 -7
  316. package/dist/lib/generated/Entities/OutputTriggerType/outputtriggertype.form.component.js.map +1 -1
  317. package/dist/lib/generated/Entities/Query/query.form.component.js +8 -10
  318. package/dist/lib/generated/Entities/Query/query.form.component.js.map +1 -1
  319. package/dist/lib/generated/Entities/QueryCategory/querycategory.form.component.js +6 -8
  320. package/dist/lib/generated/Entities/QueryCategory/querycategory.form.component.js.map +1 -1
  321. package/dist/lib/generated/Entities/QueryEntity/queryentity.form.component.js +3 -5
  322. package/dist/lib/generated/Entities/QueryEntity/queryentity.form.component.js.map +1 -1
  323. package/dist/lib/generated/Entities/QueryField/queryfield.form.component.js +3 -5
  324. package/dist/lib/generated/Entities/QueryField/queryfield.form.component.js.map +1 -1
  325. package/dist/lib/generated/Entities/QueryPermission/querypermission.form.component.js +3 -5
  326. package/dist/lib/generated/Entities/QueryPermission/querypermission.form.component.js.map +1 -1
  327. package/dist/lib/generated/Entities/Queue/queue.form.component.js +5 -7
  328. package/dist/lib/generated/Entities/Queue/queue.form.component.js.map +1 -1
  329. package/dist/lib/generated/Entities/QueueTask/queuetask.form.component.js +3 -5
  330. package/dist/lib/generated/Entities/QueueTask/queuetask.form.component.js.map +1 -1
  331. package/dist/lib/generated/Entities/QueueType/queuetype.form.component.js +5 -7
  332. package/dist/lib/generated/Entities/QueueType/queuetype.form.component.js.map +1 -1
  333. package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js +5 -7
  334. package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js.map +1 -1
  335. package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js +3 -5
  336. package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js.map +1 -1
  337. package/dist/lib/generated/Entities/RecommendationProvider/recommendationprovider.form.component.js +5 -7
  338. package/dist/lib/generated/Entities/RecommendationProvider/recommendationprovider.form.component.js.map +1 -1
  339. package/dist/lib/generated/Entities/RecommendationRun/recommendationrun.form.component.js +5 -7
  340. package/dist/lib/generated/Entities/RecommendationRun/recommendationrun.form.component.js.map +1 -1
  341. package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js +3 -5
  342. package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js.map +1 -1
  343. package/dist/lib/generated/Entities/RecordChangeReplayRun/recordchangereplayrun.form.component.js +5 -7
  344. package/dist/lib/generated/Entities/RecordChangeReplayRun/recordchangereplayrun.form.component.js.map +1 -1
  345. package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js +3 -5
  346. package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js.map +1 -1
  347. package/dist/lib/generated/Entities/RecordMergeLog/recordmergelog.form.component.js +6 -8
  348. package/dist/lib/generated/Entities/RecordMergeLog/recordmergelog.form.component.js.map +1 -1
  349. package/dist/lib/generated/Entities/Report/report.form.component.js +7 -9
  350. package/dist/lib/generated/Entities/Report/report.form.component.js.map +1 -1
  351. package/dist/lib/generated/Entities/ReportCategory/reportcategory.form.component.js +6 -8
  352. package/dist/lib/generated/Entities/ReportCategory/reportcategory.form.component.js.map +1 -1
  353. package/dist/lib/generated/Entities/ReportSnapshot/reportsnapshot.form.component.js +3 -5
  354. package/dist/lib/generated/Entities/ReportSnapshot/reportsnapshot.form.component.js.map +1 -1
  355. package/dist/lib/generated/Entities/ReportUserState/reportuserstate.form.component.js +3 -5
  356. package/dist/lib/generated/Entities/ReportUserState/reportuserstate.form.component.js.map +1 -1
  357. package/dist/lib/generated/Entities/ReportVersion/reportversion.form.component.js +3 -5
  358. package/dist/lib/generated/Entities/ReportVersion/reportversion.form.component.js.map +1 -1
  359. package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js +3 -5
  360. package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js.map +1 -1
  361. package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js +3 -5
  362. package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js.map +1 -1
  363. package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js +8 -10
  364. package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js.map +1 -1
  365. package/dist/lib/generated/Entities/Role/role.form.component.js +10 -12
  366. package/dist/lib/generated/Entities/Role/role.form.component.js.map +1 -1
  367. package/dist/lib/generated/Entities/RowLevelSecurityFilter/rowlevelsecurityfilter.form.component.js +5 -7
  368. package/dist/lib/generated/Entities/RowLevelSecurityFilter/rowlevelsecurityfilter.form.component.js.map +1 -1
  369. package/dist/lib/generated/Entities/ScheduledAction/scheduledaction.form.component.js +5 -7
  370. package/dist/lib/generated/Entities/ScheduledAction/scheduledaction.form.component.js.map +1 -1
  371. package/dist/lib/generated/Entities/ScheduledActionParam/scheduledactionparam.form.component.js +3 -5
  372. package/dist/lib/generated/Entities/ScheduledActionParam/scheduledactionparam.form.component.js.map +1 -1
  373. package/dist/lib/generated/Entities/SchemaInfo/schemainfo.form.component.js +3 -5
  374. package/dist/lib/generated/Entities/SchemaInfo/schemainfo.form.component.js.map +1 -1
  375. package/dist/lib/generated/Entities/Skill/skill.form.component.js +6 -8
  376. package/dist/lib/generated/Entities/Skill/skill.form.component.js.map +1 -1
  377. package/dist/lib/generated/Entities/Tag/tag.form.component.js +6 -8
  378. package/dist/lib/generated/Entities/Tag/tag.form.component.js.map +1 -1
  379. package/dist/lib/generated/Entities/TaggedItem/taggeditem.form.component.js +3 -5
  380. package/dist/lib/generated/Entities/TaggedItem/taggeditem.form.component.js.map +1 -1
  381. package/dist/lib/generated/Entities/Template/template.form.component.js +8 -10
  382. package/dist/lib/generated/Entities/Template/template.form.component.js.map +1 -1
  383. package/dist/lib/generated/Entities/TemplateCategory/templatecategory.form.component.js +6 -8
  384. package/dist/lib/generated/Entities/TemplateCategory/templatecategory.form.component.js.map +1 -1
  385. package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.d.ts.map +1 -1
  386. package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js +19 -10
  387. package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js.map +1 -1
  388. package/dist/lib/generated/Entities/TemplateContentType/templatecontenttype.form.component.js +5 -7
  389. package/dist/lib/generated/Entities/TemplateContentType/templatecontenttype.form.component.js.map +1 -1
  390. package/dist/lib/generated/Entities/TemplateParam/sections/details.component.d.ts.map +1 -1
  391. package/dist/lib/generated/Entities/TemplateParam/sections/details.component.js +15 -4
  392. package/dist/lib/generated/Entities/TemplateParam/sections/details.component.js.map +1 -1
  393. package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js +3 -5
  394. package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js.map +1 -1
  395. package/dist/lib/generated/Entities/User/user.form.component.js +46 -48
  396. package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
  397. package/dist/lib/generated/Entities/UserApplication/userapplication.form.component.js +5 -7
  398. package/dist/lib/generated/Entities/UserApplication/userapplication.form.component.js.map +1 -1
  399. package/dist/lib/generated/Entities/UserApplicationEntity/userapplicationentity.form.component.js +3 -5
  400. package/dist/lib/generated/Entities/UserApplicationEntity/userapplicationentity.form.component.js.map +1 -1
  401. package/dist/lib/generated/Entities/UserFavorite/userfavorite.form.component.js +3 -5
  402. package/dist/lib/generated/Entities/UserFavorite/userfavorite.form.component.js.map +1 -1
  403. package/dist/lib/generated/Entities/UserNotification/usernotification.form.component.js +3 -5
  404. package/dist/lib/generated/Entities/UserNotification/usernotification.form.component.js.map +1 -1
  405. package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.js +3 -5
  406. package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.js.map +1 -1
  407. package/dist/lib/generated/Entities/UserRole/userrole.form.component.js +3 -5
  408. package/dist/lib/generated/Entities/UserRole/userrole.form.component.js.map +1 -1
  409. package/dist/lib/generated/Entities/UserView/userview.form.component.js +7 -9
  410. package/dist/lib/generated/Entities/UserView/userview.form.component.js.map +1 -1
  411. package/dist/lib/generated/Entities/UserViewCategory/userviewcategory.form.component.js +6 -8
  412. package/dist/lib/generated/Entities/UserViewCategory/userviewcategory.form.component.js.map +1 -1
  413. package/dist/lib/generated/Entities/UserViewRun/userviewrun.form.component.js +5 -7
  414. package/dist/lib/generated/Entities/UserViewRun/userviewrun.form.component.js.map +1 -1
  415. package/dist/lib/generated/Entities/UserViewRunDetail/userviewrundetail.form.component.js +3 -5
  416. package/dist/lib/generated/Entities/UserViewRunDetail/userviewrundetail.form.component.js.map +1 -1
  417. package/dist/lib/generated/Entities/VectorDatabase/vectordatabase.form.component.js +6 -8
  418. package/dist/lib/generated/Entities/VectorDatabase/vectordatabase.form.component.js.map +1 -1
  419. package/dist/lib/generated/Entities/VectorIndex/vectorindex.form.component.js +5 -7
  420. package/dist/lib/generated/Entities/VectorIndex/vectorindex.form.component.js.map +1 -1
  421. package/dist/lib/generated/Entities/VersionInstallation/versioninstallation.form.component.js +3 -5
  422. package/dist/lib/generated/Entities/VersionInstallation/versioninstallation.form.component.js.map +1 -1
  423. package/dist/lib/generated/Entities/Workflow/workflow.form.component.js +6 -8
  424. package/dist/lib/generated/Entities/Workflow/workflow.form.component.js.map +1 -1
  425. package/dist/lib/generated/Entities/WorkflowEngine/workflowengine.form.component.js +5 -7
  426. package/dist/lib/generated/Entities/WorkflowEngine/workflowengine.form.component.js.map +1 -1
  427. package/dist/lib/generated/Entities/WorkflowRun/workflowrun.form.component.js +3 -5
  428. package/dist/lib/generated/Entities/WorkflowRun/workflowrun.form.component.js.map +1 -1
  429. package/dist/lib/generated/Entities/Workspace/workspace.form.component.js +5 -7
  430. package/dist/lib/generated/Entities/Workspace/workspace.form.component.js.map +1 -1
  431. package/dist/lib/generated/Entities/WorkspaceItem/workspaceitem.form.component.js +3 -5
  432. package/dist/lib/generated/Entities/WorkspaceItem/workspaceitem.form.component.js.map +1 -1
  433. package/package.json +12 -12
@@ -25,13 +25,12 @@ import * as i9 from "@progress/kendo-angular-buttons";
25
25
  import * as i10 from "@memberjunction/ng-user-view-grid";
26
26
  import * as i11 from "@memberjunction/ng-base-forms";
27
27
  import * as i12 from "@memberjunction/ng-form-toolbar";
28
- import * as i13 from "@memberjunction/ng-container-directives";
29
- import * as i14 from "@memberjunction/ng-code-editor";
30
- import * as i15 from "../../shared/components/template-editor.component";
31
- import * as i16 from "../ai-test-harness/ai-test-harness.component";
28
+ import * as i13 from "@memberjunction/ng-code-editor";
29
+ import * as i14 from "../../shared/components/template-editor.component";
30
+ import * as i15 from "../ai-test-harness/ai-test-harness.component";
32
31
  const _c0 = ["templateEditor"];
33
- const _forTrack0 = ($index, $item) => $item.ID || $index;
34
- const _forTrack1 = ($index, $item) => $item.ID;
32
+ const _forTrack0 = ($index, $item) => $item.ID;
33
+ const _forTrack1 = ($index, $item) => $item.ID || $index;
35
34
  const _c1 = () => ({ text: "Active", value: "Active" });
36
35
  const _c2 = () => ({ text: "Pending", value: "Pending" });
37
36
  const _c3 = () => ({ text: "Disabled", value: "Disabled" });
@@ -266,8 +265,209 @@ function AIPromptFormComponentExtended_form_1_Conditional_40_Template(rf, ctx) {
266
265
  i0.ɵɵadvance(2);
267
266
  i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
268
267
  } }
269
- function AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
270
- i0.ɵɵelementStart(0, "span", 81);
268
+ function AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
269
+ i0.ɵɵelementStart(0, "span", 62);
270
+ i0.ɵɵelement(1, "i", 80);
271
+ i0.ɵɵtext(2, " Template Parameters ");
272
+ i0.ɵɵelementStart(3, "span", 81);
273
+ i0.ɵɵtext(4);
274
+ i0.ɵɵelementEnd();
275
+ i0.ɵɵelementStart(5, "span", 82);
276
+ i0.ɵɵelement(6, "i", 83);
277
+ i0.ɵɵtext(7, " Parameters defined in the template ");
278
+ i0.ɵɵelementEnd()();
279
+ } if (rf & 2) {
280
+ const ctx_r1 = i0.ɵɵnextContext(3);
281
+ i0.ɵɵadvance(4);
282
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.templateParams.length, " ");
283
+ } }
284
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_3_Template(rf, ctx) { if (rf & 1) {
285
+ i0.ɵɵelementStart(0, "div", 78);
286
+ i0.ɵɵelement(1, "i", 54);
287
+ i0.ɵɵtext(2, " Loading template parameters... ");
288
+ i0.ɵɵelementEnd();
289
+ } }
290
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_4_Template(rf, ctx) { if (rf & 1) {
291
+ i0.ɵɵelementStart(0, "div", 79);
292
+ i0.ɵɵelement(1, "i", 84);
293
+ i0.ɵɵtext(2, " This template has no parameters defined ");
294
+ i0.ɵɵelementEnd();
295
+ } }
296
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
297
+ i0.ɵɵelementStart(0, "span", 96);
298
+ i0.ɵɵtext(1, "*");
299
+ i0.ɵɵelementEnd();
300
+ } }
301
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵelementStart(0, "span", 98);
303
+ i0.ɵɵtext(1, "Required");
304
+ i0.ɵɵelementEnd();
305
+ } }
306
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
307
+ i0.ɵɵelementStart(0, "span", 99);
308
+ i0.ɵɵtext(1, "Optional");
309
+ i0.ɵɵelementEnd();
310
+ } }
311
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
312
+ i0.ɵɵelementStart(0, "p", 100);
313
+ i0.ɵɵtext(1);
314
+ i0.ɵɵelementEnd();
315
+ } if (rf & 2) {
316
+ const param_r10 = i0.ɵɵnextContext().$implicit;
317
+ i0.ɵɵadvance();
318
+ i0.ɵɵtextInterpolate1(" ", param_r10.Description, " ");
319
+ } }
320
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
321
+ i0.ɵɵelementStart(0, "div", 105)(1, "label", 106);
322
+ i0.ɵɵtext(2, "Default Value");
323
+ i0.ɵɵelementEnd();
324
+ i0.ɵɵelementStart(3, "code", 107);
325
+ i0.ɵɵtext(4);
326
+ i0.ɵɵelementEnd()();
327
+ } if (rf & 2) {
328
+ const param_r10 = i0.ɵɵnextContext().$implicit;
329
+ i0.ɵɵadvance(4);
330
+ i0.ɵɵtextInterpolate(param_r10.DefaultValue);
331
+ } }
332
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
333
+ i0.ɵɵelementStart(0, "div", 105)(1, "label", 106);
334
+ i0.ɵɵtext(2, "Entity");
335
+ i0.ɵɵelementEnd();
336
+ i0.ɵɵelementStart(3, "span", 101);
337
+ i0.ɵɵtext(4);
338
+ i0.ɵɵelementEnd()();
339
+ } if (rf & 2) {
340
+ const param_r10 = i0.ɵɵnextContext().$implicit;
341
+ i0.ɵɵadvance(4);
342
+ i0.ɵɵtextInterpolate(param_r10.Entity || "Entity ID: " + param_r10.EntityID);
343
+ } }
344
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
345
+ i0.ɵɵtext(0);
346
+ } if (rf & 2) {
347
+ const param_r10 = i0.ɵɵnextContext(2).$implicit;
348
+ i0.ɵɵtextInterpolate1(" (", param_r10.LinkedParameterField, ") ");
349
+ } }
350
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
351
+ i0.ɵɵelementStart(0, "div", 105)(1, "label", 106);
352
+ i0.ɵɵtext(2, "Linked To");
353
+ i0.ɵɵelementEnd();
354
+ i0.ɵɵelementStart(3, "span", 101);
355
+ i0.ɵɵtext(4);
356
+ i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
357
+ i0.ɵɵelementEnd()();
358
+ } if (rf & 2) {
359
+ const param_r10 = i0.ɵɵnextContext().$implicit;
360
+ i0.ɵɵadvance(4);
361
+ i0.ɵɵtextInterpolate1(" ", param_r10.LinkedParameterName, " ");
362
+ i0.ɵɵadvance();
363
+ i0.ɵɵconditional(param_r10.LinkedParameterField ? 5 : -1);
364
+ } }
365
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
366
+ i0.ɵɵelementStart(0, "div", 105)(1, "label", 106);
367
+ i0.ɵɵtext(2, "Filter");
368
+ i0.ɵɵelementEnd();
369
+ i0.ɵɵelementStart(3, "code", 108);
370
+ i0.ɵɵtext(4);
371
+ i0.ɵɵelementEnd()();
372
+ } if (rf & 2) {
373
+ const param_r10 = i0.ɵɵnextContext().$implicit;
374
+ i0.ɵɵadvance(4);
375
+ i0.ɵɵtextInterpolate(param_r10.ExtraFilter);
376
+ } }
377
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
378
+ i0.ɵɵelementStart(0, "div", 105)(1, "label", 106);
379
+ i0.ɵɵtext(2, "Record ID");
380
+ i0.ɵɵelementEnd();
381
+ i0.ɵɵelementStart(3, "code", 101);
382
+ i0.ɵɵtext(4);
383
+ i0.ɵɵelementEnd()();
384
+ } if (rf & 2) {
385
+ const param_r10 = i0.ɵɵnextContext().$implicit;
386
+ i0.ɵɵadvance(4);
387
+ i0.ɵɵtextInterpolate(param_r10.RecordID);
388
+ } }
389
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
390
+ i0.ɵɵelementStart(0, "div", 91)(1, "div", 92)(2, "div", 93);
391
+ i0.ɵɵelement(3, "i", 94);
392
+ i0.ɵɵelementStart(4, "h6", 95);
393
+ i0.ɵɵtext(5);
394
+ i0.ɵɵtemplate(6, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 96);
395
+ i0.ɵɵelementEnd()();
396
+ i0.ɵɵelementStart(7, "div", 93)(8, "span", 97);
397
+ i0.ɵɵtext(9);
398
+ i0.ɵɵelementEnd();
399
+ i0.ɵɵtemplate(10, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 98)(11, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 99);
400
+ i0.ɵɵelementEnd()();
401
+ i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 100);
402
+ i0.ɵɵelementStart(13, "div", 101)(14, "span", 102);
403
+ i0.ɵɵelement(15, "i", 103);
404
+ i0.ɵɵtext(16);
405
+ i0.ɵɵelementEnd()();
406
+ i0.ɵɵelementStart(17, "div", 104);
407
+ i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 105)(19, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 105)(20, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 105)(21, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 105)(22, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 105);
408
+ i0.ɵɵelementEnd()();
409
+ } if (rf & 2) {
410
+ const param_r10 = ctx.$implicit;
411
+ const ctx_r1 = i0.ɵɵnextContext(4);
412
+ i0.ɵɵstyleProp("border-left", "4px solid " + ctx_r1.getParamTypeColor(param_r10.Type));
413
+ i0.ɵɵadvance(3);
414
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getParamTypeIcon(param_r10.Type));
415
+ i0.ɵɵstyleProp("color", ctx_r1.getParamTypeColor(param_r10.Type));
416
+ i0.ɵɵadvance(2);
417
+ i0.ɵɵtextInterpolate1(" ", param_r10.Name, " ");
418
+ i0.ɵɵadvance();
419
+ i0.ɵɵconditional(param_r10.IsRequired ? 6 : -1);
420
+ i0.ɵɵadvance(2);
421
+ i0.ɵɵstyleProp("background-color", ctx_r1.getParamTypeColor(param_r10.Type));
422
+ i0.ɵɵadvance();
423
+ i0.ɵɵtextInterpolate1(" ", param_r10.Type, " ");
424
+ i0.ɵɵadvance();
425
+ i0.ɵɵconditional(param_r10.IsRequired ? 10 : 11);
426
+ i0.ɵɵadvance(2);
427
+ i0.ɵɵconditional(param_r10.Description ? 12 : -1);
428
+ i0.ɵɵadvance(4);
429
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamTypeDescription(param_r10), " ");
430
+ i0.ɵɵadvance(2);
431
+ i0.ɵɵconditional(param_r10.DefaultValue ? 18 : -1);
432
+ i0.ɵɵadvance();
433
+ i0.ɵɵconditional(param_r10.EntityID ? 19 : -1);
434
+ i0.ɵɵadvance();
435
+ i0.ɵɵconditional(param_r10.LinkedParameterName ? 20 : -1);
436
+ i0.ɵɵadvance();
437
+ i0.ɵɵconditional(param_r10.ExtraFilter ? 21 : -1);
438
+ i0.ɵɵadvance();
439
+ i0.ɵɵconditional(param_r10.RecordID ? 22 : -1);
440
+ } }
441
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
442
+ i0.ɵɵelementStart(0, "div", 85);
443
+ i0.ɵɵrepeaterCreate(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_For_2_Template, 23, 19, "div", 86, _forTrack0);
444
+ i0.ɵɵelementEnd();
445
+ i0.ɵɵelementStart(3, "div", 87)(4, "div", 88);
446
+ i0.ɵɵelement(5, "i", 89);
447
+ i0.ɵɵelementStart(6, "div", 90)(7, "strong");
448
+ i0.ɵɵtext(8, "Using Template Parameters:");
449
+ i0.ɵɵelementEnd();
450
+ i0.ɵɵtext(9, " When executing this prompt, you'll be prompted to provide values for all required parameters. Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections). The template will use these parameters to generate dynamic content based on the values provided at execution time. ");
451
+ i0.ɵɵelementEnd()()();
452
+ } if (rf & 2) {
453
+ const ctx_r1 = i0.ɵɵnextContext(3);
454
+ i0.ɵɵadvance();
455
+ i0.ɵɵrepeater(ctx_r1.templateParams);
456
+ } }
457
+ function AIPromptFormComponentExtended_form_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
458
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
459
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Template, 8, 1, "ng-template", 30);
460
+ i0.ɵɵelementStart(2, "div", 36);
461
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_3_Template, 3, 0, "div", 78)(4, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_4_Template, 3, 0, "div", 79)(5, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Template, 10, 0);
462
+ i0.ɵɵelementEnd()();
463
+ } if (rf & 2) {
464
+ const ctx_r1 = i0.ɵɵnextContext(2);
465
+ i0.ɵɵproperty("expanded", true);
466
+ i0.ɵɵadvance(3);
467
+ i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
468
+ } }
469
+ function AIPromptFormComponentExtended_form_1_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
470
+ i0.ɵɵelementStart(0, "span", 111);
271
471
  i0.ɵɵtext(1);
272
472
  i0.ɵɵelementEnd();
273
473
  } if (rf & 2) {
@@ -275,13 +475,13 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Condi
275
475
  i0.ɵɵadvance();
276
476
  i0.ɵɵtextInterpolate1(" ", ctx_r1.promptModels.length, " ");
277
477
  } }
278
- function AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
478
+ function AIPromptFormComponentExtended_form_1_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
279
479
  i0.ɵɵelementStart(0, "span", 62);
280
- i0.ɵɵelement(1, "i", 80);
480
+ i0.ɵɵelement(1, "i", 110);
281
481
  i0.ɵɵtext(2, " Models ");
282
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span", 81);
482
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 111);
283
483
  i0.ɵɵelementStart(4, "span", 82);
284
- i0.ɵɵelement(5, "i", 83);
484
+ i0.ɵɵelement(5, "i", 112);
285
485
  i0.ɵɵtext(6, " Priority order (first available model will be used) ");
286
486
  i0.ɵɵelementEnd()();
287
487
  } if (rf & 2) {
@@ -289,412 +489,412 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Templ
289
489
  i0.ɵɵadvance(3);
290
490
  i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
291
491
  } }
292
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_4_Template(rf, ctx) { if (rf & 1) {
293
- i0.ɵɵelementStart(0, "div", 79);
492
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
493
+ i0.ɵɵelementStart(0, "div", 78);
294
494
  i0.ɵɵelement(1, "i", 54);
295
495
  i0.ɵɵtext(2, " Loading models... ");
296
496
  i0.ɵɵelementEnd();
297
497
  } }
298
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
299
- const _r10 = i0.ɵɵgetCurrentView();
300
- i0.ɵɵelementStart(0, "div", 86)(1, "button", 87);
301
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
498
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
499
+ const _r11 = i0.ɵɵgetCurrentView();
500
+ i0.ɵɵelementStart(0, "div", 113)(1, "button", 114);
501
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
302
502
  i0.ɵɵelement(2, "i", 70);
303
503
  i0.ɵɵtext(3, " Add Model ");
304
504
  i0.ɵɵelementEnd()();
305
505
  } }
306
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
307
- i0.ɵɵelementStart(0, "div", 84);
308
- i0.ɵɵelement(1, "i", 85);
506
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
507
+ i0.ɵɵelementStart(0, "div", 79);
508
+ i0.ɵɵelement(1, "i", 84);
309
509
  i0.ɵɵtext(2, " No models configured ");
310
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 86);
510
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 113);
311
511
  i0.ɵɵelementEnd();
312
512
  } if (rf & 2) {
313
513
  const ctx_r1 = i0.ɵɵnextContext(4);
314
514
  i0.ɵɵadvance(3);
315
515
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : -1);
316
516
  } }
317
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
318
- i0.ɵɵelementStart(0, "div", 88);
319
- i0.ɵɵelement(1, "i", 93);
517
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
518
+ i0.ɵɵelementStart(0, "div", 115);
519
+ i0.ɵɵelement(1, "i", 120);
320
520
  i0.ɵɵtext(2, " Models are tried in priority order (1, 2, 3...). The first available model that meets requirements will be used for execution. ");
321
521
  i0.ɵɵelementEnd();
322
522
  } }
323
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
324
- i0.ɵɵelement(0, "i", 107);
325
- i0.ɵɵelementStart(1, "span", 108);
523
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
524
+ i0.ɵɵelement(0, "i", 134);
525
+ i0.ɵɵelementStart(1, "span", 135);
326
526
  i0.ɵɵtext(2);
327
527
  i0.ɵɵelementEnd();
328
528
  } if (rf & 2) {
329
- const ɵ$index_279_r12 = i0.ɵɵnextContext().$index;
529
+ const ɵ$index_415_r13 = i0.ɵɵnextContext().$index;
330
530
  i0.ɵɵadvance(2);
331
- i0.ɵɵtextInterpolate1("#", ɵ$index_279_r12 + 1, "");
531
+ i0.ɵɵtextInterpolate1("#", ɵ$index_415_r13 + 1, "");
332
532
  } }
333
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_3_Template(rf, ctx) { if (rf & 1) {
334
- i0.ɵɵelementStart(0, "span", 96);
533
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_3_Template(rf, ctx) { if (rf & 1) {
534
+ i0.ɵɵelementStart(0, "span", 123);
335
535
  i0.ɵɵtext(1);
336
536
  i0.ɵɵelementEnd();
337
537
  } if (rf & 2) {
338
- const ɵ$index_279_r12 = i0.ɵɵnextContext().$index;
339
- i0.ɵɵpropertyInterpolate1("title", "Priority ", ɵ$index_279_r12 + 1, " - Lower numbers are tried first");
538
+ const ɵ$index_415_r13 = i0.ɵɵnextContext().$index;
539
+ i0.ɵɵpropertyInterpolate1("title", "Priority ", ɵ$index_415_r13 + 1, " - Lower numbers are tried first");
340
540
  i0.ɵɵadvance();
341
- i0.ɵɵtextInterpolate1("#", ɵ$index_279_r12 + 1, "");
541
+ i0.ɵɵtextInterpolate1("#", ɵ$index_415_r13 + 1, "");
342
542
  } }
343
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
344
- const _r13 = i0.ɵɵgetCurrentView();
345
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 109);
346
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const model_r14 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r14.ModelID, $event) || (model_r14.ModelID = $event); return i0.ɵɵresetView($event); });
347
- i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ɵ$index_279_r12 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_279_r12)); });
543
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
544
+ const _r14 = i0.ɵɵgetCurrentView();
545
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 136);
546
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const model_r15 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ModelID, $event) || (model_r15.ModelID = $event); return i0.ɵɵresetView($event); });
547
+ i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ɵ$index_415_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_415_r13)); });
348
548
  i0.ɵɵelementEnd();
349
549
  } if (rf & 2) {
350
- const ctx_r14 = i0.ɵɵnextContext();
351
- const model_r14 = ctx_r14.$implicit;
352
- const ɵ$index_279_r12 = ctx_r14.$index;
550
+ const ctx_r15 = i0.ɵɵnextContext();
551
+ const model_r15 = ctx_r15.$implicit;
552
+ const ɵ$index_415_r13 = ctx_r15.$index;
353
553
  const ctx_r1 = i0.ɵɵnextContext(5);
354
- i0.ɵɵtwoWayProperty("ngModel", model_r14.ModelID);
355
- i0.ɵɵproperty("name", "modelId_" + ɵ$index_279_r12)("data", ctx_r1.availableModels)("valuePrimitive", true)("filterable", true);
554
+ i0.ɵɵtwoWayProperty("ngModel", model_r15.ModelID);
555
+ i0.ɵɵproperty("name", "modelId_" + ɵ$index_415_r13)("data", ctx_r1.availableModels)("valuePrimitive", true)("filterable", true);
356
556
  } }
357
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
557
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
358
558
  i0.ɵɵelementStart(0, "span", 23);
359
559
  i0.ɵɵtext(1);
360
560
  i0.ɵɵelementEnd();
361
561
  } if (rf & 2) {
362
- const model_r14 = i0.ɵɵnextContext().$implicit;
562
+ const model_r15 = i0.ɵɵnextContext().$implicit;
363
563
  const ctx_r1 = i0.ɵɵnextContext(5);
364
564
  i0.ɵɵadvance();
365
- i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r14.ModelID));
565
+ i0.ɵɵtextInterpolate(ctx_r1.getModelDisplayName(model_r15.ModelID));
366
566
  } }
367
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
368
- i0.ɵɵelementStart(0, "span", 114);
567
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
568
+ i0.ɵɵelementStart(0, "span", 141);
369
569
  i0.ɵɵtext(1);
370
570
  i0.ɵɵelementEnd();
371
571
  } if (rf & 2) {
372
- const dataItem_r17 = i0.ɵɵnextContext().$implicit;
373
- const model_r14 = i0.ɵɵnextContext(4).$implicit;
572
+ const dataItem_r18 = i0.ɵɵnextContext().$implicit;
573
+ const model_r15 = i0.ɵɵnextContext(4).$implicit;
374
574
  const ctx_r1 = i0.ɵɵnextContext(5);
375
575
  i0.ɵɵadvance();
376
- i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r14.ModelID, dataItem_r17.ID), ")");
576
+ i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r15.ModelID, dataItem_r18.ID), ")");
377
577
  } }
378
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
578
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {
379
579
  i0.ɵɵelementStart(0, "span");
380
580
  i0.ɵɵtext(1);
381
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template, 2, 1, "span", 114);
581
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Conditional_2_Template, 2, 1, "span", 141);
382
582
  i0.ɵɵelementEnd();
383
583
  } if (rf & 2) {
384
- const dataItem_r17 = ctx.$implicit;
385
- const model_r14 = i0.ɵɵnextContext(4).$implicit;
584
+ const dataItem_r18 = ctx.$implicit;
585
+ const model_r15 = i0.ɵɵnextContext(4).$implicit;
386
586
  const ctx_r1 = i0.ɵɵnextContext(5);
387
- i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r14.ModelID, dataItem_r17.ID));
587
+ i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r15.ModelID, dataItem_r18.ID));
388
588
  i0.ɵɵadvance();
389
- i0.ɵɵtextInterpolate1(" ", dataItem_r17.Name, " ");
589
+ i0.ɵɵtextInterpolate1(" ", dataItem_r18.Name, " ");
390
590
  i0.ɵɵadvance();
391
- i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r14.ModelID, dataItem_r17.ID) !== "Active" ? 2 : -1);
591
+ i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r15.ModelID, dataItem_r18.ID) !== "Active" ? 2 : -1);
392
592
  } }
393
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
394
- const _r16 = i0.ɵɵgetCurrentView();
395
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 112);
396
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const model_r14 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r14.VendorID, $event) || (model_r14.VendorID = $event); return i0.ɵɵresetView($event); });
397
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template, 3, 4, "ng-template", 113);
593
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
594
+ const _r17 = i0.ɵɵgetCurrentView();
595
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 139);
596
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r17); const model_r15 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.VendorID, $event) || (model_r15.VendorID = $event); return i0.ɵɵresetView($event); });
597
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_ng_template_1_Template, 3, 4, "ng-template", 140);
398
598
  i0.ɵɵelementEnd();
399
599
  } if (rf & 2) {
400
- const ctx_r14 = i0.ɵɵnextContext(3);
401
- const model_r14 = ctx_r14.$implicit;
402
- const ɵ$index_279_r12 = ctx_r14.$index;
600
+ const ctx_r15 = i0.ɵɵnextContext(3);
601
+ const model_r15 = ctx_r15.$implicit;
602
+ const ɵ$index_415_r13 = ctx_r15.$index;
403
603
  const ctx_r1 = i0.ɵɵnextContext(5);
404
- i0.ɵɵtwoWayProperty("ngModel", model_r14.VendorID);
405
- i0.ɵɵproperty("name", "vendorId_" + ɵ$index_279_r12)("data", ctx_r1.getVendorsForModelSync(model_r14.ModelID))("valuePrimitive", true)("filterable", true);
604
+ i0.ɵɵtwoWayProperty("ngModel", model_r15.VendorID);
605
+ i0.ɵɵproperty("name", "vendorId_" + ɵ$index_415_r13)("data", ctx_r1.getVendorsForModelSync(model_r15.ModelID))("valuePrimitive", true)("filterable", true);
406
606
  } }
407
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
408
- i0.ɵɵelementStart(0, "span", 114);
607
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
608
+ i0.ɵɵelementStart(0, "span", 141);
409
609
  i0.ɵɵtext(1);
410
610
  i0.ɵɵelementEnd();
411
611
  } if (rf & 2) {
412
- const model_r14 = i0.ɵɵnextContext(5).$implicit;
612
+ const model_r15 = i0.ɵɵnextContext(5).$implicit;
413
613
  const ctx_r1 = i0.ɵɵnextContext(5);
414
614
  i0.ɵɵadvance();
415
- i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r14.ModelID, ctx_r1.getVendorsForModelSync(model_r14.ModelID)[0].ID), ")");
615
+ i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r15.ModelID, ctx_r1.getVendorsForModelSync(model_r15.ModelID)[0].ID), ")");
416
616
  } }
417
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
418
- i0.ɵɵelementStart(0, "span", 116);
617
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
618
+ i0.ɵɵelementStart(0, "span", 143);
419
619
  i0.ɵɵtext(1);
420
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 114);
620
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 141);
421
621
  i0.ɵɵelementEnd();
422
622
  } if (rf & 2) {
423
- const model_r14 = i0.ɵɵnextContext(4).$implicit;
623
+ const model_r15 = i0.ɵɵnextContext(4).$implicit;
424
624
  const ctx_r1 = i0.ɵɵnextContext(5);
425
- i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r14.ModelID, ctx_r1.getVendorsForModelSync(model_r14.ModelID)[0].ID));
625
+ i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r15.ModelID, ctx_r1.getVendorsForModelSync(model_r15.ModelID)[0].ID));
426
626
  i0.ɵɵadvance();
427
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(model_r14.ModelID)[0].Name, " ");
627
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorsForModelSync(model_r15.ModelID)[0].Name, " ");
428
628
  i0.ɵɵadvance();
429
- i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r14.ModelID, ctx_r1.getVendorsForModelSync(model_r14.ModelID)[0].ID) !== "Active" ? 2 : -1);
629
+ i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r15.ModelID, ctx_r1.getVendorsForModelSync(model_r15.ModelID)[0].ID) !== "Active" ? 2 : -1);
430
630
  } }
431
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
432
- i0.ɵɵelementStart(0, "span", 110);
631
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
632
+ i0.ɵɵelementStart(0, "span", 137);
433
633
  i0.ɵɵtext(1, "No vendors available");
434
634
  i0.ɵɵelementEnd();
435
635
  } }
436
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
437
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 115)(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 110);
636
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
637
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 142)(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 137);
438
638
  } if (rf & 2) {
439
- const model_r14 = i0.ɵɵnextContext(3).$implicit;
639
+ const model_r15 = i0.ɵɵnextContext(3).$implicit;
440
640
  const ctx_r1 = i0.ɵɵnextContext(5);
441
- i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r14.ModelID).length === 1 ? 0 : 1);
641
+ i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r15.ModelID).length === 1 ? 0 : 1);
442
642
  } }
443
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
444
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template, 2, 5, "kendo-dropdownlist", 111)(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
643
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
644
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_0_Template, 2, 5, "kendo-dropdownlist", 138)(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
445
645
  } if (rf & 2) {
446
- const model_r14 = i0.ɵɵnextContext(2).$implicit;
646
+ const model_r15 = i0.ɵɵnextContext(2).$implicit;
447
647
  const ctx_r1 = i0.ɵɵnextContext(5);
448
- i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r14.ModelID) ? 0 : 1);
648
+ i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r15.ModelID) ? 0 : 1);
449
649
  } }
450
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
451
- i0.ɵɵelementStart(0, "span", 110);
650
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
651
+ i0.ɵɵelementStart(0, "span", 137);
452
652
  i0.ɵɵtext(1, "Select model first");
453
653
  i0.ɵɵelementEnd();
454
654
  } }
455
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Template(rf, ctx) { if (rf & 1) {
456
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Template, 2, 1)(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_1_Template, 2, 0, "span", 110);
655
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Template(rf, ctx) { if (rf & 1) {
656
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_0_Template, 2, 1)(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Conditional_1_Template, 2, 0, "span", 137);
457
657
  } if (rf & 2) {
458
- const model_r14 = i0.ɵɵnextContext().$implicit;
459
- i0.ɵɵconditional(model_r14.ModelID ? 0 : 1);
658
+ const model_r15 = i0.ɵɵnextContext().$implicit;
659
+ i0.ɵɵconditional(model_r15.ModelID ? 0 : 1);
460
660
  } }
461
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
462
- i0.ɵɵelementStart(0, "span", 114);
661
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
662
+ i0.ɵɵelementStart(0, "span", 141);
463
663
  i0.ɵɵtext(1);
464
664
  i0.ɵɵelementEnd();
465
665
  } if (rf & 2) {
466
- const model_r14 = i0.ɵɵnextContext(3).$implicit;
666
+ const model_r15 = i0.ɵɵnextContext(3).$implicit;
467
667
  const ctx_r1 = i0.ɵɵnextContext(5);
468
668
  i0.ɵɵadvance();
469
- i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r14.ModelID, model_r14.VendorID), ")");
669
+ i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r15.ModelID, model_r15.VendorID), ")");
470
670
  } }
471
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
472
- i0.ɵɵelementStart(0, "span", 119);
671
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
672
+ i0.ɵɵelementStart(0, "span", 146);
473
673
  i0.ɵɵtext(1);
474
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 114);
674
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 141);
475
675
  i0.ɵɵelementEnd();
476
676
  } if (rf & 2) {
477
- const model_r14 = i0.ɵɵnextContext(2).$implicit;
677
+ const model_r15 = i0.ɵɵnextContext(2).$implicit;
478
678
  const ctx_r1 = i0.ɵɵnextContext(5);
479
- i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r14.ModelID, model_r14.VendorID));
679
+ i0.ɵɵstyleProp("color", ctx_r1.getVendorStatusColor(model_r15.ModelID, model_r15.VendorID));
480
680
  i0.ɵɵadvance();
481
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(model_r14.VendorID), " ");
681
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getVendorDisplayName(model_r15.VendorID), " ");
482
682
  i0.ɵɵadvance();
483
- i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r14.ModelID, model_r14.VendorID) !== "Active" ? 2 : -1);
683
+ i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r15.ModelID, model_r15.VendorID) !== "Active" ? 2 : -1);
484
684
  } }
485
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
486
- i0.ɵɵelementStart(0, "span", 118);
685
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
686
+ i0.ɵɵelementStart(0, "span", 145);
487
687
  i0.ɵɵtext(1, "-");
488
688
  i0.ɵɵelementEnd();
489
689
  } }
490
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
491
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Template, 3, 4, "span", 117)(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_1_Template, 2, 0, "span", 118);
690
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
691
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_0_Template, 3, 4, "span", 144)(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Conditional_1_Template, 2, 0, "span", 145);
492
692
  } if (rf & 2) {
493
- const model_r14 = i0.ɵɵnextContext().$implicit;
494
- i0.ɵɵconditional(model_r14.VendorID && model_r14.ModelID ? 0 : 1);
693
+ const model_r15 = i0.ɵɵnextContext().$implicit;
694
+ i0.ɵɵconditional(model_r15.VendorID && model_r15.ModelID ? 0 : 1);
495
695
  } }
496
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementStart(0, "span", 101);
696
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
697
+ i0.ɵɵelementStart(0, "span", 128);
498
698
  i0.ɵɵtext(1);
499
699
  i0.ɵɵpipe(2, "date");
500
700
  i0.ɵɵelementEnd();
501
701
  } if (rf & 2) {
502
- const model_r14 = i0.ɵɵnextContext().$implicit;
702
+ const model_r15 = i0.ɵɵnextContext().$implicit;
503
703
  i0.ɵɵadvance();
504
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r14.__mj_CreatedAt, "short"));
704
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r15.__mj_CreatedAt, "short"));
505
705
  } }
506
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_12_Template(rf, ctx) { if (rf & 1) {
507
- i0.ɵɵelementStart(0, "span", 102);
706
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_12_Template(rf, ctx) { if (rf & 1) {
707
+ i0.ɵɵelementStart(0, "span", 129);
508
708
  i0.ɵɵtext(1, "New");
509
709
  i0.ɵɵelementEnd();
510
710
  } }
511
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_14_Template(rf, ctx) { if (rf & 1) {
512
- const _r18 = i0.ɵɵgetCurrentView();
513
- i0.ɵɵelementStart(0, "div", 120)(1, "button", 121);
514
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ɵ$index_279_r12 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_279_r12)); });
515
- i0.ɵɵelement(2, "i", 122);
711
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template(rf, ctx) { if (rf & 1) {
712
+ const _r19 = i0.ɵɵgetCurrentView();
713
+ i0.ɵɵelementStart(0, "div", 147)(1, "button", 148);
714
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r19); const ɵ$index_415_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_415_r13)); });
715
+ i0.ɵɵelement(2, "i", 149);
516
716
  i0.ɵɵelementEnd();
517
- i0.ɵɵelementStart(3, "button", 123);
518
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ɵ$index_279_r12 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_279_r12)); });
519
- i0.ɵɵelement(4, "i", 124);
717
+ i0.ɵɵelementStart(3, "button", 150);
718
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r19); const ɵ$index_415_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_415_r13)); });
719
+ i0.ɵɵelement(4, "i", 151);
520
720
  i0.ɵɵelementEnd()();
521
- i0.ɵɵelementStart(5, "button", 125);
522
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r18); const ɵ$index_279_r12 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_279_r12)); });
523
- i0.ɵɵelement(6, "i", 126);
721
+ i0.ɵɵelementStart(5, "button", 152);
722
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r19); const ɵ$index_415_r13 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_415_r13)); });
723
+ i0.ɵɵelement(6, "i", 153);
524
724
  i0.ɵɵelementEnd();
525
725
  } if (rf & 2) {
526
- const ɵ$index_279_r12 = i0.ɵɵnextContext().$index;
726
+ const ɵ$index_415_r13 = i0.ɵɵnextContext().$index;
527
727
  const ctx_r1 = i0.ɵɵnextContext(5);
528
728
  i0.ɵɵadvance();
529
- i0.ɵɵproperty("disabled", ɵ$index_279_r12 === 0);
729
+ i0.ɵɵproperty("disabled", ɵ$index_415_r13 === 0);
530
730
  i0.ɵɵadvance(2);
531
- i0.ɵɵproperty("disabled", ɵ$index_279_r12 === ctx_r1.promptModels.length - 1);
731
+ i0.ɵɵproperty("disabled", ɵ$index_415_r13 === ctx_r1.promptModels.length - 1);
532
732
  } }
533
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_19_Template(rf, ctx) { if (rf & 1) {
733
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_19_Template(rf, ctx) { if (rf & 1) {
534
734
  i0.ɵɵelementStart(0, "span")(1, "strong");
535
735
  i0.ɵɵtext(2, "Status:");
536
736
  i0.ɵɵelementEnd();
537
737
  i0.ɵɵtext(3);
538
738
  i0.ɵɵelementEnd();
539
739
  } if (rf & 2) {
540
- const model_r14 = i0.ɵɵnextContext().$implicit;
740
+ const model_r15 = i0.ɵɵnextContext().$implicit;
541
741
  i0.ɵɵadvance(3);
542
- i0.ɵɵtextInterpolate1(" ", model_r14.Status, "");
742
+ i0.ɵɵtextInterpolate1(" ", model_r15.Status, "");
543
743
  } }
544
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_20_Template(rf, ctx) { if (rf & 1) {
744
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_20_Template(rf, ctx) { if (rf & 1) {
545
745
  i0.ɵɵelementStart(0, "span")(1, "strong");
546
746
  i0.ɵɵtext(2, "Configuration:");
547
747
  i0.ɵɵelementEnd();
548
748
  i0.ɵɵtext(3);
549
749
  i0.ɵɵelementEnd();
550
750
  } if (rf & 2) {
551
- const model_r14 = i0.ɵɵnextContext().$implicit;
751
+ const model_r15 = i0.ɵɵnextContext().$implicit;
552
752
  i0.ɵɵadvance(3);
553
- i0.ɵɵtextInterpolate1(" ", model_r14.ConfigurationID, "");
753
+ i0.ɵɵtextInterpolate1(" ", model_r15.ConfigurationID, "");
554
754
  } }
555
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
556
- const _r20 = i0.ɵɵgetCurrentView();
557
- i0.ɵɵelementStart(0, "div")(1, "label", 131);
755
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
756
+ const _r21 = i0.ɵɵgetCurrentView();
757
+ i0.ɵɵelementStart(0, "div")(1, "label", 158);
558
758
  i0.ɵɵtext(2, "Parallel Count");
559
759
  i0.ɵɵelementEnd();
560
- i0.ɵɵelementStart(3, "kendo-numerictextbox", 133);
561
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template_kendo_numerictextbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r20); const model_r14 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r14.ParallelCount, $event) || (model_r14.ParallelCount = $event); return i0.ɵɵresetView($event); });
760
+ i0.ɵɵelementStart(3, "kendo-numerictextbox", 160);
761
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template_kendo_numerictextbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r21); const model_r15 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ParallelCount, $event) || (model_r15.ParallelCount = $event); return i0.ɵɵresetView($event); });
562
762
  i0.ɵɵelementEnd()();
563
763
  } if (rf & 2) {
564
- const ctx_r14 = i0.ɵɵnextContext(3);
565
- const model_r14 = ctx_r14.$implicit;
566
- const ɵ$index_279_r12 = ctx_r14.$index;
764
+ const ctx_r15 = i0.ɵɵnextContext(3);
765
+ const model_r15 = ctx_r15.$implicit;
766
+ const ɵ$index_415_r13 = ctx_r15.$index;
567
767
  i0.ɵɵadvance(3);
568
- i0.ɵɵtwoWayProperty("ngModel", model_r14.ParallelCount);
569
- i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_279_r12)("min", 1)("step", 1)("format", "n0");
768
+ i0.ɵɵtwoWayProperty("ngModel", model_r15.ParallelCount);
769
+ i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_415_r13)("min", 1)("step", 1)("format", "n0");
570
770
  } }
571
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
572
- const _r21 = i0.ɵɵgetCurrentView();
573
- i0.ɵɵelementStart(0, "div")(1, "label", 131);
771
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
772
+ const _r22 = i0.ɵɵgetCurrentView();
773
+ i0.ɵɵelementStart(0, "div")(1, "label", 158);
574
774
  i0.ɵɵtext(2, "Config Parameter");
575
775
  i0.ɵɵelementEnd();
576
- i0.ɵɵelementStart(3, "kendo-textbox", 134);
577
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template_kendo_textbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r21); const model_r14 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r14.ParallelConfigParam, $event) || (model_r14.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
776
+ i0.ɵɵelementStart(3, "kendo-textbox", 161);
777
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template_kendo_textbox_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r22); const model_r15 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ParallelConfigParam, $event) || (model_r15.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
578
778
  i0.ɵɵelementEnd()();
579
779
  } if (rf & 2) {
580
- const ctx_r14 = i0.ɵɵnextContext(3);
581
- const model_r14 = ctx_r14.$implicit;
582
- const ɵ$index_279_r12 = ctx_r14.$index;
780
+ const ctx_r15 = i0.ɵɵnextContext(3);
781
+ const model_r15 = ctx_r15.$implicit;
782
+ const ɵ$index_415_r13 = ctx_r15.$index;
583
783
  i0.ɵɵadvance(3);
584
- i0.ɵɵtwoWayProperty("ngModel", model_r14.ParallelConfigParam);
585
- i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_279_r12);
784
+ i0.ɵɵtwoWayProperty("ngModel", model_r15.ParallelConfigParam);
785
+ i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_415_r13);
586
786
  } }
587
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
588
- const _r19 = i0.ɵɵgetCurrentView();
589
- i0.ɵɵelementStart(0, "div", 129)(1, "div")(2, "label", 131);
787
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
788
+ const _r20 = i0.ɵɵgetCurrentView();
789
+ i0.ɵɵelementStart(0, "div", 156)(1, "div")(2, "label", 158);
590
790
  i0.ɵɵtext(3, "Parallel Mode");
591
791
  i0.ɵɵelementEnd();
592
- i0.ɵɵelementStart(4, "kendo-dropdownlist", 132);
593
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r19); const model_r14 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r14.ParallelizationMode, $event) || (model_r14.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
792
+ i0.ɵɵelementStart(4, "kendo-dropdownlist", 159);
793
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template_kendo_dropdownlist_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r20); const model_r15 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r15.ParallelizationMode, $event) || (model_r15.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
594
794
  i0.ɵɵelementEnd()();
595
- i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template, 4, 5, "div")(6, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template, 4, 2, "div");
795
+ i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_5_Template, 4, 5, "div")(6, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Conditional_6_Template, 4, 2, "div");
596
796
  i0.ɵɵelementEnd();
597
797
  } if (rf & 2) {
598
- const ctx_r14 = i0.ɵɵnextContext(2);
599
- const model_r14 = ctx_r14.$implicit;
600
- const ɵ$index_279_r12 = ctx_r14.$index;
798
+ const ctx_r15 = i0.ɵɵnextContext(2);
799
+ const model_r15 = ctx_r15.$implicit;
800
+ const ɵ$index_415_r13 = ctx_r15.$index;
601
801
  i0.ɵɵadvance(4);
602
- i0.ɵɵtwoWayProperty("ngModel", model_r14.ParallelizationMode);
603
- i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_279_r12)("data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("valuePrimitive", true);
802
+ i0.ɵɵtwoWayProperty("ngModel", model_r15.ParallelizationMode);
803
+ i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_415_r13)("data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("valuePrimitive", true);
604
804
  i0.ɵɵadvance();
605
- i0.ɵɵconditional(model_r14.ParallelizationMode === "StaticCount" ? 5 : -1);
805
+ i0.ɵɵconditional(model_r15.ParallelizationMode === "StaticCount" ? 5 : -1);
606
806
  i0.ɵɵadvance();
607
- i0.ɵɵconditional(model_r14.ParallelizationMode === "ConfigParam" ? 6 : -1);
807
+ i0.ɵɵconditional(model_r15.ParallelizationMode === "ConfigParam" ? 6 : -1);
608
808
  } }
609
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
809
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
610
810
  i0.ɵɵelementStart(0, "span")(1, "strong");
611
811
  i0.ɵɵtext(2, "Parallel Mode:");
612
812
  i0.ɵɵelementEnd();
613
813
  i0.ɵɵtext(3);
614
814
  i0.ɵɵelementEnd();
615
815
  } if (rf & 2) {
616
- const model_r14 = i0.ɵɵnextContext(3).$implicit;
816
+ const model_r15 = i0.ɵɵnextContext(3).$implicit;
617
817
  i0.ɵɵadvance(3);
618
- i0.ɵɵtextInterpolate1(" ", model_r14.ParallelizationMode, "");
818
+ i0.ɵɵtextInterpolate1(" ", model_r15.ParallelizationMode, "");
619
819
  } }
620
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
820
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
621
821
  i0.ɵɵelementStart(0, "span")(1, "strong");
622
822
  i0.ɵɵtext(2, "Parallel Count:");
623
823
  i0.ɵɵelementEnd();
624
824
  i0.ɵɵtext(3);
625
825
  i0.ɵɵelementEnd();
626
826
  } if (rf & 2) {
627
- const model_r14 = i0.ɵɵnextContext(3).$implicit;
827
+ const model_r15 = i0.ɵɵnextContext(3).$implicit;
628
828
  i0.ɵɵadvance(3);
629
- i0.ɵɵtextInterpolate1(" ", model_r14.ParallelCount, "");
829
+ i0.ɵɵtextInterpolate1(" ", model_r15.ParallelCount, "");
630
830
  } }
631
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
831
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
632
832
  i0.ɵɵelementStart(0, "span")(1, "strong");
633
833
  i0.ɵɵtext(2, "Config Param:");
634
834
  i0.ɵɵelementEnd();
635
835
  i0.ɵɵtext(3);
636
836
  i0.ɵɵelementEnd();
637
837
  } if (rf & 2) {
638
- const model_r14 = i0.ɵɵnextContext(3).$implicit;
838
+ const model_r15 = i0.ɵɵnextContext(3).$implicit;
639
839
  i0.ɵɵadvance(3);
640
- i0.ɵɵtextInterpolate1(" ", model_r14.ParallelConfigParam, "");
840
+ i0.ɵɵtextInterpolate1(" ", model_r15.ParallelConfigParam, "");
641
841
  } }
642
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Template(rf, ctx) { if (rf & 1) {
643
- i0.ɵɵelementStart(0, "div", 130);
644
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_1_Template, 4, 1, "span")(2, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_2_Template, 4, 1, "span")(3, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_3_Template, 4, 1, "span");
842
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Template(rf, ctx) { if (rf & 1) {
843
+ i0.ɵɵelementStart(0, "div", 157);
844
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_1_Template, 4, 1, "span")(2, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_2_Template, 4, 1, "span")(3, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Conditional_3_Template, 4, 1, "span");
645
845
  i0.ɵɵelementEnd();
646
846
  } if (rf & 2) {
647
- const model_r14 = i0.ɵɵnextContext(2).$implicit;
847
+ const model_r15 = i0.ɵɵnextContext(2).$implicit;
648
848
  i0.ɵɵadvance();
649
- i0.ɵɵconditional(model_r14.ParallelizationMode ? 1 : -1);
849
+ i0.ɵɵconditional(model_r15.ParallelizationMode ? 1 : -1);
650
850
  i0.ɵɵadvance();
651
- i0.ɵɵconditional(model_r14.ParallelCount ? 2 : -1);
851
+ i0.ɵɵconditional(model_r15.ParallelCount ? 2 : -1);
652
852
  i0.ɵɵadvance();
653
- i0.ɵɵconditional(model_r14.ParallelConfigParam ? 3 : -1);
853
+ i0.ɵɵconditional(model_r15.ParallelConfigParam ? 3 : -1);
654
854
  } }
655
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Template(rf, ctx) { if (rf & 1) {
656
- i0.ɵɵelementStart(0, "div", 106)(1, "div", 127);
657
- i0.ɵɵelement(2, "i", 128);
855
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Template(rf, ctx) { if (rf & 1) {
856
+ i0.ɵɵelementStart(0, "div", 133)(1, "div", 154);
857
+ i0.ɵɵelement(2, "i", 155);
658
858
  i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
659
859
  i0.ɵɵelementEnd();
660
- i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template, 7, 13, "div", 129)(5, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Template, 4, 3, "div", 130);
860
+ i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_4_Template, 7, 13, "div", 156)(5, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Conditional_5_Template, 4, 3, "div", 157);
661
861
  i0.ɵɵelementEnd();
662
862
  } if (rf & 2) {
663
863
  const ctx_r1 = i0.ɵɵnextContext(6);
664
864
  i0.ɵɵadvance(4);
665
865
  i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
666
866
  } }
667
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Template(rf, ctx) { if (rf & 1) {
668
- const _r11 = i0.ɵɵgetCurrentView();
669
- i0.ɵɵelementStart(0, "div", 94);
670
- i0.ɵɵlistener("dragstart", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Template_div_dragstart_0_listener($event) { const ɵ$index_279_r12 = i0.ɵɵrestoreView(_r11).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_279_r12)); })("dragover", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Template_div_drop_0_listener($event) { const ɵ$index_279_r12 = i0.ɵɵrestoreView(_r11).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_279_r12)); })("dragend", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
671
- i0.ɵɵelementStart(1, "div", 95);
672
- i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_2_Template, 3, 1)(3, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_3_Template, 2, 3, "span", 96);
867
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Template(rf, ctx) { if (rf & 1) {
868
+ const _r12 = i0.ɵɵgetCurrentView();
869
+ i0.ɵɵelementStart(0, "div", 121);
870
+ i0.ɵɵlistener("dragstart", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_dragstart_0_listener($event) { const ɵ$index_415_r13 = i0.ɵɵrestoreView(_r12).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_415_r13)); })("dragover", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_drop_0_listener($event) { const ɵ$index_415_r13 = i0.ɵɵrestoreView(_r12).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_415_r13)); })("dragend", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
871
+ i0.ɵɵelementStart(1, "div", 122);
872
+ i0.ɵɵtemplate(2, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_2_Template, 3, 1)(3, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_3_Template, 2, 3, "span", 123);
673
873
  i0.ɵɵelementEnd();
674
- i0.ɵɵelementStart(4, "div", 97);
675
- i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_5_Template, 1, 5, "kendo-dropdownlist", 98)(6, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_6_Template, 2, 1, "span", 23);
874
+ i0.ɵɵelementStart(4, "div", 124);
875
+ i0.ɵɵtemplate(5, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_5_Template, 1, 5, "kendo-dropdownlist", 125)(6, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_6_Template, 2, 1, "span", 23);
676
876
  i0.ɵɵelementEnd();
677
- i0.ɵɵelementStart(7, "div", 99);
678
- i0.ɵɵtemplate(8, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_8_Template, 2, 1)(9, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_9_Template, 2, 1);
877
+ i0.ɵɵelementStart(7, "div", 126);
878
+ i0.ɵɵtemplate(8, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_8_Template, 2, 1)(9, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_9_Template, 2, 1);
679
879
  i0.ɵɵelementEnd();
680
- i0.ɵɵelementStart(10, "div", 100);
681
- i0.ɵɵtemplate(11, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_11_Template, 3, 4, "span", 101)(12, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_12_Template, 2, 0, "span", 102);
880
+ i0.ɵɵelementStart(10, "div", 127);
881
+ i0.ɵɵtemplate(11, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_11_Template, 3, 4, "span", 128)(12, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_12_Template, 2, 0, "span", 129);
682
882
  i0.ɵɵelementEnd();
683
- i0.ɵɵelementStart(13, "div", 103);
684
- i0.ɵɵtemplate(14, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_14_Template, 7, 2);
883
+ i0.ɵɵelementStart(13, "div", 130);
884
+ i0.ɵɵtemplate(14, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_14_Template, 7, 2);
685
885
  i0.ɵɵelementEnd()();
686
- i0.ɵɵelementStart(15, "div", 104);
886
+ i0.ɵɵelementStart(15, "div", 131);
687
887
  i0.ɵɵelement(16, "div");
688
- i0.ɵɵelementStart(17, "div")(18, "div", 105);
689
- i0.ɵɵtemplate(19, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_19_Template, 4, 1, "span")(20, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_20_Template, 4, 1, "span");
888
+ i0.ɵɵelementStart(17, "div")(18, "div", 132);
889
+ i0.ɵɵtemplate(19, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_19_Template, 4, 1, "span")(20, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_20_Template, 4, 1, "span");
690
890
  i0.ɵɵelementEnd();
691
- i0.ɵɵtemplate(21, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Conditional_21_Template, 6, 1, "div", 106);
891
+ i0.ɵɵtemplate(21, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Conditional_21_Template, 6, 1, "div", 133);
692
892
  i0.ɵɵelementEnd()();
693
893
  } if (rf & 2) {
694
- const model_r14 = ctx.$implicit;
695
- const ɵ$index_279_r12 = ctx.$index;
894
+ const model_r15 = ctx.$implicit;
895
+ const ɵ$index_415_r13 = ctx.$index;
696
896
  const ctx_r1 = i0.ɵɵnextContext(5);
697
- i0.ɵɵstyleProp("background", !model_r14.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_279_r12 ? "#e3f2fd" : "white")("border-left", !model_r14.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_279_r12 ? "0.5" : "1");
897
+ i0.ɵɵstyleProp("background", !model_r15.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_415_r13 ? "#e3f2fd" : "white")("border-left", !model_r15.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_415_r13 ? "0.5" : "1");
698
898
  i0.ɵɵproperty("draggable", ctx_r1.EditMode);
699
899
  i0.ɵɵadvance(2);
700
900
  i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
@@ -703,28 +903,28 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Condi
703
903
  i0.ɵɵadvance(3);
704
904
  i0.ɵɵconditional(ctx_r1.EditMode ? 8 : 9);
705
905
  i0.ɵɵadvance(3);
706
- i0.ɵɵconditional(model_r14.ID ? 11 : 12);
906
+ i0.ɵɵconditional(model_r15.ID ? 11 : 12);
707
907
  i0.ɵɵadvance(3);
708
908
  i0.ɵɵconditional(ctx_r1.EditMode ? 14 : -1);
709
909
  i0.ɵɵadvance(5);
710
- i0.ɵɵconditional(model_r14.Status ? 19 : -1);
910
+ i0.ɵɵconditional(model_r15.Status ? 19 : -1);
711
911
  i0.ɵɵadvance();
712
- i0.ɵɵconditional(model_r14.ConfigurationID ? 20 : -1);
912
+ i0.ɵɵconditional(model_r15.ConfigurationID ? 20 : -1);
713
913
  i0.ɵɵadvance();
714
914
  i0.ɵɵconditional(ctx_r1.record.ParallelizationMode === "ModelSpecific" ? 21 : -1);
715
915
  } }
716
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
717
- const _r22 = i0.ɵɵgetCurrentView();
718
- i0.ɵɵelementStart(0, "div", 92)(1, "button", 135);
719
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Conditional_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
916
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
917
+ const _r23 = i0.ɵɵgetCurrentView();
918
+ i0.ɵɵelementStart(0, "div", 119)(1, "button", 162);
919
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Conditional_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
720
920
  i0.ɵɵelement(2, "i", 70);
721
921
  i0.ɵɵtext(3, " Add Model ");
722
922
  i0.ɵɵelementEnd()();
723
923
  } }
724
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
725
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 88);
726
- i0.ɵɵelementStart(1, "div", 89)(2, "div", 90);
727
- i0.ɵɵelement(3, "i", 91);
924
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
925
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 115);
926
+ i0.ɵɵelementStart(1, "div", 116)(2, "div", 117);
927
+ i0.ɵɵelement(3, "i", 118);
728
928
  i0.ɵɵelementEnd();
729
929
  i0.ɵɵelementStart(4, "div");
730
930
  i0.ɵɵtext(5, "AI Model ");
@@ -740,8 +940,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Condi
740
940
  i0.ɵɵelementStart(12, "div");
741
941
  i0.ɵɵtext(13, "Actions");
742
942
  i0.ɵɵelementEnd()();
743
- i0.ɵɵrepeaterCreate(14, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_For_15_Template, 22, 15, null, null, _forTrack0);
744
- i0.ɵɵtemplate(16, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Conditional_16_Template, 4, 0, "div", 92);
943
+ i0.ɵɵrepeaterCreate(14, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_For_15_Template, 22, 15, null, null, _forTrack1);
944
+ i0.ɵɵtemplate(16, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Conditional_16_Template, 4, 0, "div", 119);
745
945
  } if (rf & 2) {
746
946
  const ctx_r1 = i0.ɵɵnextContext(4);
747
947
  i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
@@ -750,17 +950,17 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Condi
750
950
  i0.ɵɵadvance(2);
751
951
  i0.ɵɵconditional(ctx_r1.EditMode ? 16 : -1);
752
952
  } }
753
- function AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Template(rf, ctx) { if (rf & 1) {
754
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_0_Template, 4, 1, "div", 84)(1, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Conditional_1_Template, 17, 2);
953
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
954
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_0_Template, 4, 1, "div", 79)(1, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Conditional_1_Template, 17, 2);
755
955
  } if (rf & 2) {
756
956
  const ctx_r1 = i0.ɵɵnextContext(3);
757
957
  i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
758
958
  } }
759
- function AIPromptFormComponentExtended_form_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
959
+ function AIPromptFormComponentExtended_form_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
760
960
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
761
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_41_ng_template_1_Template, 7, 1, "ng-template", 30);
762
- i0.ɵɵelementStart(2, "div", 36)(3, "div", 78);
763
- i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_4_Template, 3, 0, "div", 79)(5, AIPromptFormComponentExtended_form_1_Conditional_41_Conditional_5_Template, 2, 1);
961
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 30);
962
+ i0.ɵɵelementStart(2, "div", 36)(3, "div", 109);
963
+ i0.ɵɵtemplate(4, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_4_Template, 3, 0, "div", 78)(5, AIPromptFormComponentExtended_form_1_Conditional_42_Conditional_5_Template, 2, 1);
764
964
  i0.ɵɵelementEnd()()();
765
965
  } if (rf & 2) {
766
966
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -768,48 +968,48 @@ function AIPromptFormComponentExtended_form_1_Conditional_41_Template(rf, ctx) {
768
968
  i0.ɵɵadvance(4);
769
969
  i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
770
970
  } }
771
- function AIPromptFormComponentExtended_form_1_ng_template_43_Template(rf, ctx) { if (rf & 1) {
971
+ function AIPromptFormComponentExtended_form_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
772
972
  i0.ɵɵelementStart(0, "span", 62);
773
- i0.ɵɵelement(1, "i", 136);
973
+ i0.ɵɵelement(1, "i", 163);
774
974
  i0.ɵɵtext(2, " Advanced Configuration ");
775
975
  i0.ɵɵelementEnd();
776
976
  } }
777
- function AIPromptFormComponentExtended_form_1_Conditional_48_Template(rf, ctx) { if (rf & 1) {
977
+ function AIPromptFormComponentExtended_form_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
778
978
  i0.ɵɵelement(0, "mj-form-field", 39);
779
979
  } if (rf & 2) {
780
980
  const ctx_r1 = i0.ɵɵnextContext(2);
781
981
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
782
982
  } }
783
- function AIPromptFormComponentExtended_form_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
983
+ function AIPromptFormComponentExtended_form_1_Conditional_50_Template(rf, ctx) { if (rf & 1) {
784
984
  i0.ɵɵelement(0, "mj-form-field", 40);
785
985
  } if (rf & 2) {
786
986
  const ctx_r1 = i0.ɵɵnextContext(2);
787
987
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
788
988
  } }
789
- function AIPromptFormComponentExtended_form_1_Conditional_57_Conditional_0_Template(rf, ctx) { if (rf & 1) {
790
- i0.ɵɵelementStart(0, "div", 137);
989
+ function AIPromptFormComponentExtended_form_1_Conditional_58_Conditional_0_Template(rf, ctx) { if (rf & 1) {
990
+ i0.ɵɵelementStart(0, "div", 164);
791
991
  i0.ɵɵelement(1, "i", 54);
792
992
  i0.ɵɵtext(2, " Loading prompts... ");
793
993
  i0.ɵɵelementEnd();
794
994
  } }
795
- function AIPromptFormComponentExtended_form_1_Conditional_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
796
- const _r23 = i0.ɵɵgetCurrentView();
797
- i0.ɵɵelementStart(0, "kendo-dropdowntree", 139);
798
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_57_Conditional_1_Template_kendo_dropdowntree_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
799
- i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_1_Conditional_57_Conditional_1_Template_kendo_dropdowntree_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
995
+ function AIPromptFormComponentExtended_form_1_Conditional_58_Conditional_1_Template(rf, ctx) { if (rf & 1) {
996
+ const _r24 = i0.ɵɵgetCurrentView();
997
+ i0.ɵɵelementStart(0, "kendo-dropdowntree", 166);
998
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_58_Conditional_1_Template_kendo_dropdowntree_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
999
+ i0.ɵɵlistener("valueChange", function AIPromptFormComponentExtended_form_1_Conditional_58_Conditional_1_Template_kendo_dropdowntree_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
800
1000
  i0.ɵɵelementEnd();
801
1001
  } if (rf & 2) {
802
1002
  const ctx_r1 = i0.ɵɵnextContext(3);
803
1003
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
804
1004
  i0.ɵɵproperty("data", ctx_r1.resultSelectorTreeData)("valuePrimitive", true)("filterable", true);
805
1005
  } }
806
- function AIPromptFormComponentExtended_form_1_Conditional_57_Template(rf, ctx) { if (rf & 1) {
807
- i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_57_Conditional_0_Template, 3, 0, "div", 137)(1, AIPromptFormComponentExtended_form_1_Conditional_57_Conditional_1_Template, 1, 4, "kendo-dropdowntree", 138);
1006
+ function AIPromptFormComponentExtended_form_1_Conditional_58_Template(rf, ctx) { if (rf & 1) {
1007
+ i0.ɵɵtemplate(0, AIPromptFormComponentExtended_form_1_Conditional_58_Conditional_0_Template, 3, 0, "div", 164)(1, AIPromptFormComponentExtended_form_1_Conditional_58_Conditional_1_Template, 1, 4, "kendo-dropdowntree", 165);
808
1008
  } if (rf & 2) {
809
1009
  const ctx_r1 = i0.ɵɵnextContext(2);
810
1010
  i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
811
1011
  } }
812
- function AIPromptFormComponentExtended_form_1_Conditional_58_Template(rf, ctx) { if (rf & 1) {
1012
+ function AIPromptFormComponentExtended_form_1_Conditional_59_Template(rf, ctx) { if (rf & 1) {
813
1013
  i0.ɵɵelementStart(0, "span", 46);
814
1014
  i0.ɵɵtext(1);
815
1015
  i0.ɵɵelementEnd();
@@ -818,29 +1018,29 @@ function AIPromptFormComponentExtended_form_1_Conditional_58_Template(rf, ctx) {
818
1018
  i0.ɵɵadvance();
819
1019
  i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
820
1020
  } }
821
- function AIPromptFormComponentExtended_form_1_Conditional_59_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1021
+ function AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Template(rf, ctx) { if (rf & 1) {
822
1022
  i0.ɵɵelementStart(0, "span", 62);
823
1023
  i0.ɵɵelement(1, "i", 22);
824
1024
  i0.ɵɵtext(2, " Output Example (JSON) ");
825
- i0.ɵɵelementStart(3, "span", 143);
1025
+ i0.ɵɵelementStart(3, "span", 170);
826
1026
  i0.ɵɵtext(4, "\u2022 Required for object output type");
827
1027
  i0.ɵɵelementEnd()();
828
1028
  } }
829
- function AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_3_Template(rf, ctx) { if (rf & 1) {
830
- const _r24 = i0.ɵɵgetCurrentView();
831
- i0.ɵɵelementStart(0, "mj-code-editor", 144);
832
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
1029
+ function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1030
+ const _r25 = i0.ɵɵgetCurrentView();
1031
+ i0.ɵɵelementStart(0, "mj-code-editor", 171);
1032
+ i0.ɵɵtwoWayListener("ngModelChange", function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
833
1033
  i0.ɵɵelementEnd();
834
- i0.ɵɵelementStart(1, "div", 145);
835
- i0.ɵɵelement(2, "i", 85);
1034
+ i0.ɵɵelementStart(1, "div", 172);
1035
+ i0.ɵɵelement(2, "i", 84);
836
1036
  i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
837
1037
  i0.ɵɵelementEnd();
838
1038
  } if (rf & 2) {
839
1039
  const ctx_r1 = i0.ɵɵnextContext(3);
840
1040
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
841
1041
  } }
842
- function AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_4_Template(rf, ctx) { if (rf & 1) {
843
- i0.ɵɵelementStart(0, "div", 141);
1042
+ function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1043
+ i0.ɵɵelementStart(0, "div", 168);
844
1044
  i0.ɵɵtext(1);
845
1045
  i0.ɵɵelementEnd();
846
1046
  } if (rf & 2) {
@@ -848,17 +1048,17 @@ function AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_4_Templ
848
1048
  i0.ɵɵadvance();
849
1049
  i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
850
1050
  } }
851
- function AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_5_Template(rf, ctx) { if (rf & 1) {
852
- i0.ɵɵelementStart(0, "div", 142);
853
- i0.ɵɵelement(1, "i", 146);
1051
+ function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1052
+ i0.ɵɵelementStart(0, "div", 169);
1053
+ i0.ɵɵelement(1, "i", 173);
854
1054
  i0.ɵɵtext(2, " Output example is required when output type is 'object' ");
855
1055
  i0.ɵɵelementEnd();
856
1056
  } }
857
- function AIPromptFormComponentExtended_form_1_Conditional_59_Template(rf, ctx) { if (rf & 1) {
1057
+ function AIPromptFormComponentExtended_form_1_Conditional_60_Template(rf, ctx) { if (rf & 1) {
858
1058
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
859
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_59_ng_template_1_Template, 5, 0, "ng-template", 30);
860
- i0.ɵɵelementStart(2, "div", 140);
861
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_3_Template, 4, 1)(4, AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_4_Template, 2, 1, "div", 141)(5, AIPromptFormComponentExtended_form_1_Conditional_59_Conditional_5_Template, 3, 0, "div", 142);
1059
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Template, 5, 0, "ng-template", 30);
1060
+ i0.ɵɵelementStart(2, "div", 167);
1061
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_3_Template, 4, 1)(4, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_4_Template, 2, 1, "div", 168)(5, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template, 3, 0, "div", 169);
862
1062
  i0.ɵɵelementEnd()();
863
1063
  } if (rf & 2) {
864
1064
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -866,8 +1066,8 @@ function AIPromptFormComponentExtended_form_1_Conditional_59_Template(rf, ctx) {
866
1066
  i0.ɵɵadvance(3);
867
1067
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
868
1068
  } }
869
- function AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
870
- i0.ɵɵelementStart(0, "span", 149);
1069
+ function AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1070
+ i0.ɵɵelementStart(0, "span", 176);
871
1071
  i0.ɵɵtext(1);
872
1072
  i0.ɵɵelementEnd();
873
1073
  } if (rf & 2) {
@@ -875,177 +1075,177 @@ function AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Condi
875
1075
  i0.ɵɵadvance();
876
1076
  i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
877
1077
  } }
878
- function AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1078
+ function AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
879
1079
  i0.ɵɵelementStart(0, "span", 62);
880
- i0.ɵɵelement(1, "i", 148);
1080
+ i0.ɵɵelement(1, "i", 175);
881
1081
  i0.ɵɵtext(2, " Execution History ");
882
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Conditional_3_Template, 2, 1, "span", 149);
1082
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span", 176);
883
1083
  i0.ɵɵelementEnd();
884
1084
  } if (rf & 2) {
885
1085
  const ctx_r1 = i0.ɵɵnextContext(3);
886
1086
  i0.ɵɵadvance(3);
887
1087
  i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
888
1088
  } }
889
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_3_Template(rf, ctx) { if (rf & 1) {
890
- i0.ɵɵelementStart(0, "div", 147);
891
- i0.ɵɵelement(1, "i", 150);
1089
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1090
+ i0.ɵɵelementStart(0, "div", 174);
1091
+ i0.ɵɵelement(1, "i", 177);
892
1092
  i0.ɵɵelementStart(2, "p");
893
1093
  i0.ɵɵtext(3, "Loading execution history...");
894
1094
  i0.ɵɵelementEnd()();
895
1095
  } }
896
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_4_Template(rf, ctx) { if (rf & 1) {
897
- i0.ɵɵelementStart(0, "div", 147);
898
- i0.ɵɵelement(1, "i", 151);
1096
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1097
+ i0.ɵɵelementStart(0, "div", 174);
1098
+ i0.ɵɵelement(1, "i", 178);
899
1099
  i0.ɵɵelementStart(2, "p");
900
1100
  i0.ɵɵtext(3, "No execution history yet");
901
1101
  i0.ɵɵelementEnd();
902
- i0.ɵɵelementStart(4, "p", 119);
1102
+ i0.ɵɵelementStart(4, "p", 146);
903
1103
  i0.ɵɵtext(5, "Run this prompt to see execution history here");
904
1104
  i0.ɵɵelementEnd()();
905
1105
  } }
906
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
907
- i0.ɵɵelement(0, "i", 165);
1106
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1107
+ i0.ɵɵelement(0, "i", 191);
908
1108
  } if (rf & 2) {
909
1109
  const ctx_r1 = i0.ɵɵnextContext(4);
910
1110
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
911
1111
  } }
912
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
913
- i0.ɵɵelement(0, "i", 165);
1112
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1113
+ i0.ɵɵelement(0, "i", 191);
914
1114
  } if (rf & 2) {
915
1115
  const ctx_r1 = i0.ɵɵnextContext(4);
916
1116
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
917
1117
  } }
918
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
919
- i0.ɵɵelement(0, "i", 165);
1118
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1119
+ i0.ɵɵelement(0, "i", 191);
920
1120
  } if (rf & 2) {
921
1121
  const ctx_r1 = i0.ɵɵnextContext(4);
922
1122
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
923
1123
  } }
924
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
925
- i0.ɵɵelement(0, "i", 165);
1124
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1125
+ i0.ɵɵelement(0, "i", 191);
926
1126
  } if (rf & 2) {
927
1127
  const ctx_r1 = i0.ɵɵnextContext(4);
928
1128
  i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
929
1129
  } }
930
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
931
- i0.ɵɵelementStart(0, "span", 172);
1130
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1131
+ i0.ɵɵelementStart(0, "span", 198);
932
1132
  i0.ɵɵtext(1);
933
1133
  i0.ɵɵelementEnd();
934
1134
  } if (rf & 2) {
935
- const run_r27 = i0.ɵɵnextContext().$implicit;
1135
+ const run_r28 = i0.ɵɵnextContext().$implicit;
936
1136
  i0.ɵɵadvance();
937
- i0.ɵɵtextInterpolate1(" ", run_r27.RunType, " ");
1137
+ i0.ɵɵtextInterpolate1(" ", run_r28.RunType, " ");
938
1138
  } }
939
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
940
- const _r26 = i0.ɵɵgetCurrentView();
941
- i0.ɵɵelementStart(0, "tr", 166)(1, "td", 167)(2, "span", 168);
1139
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
1140
+ const _r27 = i0.ɵɵgetCurrentView();
1141
+ i0.ɵɵelementStart(0, "tr", 192)(1, "td", 193)(2, "span", 194);
942
1142
  i0.ɵɵelement(3, "i");
943
1143
  i0.ɵɵelementStart(4, "span", 23);
944
1144
  i0.ɵɵtext(5);
945
1145
  i0.ɵɵelementEnd()()();
946
- i0.ɵɵelementStart(6, "td", 169);
1146
+ i0.ɵɵelementStart(6, "td", 195);
947
1147
  i0.ɵɵtext(7);
948
1148
  i0.ɵɵpipe(8, "date");
949
1149
  i0.ɵɵelementEnd();
950
- i0.ɵɵelementStart(9, "td", 169)(10, "span", 168);
951
- i0.ɵɵelement(11, "i", 80);
1150
+ i0.ɵɵelementStart(9, "td", 195)(10, "span", 194);
1151
+ i0.ɵɵelement(11, "i", 110);
952
1152
  i0.ɵɵtext(12);
953
1153
  i0.ɵɵelementEnd()();
954
- i0.ɵɵelementStart(13, "td", 169);
1154
+ i0.ɵɵelementStart(13, "td", 195);
955
1155
  i0.ɵɵtext(14);
956
1156
  i0.ɵɵelementEnd();
957
- i0.ɵɵelementStart(15, "td", 170);
1157
+ i0.ɵɵelementStart(15, "td", 196);
958
1158
  i0.ɵɵtext(16);
959
1159
  i0.ɵɵelementEnd();
960
- i0.ɵɵelementStart(17, "td", 170);
1160
+ i0.ɵɵelementStart(17, "td", 196);
961
1161
  i0.ɵɵtext(18);
962
1162
  i0.ɵɵelementEnd();
963
- i0.ɵɵelementStart(19, "td", 171);
964
- i0.ɵɵtemplate(20, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 172);
1163
+ i0.ɵɵelementStart(19, "td", 197);
1164
+ i0.ɵɵtemplate(20, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 198);
965
1165
  i0.ɵɵelementEnd();
966
- i0.ɵɵelementStart(21, "td", 171)(22, "button", 173);
967
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_For_41_Template_button_click_22_listener() { const run_r27 = i0.ɵɵrestoreView(_r26).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r27.ID)); });
968
- i0.ɵɵelement(23, "i", 174);
1166
+ i0.ɵɵelementStart(21, "td", 197)(22, "button", 199);
1167
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_41_Template_button_click_22_listener() { const run_r28 = i0.ɵɵrestoreView(_r27).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r28.ID)); });
1168
+ i0.ɵɵelement(23, "i", 200);
969
1169
  i0.ɵɵelementEnd()()();
970
1170
  } if (rf & 2) {
971
- const run_r27 = ctx.$implicit;
972
- const ɵ$index_654_r28 = ctx.$index;
1171
+ const run_r28 = ctx.$implicit;
1172
+ const ɵ$index_790_r29 = ctx.$index;
973
1173
  const ctx_r1 = i0.ɵɵnextContext(4);
974
- i0.ɵɵclassProp("even-row", ɵ$index_654_r28 % 2 === 0);
1174
+ i0.ɵɵclassProp("even-row", ɵ$index_790_r29 % 2 === 0);
975
1175
  i0.ɵɵadvance(3);
976
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r27.Success));
977
- i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r27.Success));
1176
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r28.Success));
1177
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r28.Success));
978
1178
  i0.ɵɵadvance();
979
- i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r27.Success));
1179
+ i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r28.Success));
980
1180
  i0.ɵɵadvance();
981
- i0.ɵɵtextInterpolate1(" ", run_r27.Success === true ? "Success" : run_r27.Success === false ? "Failed" : "Running", " ");
1181
+ i0.ɵɵtextInterpolate1(" ", run_r28.Success === true ? "Success" : run_r28.Success === false ? "Failed" : "Running", " ");
982
1182
  i0.ɵɵadvance(2);
983
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r27.RunAt, "short"), " ");
1183
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(8, 15, run_r28.RunAt, "short"), " ");
984
1184
  i0.ɵɵadvance(5);
985
- i0.ɵɵtextInterpolate1(" ", run_r27.Model || "Unknown", " ");
1185
+ i0.ɵɵtextInterpolate1(" ", run_r28.Model || "Unknown", " ");
986
1186
  i0.ɵɵadvance(2);
987
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r27.ExecutionTimeMS), " ");
1187
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(run_r28.ExecutionTimeMS), " ");
988
1188
  i0.ɵɵadvance(2);
989
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r27.TokensUsed), " ");
1189
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(run_r28.TokensUsed), " ");
990
1190
  i0.ɵɵadvance(2);
991
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r27.TotalCost || run_r27.Cost), " ");
1191
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCost(run_r28.TotalCost || run_r28.Cost), " ");
992
1192
  i0.ɵɵadvance(2);
993
- i0.ɵɵconditional(run_r27.RunType ? 20 : -1);
1193
+ i0.ɵɵconditional(run_r28.RunType ? 20 : -1);
994
1194
  } }
995
- function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template(rf, ctx) { if (rf & 1) {
996
- const _r25 = i0.ɵɵgetCurrentView();
997
- i0.ɵɵelementStart(0, "div", 152)(1, "div", 118);
1195
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1196
+ const _r26 = i0.ɵɵgetCurrentView();
1197
+ i0.ɵɵelementStart(0, "div", 179)(1, "div", 145);
998
1198
  i0.ɵɵtext(2);
999
1199
  i0.ɵɵelementEnd();
1000
- i0.ɵɵelementStart(3, "div", 153)(4, "span", 154);
1200
+ i0.ɵɵelementStart(3, "div", 180)(4, "span", 99);
1001
1201
  i0.ɵɵtext(5, "Sort by:");
1002
1202
  i0.ɵɵelementEnd();
1003
- i0.ɵɵelementStart(6, "kendo-buttongroup", 155)(7, "button", 156);
1004
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1203
+ i0.ɵɵelementStart(6, "kendo-buttongroup", 181)(7, "button", 182);
1204
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
1005
1205
  i0.ɵɵtext(8, " Date ");
1006
- i0.ɵɵtemplate(9, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_9_Template, 1, 2, "i", 157);
1206
+ i0.ɵɵtemplate(9, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_9_Template, 1, 2, "i", 183);
1007
1207
  i0.ɵɵelementEnd();
1008
- i0.ɵɵelementStart(10, "button", 156);
1009
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1208
+ i0.ɵɵelementStart(10, "button", 182);
1209
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
1010
1210
  i0.ɵɵtext(11, " Duration ");
1011
- i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_12_Template, 1, 2, "i", 157);
1211
+ i0.ɵɵtemplate(12, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_12_Template, 1, 2, "i", 183);
1012
1212
  i0.ɵɵelementEnd();
1013
- i0.ɵɵelementStart(13, "button", 156);
1014
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1213
+ i0.ɵɵelementStart(13, "button", 182);
1214
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
1015
1215
  i0.ɵɵtext(14, " Tokens ");
1016
- i0.ɵɵtemplate(15, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_15_Template, 1, 2, "i", 157);
1216
+ i0.ɵɵtemplate(15, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_15_Template, 1, 2, "i", 183);
1017
1217
  i0.ɵɵelementEnd();
1018
- i0.ɵɵelementStart(16, "button", 156);
1019
- i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1218
+ i0.ɵɵelementStart(16, "button", 182);
1219
+ i0.ɵɵlistener("click", function AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
1020
1220
  i0.ɵɵtext(17, " Cost ");
1021
- i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Conditional_18_Template, 1, 2, "i", 157);
1221
+ i0.ɵɵtemplate(18, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Conditional_18_Template, 1, 2, "i", 183);
1022
1222
  i0.ɵɵelementEnd()()()();
1023
- i0.ɵɵelementStart(19, "div", 158)(20, "table", 159)(21, "thead")(22, "tr", 160)(23, "th", 161);
1223
+ i0.ɵɵelementStart(19, "div", 184)(20, "table", 185)(21, "thead")(22, "tr", 186)(23, "th", 187);
1024
1224
  i0.ɵɵtext(24, "Status");
1025
1225
  i0.ɵɵelementEnd();
1026
- i0.ɵɵelementStart(25, "th", 161);
1226
+ i0.ɵɵelementStart(25, "th", 187);
1027
1227
  i0.ɵɵtext(26, "Date & Time");
1028
1228
  i0.ɵɵelementEnd();
1029
- i0.ɵɵelementStart(27, "th", 161);
1229
+ i0.ɵɵelementStart(27, "th", 187);
1030
1230
  i0.ɵɵtext(28, "Model");
1031
1231
  i0.ɵɵelementEnd();
1032
- i0.ɵɵelementStart(29, "th", 161);
1232
+ i0.ɵɵelementStart(29, "th", 187);
1033
1233
  i0.ɵɵtext(30, "Duration");
1034
1234
  i0.ɵɵelementEnd();
1035
- i0.ɵɵelementStart(31, "th", 162);
1235
+ i0.ɵɵelementStart(31, "th", 188);
1036
1236
  i0.ɵɵtext(32, "Tokens");
1037
1237
  i0.ɵɵelementEnd();
1038
- i0.ɵɵelementStart(33, "th", 162);
1238
+ i0.ɵɵelementStart(33, "th", 188);
1039
1239
  i0.ɵɵtext(34, "Cost");
1040
1240
  i0.ɵɵelementEnd();
1041
- i0.ɵɵelementStart(35, "th", 163);
1241
+ i0.ɵɵelementStart(35, "th", 189);
1042
1242
  i0.ɵɵtext(36, "Type");
1043
1243
  i0.ɵɵelementEnd();
1044
- i0.ɵɵelementStart(37, "th", 163);
1244
+ i0.ɵɵelementStart(37, "th", 189);
1045
1245
  i0.ɵɵtext(38, "Actions");
1046
1246
  i0.ɵɵelementEnd()()();
1047
1247
  i0.ɵɵelementStart(39, "tbody");
1048
- i0.ɵɵrepeaterCreate(40, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_For_41_Template, 24, 18, "tr", 164, _forTrack1);
1248
+ i0.ɵɵrepeaterCreate(40, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_For_41_Template, 24, 18, "tr", 190, _forTrack0);
1049
1249
  i0.ɵɵelementEnd()()();
1050
1250
  } if (rf & 2) {
1051
1251
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1070,11 +1270,11 @@ function AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Templ
1070
1270
  i0.ɵɵadvance(22);
1071
1271
  i0.ɵɵrepeater(ctx_r1.executionHistory);
1072
1272
  } }
1073
- function AIPromptFormComponentExtended_form_1_Conditional_60_Template(rf, ctx) { if (rf & 1) {
1273
+ function AIPromptFormComponentExtended_form_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
1074
1274
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1075
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_60_ng_template_1_Template, 4, 1, "ng-template", 30);
1076
- i0.ɵɵelementStart(2, "div", 140);
1077
- i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_3_Template, 4, 0, "div", 147)(4, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_4_Template, 6, 0, "div", 147)(5, AIPromptFormComponentExtended_form_1_Conditional_60_Conditional_5_Template, 42, 9);
1275
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Template, 4, 1, "ng-template", 30);
1276
+ i0.ɵɵelementStart(2, "div", 167);
1277
+ i0.ɵɵtemplate(3, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_3_Template, 4, 0, "div", 174)(4, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_4_Template, 6, 0, "div", 174)(5, AIPromptFormComponentExtended_form_1_Conditional_61_Conditional_5_Template, 42, 9);
1078
1278
  i0.ɵɵelementEnd()();
1079
1279
  } if (rf & 2) {
1080
1280
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1082,50 +1282,50 @@ function AIPromptFormComponentExtended_form_1_Conditional_60_Template(rf, ctx) {
1082
1282
  i0.ɵɵadvance(3);
1083
1283
  i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
1084
1284
  } }
1085
- function AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1285
+ function AIPromptFormComponentExtended_form_1_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1086
1286
  i0.ɵɵelementStart(0, "span", 62);
1087
- i0.ɵɵelement(1, "i", 176);
1287
+ i0.ɵɵelement(1, "i", 202);
1088
1288
  i0.ɵɵtext(2, " Result Cache ");
1089
1289
  i0.ɵɵelementEnd();
1090
1290
  } }
1091
- function AIPromptFormComponentExtended_form_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
1291
+ function AIPromptFormComponentExtended_form_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
1092
1292
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1093
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_61_ng_template_1_Template, 3, 0, "ng-template", 30);
1293
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_62_ng_template_1_Template, 3, 0, "ng-template", 30);
1094
1294
  i0.ɵɵelementStart(2, "div", 36);
1095
- i0.ɵɵelement(3, "mj-user-view-grid", 175);
1295
+ i0.ɵɵelement(3, "mj-user-view-grid", 201);
1096
1296
  i0.ɵɵelementEnd()();
1097
1297
  } if (rf & 2) {
1098
1298
  const ctx_r1 = i0.ɵɵnextContext(2);
1099
1299
  i0.ɵɵproperty("expanded", false);
1100
1300
  i0.ɵɵadvance(3);
1101
- i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Result Cache"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode())("BottomMargin", 0);
1301
+ i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Result Cache"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode());
1102
1302
  } }
1103
- function AIPromptFormComponentExtended_form_1_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1303
+ function AIPromptFormComponentExtended_form_1_Conditional_63_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1104
1304
  i0.ɵɵelementStart(0, "span", 62);
1105
- i0.ɵɵelement(1, "i", 179);
1305
+ i0.ɵɵelement(1, "i", 205);
1106
1306
  i0.ɵɵtext(2, " Related Items ");
1107
1307
  i0.ɵɵelementEnd();
1108
1308
  } }
1109
- function AIPromptFormComponentExtended_form_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
1309
+ function AIPromptFormComponentExtended_form_1_Conditional_63_Template(rf, ctx) { if (rf & 1) {
1110
1310
  i0.ɵɵelementStart(0, "kendo-expansionpanel", 29);
1111
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_62_ng_template_1_Template, 3, 0, "ng-template", 30);
1112
- i0.ɵɵelementStart(2, "div", 36)(3, "div", 37)(4, "div")(5, "h6", 177);
1311
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Conditional_63_ng_template_1_Template, 3, 0, "ng-template", 30);
1312
+ i0.ɵɵelementStart(2, "div", 36)(3, "div", 37)(4, "div")(5, "h6", 203);
1113
1313
  i0.ɵɵtext(6, "AI Agents Using This Prompt");
1114
1314
  i0.ɵɵelementEnd();
1115
- i0.ɵɵelement(7, "mj-user-view-grid", 178);
1315
+ i0.ɵɵelement(7, "mj-user-view-grid", 204);
1116
1316
  i0.ɵɵelementEnd();
1117
- i0.ɵɵelementStart(8, "div")(9, "h6", 177);
1317
+ i0.ɵɵelementStart(8, "div")(9, "h6", 203);
1118
1318
  i0.ɵɵtext(10, "Prompts Using This as Result Selector");
1119
1319
  i0.ɵɵelementEnd();
1120
- i0.ɵɵelement(11, "mj-user-view-grid", 178);
1320
+ i0.ɵɵelement(11, "mj-user-view-grid", 204);
1121
1321
  i0.ɵɵelementEnd()()()();
1122
1322
  } if (rf & 2) {
1123
1323
  const ctx_r1 = i0.ɵɵnextContext(2);
1124
1324
  i0.ɵɵproperty("expanded", false);
1125
1325
  i0.ɵɵadvance(7);
1126
- i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Agent Prompts", "PromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Agent Prompts"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode())("BottomMargin", 0);
1326
+ i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Agent Prompts", "PromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Agent Prompts"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode());
1127
1327
  i0.ɵɵadvance(4);
1128
- i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Prompts", "ResultSelectorPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Prompts"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode())("BottomMargin", 0);
1328
+ i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("AI Prompts", "ResultSelectorPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("AI Prompts"))("AllowLoad", true)("EditMode", ctx_r1.GridEditMode());
1129
1329
  } }
1130
1330
  function AIPromptFormComponentExtended_form_1_Template(rf, ctx) { if (rf & 1) {
1131
1331
  i0.ɵɵelementStart(0, "form", 5, 0);
@@ -1165,22 +1365,22 @@ function AIPromptFormComponentExtended_form_1_Template(rf, ctx) { if (rf & 1) {
1165
1365
  i0.ɵɵelementStart(36, "div", 31);
1166
1366
  i0.ɵɵtemplate(37, AIPromptFormComponentExtended_form_1_Conditional_37_Template, 3, 0, "div", 32)(38, AIPromptFormComponentExtended_form_1_Conditional_38_Template, 13, 2, "div", 33)(39, AIPromptFormComponentExtended_form_1_Conditional_39_Template, 13, 2, "div", 34)(40, AIPromptFormComponentExtended_form_1_Conditional_40_Template, 4, 2, "div", 35);
1167
1367
  i0.ɵɵelementEnd()();
1168
- i0.ɵɵtemplate(41, AIPromptFormComponentExtended_form_1_Conditional_41_Template, 6, 2, "kendo-expansionpanel", 29);
1169
- i0.ɵɵelementStart(42, "kendo-expansionpanel", 29);
1170
- i0.ɵɵtemplate(43, AIPromptFormComponentExtended_form_1_ng_template_43_Template, 3, 0, "ng-template", 30);
1171
- i0.ɵɵelementStart(44, "div", 36)(45, "div", 37)(46, "div");
1172
- i0.ɵɵelement(47, "mj-form-field", 38);
1173
- i0.ɵɵtemplate(48, AIPromptFormComponentExtended_form_1_Conditional_48_Template, 1, 3, "mj-form-field", 39)(49, AIPromptFormComponentExtended_form_1_Conditional_49_Template, 1, 3, "mj-form-field", 40);
1174
- i0.ɵɵelement(50, "mj-form-field", 41);
1175
- i0.ɵɵelementEnd();
1176
- i0.ɵɵelementStart(51, "div");
1177
- i0.ɵɵelement(52, "mj-form-field", 42)(53, "mj-form-field", 43);
1178
- i0.ɵɵelementStart(54, "div", 44)(55, "label", 45);
1179
- i0.ɵɵtext(56, " Result Selector Prompt ");
1180
- i0.ɵɵelementEnd();
1181
- i0.ɵɵtemplate(57, AIPromptFormComponentExtended_form_1_Conditional_57_Template, 2, 1)(58, AIPromptFormComponentExtended_form_1_Conditional_58_Template, 2, 1, "span", 46);
1368
+ i0.ɵɵtemplate(41, AIPromptFormComponentExtended_form_1_Conditional_41_Template, 6, 2, "kendo-expansionpanel", 29)(42, AIPromptFormComponentExtended_form_1_Conditional_42_Template, 6, 2, "kendo-expansionpanel", 29);
1369
+ i0.ɵɵelementStart(43, "kendo-expansionpanel", 29);
1370
+ i0.ɵɵtemplate(44, AIPromptFormComponentExtended_form_1_ng_template_44_Template, 3, 0, "ng-template", 30);
1371
+ i0.ɵɵelementStart(45, "div", 36)(46, "div", 37)(47, "div");
1372
+ i0.ɵɵelement(48, "mj-form-field", 38);
1373
+ i0.ɵɵtemplate(49, AIPromptFormComponentExtended_form_1_Conditional_49_Template, 1, 3, "mj-form-field", 39)(50, AIPromptFormComponentExtended_form_1_Conditional_50_Template, 1, 3, "mj-form-field", 40);
1374
+ i0.ɵɵelement(51, "mj-form-field", 41);
1375
+ i0.ɵɵelementEnd();
1376
+ i0.ɵɵelementStart(52, "div");
1377
+ i0.ɵɵelement(53, "mj-form-field", 42)(54, "mj-form-field", 43);
1378
+ i0.ɵɵelementStart(55, "div", 44)(56, "label", 45);
1379
+ i0.ɵɵtext(57, " Result Selector Prompt ");
1380
+ i0.ɵɵelementEnd();
1381
+ i0.ɵɵtemplate(58, AIPromptFormComponentExtended_form_1_Conditional_58_Template, 2, 1)(59, AIPromptFormComponentExtended_form_1_Conditional_59_Template, 2, 1, "span", 46);
1182
1382
  i0.ɵɵelementEnd()()()()();
1183
- i0.ɵɵtemplate(59, AIPromptFormComponentExtended_form_1_Conditional_59_Template, 6, 2, "kendo-expansionpanel", 29)(60, AIPromptFormComponentExtended_form_1_Conditional_60_Template, 6, 2, "kendo-expansionpanel", 29)(61, AIPromptFormComponentExtended_form_1_Conditional_61_Template, 4, 6, "kendo-expansionpanel", 29)(62, AIPromptFormComponentExtended_form_1_Conditional_62_Template, 12, 11, "kendo-expansionpanel", 29);
1383
+ i0.ɵɵtemplate(60, AIPromptFormComponentExtended_form_1_Conditional_60_Template, 6, 2, "kendo-expansionpanel", 29)(61, AIPromptFormComponentExtended_form_1_Conditional_61_Template, 6, 2, "kendo-expansionpanel", 29)(62, AIPromptFormComponentExtended_form_1_Conditional_62_Template, 4, 5, "kendo-expansionpanel", 29)(63, AIPromptFormComponentExtended_form_1_Conditional_63_Template, 12, 9, "kendo-expansionpanel", 29);
1184
1384
  i0.ɵɵelementEnd()()();
1185
1385
  } if (rf & 2) {
1186
1386
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1211,15 +1411,17 @@ function AIPromptFormComponentExtended_form_1_Template(rf, ctx) { if (rf & 1) {
1211
1411
  i0.ɵɵadvance(3);
1212
1412
  i0.ɵɵconditional(ctx_r1.isLoadingTemplate ? 37 : !ctx_r1.record.TemplateID ? 38 : ctx_r1.templateNotFoundInDatabase ? 39 : 40);
1213
1413
  i0.ɵɵadvance(4);
1214
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 41 : -1);
1414
+ i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 41 : -1);
1415
+ i0.ɵɵadvance();
1416
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 42 : -1);
1215
1417
  i0.ɵɵadvance();
1216
1418
  i0.ɵɵproperty("expanded", false);
1217
1419
  i0.ɵɵadvance(5);
1218
1420
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1219
1421
  i0.ɵɵadvance();
1220
- i0.ɵɵconditional(ctx_r1.showParallelCount ? 48 : -1);
1422
+ i0.ɵɵconditional(ctx_r1.showParallelCount ? 49 : -1);
1221
1423
  i0.ɵɵadvance();
1222
- i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 49 : -1);
1424
+ i0.ɵɵconditional(ctx_r1.showParallelConfigParam ? 50 : -1);
1223
1425
  i0.ɵɵadvance();
1224
1426
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1225
1427
  i0.ɵɵadvance(2);
@@ -1227,22 +1429,22 @@ function AIPromptFormComponentExtended_form_1_Template(rf, ctx) { if (rf & 1) {
1227
1429
  i0.ɵɵadvance();
1228
1430
  i0.ɵɵproperty("record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
1229
1431
  i0.ɵɵadvance(4);
1230
- i0.ɵɵconditional(ctx_r1.EditMode ? 57 : 58);
1432
+ i0.ɵɵconditional(ctx_r1.EditMode ? 58 : 59);
1231
1433
  i0.ɵɵadvance(2);
1232
- i0.ɵɵconditional(ctx_r1.showOutputExample ? 59 : -1);
1434
+ i0.ɵɵconditional(ctx_r1.showOutputExample ? 60 : -1);
1233
1435
  i0.ɵɵadvance();
1234
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 60 : -1);
1436
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 61 : -1);
1235
1437
  i0.ɵɵadvance();
1236
- i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 61 : -1);
1438
+ i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 62 : -1);
1237
1439
  i0.ɵɵadvance();
1238
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 62 : -1);
1440
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 63 : -1);
1239
1441
  } }
1240
1442
  function AIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1241
- const _r29 = i0.ɵɵgetCurrentView();
1242
- i0.ɵɵelementStart(0, "kendo-window", 180);
1243
- i0.ɵɵlistener("close", function AIPromptFormComponentExtended_Conditional_2_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1244
- i0.ɵɵelementStart(1, "mj-ai-test-harness", 181);
1245
- i0.ɵɵlistener("visibilityChange", function AIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1443
+ const _r30 = i0.ɵɵgetCurrentView();
1444
+ i0.ɵɵelementStart(0, "kendo-window", 206);
1445
+ i0.ɵɵlistener("close", function AIPromptFormComponentExtended_Conditional_2_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
1446
+ i0.ɵɵelementStart(1, "mj-ai-test-harness", 207);
1447
+ i0.ɵɵlistener("visibilityChange", function AIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
1246
1448
  i0.ɵɵelementEnd()();
1247
1449
  } if (rf & 2) {
1248
1450
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1265,7 +1467,9 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
1265
1467
  this.cdr = cdr;
1266
1468
  this.template = null;
1267
1469
  this.templateContent = null;
1470
+ this.templateParams = [];
1268
1471
  this.isLoadingTemplate = true; // Default to loading state
1472
+ this.isLoadingTemplateParams = false;
1269
1473
  this.templateNotFoundInDatabase = false;
1270
1474
  this.showTestHarness = false;
1271
1475
  // Model management
@@ -1355,8 +1559,11 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
1355
1559
  console.warn(`Template with ID ${this.record.TemplateID} not found`);
1356
1560
  }
1357
1561
  else {
1358
- // Load template content
1359
- await this.loadTemplateContent();
1562
+ // Load template content and parameters
1563
+ await Promise.all([
1564
+ this.loadTemplateContent(),
1565
+ this.loadTemplateParams()
1566
+ ]);
1360
1567
  }
1361
1568
  }
1362
1569
  catch (error) {
@@ -1378,6 +1585,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
1378
1585
  }
1379
1586
  else {
1380
1587
  this.template = null;
1588
+ this.templateParams = [];
1381
1589
  }
1382
1590
  }
1383
1591
  /**
@@ -1449,6 +1657,33 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
1449
1657
  this.templateContent = null;
1450
1658
  }
1451
1659
  }
1660
+ /**
1661
+ * Loads template parameters for the current template
1662
+ */
1663
+ async loadTemplateParams() {
1664
+ if (!this.template?.ID) {
1665
+ this.templateParams = [];
1666
+ return;
1667
+ }
1668
+ this.isLoadingTemplateParams = true;
1669
+ try {
1670
+ const rv = new RunView();
1671
+ const results = await rv.RunView({
1672
+ EntityName: 'Template Params',
1673
+ ExtraFilter: `TemplateID = '${this.template.ID}'`,
1674
+ OrderBy: 'Name ASC',
1675
+ ResultType: 'entity_object'
1676
+ });
1677
+ this.templateParams = results.Results || [];
1678
+ }
1679
+ catch (error) {
1680
+ console.error('Error loading template params:', error);
1681
+ this.templateParams = [];
1682
+ }
1683
+ finally {
1684
+ this.isLoadingTemplateParams = false;
1685
+ }
1686
+ }
1452
1687
  /**
1453
1688
  * Opens the AI prompt execution dialog
1454
1689
  */
@@ -2263,23 +2498,73 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
2263
2498
  return 'fa-times-circle';
2264
2499
  return 'fa-spinner fa-spin';
2265
2500
  }
2501
+ /**
2502
+ * Gets the icon for a template parameter type
2503
+ */
2504
+ getParamTypeIcon(type) {
2505
+ switch (type) {
2506
+ case 'Scalar': return 'fa-font';
2507
+ case 'Array': return 'fa-list';
2508
+ case 'Object': return 'fa-cube';
2509
+ case 'Record': return 'fa-file-alt';
2510
+ case 'Entity': return 'fa-table';
2511
+ default: return 'fa-question';
2512
+ }
2513
+ }
2514
+ /**
2515
+ * Gets the color for a template parameter type
2516
+ */
2517
+ getParamTypeColor(type) {
2518
+ switch (type) {
2519
+ case 'Scalar': return '#17a2b8';
2520
+ case 'Array': return '#28a745';
2521
+ case 'Object': return '#6f42c1';
2522
+ case 'Record': return '#fd7e14';
2523
+ case 'Entity': return '#dc3545';
2524
+ default: return '#6c757d';
2525
+ }
2526
+ }
2527
+ /**
2528
+ * Gets a friendly description of the parameter type
2529
+ */
2530
+ getParamTypeDescription(param) {
2531
+ switch (param.Type) {
2532
+ case 'Scalar':
2533
+ return 'Single value (text, number, date, etc.)';
2534
+ case 'Array':
2535
+ return 'List of values';
2536
+ case 'Object':
2537
+ return 'JSON object with multiple properties';
2538
+ case 'Record':
2539
+ if (param.EntityID) {
2540
+ return `Single record from entity`;
2541
+ }
2542
+ return 'Single database record';
2543
+ case 'Entity':
2544
+ if (param.EntityID) {
2545
+ return `Multiple records from entity`;
2546
+ }
2547
+ return 'Entity data collection';
2548
+ default:
2549
+ return 'Unknown type';
2550
+ }
2551
+ }
2266
2552
  static { this.ɵfac = function AIPromptFormComponentExtended_Factory(t) { return new (t || AIPromptFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
2267
2553
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptFormComponentExtended, selectors: [["mj-ai-prompt-form"]], viewQuery: function AIPromptFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
2268
2554
  i0.ɵɵviewQuery(_c0, 5);
2269
2555
  } if (rf & 2) {
2270
2556
  let _t;
2271
2557
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateEditor = _t.first);
2272
- } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 4, consts: [["form", "ngForm"], ["templateEditor", ""], ["mjFillContainer", "", 1, "record-form-container", 3, "bottomMargin", "rightMargin"], ["class", "record-form", "mjFillContainer", "", 4, "ngIf"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], ["mjFillContainer", "", 1, "record-form"], [3, "form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "#6f42c1", "font-size", "1.4em"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "#6c757d"], [2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "themeColor", "size"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "#6c757d"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#6c757d"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], [2, "color", "#495057"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "#6c757d", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "textField", "Name", "valueField", "ID", "placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "data", "valuePrimitive", "filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "textField", "Name", "valueField", "ID", "placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive", "filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "#6c757d"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "click", "themeColor", "size"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "#6c757d", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "#495057"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-plus"], ["kendoButton", "", 3, "click", "fillMode"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [2, "flex", "1", "background", "white", "border-radius", "6px", "border", "1px solid #e9ecef"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], [1, "model-management", 2, "border", "1px solid #dee2e6", "border-radius", "6px", "background", "#f8f9fa"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "fa-solid", "fa-microchip", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "#6c757d", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["kendoButton", "", "fillMode", "outline", "themeColor", "primary", "size", "small", 3, "click"], [2, "padding", "12px 16px", "background", "#e3f2fd", "border-bottom", "1px solid #bbdefb", "color", "#1565c0", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "#e9ecef", "font-weight", "600", "font-size", "0.85em", "color", "#495057", "border-bottom", "1px solid #dee2e6"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "#6c757d"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "#f8f9fa", "border-top", "1px solid #dee2e6"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid #e9ecef", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "#6c757d"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["textField", "Name", "valueField", "ID", "placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "data", "valuePrimitive", "filterable"], [1, "model-vendor"], [1, "model-created"], [2, "color", "#6c757d", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid #e9ecef", "background", "#f8f9fa", "font-size", "0.85em", "color", "#6c757d"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "#fff", "border", "1px solid #dee2e6", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["textField", "Name", "valueField", "ID", "placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "name", "data", "valuePrimitive", "filterable"], [2, "color", "#6c757d", "font-style", "italic", "font-size", "0.9em"], ["textField", "Name", "valueField", "ID", "placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "data", "valuePrimitive", "filterable"], ["textField", "Name", "valueField", "ID", "placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "data", "valuePrimitive", "filterable"], ["kendoDropDownListItemTemplate", ""], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "#6c757d", "font-size", "0.9em"], [2, "font-size", "0.9em"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "#495057"], ["textField", "text", "valueField", "value", "placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "data", "valuePrimitive"], ["placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "min", "step", "format"], ["placeholder", "Parameter name...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["kendoButton", "", "fillMode", "outline", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [2, "padding", "8px", "color", "#6c757d", "font-style", "italic"], ["name", "resultSelectorPromptID", "textField", "text", "valueField", "value", "placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "data", "valuePrimitive", "filterable"], ["name", "resultSelectorPromptID", "textField", "text", "valueField", "value", "placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "data", "valuePrimitive", "filterable"], [2, "padding", "16px"], [2, "background", "#f8f9fa", "border", "1px solid #dee2e6", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid #dee2e6", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "#6c757d", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "#6c757d"], [1, "fa-solid", "fa-history", 2, "color", "#6c757d"], [2, "color", "#6c757d", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [2, "color", "#6c757d", "font-size", "0.85em"], ["selection", "single"], ["kendoButton", "", "size", "small", 3, "click", "selected"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid #e9ecef", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "#495057"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "color", "#495057"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "#e9ecef", "color", "#495057", "font-size", "0.85em", "font-weight", "500"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [2, "height", "300px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode", "BottomMargin"], [1, "fa-solid", "fa-database", 2, "color", "#6c757d"], [2, "margin", "0 0 12px 0", "color", "#495057"], [2, "height", "200px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode", "BottomMargin"], [1, "fa-solid", "fa-link", 2, "color", "#6c757d"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function AIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2558
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [1, "record-form-container"], ["class", "record-form", 4, "ngIf"], [3, "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [1, "record-form"], [3, "form"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "#6f42c1", "font-size", "1.4em"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "#6c757d"], [2, "color", "#6c757d"], [2, "color", "#495057", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "#6c757d"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "themeColor", "size"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "white", "border-top", "2px solid #e9ecef", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "expanded"], ["kendoExpansionPanelTitleDirective", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "#6c757d"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#6c757d"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], [2, "color", "#495057"], ["name", "promptName", "placeholder", "Enter prompt name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "textField", "text", "valueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "#6c757d", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "textField", "Name", "valueField", "ID", "placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "data", "valuePrimitive", "filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "textField", "Name", "valueField", "ID", "placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "data", "valuePrimitive", "filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "#6c757d"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], ["kendoButton", "", "title", "Run AI Prompt Test Harness", 3, "click", "themeColor", "size"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "#6c757d", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "#495057"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-plus"], ["kendoButton", "", 3, "click", "fillMode"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [2, "flex", "1", "background", "white", "border-radius", "6px", "border", "1px solid #e9ecef"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "#6c757d"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#6f42c1", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "#6c757d", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid #e9ecef", "border-radius", "8px", "padding", "16px", "background", "#f8f9fa", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "#e3f2fd", "border-radius", "6px", "border", "1px solid #bbdefb"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "#1976d2", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "#1565c0", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid #e9ecef", "border-radius", "8px", "padding", "16px", "background", "#f8f9fa", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "#495057", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "#6c757d", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "#495057"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "#6c757d"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "white", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid #dee2e6"], [2, "display", "block", "font-size", "0.8em", "color", "#6c757d", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "#495057", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "#495057", "word-break", "break-all"], [1, "model-management", 2, "border", "1px solid #dee2e6", "border-radius", "6px", "background", "#f8f9fa"], [1, "fa-solid", "fa-microchip", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["kendoButton", "", "fillMode", "outline", "themeColor", "primary", "size", "small", 3, "click"], [2, "padding", "12px 16px", "background", "#e3f2fd", "border-bottom", "1px solid #bbdefb", "color", "#1565c0", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "#e9ecef", "font-weight", "600", "font-size", "0.85em", "color", "#495057", "border-bottom", "1px solid #dee2e6"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "#6c757d"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "#f8f9fa", "border-top", "1px solid #dee2e6"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid #e9ecef", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "#6c757d"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["textField", "Name", "valueField", "ID", "placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "data", "valuePrimitive", "filterable"], [1, "model-vendor"], [1, "model-created"], [2, "color", "#6c757d", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid #e9ecef", "background", "#f8f9fa", "font-size", "0.85em", "color", "#6c757d"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "#fff", "border", "1px solid #dee2e6", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["textField", "Name", "valueField", "ID", "placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "name", "data", "valuePrimitive", "filterable"], [2, "color", "#6c757d", "font-style", "italic", "font-size", "0.9em"], ["textField", "Name", "valueField", "ID", "placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "data", "valuePrimitive", "filterable"], ["textField", "Name", "valueField", "ID", "placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "data", "valuePrimitive", "filterable"], ["kendoDropDownListItemTemplate", ""], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "#6c757d", "font-size", "0.9em"], [2, "font-size", "0.9em"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["kendoButton", "", "fillMode", "flat", "themeColor", "error", "size", "small", "title", "Remove model", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "#495057", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "#495057"], ["textField", "text", "valueField", "value", "placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "data", "valuePrimitive"], ["placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "min", "step", "format"], ["placeholder", "Parameter name...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["kendoButton", "", "fillMode", "outline", "themeColor", "success", "size", "small", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "#6c757d"], [2, "padding", "8px", "color", "#6c757d", "font-style", "italic"], ["name", "resultSelectorPromptID", "textField", "text", "valueField", "value", "placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "data", "valuePrimitive", "filterable"], ["name", "resultSelectorPromptID", "textField", "text", "valueField", "value", "placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "valueChange", "ngModel", "data", "valuePrimitive", "filterable"], [2, "padding", "16px"], [2, "background", "#f8f9fa", "border", "1px solid #dee2e6", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid #dee2e6", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "#6c757d", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "#6c757d"], [1, "fa-solid", "fa-history", 2, "color", "#6c757d"], [2, "color", "#6c757d", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], ["selection", "single"], ["kendoButton", "", "size", "small", 3, "click", "selected"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid #e9ecef", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "#f8f9fa", "border-bottom", "2px solid #e9ecef"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "#495057"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "#495057"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid #f1f3f5"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "#495057"], [2, "padding", "12px", "text-align", "right", "color", "#495057"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "#e9ecef", "color", "#495057", "font-size", "0.85em", "font-weight", "500"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [2, "height", "300px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode"], [1, "fa-solid", "fa-database", 2, "color", "#6c757d"], [2, "margin", "0 0 12px 0", "color", "#495057"], [2, "height", "200px", 3, "Params", "NewRecordValues", "AllowLoad", "EditMode"], [1, "fa-solid", "fa-link", 2, "color", "#6c757d"], [3, "close", "width", "height", "minWidth", "minHeight", "draggable", "resizable", "state", "title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function AIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2273
2559
  i0.ɵɵelementStart(0, "div", 2);
2274
- i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Template, 63, 35, "form", 3)(2, AIPromptFormComponentExtended_Conditional_2_Template, 2, 12, "kendo-window", 4);
2560
+ i0.ɵɵtemplate(1, AIPromptFormComponentExtended_form_1_Template, 64, 36, "form", 3)(2, AIPromptFormComponentExtended_Conditional_2_Template, 2, 12, "kendo-window", 4);
2275
2561
  i0.ɵɵelementEnd();
2276
2562
  } if (rf & 2) {
2277
- i0.ɵɵproperty("bottomMargin", 20)("rightMargin", 5);
2278
2563
  i0.ɵɵadvance();
2279
2564
  i0.ɵɵproperty("ngIf", ctx.record);
2280
2565
  i0.ɵɵadvance();
2281
2566
  i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
2282
- } }, dependencies: [i3.NgIf, i4.ɵNgNoValidate, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, i5.ExpansionPanelComponent, i5.ExpansionPanelTitleDirective, i6.WindowComponent, i7.TextAreaComponent, i7.TextBoxComponent, i7.NumericTextBoxComponent, i8.ItemTemplateDirective, i8.DropDownListComponent, i8.DropDownTreeComponent, i9.ButtonGroupComponent, i9.ButtonComponent, i10.UserViewGridComponent, i11.MJFormField, i12.FormToolbarComponent, i13.FillContainer, i14.CodeEditorComponent, i15.TemplateEditorComponent, i16.AITestHarnessComponent, i3.DatePipe], styles: [".record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid #e9ecef;\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: #fff;\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%], \n.no-template-state[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: #fff;\n border-radius: 6px;\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n \n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n \n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: rgba(0,0,0,0.02);\n border-radius: 4px;\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: #f8f9fa;\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: white;\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: #e9ecef !important;\n}"] }); }
2567
+ } }, dependencies: [i3.NgIf, i4.ɵNgNoValidate, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, i5.ExpansionPanelComponent, i5.ExpansionPanelTitleDirective, i6.WindowComponent, i7.TextAreaComponent, i7.TextBoxComponent, i7.NumericTextBoxComponent, i8.ItemTemplateDirective, i8.DropDownListComponent, i8.DropDownTreeComponent, i9.ButtonGroupComponent, i9.ButtonComponent, i10.UserViewGridComponent, i11.MJFormField, i12.FormToolbarComponent, i13.CodeEditorComponent, i14.TemplateEditorComponent, i15.AITestHarnessComponent, i3.DatePipe], styles: [".record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid #e9ecef;\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: #fff;\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%], \n.no-template-state[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.invalid-template-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: #fff;\n border-radius: 6px;\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n \n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n \n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: rgba(0,0,0,0.02);\n border-radius: 4px;\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: #f8f9fa;\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: white;\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: #e9ecef !important;\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n \n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n \n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
2283
2568
  };
2284
2569
  AIPromptFormComponentExtended = __decorate([
2285
2570
  RegisterClass(BaseFormComponent, 'AI Prompts')
@@ -2287,7 +2572,7 @@ AIPromptFormComponentExtended = __decorate([
2287
2572
  export { AIPromptFormComponentExtended };
2288
2573
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptFormComponentExtended, [{
2289
2574
  type: Component,
2290
- args: [{ selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\" mjFillContainer [bottomMargin]=\"20\" [rightMargin]=\"5\">\n <form *ngIf=\"record\" class=\"record-form\" #form=\"ngForm\" mjFillContainer>\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: #6f42c1; font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\" \n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\" \n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <kendo-dropdownlist [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [data]=\"availablePromptTypes\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n }\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\" \n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Parallelization:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n \n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n \n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: #6c757d; font-size: 0.9em; font-weight: normal;\">\u2022 {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #6c757d;\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: #495057;\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters. \n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Editor -->\n <div style=\"flex: 1; background: white; border-radius: 6px; border: 1px solid #e9ecef;\">\n <mj-template-editor \n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </kendo-expansionpanel> \n\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: #6c757d; font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid #dee2e6; border-radius: 6px; background: #f8f9fa;\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode) {\n <div style=\"margin-top: 10px;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"primary\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: #e3f2fd; border-bottom: 1px solid #bbdefb; color: #1565c0; font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (1, 2, 3...). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: #e9ecef; font-weight: 600; font-size: 0.85em; color: #495057; border-bottom: 1px solid #dee2e6;\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: #6c757d;\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n \n @for (model of promptModels; track model.ID || $index; let i = $index) {\n <div class=\"model-row\" \n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? '#e3f2fd' : 'white')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid #e9ecef; align-items: start; transition: background 0.2s, opacity 0.2s;\">\n \n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: #6c757d;\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ i + 1 }} - Lower numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n \n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <kendo-dropdownlist [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + i\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($event, i)\"\n style=\"width: 100%;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n \n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <kendo-dropdownlist [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + i\"\n [data]=\"getVendorsForModelSync(model.ModelID)\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <span [style.color]=\"getVendorStatusColor(model.ModelID, dataItem.ID)\">\n {{ dataItem.Name }}\n @if (getModelVendorStatus(model.ModelID, dataItem.ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, dataItem.ID) }})</span>\n }\n </span>\n </ng-template>\n </kendo-dropdownlist>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: #6c757d; font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: #6c757d; font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: #6c757d; font-size: 0.9em;\">-</span>\n }\n }\n </div>\n \n \n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: #6c757d; font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n \n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n </div>\n <button kendoButton fillMode=\"flat\" themeColor=\"error\" size=\"small\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n \n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid #e9ecef; background: #f8f9fa; font-size: 0.85em; color: #6c757d;\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n @if (model.ConfigurationID) {\n <span><strong>Configuration:</strong> {{ model.ConfigurationID }}</span>\n }\n </div>\n \n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n \n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: #495057;\">Parallel Mode</label>\n <kendo-dropdownlist [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-dropdownlist>\n </div>\n \n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: #495057;\">Parallel Count</label>\n <kendo-numerictextbox [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [min]=\"1\"\n [step]=\"1\"\n [format]=\"'n0'\"\n placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-numerictextbox>\n </div>\n }\n \n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: #495057;\">Config Parameter</label>\n <kendo-textbox [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-textbox>\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n \n @if (EditMode) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: #f8f9fa; border-top: 1px solid #dee2e6;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"success\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Advanced Configuration Expansion Panel -->\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n \n <!-- Left Column -->\n <div>\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n @if (showParallelCount) {\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n \n @if (showParallelConfigParam) {\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n </div>\n \n <!-- Right Column -->\n <div>\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <kendo-dropdowntree \n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [data]=\"resultSelectorTreeData\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (valueChange)=\"onResultSelectorChange($event)\">\n </kendo-dropdowntree>\n }\n } @else {\n <span style=\"color: #495057;\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">\u2022 Required for object output type</span>\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor \n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid #dee2e6; border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: #6c757d; font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: #6c757d;\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: #6c757d; font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n \n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: #6c757d;\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: #6c757d; font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: #6c757d; font-size: 0.85em;\">Sort by:</span>\n <kendo-buttongroup selection=\"single\">\n <button kendoButton \n [selected]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"small\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton \n [selected]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"small\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton \n [selected]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"small\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton \n [selected]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"small\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </kendo-buttongroup>\n </div>\n </div>\n \n <!-- Execution History Table -->\n <div style=\"border: 1px solid #e9ecef; border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid #f1f3f5;\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\" \n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: #e9ecef; \n color: #495057; font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button kendoButton \n fillMode=\"flat\"\n size=\"small\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: #6c757d;\"></i>\n Result Cache\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Result Cache','AIPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Result Cache')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n [BottomMargin]=\"0\"\n style=\"height: 300px;\">\n </mj-user-view-grid>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: #6c757d;\"></i>\n Related Items\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: #495057;\">AI Agents Using This Prompt</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\" \n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n [BottomMargin]=\"0\"\n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n \n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: #495057;\">Prompts Using This as Result Selector</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Prompts','ResultSelectorPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n [BottomMargin]=\"0\"\n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n\n \n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run AI Prompt - {{ record.Name || 'Untitled' }}\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </kendo-window>\n }\n</div>", styles: [".record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid #e9ecef;\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: #fff;\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: #fff;\n border-radius: 6px;\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n \n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n \n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: rgba(0,0,0,0.02);\n border-radius: 4px;\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: #f8f9fa;\n}\n\n.history-row.even-row {\n background: white;\n}\n\n.history-row:hover {\n background: #e9ecef !important;\n}"] }]
2575
+ args: [{ selector: 'mj-ai-prompt-form', template: "<div class=\"record-form-container\">\n <form *ngIf=\"record\" class=\"record-form\" #form=\"ngForm\" >\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: #6f42c1; font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\" \n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\" \n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <kendo-dropdownlist [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [data]=\"availablePromptTypes\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n }\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\" \n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Parallelization:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n \n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n \n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: #6c757d; font-size: 0.9em; font-weight: normal;\">\u2022 {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #6c757d;\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: #495057;\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters. \n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button kendoButton [fillMode]=\"'outline'\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Editor -->\n <div style=\"flex: 1; background: white; border-radius: 6px; border: 1px solid #e9ecef;\">\n <mj-template-editor \n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </kendo-expansionpanel> \n\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Template Parameters\n <span class=\"badge\" style=\"background: #6f42c1; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: #6c757d; font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n \n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\n <i class=\"fa-solid fa-info-circle\"></i> This template has no parameters defined\n </div>\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\" \n style=\"border: 1px solid #e9ecef; border-radius: 8px; padding: 16px; background: #f8f9fa; transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n \n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\" \n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: #495057; font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\" \n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: #6c757d; font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n \n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n \n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: #6c757d;\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n \n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: #495057; word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n \n @if (param.EntityID) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: #495057;\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n \n @if (param.LinkedParameterName) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: #495057;\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n \n @if (param.ExtraFilter) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: #495057; word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n \n @if (param.RecordID) {\n <div style=\"background: white; padding: 8px 12px; border-radius: 4px; border: 1px solid #dee2e6;\">\n <label style=\"display: block; font-size: 0.8em; color: #6c757d; margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: #495057;\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n \n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: #e3f2fd; border-radius: 6px; border: 1px solid #bbdefb;\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: #1976d2; margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: #1565c0; line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters. \n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: #6c757d; font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid #dee2e6; border-radius: 6px; background: #f8f9fa;\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: #6c757d;\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode) {\n <div style=\"margin-top: 10px;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"primary\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: #e3f2fd; border-bottom: 1px solid #bbdefb; color: #1565c0; font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (1, 2, 3...). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: #e9ecef; font-weight: 600; font-size: 0.85em; color: #495057; border-bottom: 1px solid #dee2e6;\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: #6c757d;\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n \n @for (model of promptModels; track model.ID || $index; let i = $index) {\n <div class=\"model-row\" \n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? '#e3f2fd' : 'white')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid #e9ecef; align-items: start; transition: background 0.2s, opacity 0.2s;\">\n \n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: #6c757d;\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ i + 1 }} - Lower numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n \n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <kendo-dropdownlist [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + i\"\n [data]=\"availableModels\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a model...\"\n (valueChange)=\"onModelChange($event, i)\"\n style=\"width: 100%;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n \n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <kendo-dropdownlist [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + i\"\n [data]=\"getVendorsForModelSync(model.ModelID)\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <span [style.color]=\"getVendorStatusColor(model.ModelID, dataItem.ID)\">\n {{ dataItem.Name }}\n @if (getModelVendorStatus(model.ModelID, dataItem.ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, dataItem.ID) }})</span>\n }\n </span>\n </ng-template>\n </kendo-dropdownlist>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: #6c757d; font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: #6c757d; font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: #6c757d; font-size: 0.9em;\">-</span>\n }\n }\n </div>\n \n \n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: #6c757d; font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n \n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button kendoButton fillMode=\"flat\" size=\"small\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n </div>\n <button kendoButton fillMode=\"flat\" themeColor=\"error\" size=\"small\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n \n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid #e9ecef; background: #f8f9fa; font-size: 0.85em; color: #6c757d;\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n @if (model.ConfigurationID) {\n <span><strong>Configuration:</strong> {{ model.ConfigurationID }}</span>\n }\n </div>\n \n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n \n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: #495057;\">Parallel Mode</label>\n <kendo-dropdownlist [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-dropdownlist>\n </div>\n \n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: #495057;\">Parallel Count</label>\n <kendo-numerictextbox [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [min]=\"1\"\n [step]=\"1\"\n [format]=\"'n0'\"\n placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-numerictextbox>\n </div>\n }\n \n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: #495057;\">Config Parameter</label>\n <kendo-textbox [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </kendo-textbox>\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n \n @if (EditMode) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: #f8f9fa; border-top: 1px solid #dee2e6;\">\n <button kendoButton fillMode=\"outline\" themeColor=\"success\" size=\"small\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Advanced Configuration Expansion Panel -->\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n \n <!-- Left Column -->\n <div>\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n @if (showParallelCount) {\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n \n @if (showParallelConfigParam) {\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n </div>\n \n <!-- Right Column -->\n <div>\n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n <mj-form-field \n [record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n \n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: #6c757d; font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <kendo-dropdowntree \n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [data]=\"resultSelectorTreeData\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [filterable]=\"true\"\n placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (valueChange)=\"onResultSelectorChange($event)\">\n </kendo-dropdowntree>\n }\n } @else {\n <span style=\"color: #495057;\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">\u2022 Required for object output type</span>\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor \n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid #dee2e6; border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: #6c757d; font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: #6c757d;\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: #6c757d; font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n \n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: #6c757d;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: #6c757d;\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: #6c757d; font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: #6c757d; font-size: 0.85em;\">Sort by:</span>\n <kendo-buttongroup selection=\"single\">\n <button kendoButton \n [selected]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"small\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton \n [selected]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"small\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton \n [selected]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"small\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button kendoButton \n [selected]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"small\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\" \n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </kendo-buttongroup>\n </div>\n </div>\n \n <!-- Execution History Table -->\n <div style=\"border: 1px solid #e9ecef; border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: #495057;\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: #495057;\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: #495057;\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid #f1f3f5;\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\" \n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: #6c757d;\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: #495057;\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: #495057;\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: #e9ecef; \n color: #495057; font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button kendoButton \n fillMode=\"flat\"\n size=\"small\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: #6c757d;\"></i>\n Result Cache\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Result Cache','AIPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Result Cache')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 300px;\">\n </mj-user-view-grid>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: #6c757d;\"></i>\n Related Items\n </span>\n </ng-template>\n \n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: #495057;\">AI Agents Using This Prompt</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\" \n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n \n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: #495057;\">Prompts Using This as Result Selector</h6>\n <mj-user-view-grid \n [Params]=\"BuildRelationshipViewParamsByEntityName('AI Prompts','ResultSelectorPromptID')\" \n [NewRecordValues]=\"NewRecordValues('AI Prompts')\"\n [AllowLoad]=\"true\"\n [EditMode]=\"GridEditMode()\" \n style=\"height: 200px;\">\n </mj-user-view-grid>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n\n \n <!-- AI Prompt Test Harness -->\n @if (showTestHarness) {\n <kendo-window \n [width]=\"1200\" \n [height]=\"800\" \n [minWidth]=\"800\"\n [minHeight]=\"600\"\n [draggable]=\"true\"\n [resizable]=\"true\"\n [state]=\"'default'\"\n (close)=\"onTestHarnessVisibilityChanged(false)\"\n title=\"Run AI Prompt - {{ record.Name || 'Untitled' }}\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </kendo-window>\n }\n</div>", styles: [".record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid #e9ecef;\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: #fff;\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: #fff;\n border-radius: 6px;\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n \n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n \n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: rgba(0,0,0,0.02);\n border-radius: 4px;\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: #f8f9fa;\n}\n\n.history-row.even-row {\n background: white;\n}\n\n.history-row:hover {\n background: #e9ecef !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n \n .parameter-card h6 {\n font-size: 0.95em;\n }\n \n .type-badge {\n font-size: 0.7em !important;\n }\n}"] }]
2291
2576
  }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], { templateEditor: [{
2292
2577
  type: ViewChild,
2293
2578
  args: ['templateEditor']