@memberjunction/ng-core-entity-forms 5.4.1 → 5.5.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 (345) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -5
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  4. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +3 -2
  6. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +22 -22
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  10. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +9 -8
  11. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  12. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +4 -3
  14. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -5
  17. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  18. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +10 -10
  19. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  20. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  21. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +4 -3
  22. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  23. package/dist/lib/custom/Entities/entity-form.component.d.ts +2 -0
  24. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  25. package/dist/lib/custom/Entities/entity-form.component.js +15 -11
  26. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  27. package/dist/lib/custom/Lists/list-form.component.js +7 -7
  28. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  29. package/dist/lib/custom/Queries/query-form.component.js +4 -4
  30. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  31. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +4 -0
  32. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  33. package/dist/lib/custom/Tests/test-suite-form.component.js +13 -5
  34. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  35. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  36. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +3 -2
  37. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  38. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  39. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +4 -3
  40. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  41. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -1
  42. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +5 -4
  43. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  44. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +1 -0
  45. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  46. package/dist/lib/custom/shared/entity-selector-dialog.component.js +7 -3
  47. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  48. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js +10 -10
  49. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +90 -90
  51. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  52. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +6 -6
  53. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  54. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +11 -11
  55. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  56. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +3 -3
  57. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  58. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js +13 -13
  59. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js.map +1 -1
  60. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +6 -6
  61. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  62. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +4 -4
  63. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
  64. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +13 -13
  65. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
  66. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +23 -23
  67. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js.map +1 -1
  68. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +58 -58
  69. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  70. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js +3 -3
  71. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js.map +1 -1
  72. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js +3 -3
  73. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js.map +1 -1
  74. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +10 -10
  75. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +3 -3
  77. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -55
  79. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js +10 -10
  81. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js.map +1 -1
  82. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +3 -3
  83. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +8 -8
  85. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js +3 -3
  87. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js +6 -6
  89. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js.map +1 -1
  90. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +13 -13
  91. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js +4 -4
  93. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js +5 -5
  95. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js.map +1 -1
  96. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +5 -5
  97. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  98. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +5 -5
  99. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
  100. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +44 -44
  101. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +11 -11
  103. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
  104. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js +6 -6
  105. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js.map +1 -1
  106. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js +6 -6
  107. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +10 -10
  109. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +19 -19
  111. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.d.ts.map +1 -1
  113. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +8 -26
  114. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  115. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +10 -10
  116. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +6 -6
  118. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +10 -10
  120. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +19 -19
  122. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +5 -5
  124. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  125. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js +10 -10
  126. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +8 -8
  128. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js +6 -6
  130. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js +6 -6
  132. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +23 -41
  135. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +18 -18
  137. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +14 -14
  139. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js +6 -6
  141. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +15 -15
  143. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js +3 -3
  145. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js.map +1 -1
  146. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js +3 -3
  147. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +10 -10
  149. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +10 -10
  151. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  152. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +14 -14
  153. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  154. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +10 -10
  155. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +10 -10
  157. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +17 -17
  159. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  160. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js +8 -8
  161. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js.map +1 -1
  162. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js +6 -6
  163. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +20 -20
  165. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +6 -6
  167. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  168. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js +4 -4
  169. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js.map +1 -1
  170. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js +5 -5
  171. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +6 -6
  173. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js +12 -12
  175. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js.map +1 -1
  176. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js +14 -14
  177. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js.map +1 -1
  178. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js +6 -6
  179. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +6 -6
  181. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  182. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +6 -6
  183. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  184. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js +22 -22
  185. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js.map +1 -1
  186. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js +3 -3
  187. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js.map +1 -1
  188. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js +6 -6
  189. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js.map +1 -1
  190. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js +3 -3
  191. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js.map +1 -1
  192. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +217 -217
  193. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  194. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +14 -14
  195. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
  196. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js +6 -6
  197. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js.map +1 -1
  198. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js +6 -6
  199. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js.map +1 -1
  200. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +14 -14
  201. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  202. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +6 -6
  203. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  204. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +3 -3
  205. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js +6 -6
  207. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js.map +1 -1
  208. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +18 -18
  209. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  210. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +9 -9
  211. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  212. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js +10 -10
  213. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js.map +1 -1
  214. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +12 -12
  215. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  216. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js +10 -10
  217. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js.map +1 -1
  218. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +14 -14
  219. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  220. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js +10 -10
  221. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js.map +1 -1
  222. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js +12 -12
  223. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js.map +1 -1
  224. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js +10 -10
  225. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js.map +1 -1
  226. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js +5 -5
  227. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js.map +1 -1
  228. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js +8 -8
  229. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js.map +1 -1
  230. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +4 -4
  231. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
  232. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +16 -16
  233. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js +6 -6
  235. package/dist/lib/generated/Entities/MJOutputDeliveryType/mjoutputdeliverytype.form.component.js.map +1 -1
  236. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js +6 -6
  237. package/dist/lib/generated/Entities/MJOutputFormatType/mjoutputformattype.form.component.js.map +1 -1
  238. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js +6 -6
  239. package/dist/lib/generated/Entities/MJOutputTriggerType/mjoutputtriggertype.form.component.js.map +1 -1
  240. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +8 -8
  241. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  242. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  243. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +74 -54
  244. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js +10 -10
  246. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.d.ts +10 -0
  248. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.d.ts.map +1 -0
  249. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.js +63 -0
  250. package/dist/lib/generated/Entities/MJQuerySQL/mjquerysql.form.component.js.map +1 -0
  251. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js +6 -6
  252. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js.map +1 -1
  253. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js +6 -6
  254. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js.map +1 -1
  255. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js +6 -6
  256. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js +6 -6
  258. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js +6 -6
  260. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js.map +1 -1
  261. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +3 -3
  262. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  263. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js +6 -6
  264. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js +10 -10
  266. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js +8 -8
  268. package/dist/lib/generated/Entities/MJReport/mjreport.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js +10 -10
  270. package/dist/lib/generated/Entities/MJReportCategory/mjreportcategory.form.component.js.map +1 -1
  271. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +18 -18
  272. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  273. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +28 -28
  274. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  275. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +6 -6
  276. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  277. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.d.ts +10 -0
  278. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.d.ts.map +1 -0
  279. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js +109 -0
  280. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js.map +1 -0
  281. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +6 -6
  282. package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +1 -1
  283. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +3 -3
  284. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  285. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +3 -3
  286. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
  287. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js +3 -3
  288. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js.map +1 -1
  289. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +10 -10
  290. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
  291. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +10 -10
  292. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  293. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +16 -16
  294. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  295. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js +3 -3
  296. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js.map +1 -1
  297. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +34 -34
  298. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
  299. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js +10 -10
  300. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js.map +1 -1
  301. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js +6 -6
  302. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js.map +1 -1
  303. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +6 -6
  304. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  305. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +4 -4
  306. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  307. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +14 -14
  308. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
  309. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js +3 -3
  310. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js.map +1 -1
  311. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +5 -5
  312. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  313. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +3 -3
  314. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  315. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js +4 -4
  316. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js.map +1 -1
  317. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +334 -334
  318. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  319. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js +6 -6
  320. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js.map +1 -1
  321. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +7 -7
  322. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  323. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +14 -14
  324. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  325. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js +10 -10
  326. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js.map +1 -1
  327. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js +6 -6
  328. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js.map +1 -1
  329. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +10 -10
  330. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  331. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +6 -6
  332. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  333. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +18 -18
  334. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
  335. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js +10 -10
  336. package/dist/lib/generated/Entities/MJWorkflow/mjworkflow.form.component.js.map +1 -1
  337. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js +6 -6
  338. package/dist/lib/generated/Entities/MJWorkflowEngine/mjworkflowengine.form.component.js.map +1 -1
  339. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +6 -6
  340. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  341. package/dist/lib/generated/generated-forms.module.d.ts +80 -78
  342. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  343. package/dist/lib/generated/generated-forms.module.js +25 -19
  344. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  345. package/package.json +30 -30
@@ -1 +1 @@
1
- {"version":3,"file":"add-action-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAa,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;;AAEvF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAMa,wBAAyB,YAAW,MAAM,EAAE,SAAS;IAuC9D,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IArCb,OAAO,EAAE,MAAM,CAAM;IACrB,SAAS,EAAE,MAAM,CAAM;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAGjC,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,4BAAmC;IAGhD,WAAW,uCAAgD;IAC3D,WAAW,4CAAqD;IAChE,gBAAgB,uCAAgD;IAChE,aAAa,sCAA+C;IAC5D,gBAAgB,+BAA+C;IAC/D,UAAU,2BAAuC;IAGjD,aAAa,6BAAuB;IACpC,mBAAmB,0BAAsC;IACzD,SAAS,mCAAgD;IACzD,kBAAkB,cAAqB;IAGvC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;gBAGS,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,iBAAiB;IAGhC,QAAQ;IAMR,WAAW;YAKG,cAAc;YAad,wBAAwB;IAmCtC,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,wBAAwB;IAgBhC,cAAc,CAAC,UAAU,EAAE,MAAM;IAIjC,cAAc;IAKd,qBAAqB,CAAC,MAAM,EAAE,iBAAiB;IA4B/C,WAAW;IAIX,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAsBhD,MAAM;IAKN,kBAAkB;yCAzSP,wBAAwB;2CAAxB,wBAAwB;CAuTpC"}
1
+ {"version":3,"file":"add-action-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAa,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;;AAGvF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAMa,wBAAyB,YAAW,MAAM,EAAE,SAAS;IAuC9D,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IArCb,OAAO,EAAE,MAAM,CAAM;IACrB,SAAS,EAAE,MAAM,CAAM;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAGjC,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,4BAAmC;IAGhD,WAAW,uCAAgD;IAC3D,WAAW,4CAAqD;IAChE,gBAAgB,uCAAgD;IAChE,aAAa,sCAA+C;IAC5D,gBAAgB,+BAA+C;IAC/D,UAAU,2BAAuC;IAGjD,aAAa,6BAAuB;IACpC,mBAAmB,0BAAsC;IACzD,SAAS,mCAAgD;IACzD,kBAAkB,cAAqB;IAGvC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;gBAGS,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,iBAAiB;IAGhC,QAAQ;IAMR,WAAW;YAKG,cAAc;YAad,wBAAwB;IAmCtC,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,wBAAwB;IAgBhC,cAAc,CAAC,UAAU,EAAE,MAAM;IAIjC,cAAc;IAKd,qBAAqB,CAAC,MAAM,EAAE,iBAAiB;IA4B/C,WAAW;IAIX,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAsBhD,MAAM;IAKN,kBAAkB;yCAzSP,wBAAwB;2CAAxB,wBAAwB;CAuTpC"}
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';
4
4
  import { RunView } from '@memberjunction/core';
5
+ import { UUIDsEqual } from '@memberjunction/global';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@progress/kendo-angular-dialog";
7
8
  import * as i2 from "@angular/forms";
@@ -406,7 +407,7 @@ export class AddActionDialogComponent {
406
407
  this.filteredActions$.next(filtered);
407
408
  }
408
409
  getCategoryNameById(categoryId) {
409
- const category = this.categories$.value.find(c => c.ID === categoryId);
410
+ const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));
410
411
  return category?.Name || '';
411
412
  }
412
413
  preselectExistingActions() {
@@ -433,7 +434,7 @@ export class AddActionDialogComponent {
433
434
  const selected = this.selectedActions$.value;
434
435
  const actions = this.allActions$.value;
435
436
  // Find the action and toggle its selection
436
- const actionToUpdate = actions.find(a => a.ID === action.ID);
437
+ const actionToUpdate = actions.find(a => UUIDsEqual(a.ID, action.ID));
437
438
  if (actionToUpdate) {
438
439
  actionToUpdate.selected = !actionToUpdate.selected;
439
440
  if (actionToUpdate.selected) {
@@ -446,7 +447,7 @@ export class AddActionDialogComponent {
446
447
  this.allActions$.next(actions);
447
448
  // Update filtered actions to reflect selection state
448
449
  const filtered = this.filteredActions$.value;
449
- const filteredAction = filtered.find(a => a.ID === action.ID);
450
+ const filteredAction = filtered.find(a => UUIDsEqual(a.ID, action.ID));
450
451
  if (filteredAction) {
451
452
  filteredAction.selected = actionToUpdate.selected;
452
453
  this.filteredActions$.next(filtered);
@@ -491,7 +492,7 @@ export class AddActionDialogComponent {
491
492
  const allActions = this.allActions$.value;
492
493
  // Get the selected action display items (excluding existing ones)
493
494
  const selectedDisplayItems = allActions
494
- .filter(action => selectedIds.has(action.ID) && !this.existingActionIds.includes(action.ID));
495
+ .filter(action => selectedIds.has(action.ID) && !this.existingActionIds.some(id => UUIDsEqual(id, action.ID)));
495
496
  // Convert ActionDisplayItem to MJActionEntity by casting (they have the same structure)
496
497
  const selectedActions = selectedDisplayItems.map(item => item);
497
498
  this.result.next(selectedActions);
@@ -575,5 +576,5 @@ export class AddActionDialogComponent {
575
576
  type: Component,
576
577
  args: [{ standalone: false, selector: 'mj-add-action-dialog', template: "<!-- Add Action Dialog -->\n<div class=\"add-action-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <kendo-textbox \n [formControl]=\"searchControl\" \n placeholder=\"Search actions by name, description, or category...\"\n class=\"search-input\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"header-actions\">\n <!-- View Toggle -->\n <button kendoButton \n [toggleable]=\"true\" \n [selected]=\"(viewMode$ | async) === 'grid'\"\n (click)=\"toggleViewMode()\"\n size=\"small\"\n kendoTooltip\n [title]=\"(viewMode$ | async) === 'grid' ? 'Switch to list view' : 'Switch to grid view'\">\n <i class=\"fa-solid\" \n [class.fa-th]=\"(viewMode$ | async) === 'grid'\" \n [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n \n <!-- Stats -->\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ filteredCount }} of {{ totalActionCount }} actions\n </span>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"dialog-content\">\n \n <!-- Category Sidebar -->\n <div class=\"category-sidebar\">\n <div class=\"sidebar-header\">\n <h4><i class=\"fa-solid fa-folder-tree\"></i> Categories</h4>\n </div>\n \n <div class=\"category-list\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategoryId$ | async) === category.id\"\n (click)=\"selectCategory(category.id)\">\n <i class=\"fa-solid {{ category.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ category.name }}</span>\n <span class=\"category-count\">{{ category.count }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading actions...</p>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search-minus\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search criteria or selecting a different category</p>\n <button kendoButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && filteredCount > 0) {\n <div class=\"actions-grid\">\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </div>\n \n <!-- Card Content -->\n <div class=\"card-header\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n </div>\n \n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n @if (action.categoryName) {\n <div class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.categoryName }}\n </div>\n }\n \n @if (action.Type) {\n <div class=\"type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </div>\n }\n </div>\n \n <!-- Existing Action Overlay -->\n @if (existingActionIds.includes(action.ID)) {\n <div class=\"existing-overlay\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Already Added</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && filteredCount > 0) {\n <div class=\"actions-list\">\n \n <!-- List Header -->\n <div class=\"list-header\">\n <span class=\"col-select\"></span>\n <span class=\"col-name\">Name</span>\n <span class=\"col-category\">Category</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-description\">Description</span>\n <span class=\"col-status\">Status</span>\n </div>\n \n <!-- List Items -->\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-select\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </span>\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n \n <span class=\"col-category\">{{ action.categoryName || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-description\">{{ action.Description || '-' }}</span>\n \n <span class=\"col-status\">\n @if (existingActionIds.includes(action.ID)) {\n <span class=\"status-badge existing\">\n <i class=\"fa-solid fa-check\"></i>\n Added\n </span>\n } @else {\n <span class=\"status-badge available\">\n <i class=\"fa-solid fa-plus\"></i>\n Available\n </span>\n }\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Actions Summary -->\n @if (selectedCount > 0) {\n <div class=\"selection-summary\">\n <div class=\"summary-content\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ selectedCount }} action{{ selectedCount === 1 ? '' : 's' }} selected</span>\n </div>\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n [disabled]=\"selectedCount === 0\"\n (click)=\"addSelectedActions()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Selected ({{ selectedCount }})\n </button>\n </div>\n</div>", styles: [".add-action-dialog {\n display: flex;\n flex-direction: column;\n height: 100%;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n/* Ensure dialog appears above banner and other elements */\n:host ::ng-deep .k-dialog,\n:host ::ng-deep .k-window {\n z-index: 10000 !important;\n}\n\n:host ::ng-deep .k-overlay {\n z-index: 9999 !important;\n}\n\n/* === Dialog Header === */\n.add-action-dialog .dialog-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem 1.5rem;\n border-bottom: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.add-action-dialog .dialog-header .search-section {\n flex: 1;\n}\n\n.add-action-dialog .dialog-header .search-section .search-input {\n width: 100%;\n max-width: 400px;\n}\n\n.add-action-dialog .dialog-header .header-actions {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n\n.add-action-dialog .dialog-header .header-actions .stats .stat-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n color: #6c757d;\n font-size: 0.9rem;\n}\n\n.add-action-dialog .dialog-header .header-actions .stats .stat-item i {\n color: #28a745;\n}\n\n/* === Main Content === */\n.add-action-dialog .dialog-content {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* === Category Sidebar === */\n.add-action-dialog .category-sidebar {\n width: 250px;\n background: #f8f9fa;\n border-right: 1px solid #e0e0e0;\n overflow-y: auto;\n}\n\n.add-action-dialog .category-sidebar .sidebar-header {\n padding: 1rem;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.add-action-dialog .category-sidebar .sidebar-header h4 {\n margin: 0;\n color: #495057;\n font-size: 1rem;\n font-weight: 600;\n}\n\n.add-action-dialog .category-sidebar .sidebar-header h4 i {\n margin-right: 0.5rem;\n color: #6c757d;\n}\n\n.add-action-dialog .category-sidebar .category-list {\n padding: 0.5rem 0;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n cursor: pointer;\n transition: all 0.2s ease;\n border-left: 3px solid transparent;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item:hover {\n background: #e9ecef;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item.selected {\n background: #e3f2fd;\n border-left-color: #2196f3;\n color: #1976d2;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item.selected .category-icon {\n color: #1976d2;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item .category-icon {\n width: 16px;\n text-align: center;\n margin-right: 0.75rem;\n color: #6c757d;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item .category-name {\n flex: 1;\n font-weight: 500;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item .category-count {\n background: #dee2e6;\n color: #495057;\n padding: 0.25rem 0.5rem;\n border-radius: 12px;\n font-size: 0.8rem;\n font-weight: 600;\n min-width: 24px;\n text-align: center;\n}\n\n.add-action-dialog .category-sidebar .category-list .category-item.selected .category-count {\n background: #bbdefb;\n color: #1976d2;\n}\n\n/* === Actions Container === */\n.add-action-dialog .actions-container {\n flex: 1;\n padding: 1.5rem;\n overflow-y: auto;\n background: white;\n}\n\n/* Loading State */\n.add-action-dialog .actions-container .loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #6c757d;\n}\n\n.add-action-dialog .actions-container .loading-state .loading-spinner {\n margin-bottom: 1rem;\n}\n\n.add-action-dialog .actions-container .loading-state .loading-spinner i {\n color: #2196f3;\n}\n\n.add-action-dialog .actions-container .loading-state p {\n margin-top: 1rem;\n font-size: 1.1rem;\n}\n\n/* Empty State */\n.add-action-dialog .actions-container .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n text-align: center;\n}\n\n.add-action-dialog .actions-container .empty-state i {\n font-size: 3rem;\n margin-bottom: 1rem;\n color: #dee2e6;\n}\n\n.add-action-dialog .actions-container .empty-state h3 {\n margin: 0 0 0.5rem 0;\n color: #495057;\n}\n\n.add-action-dialog .actions-container .empty-state p {\n margin: 0 0 1.5rem 0;\n}\n\n/* === Grid View === */\n.add-action-dialog .actions-container .actions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1.5rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card {\n position: relative;\n background: white;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n padding: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card:hover {\n border-color: #2196f3;\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.15);\n transform: translateY(-2px);\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card.selected {\n border-color: #28a745;\n background: #f8fff9;\n box-shadow: 0 4px 12px rgba(40, 167, 69, 0.15);\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card.selected .selection-indicator i {\n color: #28a745;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card.existing {\n border-color: #6c757d;\n background: #f8f9fa;\n cursor: default;\n opacity: 0.7;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card.existing:hover {\n transform: none;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .selection-indicator {\n position: absolute;\n top: 1rem;\n right: 1rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .selection-indicator i {\n font-size: 1.25rem;\n color: #dee2e6;\n transition: color 0.2s ease;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-header {\n display: flex;\n align-items: center;\n margin-bottom: 1rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-header .action-icon {\n width: 40px;\n height: 40px;\n background: #e3f2fd;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 1rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-header .action-icon i {\n font-size: 1.25rem;\n color: #1976d2;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-header .action-name {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: #212529;\n line-height: 1.2;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-body .action-description {\n margin: 0 0 1rem 0;\n color: #6c757d;\n line-height: 1.4;\n font-size: 0.9rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-body .category-badge,\n.add-action-dialog .actions-container .actions-grid .action-card .card-body .type-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n background: #f8f9fa;\n color: #495057;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 500;\n margin-right: 0.5rem;\n margin-bottom: 0.5rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-body .category-badge i,\n.add-action-dialog .actions-container .actions-grid .action-card .card-body .type-badge i {\n font-size: 0.7rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .card-body .type-badge {\n background: #fff3cd;\n color: #856404;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .existing-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(108, 117, 125, 0.9);\n color: white;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .existing-overlay i {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n}\n\n.add-action-dialog .actions-container .actions-grid .action-card .existing-overlay span {\n font-weight: 600;\n}\n\n/* === List View === */\n.add-action-dialog .actions-container .actions-list .list-header {\n display: grid;\n grid-template-columns: 40px 1fr 150px 100px 2fr 120px;\n gap: 1rem;\n padding: 1rem;\n background: #f8f9fa;\n border-radius: 6px;\n font-weight: 600;\n color: #495057;\n margin-bottom: 0.5rem;\n font-size: 0.9rem;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item {\n display: grid;\n grid-template-columns: 40px 1fr 150px 100px 2fr 120px;\n gap: 1rem;\n padding: 1rem;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n margin-bottom: 0.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n align-items: center;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item:hover {\n background: #f8f9fa;\n border-color: #2196f3;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item.selected {\n background: #f8fff9;\n border-color: #28a745;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item.selected .col-select i {\n color: #28a745;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item.existing {\n background: #f8f9fa;\n opacity: 0.7;\n cursor: default;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item.existing:hover {\n background: #f8f9fa;\n border-color: #e0e0e0;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .col-select i {\n font-size: 1.25rem;\n color: #dee2e6;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .col-name {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 500;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .col-name .action-icon {\n color: #1976d2;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .col-description {\n color: #6c757d;\n font-size: 0.9rem;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .status-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.8rem;\n font-weight: 500;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .status-badge.existing {\n background: #6c757d;\n color: white;\n}\n\n.add-action-dialog .actions-container .actions-list .list-item .status-badge.available {\n background: #d4edda;\n color: #155724;\n}\n\n/* === Selection Summary === */\n.add-action-dialog .selection-summary {\n padding: 1rem 1.5rem;\n background: #d4edda;\n border-top: 1px solid #c3e6cb;\n}\n\n.add-action-dialog .selection-summary .summary-content {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n color: #155724;\n font-weight: 500;\n}\n\n.add-action-dialog .selection-summary .summary-content i {\n color: #28a745;\n}\n\n/* === Dialog Footer === */\n.add-action-dialog .dialog-footer {\n display: flex;\n justify-content: flex-end;\n gap: 1rem;\n padding: 1rem 1.5rem;\n border-top: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.add-action-dialog .dialog-footer button[kendoButton] {\n min-width: 120px;\n}\n\n.add-action-dialog .dialog-footer button[kendoButton][look=\"primary\"] i {\n margin-right: 0.5rem;\n}\n\n/* === Responsive Design === */\n@media (max-width: 768px) {\n .add-action-dialog .dialog-content {\n flex-direction: column;\n }\n\n .add-action-dialog .category-sidebar {\n width: 100%;\n max-height: 200px;\n }\n\n .add-action-dialog .actions-container .actions-grid {\n grid-template-columns: 1fr;\n }\n\n .add-action-dialog .actions-container .actions-list .list-header,\n .add-action-dialog .actions-container .actions-list .list-item {\n grid-template-columns: 40px 1fr 80px;\n gap: 0.5rem;\n }\n\n .add-action-dialog .actions-container .actions-list .list-header .col-category,\n .add-action-dialog .actions-container .actions-list .list-header .col-type,\n .add-action-dialog .actions-container .actions-list .list-header .col-description,\n .add-action-dialog .actions-container .actions-list .list-item .col-category,\n .add-action-dialog .actions-container .actions-list .list-item .col-type,\n .add-action-dialog .actions-container .actions-list .list-item .col-description {\n display: none;\n }\n}"] }]
577
578
  }], () => [{ type: i1.WindowRef }, { type: i0.ChangeDetectorRef }], null); })();
578
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AddActionDialogComponent, { className: "AddActionDialogComponent", filePath: "src/lib/custom/AIAgents/add-action-dialog.component.ts", lineNumber: 32 }); })();
579
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AddActionDialogComponent, { className: "AddActionDialogComponent", filePath: "src/lib/custom/AIAgents/add-action-dialog.component.ts", lineNumber: 33 }); })();
579
580
  //# sourceMappingURL=add-action-dialog.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-action-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts","../../../../src/lib/custom/AIAgents/add-action-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { DialogRef, WindowRef } from '@progress/kendo-angular-dialog';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity } from '@memberjunction/core-entities';\n\nexport interface CategoryTreeNode {\n id: string;\n name: string;\n count: number;\n icon: string;\n children?: CategoryTreeNode[];\n expanded?: boolean;\n}\n\nexport interface ActionDisplayItem extends MJActionEntity {\n selected: boolean;\n categoryName?: string;\n}\n\n/**\n * Modern, clean dialog for selecting actions to add to an AI Agent.\n * Features searchable action list, category filtering, and multi-select capability.\n */\n@Component({\n standalone: false,\n selector: 'mj-add-action-dialog',\n templateUrl: './add-action-dialog.component.html',\n styleUrls: ['./add-action-dialog.component.css']\n})\nexport class AddActionDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n agentId: string = '';\n agentName: string = '';\n existingActionIds: string[] = [];\n\n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<MJActionEntity[]>();\n \n // Data streams\n allActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryTreeNode[]>([]);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedCategoryId$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n expandedCategories = new Set<string>();\n\n // Computed values\n get selectedCount(): number {\n return this.selectedActions$.value.size;\n }\n\n get totalActionCount(): number {\n return this.allActions$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredActions$.value.length;\n }\n\n constructor(\n private dialogRef: WindowRef,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingActions();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadActionsAndCategories();\n this.buildCategoryTree();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadActionsAndCategories() {\n const rv = new RunView();\n \n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n if (actionsResult.Success) {\n const actions = (actionsResult.Results as MJActionEntity[] || []).map(action => ({\n ...action.GetAll(),\n selected: false,\n categoryName: action.Category || 'Uncategorized'\n } as ActionDisplayItem));\n \n this.allActions$.next(actions);\n }\n\n if (categoriesResult.Success) {\n this.categories$.next(categoriesResult.Results as MJActionCategoryEntity[] || []);\n }\n }\n\n private buildCategoryTree() {\n const actions = this.allActions$.value;\n const categories = this.categories$.value;\n \n // Count actions per category\n const categoryCounts = new Map<string, number>();\n actions.forEach(action => {\n const categoryName = action.categoryName || 'Uncategorized';\n categoryCounts.set(categoryName, (categoryCounts.get(categoryName) || 0) + 1);\n });\n\n // Build tree nodes\n const treeNodes: CategoryTreeNode[] = [\n {\n id: 'all',\n name: 'All Actions',\n count: actions.length,\n icon: 'fa-th'\n }\n ];\n\n // Add category nodes\n categories.forEach(category => {\n const count = categoryCounts.get(category.Name) || 0;\n if (count > 0) {\n treeNodes.push({\n id: category.ID,\n name: category.Name,\n count,\n icon: this.getCategoryIcon(category.Name)\n });\n }\n });\n\n // Add uncategorized if needed\n const uncategorizedCount = categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n treeNodes.push({\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n });\n }\n\n this.categoryTree$.next(treeNodes);\n }\n\n private getCategoryIcon(categoryName: string): string {\n const iconMap: { [key: string]: string } = {\n 'Data': 'fa-database',\n 'Communication': 'fa-envelope',\n 'Integration': 'fa-plug',\n 'Security': 'fa-shield-alt',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file-alt',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n return iconMap[categoryName] || 'fa-folder';\n }\n\n private setupFiltering() {\n combineLatest([\n this.allActions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('') // Emit initial empty value\n ),\n this.selectedCategoryId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, categoryId]) => {\n this.filterActions(actions, searchTerm || '', categoryId);\n });\n }\n\n private filterActions(actions: ActionDisplayItem[], searchTerm: string, categoryId: string) {\n let filtered = [...actions];\n\n // Category filter\n if (categoryId !== 'all') {\n if (categoryId === 'uncategorized') {\n filtered = filtered.filter(action => !action.Category);\n } else {\n const categoryName = this.getCategoryNameById(categoryId);\n filtered = filtered.filter(action => action.categoryName === categoryName);\n }\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(action =>\n action.Name.toLowerCase().includes(term) ||\n (action.Description && action.Description.toLowerCase().includes(term)) ||\n (action.categoryName && action.categoryName.toLowerCase().includes(term))\n );\n }\n\n this.filteredActions$.next(filtered);\n }\n\n private getCategoryNameById(categoryId: string): string {\n const category = this.categories$.value.find(c => c.ID === categoryId);\n return category?.Name || '';\n }\n\n private preselectExistingActions() {\n if (this.existingActionIds.length > 0) {\n const selected = new Set(this.existingActionIds);\n this.selectedActions$.next(selected);\n \n // Update action selection state\n const actions = this.allActions$.value;\n actions.forEach(action => {\n action.selected = selected.has(action.ID);\n });\n this.allActions$.next(actions);\n }\n }\n\n // === UI Event Handlers ===\n\n selectCategory(categoryId: string) {\n this.selectedCategoryId$.next(categoryId);\n }\n\n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n\n toggleActionSelection(action: ActionDisplayItem) {\n const selected = this.selectedActions$.value;\n const actions = this.allActions$.value;\n \n // Find the action and toggle its selection\n const actionToUpdate = actions.find(a => a.ID === action.ID);\n if (actionToUpdate) {\n actionToUpdate.selected = !actionToUpdate.selected;\n \n if (actionToUpdate.selected) {\n selected.add(action.ID);\n } else {\n selected.delete(action.ID);\n }\n \n this.selectedActions$.next(new Set(selected));\n this.allActions$.next(actions);\n \n // Update filtered actions to reflect selection state\n const filtered = this.filteredActions$.value;\n const filteredAction = filtered.find(a => a.ID === action.ID);\n if (filteredAction) {\n filteredAction.selected = actionToUpdate.selected;\n this.filteredActions$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getActionIcon(action: ActionDisplayItem): string {\n // Return custom icon if set\n if (action.IconClass) {\n return action.IconClass;\n }\n\n // Fallback icon mapping based on action name/type\n const name = action.Name.toLowerCase();\n if (name.includes('create') || name.includes('add')) return 'fa-plus-circle';\n if (name.includes('update') || name.includes('edit')) return 'fa-edit';\n if (name.includes('delete') || name.includes('remove')) return 'fa-trash';\n if (name.includes('email') || name.includes('send')) return 'fa-envelope';\n if (name.includes('export')) return 'fa-file-export';\n if (name.includes('import')) return 'fa-file-import';\n if (name.includes('report')) return 'fa-file-alt';\n if (name.includes('api')) return 'fa-plug';\n \n return 'fa-bolt'; // Default action icon\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next([]);\n this.dialogRef.close();\n }\n\n addSelectedActions() {\n const selectedIds = this.selectedActions$.value;\n const allActions = this.allActions$.value;\n \n // Get the selected action display items (excluding existing ones)\n const selectedDisplayItems = allActions\n .filter(action => selectedIds.has(action.ID) && !this.existingActionIds.includes(action.ID));\n \n // Convert ActionDisplayItem to MJActionEntity by casting (they have the same structure)\n const selectedActions: MJActionEntity[] = selectedDisplayItems.map(item => item as MJActionEntity);\n \n this.result.next(selectedActions);\n this.dialogRef.close();\n }\n}","<!-- Add Action Dialog -->\n<div class=\"add-action-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <kendo-textbox \n [formControl]=\"searchControl\" \n placeholder=\"Search actions by name, description, or category...\"\n class=\"search-input\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"header-actions\">\n <!-- View Toggle -->\n <button kendoButton \n [toggleable]=\"true\" \n [selected]=\"(viewMode$ | async) === 'grid'\"\n (click)=\"toggleViewMode()\"\n size=\"small\"\n kendoTooltip\n [title]=\"(viewMode$ | async) === 'grid' ? 'Switch to list view' : 'Switch to grid view'\">\n <i class=\"fa-solid\" \n [class.fa-th]=\"(viewMode$ | async) === 'grid'\" \n [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n \n <!-- Stats -->\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ filteredCount }} of {{ totalActionCount }} actions\n </span>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"dialog-content\">\n \n <!-- Category Sidebar -->\n <div class=\"category-sidebar\">\n <div class=\"sidebar-header\">\n <h4><i class=\"fa-solid fa-folder-tree\"></i> Categories</h4>\n </div>\n \n <div class=\"category-list\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategoryId$ | async) === category.id\"\n (click)=\"selectCategory(category.id)\">\n <i class=\"fa-solid {{ category.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ category.name }}</span>\n <span class=\"category-count\">{{ category.count }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading actions...</p>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search-minus\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search criteria or selecting a different category</p>\n <button kendoButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && filteredCount > 0) {\n <div class=\"actions-grid\">\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </div>\n \n <!-- Card Content -->\n <div class=\"card-header\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n </div>\n \n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n @if (action.categoryName) {\n <div class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.categoryName }}\n </div>\n }\n \n @if (action.Type) {\n <div class=\"type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </div>\n }\n </div>\n \n <!-- Existing Action Overlay -->\n @if (existingActionIds.includes(action.ID)) {\n <div class=\"existing-overlay\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Already Added</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && filteredCount > 0) {\n <div class=\"actions-list\">\n \n <!-- List Header -->\n <div class=\"list-header\">\n <span class=\"col-select\"></span>\n <span class=\"col-name\">Name</span>\n <span class=\"col-category\">Category</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-description\">Description</span>\n <span class=\"col-status\">Status</span>\n </div>\n \n <!-- List Items -->\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-select\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </span>\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n \n <span class=\"col-category\">{{ action.categoryName || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-description\">{{ action.Description || '-' }}</span>\n \n <span class=\"col-status\">\n @if (existingActionIds.includes(action.ID)) {\n <span class=\"status-badge existing\">\n <i class=\"fa-solid fa-check\"></i>\n Added\n </span>\n } @else {\n <span class=\"status-badge available\">\n <i class=\"fa-solid fa-plus\"></i>\n Available\n </span>\n }\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Actions Summary -->\n @if (selectedCount > 0) {\n <div class=\"selection-summary\">\n <div class=\"summary-content\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ selectedCount }} action{{ selectedCount === 1 ? '' : 's' }} selected</span>\n </div>\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n [disabled]=\"selectedCount === 0\"\n (click)=\"addSelectedActions()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Selected ({{ selectedCount }})\n </button>\n </div>\n</div>"]}
1
+ {"version":3,"file":"add-action-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts","../../../../src/lib/custom/AIAgents/add-action-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { DialogRef, WindowRef } from '@progress/kendo-angular-dialog';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJActionEntity, MJActionCategoryEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface CategoryTreeNode {\n id: string;\n name: string;\n count: number;\n icon: string;\n children?: CategoryTreeNode[];\n expanded?: boolean;\n}\n\nexport interface ActionDisplayItem extends MJActionEntity {\n selected: boolean;\n categoryName?: string;\n}\n\n/**\n * Modern, clean dialog for selecting actions to add to an AI Agent.\n * Features searchable action list, category filtering, and multi-select capability.\n */\n@Component({\n standalone: false,\n selector: 'mj-add-action-dialog',\n templateUrl: './add-action-dialog.component.html',\n styleUrls: ['./add-action-dialog.component.css']\n})\nexport class AddActionDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n agentId: string = '';\n agentName: string = '';\n existingActionIds: string[] = [];\n\n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<MJActionEntity[]>();\n \n // Data streams\n allActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionDisplayItem[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryTreeNode[]>([]);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedCategoryId$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n expandedCategories = new Set<string>();\n\n // Computed values\n get selectedCount(): number {\n return this.selectedActions$.value.size;\n }\n\n get totalActionCount(): number {\n return this.allActions$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredActions$.value.length;\n }\n\n constructor(\n private dialogRef: WindowRef,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingActions();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadActionsAndCategories();\n this.buildCategoryTree();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadActionsAndCategories() {\n const rv = new RunView();\n \n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ExtraFilter: 'Status = \\'Active\\'',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n if (actionsResult.Success) {\n const actions = (actionsResult.Results as MJActionEntity[] || []).map(action => ({\n ...action.GetAll(),\n selected: false,\n categoryName: action.Category || 'Uncategorized'\n } as ActionDisplayItem));\n \n this.allActions$.next(actions);\n }\n\n if (categoriesResult.Success) {\n this.categories$.next(categoriesResult.Results as MJActionCategoryEntity[] || []);\n }\n }\n\n private buildCategoryTree() {\n const actions = this.allActions$.value;\n const categories = this.categories$.value;\n \n // Count actions per category\n const categoryCounts = new Map<string, number>();\n actions.forEach(action => {\n const categoryName = action.categoryName || 'Uncategorized';\n categoryCounts.set(categoryName, (categoryCounts.get(categoryName) || 0) + 1);\n });\n\n // Build tree nodes\n const treeNodes: CategoryTreeNode[] = [\n {\n id: 'all',\n name: 'All Actions',\n count: actions.length,\n icon: 'fa-th'\n }\n ];\n\n // Add category nodes\n categories.forEach(category => {\n const count = categoryCounts.get(category.Name) || 0;\n if (count > 0) {\n treeNodes.push({\n id: category.ID,\n name: category.Name,\n count,\n icon: this.getCategoryIcon(category.Name)\n });\n }\n });\n\n // Add uncategorized if needed\n const uncategorizedCount = categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n treeNodes.push({\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n });\n }\n\n this.categoryTree$.next(treeNodes);\n }\n\n private getCategoryIcon(categoryName: string): string {\n const iconMap: { [key: string]: string } = {\n 'Data': 'fa-database',\n 'Communication': 'fa-envelope',\n 'Integration': 'fa-plug',\n 'Security': 'fa-shield-alt',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file-alt',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n return iconMap[categoryName] || 'fa-folder';\n }\n\n private setupFiltering() {\n combineLatest([\n this.allActions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('') // Emit initial empty value\n ),\n this.selectedCategoryId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, categoryId]) => {\n this.filterActions(actions, searchTerm || '', categoryId);\n });\n }\n\n private filterActions(actions: ActionDisplayItem[], searchTerm: string, categoryId: string) {\n let filtered = [...actions];\n\n // Category filter\n if (categoryId !== 'all') {\n if (categoryId === 'uncategorized') {\n filtered = filtered.filter(action => !action.Category);\n } else {\n const categoryName = this.getCategoryNameById(categoryId);\n filtered = filtered.filter(action => action.categoryName === categoryName);\n }\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(action =>\n action.Name.toLowerCase().includes(term) ||\n (action.Description && action.Description.toLowerCase().includes(term)) ||\n (action.categoryName && action.categoryName.toLowerCase().includes(term))\n );\n }\n\n this.filteredActions$.next(filtered);\n }\n\n private getCategoryNameById(categoryId: string): string {\n const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));\n return category?.Name || '';\n }\n\n private preselectExistingActions() {\n if (this.existingActionIds.length > 0) {\n const selected = new Set(this.existingActionIds);\n this.selectedActions$.next(selected);\n \n // Update action selection state\n const actions = this.allActions$.value;\n actions.forEach(action => {\n action.selected = selected.has(action.ID);\n });\n this.allActions$.next(actions);\n }\n }\n\n // === UI Event Handlers ===\n\n selectCategory(categoryId: string) {\n this.selectedCategoryId$.next(categoryId);\n }\n\n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n\n toggleActionSelection(action: ActionDisplayItem) {\n const selected = this.selectedActions$.value;\n const actions = this.allActions$.value;\n \n // Find the action and toggle its selection\n const actionToUpdate = actions.find(a => UUIDsEqual(a.ID, action.ID));\n if (actionToUpdate) {\n actionToUpdate.selected = !actionToUpdate.selected;\n \n if (actionToUpdate.selected) {\n selected.add(action.ID);\n } else {\n selected.delete(action.ID);\n }\n \n this.selectedActions$.next(new Set(selected));\n this.allActions$.next(actions);\n \n // Update filtered actions to reflect selection state\n const filtered = this.filteredActions$.value;\n const filteredAction = filtered.find(a => UUIDsEqual(a.ID, action.ID));\n if (filteredAction) {\n filteredAction.selected = actionToUpdate.selected;\n this.filteredActions$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getActionIcon(action: ActionDisplayItem): string {\n // Return custom icon if set\n if (action.IconClass) {\n return action.IconClass;\n }\n\n // Fallback icon mapping based on action name/type\n const name = action.Name.toLowerCase();\n if (name.includes('create') || name.includes('add')) return 'fa-plus-circle';\n if (name.includes('update') || name.includes('edit')) return 'fa-edit';\n if (name.includes('delete') || name.includes('remove')) return 'fa-trash';\n if (name.includes('email') || name.includes('send')) return 'fa-envelope';\n if (name.includes('export')) return 'fa-file-export';\n if (name.includes('import')) return 'fa-file-import';\n if (name.includes('report')) return 'fa-file-alt';\n if (name.includes('api')) return 'fa-plug';\n \n return 'fa-bolt'; // Default action icon\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next([]);\n this.dialogRef.close();\n }\n\n addSelectedActions() {\n const selectedIds = this.selectedActions$.value;\n const allActions = this.allActions$.value;\n \n // Get the selected action display items (excluding existing ones)\n const selectedDisplayItems = allActions\n .filter(action => selectedIds.has(action.ID) && !this.existingActionIds.some(id => UUIDsEqual(id, action.ID)));\n \n // Convert ActionDisplayItem to MJActionEntity by casting (they have the same structure)\n const selectedActions: MJActionEntity[] = selectedDisplayItems.map(item => item as MJActionEntity);\n \n this.result.next(selectedActions);\n this.dialogRef.close();\n }\n}","<!-- Add Action Dialog -->\n<div class=\"add-action-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <kendo-textbox \n [formControl]=\"searchControl\" \n placeholder=\"Search actions by name, description, or category...\"\n class=\"search-input\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"header-actions\">\n <!-- View Toggle -->\n <button kendoButton \n [toggleable]=\"true\" \n [selected]=\"(viewMode$ | async) === 'grid'\"\n (click)=\"toggleViewMode()\"\n size=\"small\"\n kendoTooltip\n [title]=\"(viewMode$ | async) === 'grid' ? 'Switch to list view' : 'Switch to grid view'\">\n <i class=\"fa-solid\" \n [class.fa-th]=\"(viewMode$ | async) === 'grid'\" \n [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n \n <!-- Stats -->\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ filteredCount }} of {{ totalActionCount }} actions\n </span>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"dialog-content\">\n \n <!-- Category Sidebar -->\n <div class=\"category-sidebar\">\n <div class=\"sidebar-header\">\n <h4><i class=\"fa-solid fa-folder-tree\"></i> Categories</h4>\n </div>\n \n <div class=\"category-list\">\n @for (category of categoryTree$ | async; track category.id) {\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategoryId$ | async) === category.id\"\n (click)=\"selectCategory(category.id)\">\n <i class=\"fa-solid {{ category.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ category.name }}</span>\n <span class=\"category-count\">{{ category.count }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading actions...</p>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search-minus\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search criteria or selecting a different category</p>\n <button kendoButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && filteredCount > 0) {\n <div class=\"actions-grid\">\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </div>\n \n <!-- Card Content -->\n <div class=\"card-header\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n </div>\n \n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n @if (action.categoryName) {\n <div class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.categoryName }}\n </div>\n }\n \n @if (action.Type) {\n <div class=\"type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </div>\n }\n </div>\n \n <!-- Existing Action Overlay -->\n @if (existingActionIds.includes(action.ID)) {\n <div class=\"existing-overlay\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Already Added</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && filteredCount > 0) {\n <div class=\"actions-list\">\n \n <!-- List Header -->\n <div class=\"list-header\">\n <span class=\"col-select\"></span>\n <span class=\"col-name\">Name</span>\n <span class=\"col-category\">Category</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-description\">Description</span>\n <span class=\"col-status\">Status</span>\n </div>\n \n <!-- List Items -->\n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \n [class.selected]=\"action.selected\"\n [class.existing]=\"existingActionIds.includes(action.ID)\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-select\">\n <i class=\"fa-solid\" \n [class.fa-check-circle]=\"action.selected\" \n [class.fa-circle]=\"!action.selected\"></i>\n </span>\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n \n <span class=\"col-category\">{{ action.categoryName || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-description\">{{ action.Description || '-' }}</span>\n \n <span class=\"col-status\">\n @if (existingActionIds.includes(action.ID)) {\n <span class=\"status-badge existing\">\n <i class=\"fa-solid fa-check\"></i>\n Added\n </span>\n } @else {\n <span class=\"status-badge available\">\n <i class=\"fa-solid fa-plus\"></i>\n Available\n </span>\n }\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Selected Actions Summary -->\n @if (selectedCount > 0) {\n <div class=\"selection-summary\">\n <div class=\"summary-content\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>{{ selectedCount }} action{{ selectedCount === 1 ? '' : 's' }} selected</span>\n </div>\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n [disabled]=\"selectedCount === 0\"\n (click)=\"addSelectedActions()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Selected ({{ selectedCount }})\n </button>\n </div>\n</div>"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-prompt-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAa,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAa,MAAM,MAAM,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;;AAG/F,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACjG,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;CAC1D;AAED;;;GAGG;AACH,qBAMa,0CAA2C,YAAW,MAAM,EAAE,SAAS;IAuChF,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IAtCb,WAAW,EAAG,qBAAqB,CAAC;IACpC,eAAe,EAAE,qBAAqB,EAAE,CAAM;IAG9C,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,sDAA6D;IAG1E,YAAY,EAAG,SAAS,CAAC;IACzB,UAAU,2BAAuC;IACjD,SAAS,2BAAuC;IAGhD,eAAe,6CAAsD;IAGrE,sBAAsB;;;;QAOpB;IAEF,aAAa;;;QAKX;IAGF,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAGhC,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAGhC,QAAQ;IAKR,WAAW;IAKX,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,sBAAsB;YAqBhB,gBAAgB;IAiC9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASxC,sBAAsB,IAAI,OAAO;IAMjC,oBAAoB,IAAI,OAAO;IAK/B,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOpD,MAAM;IAKA,IAAI;yCA1LC,0CAA0C;2CAA1C,0CAA0C;CA+NtD"}
1
+ {"version":3,"file":"agent-prompt-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAa,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAa,MAAM,MAAM,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;;AAI/F,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACjG,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;CAC1D;AAED;;;GAGG;AACH,qBAMa,0CAA2C,YAAW,MAAM,EAAE,SAAS;IAuChF,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IAtCb,WAAW,EAAG,qBAAqB,CAAC;IACpC,eAAe,EAAE,qBAAqB,EAAE,CAAM;IAG9C,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,sDAA6D;IAG1E,YAAY,EAAG,SAAS,CAAC;IACzB,UAAU,2BAAuC;IACjD,SAAS,2BAAuC;IAGhD,eAAe,6CAAsD;IAGrE,sBAAsB;;;;QAOpB;IAEF,aAAa;;;QAKX;IAGF,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAGhC,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAGhC,QAAQ;IAKR,WAAW;IAKX,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,sBAAsB;YAqBhB,gBAAgB;IAiC9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASxC,sBAAsB,IAAI,OAAO;IAMjC,oBAAoB,IAAI,OAAO;IAK/B,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOpD,MAAM;IAKA,IAAI;yCA1LC,0CAA0C;2CAA1C,0CAA0C;CA+NtD"}
@@ -3,6 +3,7 @@ import { Validators } from '@angular/forms';
3
3
  import { Subject, BehaviorSubject, takeUntil } from 'rxjs';
4
4
  import { RunView } from '@memberjunction/core';
5
5
  import { MJNotificationService } from '@memberjunction/ng-notifications';
6
+ import { UUIDsEqual } from '@memberjunction/global';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@progress/kendo-angular-dialog";
8
9
  import * as i2 from "@angular/forms";
@@ -270,7 +271,7 @@ export class AgentPromptAdvancedSettingsDialogComponent {
270
271
  return;
271
272
  }
272
273
  // Check for conflicts with other prompts (excluding current one)
273
- const conflictingPrompt = this.allAgentPrompts.find(p => p.ID !== this.agentPrompt.ID &&
274
+ const conflictingPrompt = this.allAgentPrompts.find(p => !UUIDsEqual(p.ID, this.agentPrompt.ID) &&
274
275
  p.ExecutionOrder === order);
275
276
  if (conflictingPrompt) {
276
277
  this.executionOrderError = `Execution order ${order} is already used by another prompt. Please choose a different order.`;
@@ -397,5 +398,5 @@ export class AgentPromptAdvancedSettingsDialogComponent {
397
398
  type: Component,
398
399
  args: [{ standalone: false, selector: 'mj-agent-prompt-advanced-settings-dialog', template: "<!-- Prompt Advanced Settings Dialog -->\n<div class=\"prompt-advanced-settings-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading prompt settings...</p>\n </div>\n } @else {\n \n <!-- Form Content -->\n <form [formGroup]=\"advancedForm\" class=\"advanced-form\">\n \n <!-- Execution Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-list-ol\"></i>\n Execution Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Execution Order -->\n <div class=\"form-field\">\n <label for=\"executionOrder\">Execution Order *</label>\n <kendo-numerictextbox \n formControlName=\"executionOrder\"\n [min]=\"0\"\n [format]=\"'0'\"\n [class.error-border]=\"hasExecutionOrderError()\"\n class=\"form-control\">\n </kendo-numerictextbox>\n @if (isFieldInvalid('executionOrder')) {\n <div class=\"field-error\">{{ getFieldError('executionOrder') }}</div>\n }\n @if (hasExecutionOrderError()) {\n <div class=\"field-error\">{{ executionOrderError }}</div>\n }\n <small class=\"field-hint\">Order in which this prompt executes (0 = first). Must be unique among agent prompts.</small>\n </div>\n \n <!-- Purpose -->\n <div class=\"form-field\">\n <label for=\"purpose\">Purpose</label>\n <kendo-textbox \n formControlName=\"purpose\"\n placeholder=\"e.g., Initialize, ProcessData, Summarize\"\n class=\"form-control\">\n </kendo-textbox>\n <small class=\"field-hint\">Functional purpose of this prompt within the agent workflow</small>\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label for=\"status\">Status *</label>\n <kendo-dropdownlist \n formControlName=\"status\"\n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"form-control\">\n </kendo-dropdownlist>\n @if (isFieldInvalid('status')) {\n <div class=\"field-error\">{{ getFieldError('status') }}</div>\n }\n <small class=\"field-hint\">Current status of this prompt mapping</small>\n </div>\n </div>\n </div>\n\n <!-- Context Behavior Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Context Behavior\n </h3>\n \n <div class=\"form-grid\">\n <!-- Context Behavior -->\n <div class=\"form-field full-width\">\n <label for=\"contextBehavior\">Context Behavior *</label>\n <kendo-dropdownlist \n formControlName=\"contextBehavior\"\n [data]=\"contextBehaviorOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"form-control\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"context-behavior-option\">\n <div class=\"option-title\">{{ dataItem.text }}</div>\n <div class=\"option-description\">{{ dataItem.description }}</div>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (isFieldInvalid('contextBehavior')) {\n <div class=\"field-error\">{{ getFieldError('contextBehavior') }}</div>\n }\n <small class=\"field-hint\">{{ getContextBehaviorDescription(advancedForm.get('contextBehavior')?.value) }}</small>\n </div>\n \n <!-- Context Message Count (conditional) -->\n @if (requiresMessageCount()) {\n <div class=\"form-field\">\n <label for=\"contextMessageCount\">Message Count *</label>\n <kendo-numerictextbox \n formControlName=\"contextMessageCount\"\n [min]=\"1\"\n [format]=\"'0'\"\n class=\"form-control\">\n </kendo-numerictextbox>\n @if (isFieldInvalid('contextMessageCount')) {\n <div class=\"field-error\">{{ getFieldError('contextMessageCount') }}</div>\n }\n <small class=\"field-hint\">Number of messages to include for {{ advancedForm.get('contextBehavior')?.value }}</small>\n </div>\n }\n </div>\n </div>\n\n <!-- AI Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n AI Configuration Override\n </h3>\n \n <div class=\"form-grid\">\n <!-- Configuration Override -->\n <div class=\"form-field full-width\">\n <label for=\"configurationID\">AI Configuration</label>\n <kendo-dropdownlist \n formControlName=\"configurationID\"\n [data]=\"configurations$ | async\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Use Agent Default', ID: null }\"\n class=\"form-control\">\n </kendo-dropdownlist>\n <small class=\"field-hint\">Override the agent's default AI configuration for this specific prompt</small>\n </div>\n </div>\n </div>\n </form>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\"\n [disabled]=\"(isSaving$ | async) || false\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n (click)=\"save()\"\n [disabled]=\"((isSaving$ | async) || false) || ((isLoading$ | async) || false) || hasExecutionOrderError()\">\n @if (isSaving$ | async) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Settings\n }\n </button>\n </div>\n</div>", styles: [".prompt-advanced-settings-dialog {\n display: flex;\n flex-direction: column;\n height: 100%;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n/* Ensure dialog appears above banner and other elements */\n:host ::ng-deep .k-dialog,\n:host ::ng-deep .k-window {\n z-index: 10000 !important;\n}\n\n:host ::ng-deep .k-overlay {\n z-index: 9999 !important;\n}\n\n/* === Loading State === */\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n}\n\n.loading-spinner {\n margin-bottom: 1rem;\n}\n\n.loading-spinner i {\n color: #2196f3;\n}\n\n.loading-state p {\n margin-top: 1rem;\n font-size: 1.1rem;\n}\n\n/* === Form Layout === */\n.advanced-form {\n flex: 1;\n overflow-y: auto;\n padding: 1.5rem;\n}\n\n.form-section {\n margin-bottom: 2rem;\n background: white;\n border-radius: 8px;\n border: 1px solid #e0e0e0;\n overflow: hidden;\n}\n\n.section-title {\n margin: 0;\n padding: 1rem 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n color: #495057;\n font-size: 1.1rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.section-title i {\n color: #2196f3;\n}\n\n.form-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1.5rem;\n padding: 1.5rem;\n}\n\n.form-field {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.form-field.full-width {\n grid-column: 1 / -1;\n}\n\n/* === Form Controls === */\nlabel {\n font-weight: 600;\n color: #495057;\n font-size: 0.9rem;\n}\n\n.form-control {\n width: 100%;\n}\n\n.field-hint {\n color: #6c757d;\n font-size: 0.8rem;\n margin-top: 0.25rem;\n line-height: 1.3;\n}\n\n.field-error {\n color: #dc3545;\n font-size: 0.8rem;\n margin-top: 0.25rem;\n}\n\n/* === Validation States === */\n.form-control.ng-invalid.ng-touched,\n.error-border {\n border-color: #dc3545 !important;\n}\n\n.form-control.ng-valid.ng-touched {\n border-color: #28a745;\n}\n\n/* === Context Behavior Option Template === */\n.context-behavior-option {\n padding: 0.5rem 0;\n}\n\n.option-title {\n font-weight: 500;\n color: #333;\n font-size: 0.9rem;\n}\n\n.option-description {\n font-size: 0.8rem;\n color: #666;\n margin-top: 0.25rem;\n line-height: 1.3;\n}\n\n/* === Dialog Footer === */\n.dialog-footer {\n display: flex;\n justify-content: flex-end;\n gap: 1rem;\n padding: 1rem 1.5rem;\n border-top: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.dialog-footer button {\n min-width: 120px;\n}\n\n.dialog-footer button[themeColor=\"primary\"] i {\n margin-right: 0.5rem;\n}\n\n/* === Section-Specific Styling === */\n\n/* Execution Configuration */\n.form-section:first-child .section-title {\n background: linear-gradient(135deg, #e3f2fd, #f8f9fa);\n}\n\n/* Context Behavior */\n.form-section:nth-child(2) .section-title {\n background: linear-gradient(135deg, #f3e5f5, #f8f9fa);\n}\n\n/* AI Configuration */\n.form-section:nth-child(3) .section-title {\n background: linear-gradient(135deg, #e8f5e8, #f8f9fa);\n}\n\n/* === Responsive Design === */\n@media (max-width: 768px) {\n .form-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n padding: 1rem;\n }\n \n .form-field.full-width {\n grid-column: 1;\n }\n \n .advanced-form {\n padding: 1rem;\n }\n \n .section-title {\n padding: 0.75rem 1rem;\n font-size: 1rem;\n }\n \n .dialog-footer {\n padding: 1rem;\n flex-direction: column;\n }\n \n .dialog-footer button {\n width: 100%;\n }\n}\n\n/* === Error Highlighting === */\n.error-border {\n border: 2px solid #dc3545 !important;\n background-color: #fff5f5;\n}"] }]
399
400
  }], () => [{ type: i1.WindowRef }, { type: i2.FormBuilder }, { type: i0.ChangeDetectorRef }], null); })();
400
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentPromptAdvancedSettingsDialogComponent, { className: "AgentPromptAdvancedSettingsDialogComponent", filePath: "src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts", lineNumber: 28 }); })();
401
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentPromptAdvancedSettingsDialogComponent, { className: "AgentPromptAdvancedSettingsDialogComponent", filePath: "src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts", lineNumber: 29 }); })();
401
402
  //# sourceMappingURL=agent-prompt-advanced-settings-dialog.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-prompt-advanced-settings-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts","../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { DialogRef, WindowRef } from '@progress/kendo-angular-dialog';\nimport { Subject, BehaviorSubject, takeUntil } from 'rxjs';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJAIAgentPromptEntity, MJAIConfigurationEntity } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\n\nexport interface AgentPromptAdvancedSettingsFormData {\n executionOrder: number;\n purpose: string | null;\n configurationID: string | null;\n contextBehavior: 'Complete' | 'Smart' | 'None' | 'RecentMessages' | 'InitialMessages' | 'Custom';\n contextMessageCount: number | null;\n status: 'Active' | 'Inactive' | 'Deprecated' | 'Preview';\n}\n\n/**\n * Advanced Settings dialog for AI Agent Prompts.\n * Manages execution order, context behavior, and other advanced prompt configurations.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-prompt-advanced-settings-dialog',\n templateUrl: './agent-prompt-advanced-settings-dialog.component.html',\n styleUrls: ['./agent-prompt-advanced-settings-dialog.component.css']\n})\nexport class AgentPromptAdvancedSettingsDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n agentPrompt!: MJAIAgentPromptEntity;\n allAgentPrompts: MJAIAgentPromptEntity[] = []; // For execution order validation\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<AgentPromptAdvancedSettingsFormData | null>();\n \n // Form and data\n advancedForm!: FormGroup;\n isLoading$ = new BehaviorSubject<boolean>(false);\n isSaving$ = new BehaviorSubject<boolean>(false);\n \n // Dropdown data\n configurations$ = new BehaviorSubject<MJAIConfigurationEntity[]>([]);\n \n // Available options\n contextBehaviorOptions = [\n { text: 'Complete Context', value: 'Complete', description: 'Include entire conversation context' },\n { text: 'Smart Context', value: 'Smart', description: 'AI determines relevant context automatically' },\n { text: 'No Context', value: 'None', description: 'No conversation context included' },\n { text: 'Recent Messages', value: 'RecentMessages', description: 'Include only recent messages' },\n { text: 'Initial Messages', value: 'InitialMessages', description: 'Include only conversation start' },\n { text: 'Custom Context', value: 'Custom', description: 'Custom context filtering logic' }\n ];\n\n statusOptions = [\n { text: 'Active', value: 'Active' },\n { text: 'Inactive', value: 'Inactive' },\n { text: 'Deprecated', value: 'Deprecated' },\n { text: 'Preview', value: 'Preview' }\n ];\n\n // Execution order validation\n executionOrderError: string | null = null;\n\n constructor(\n private dialogRef: WindowRef,\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeForm();\n this.loadDropdownData();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeForm() {\n this.advancedForm = this.fb.group({\n executionOrder: [this.agentPrompt.ExecutionOrder || 0, [Validators.required, Validators.min(0)]],\n purpose: [this.agentPrompt.Purpose],\n configurationID: [this.agentPrompt.ConfigurationID],\n contextBehavior: [this.agentPrompt.ContextBehavior || 'Complete', [Validators.required]],\n contextMessageCount: [this.agentPrompt.ContextMessageCount],\n status: [this.agentPrompt.Status || 'Active', [Validators.required]]\n });\n\n this.setupValidationLogic();\n }\n\n private setupValidationLogic() {\n // Context behavior validation\n const contextBehaviorControl = this.advancedForm.get('contextBehavior');\n const contextMessageCountControl = this.advancedForm.get('contextMessageCount');\n\n contextBehaviorControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(behavior => {\n if (behavior === 'RecentMessages' || behavior === 'InitialMessages') {\n contextMessageCountControl?.setValidators([Validators.required, Validators.min(1)]);\n } else {\n contextMessageCountControl?.clearValidators();\n if (behavior !== 'Custom') {\n contextMessageCountControl?.setValue(null);\n }\n }\n contextMessageCountControl?.updateValueAndValidity();\n });\n\n // Execution order validation\n const executionOrderControl = this.advancedForm.get('executionOrder');\n executionOrderControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(order => {\n this.validateExecutionOrder(order);\n });\n }\n\n private validateExecutionOrder(order: number) {\n if (order == null) {\n this.executionOrderError = null;\n return;\n }\n\n // Check for conflicts with other prompts (excluding current one)\n const conflictingPrompt = this.allAgentPrompts.find(p => \n p.ID !== this.agentPrompt.ID && \n p.ExecutionOrder === order\n );\n\n if (conflictingPrompt) {\n this.executionOrderError = `Execution order ${order} is already used by another prompt. Please choose a different order.`;\n } else {\n this.executionOrderError = null;\n }\n\n this.cdr.detectChanges();\n }\n\n private async loadDropdownData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load AI Configurations\n const configurationsResult = await rv.RunView<MJAIConfigurationEntity>({\n EntityName: 'MJ: AI Configurations',\n ExtraFilter: \"Status = 'Active'\",\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n });\n\n if (configurationsResult.Success) {\n this.configurations$.next(configurationsResult.Results || []);\n }\n\n } catch (error) {\n console.error('Error loading dropdown data:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading form data. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n // === Validation Helpers ===\n\n isFieldInvalid(fieldName: string): boolean {\n const field = this.advancedForm.get(fieldName);\n return !!(field && field.invalid && (field.dirty || field.touched));\n }\n\n getFieldError(fieldName: string): string {\n const field = this.advancedForm.get(fieldName);\n if (field?.errors) {\n if (field.errors['required']) return `${fieldName} is required`;\n if (field.errors['min']) return `${fieldName} must be greater than or equal to ${field.errors['min'].min}`;\n }\n return '';\n }\n\n hasExecutionOrderError(): boolean {\n return !!this.executionOrderError;\n }\n\n // === Context Behavior Helpers ===\n\n requiresMessageCount(): boolean {\n const behavior = this.advancedForm.get('contextBehavior')?.value;\n return behavior === 'RecentMessages' || behavior === 'InitialMessages';\n }\n\n getContextBehaviorDescription(value: string): string {\n const option = this.contextBehaviorOptions.find(opt => opt.value === value);\n return option?.description || '';\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.dialogRef.close();\n }\n\n async save() {\n if (this.advancedForm.invalid || this.hasExecutionOrderError()) {\n this.advancedForm.markAllAsTouched();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please fix validation errors before saving',\n 'error',\n 3000\n );\n return;\n }\n\n this.isSaving$.next(true);\n \n try {\n const formData: AgentPromptAdvancedSettingsFormData = {\n executionOrder: this.advancedForm.get('executionOrder')?.value,\n purpose: this.advancedForm.get('purpose')?.value || null,\n configurationID: this.advancedForm.get('configurationID')?.value || null,\n contextBehavior: this.advancedForm.get('contextBehavior')?.value,\n contextMessageCount: this.advancedForm.get('contextMessageCount')?.value || null,\n status: this.advancedForm.get('status')?.value\n };\n\n this.result.next(formData);\n this.dialogRef.close();\n \n } catch (error) {\n console.error('Error saving advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving settings. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isSaving$.next(false);\n }\n }\n}","<!-- Prompt Advanced Settings Dialog -->\n<div class=\"prompt-advanced-settings-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading prompt settings...</p>\n </div>\n } @else {\n \n <!-- Form Content -->\n <form [formGroup]=\"advancedForm\" class=\"advanced-form\">\n \n <!-- Execution Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-list-ol\"></i>\n Execution Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Execution Order -->\n <div class=\"form-field\">\n <label for=\"executionOrder\">Execution Order *</label>\n <kendo-numerictextbox \n formControlName=\"executionOrder\"\n [min]=\"0\"\n [format]=\"'0'\"\n [class.error-border]=\"hasExecutionOrderError()\"\n class=\"form-control\">\n </kendo-numerictextbox>\n @if (isFieldInvalid('executionOrder')) {\n <div class=\"field-error\">{{ getFieldError('executionOrder') }}</div>\n }\n @if (hasExecutionOrderError()) {\n <div class=\"field-error\">{{ executionOrderError }}</div>\n }\n <small class=\"field-hint\">Order in which this prompt executes (0 = first). Must be unique among agent prompts.</small>\n </div>\n \n <!-- Purpose -->\n <div class=\"form-field\">\n <label for=\"purpose\">Purpose</label>\n <kendo-textbox \n formControlName=\"purpose\"\n placeholder=\"e.g., Initialize, ProcessData, Summarize\"\n class=\"form-control\">\n </kendo-textbox>\n <small class=\"field-hint\">Functional purpose of this prompt within the agent workflow</small>\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label for=\"status\">Status *</label>\n <kendo-dropdownlist \n formControlName=\"status\"\n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"form-control\">\n </kendo-dropdownlist>\n @if (isFieldInvalid('status')) {\n <div class=\"field-error\">{{ getFieldError('status') }}</div>\n }\n <small class=\"field-hint\">Current status of this prompt mapping</small>\n </div>\n </div>\n </div>\n\n <!-- Context Behavior Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Context Behavior\n </h3>\n \n <div class=\"form-grid\">\n <!-- Context Behavior -->\n <div class=\"form-field full-width\">\n <label for=\"contextBehavior\">Context Behavior *</label>\n <kendo-dropdownlist \n formControlName=\"contextBehavior\"\n [data]=\"contextBehaviorOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"form-control\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"context-behavior-option\">\n <div class=\"option-title\">{{ dataItem.text }}</div>\n <div class=\"option-description\">{{ dataItem.description }}</div>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (isFieldInvalid('contextBehavior')) {\n <div class=\"field-error\">{{ getFieldError('contextBehavior') }}</div>\n }\n <small class=\"field-hint\">{{ getContextBehaviorDescription(advancedForm.get('contextBehavior')?.value) }}</small>\n </div>\n \n <!-- Context Message Count (conditional) -->\n @if (requiresMessageCount()) {\n <div class=\"form-field\">\n <label for=\"contextMessageCount\">Message Count *</label>\n <kendo-numerictextbox \n formControlName=\"contextMessageCount\"\n [min]=\"1\"\n [format]=\"'0'\"\n class=\"form-control\">\n </kendo-numerictextbox>\n @if (isFieldInvalid('contextMessageCount')) {\n <div class=\"field-error\">{{ getFieldError('contextMessageCount') }}</div>\n }\n <small class=\"field-hint\">Number of messages to include for {{ advancedForm.get('contextBehavior')?.value }}</small>\n </div>\n }\n </div>\n </div>\n\n <!-- AI Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n AI Configuration Override\n </h3>\n \n <div class=\"form-grid\">\n <!-- Configuration Override -->\n <div class=\"form-field full-width\">\n <label for=\"configurationID\">AI Configuration</label>\n <kendo-dropdownlist \n formControlName=\"configurationID\"\n [data]=\"configurations$ | async\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Use Agent Default', ID: null }\"\n class=\"form-control\">\n </kendo-dropdownlist>\n <small class=\"field-hint\">Override the agent's default AI configuration for this specific prompt</small>\n </div>\n </div>\n </div>\n </form>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\"\n [disabled]=\"(isSaving$ | async) || false\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n (click)=\"save()\"\n [disabled]=\"((isSaving$ | async) || false) || ((isLoading$ | async) || false) || hasExecutionOrderError()\">\n @if (isSaving$ | async) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Settings\n }\n </button>\n </div>\n</div>"]}
1
+ {"version":3,"file":"agent-prompt-advanced-settings-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.ts","../../../../src/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { DialogRef, WindowRef } from '@progress/kendo-angular-dialog';\nimport { Subject, BehaviorSubject, takeUntil } from 'rxjs';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJAIAgentPromptEntity, MJAIConfigurationEntity } from '@memberjunction/core-entities';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface AgentPromptAdvancedSettingsFormData {\n executionOrder: number;\n purpose: string | null;\n configurationID: string | null;\n contextBehavior: 'Complete' | 'Smart' | 'None' | 'RecentMessages' | 'InitialMessages' | 'Custom';\n contextMessageCount: number | null;\n status: 'Active' | 'Inactive' | 'Deprecated' | 'Preview';\n}\n\n/**\n * Advanced Settings dialog for AI Agent Prompts.\n * Manages execution order, context behavior, and other advanced prompt configurations.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-prompt-advanced-settings-dialog',\n templateUrl: './agent-prompt-advanced-settings-dialog.component.html',\n styleUrls: ['./agent-prompt-advanced-settings-dialog.component.css']\n})\nexport class AgentPromptAdvancedSettingsDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n agentPrompt!: MJAIAgentPromptEntity;\n allAgentPrompts: MJAIAgentPromptEntity[] = []; // For execution order validation\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<AgentPromptAdvancedSettingsFormData | null>();\n \n // Form and data\n advancedForm!: FormGroup;\n isLoading$ = new BehaviorSubject<boolean>(false);\n isSaving$ = new BehaviorSubject<boolean>(false);\n \n // Dropdown data\n configurations$ = new BehaviorSubject<MJAIConfigurationEntity[]>([]);\n \n // Available options\n contextBehaviorOptions = [\n { text: 'Complete Context', value: 'Complete', description: 'Include entire conversation context' },\n { text: 'Smart Context', value: 'Smart', description: 'AI determines relevant context automatically' },\n { text: 'No Context', value: 'None', description: 'No conversation context included' },\n { text: 'Recent Messages', value: 'RecentMessages', description: 'Include only recent messages' },\n { text: 'Initial Messages', value: 'InitialMessages', description: 'Include only conversation start' },\n { text: 'Custom Context', value: 'Custom', description: 'Custom context filtering logic' }\n ];\n\n statusOptions = [\n { text: 'Active', value: 'Active' },\n { text: 'Inactive', value: 'Inactive' },\n { text: 'Deprecated', value: 'Deprecated' },\n { text: 'Preview', value: 'Preview' }\n ];\n\n // Execution order validation\n executionOrderError: string | null = null;\n\n constructor(\n private dialogRef: WindowRef,\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeForm();\n this.loadDropdownData();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private initializeForm() {\n this.advancedForm = this.fb.group({\n executionOrder: [this.agentPrompt.ExecutionOrder || 0, [Validators.required, Validators.min(0)]],\n purpose: [this.agentPrompt.Purpose],\n configurationID: [this.agentPrompt.ConfigurationID],\n contextBehavior: [this.agentPrompt.ContextBehavior || 'Complete', [Validators.required]],\n contextMessageCount: [this.agentPrompt.ContextMessageCount],\n status: [this.agentPrompt.Status || 'Active', [Validators.required]]\n });\n\n this.setupValidationLogic();\n }\n\n private setupValidationLogic() {\n // Context behavior validation\n const contextBehaviorControl = this.advancedForm.get('contextBehavior');\n const contextMessageCountControl = this.advancedForm.get('contextMessageCount');\n\n contextBehaviorControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(behavior => {\n if (behavior === 'RecentMessages' || behavior === 'InitialMessages') {\n contextMessageCountControl?.setValidators([Validators.required, Validators.min(1)]);\n } else {\n contextMessageCountControl?.clearValidators();\n if (behavior !== 'Custom') {\n contextMessageCountControl?.setValue(null);\n }\n }\n contextMessageCountControl?.updateValueAndValidity();\n });\n\n // Execution order validation\n const executionOrderControl = this.advancedForm.get('executionOrder');\n executionOrderControl?.valueChanges.pipe(\n takeUntil(this.destroy$)\n ).subscribe(order => {\n this.validateExecutionOrder(order);\n });\n }\n\n private validateExecutionOrder(order: number) {\n if (order == null) {\n this.executionOrderError = null;\n return;\n }\n\n // Check for conflicts with other prompts (excluding current one)\n const conflictingPrompt = this.allAgentPrompts.find(p => \n !UUIDsEqual(p.ID, this.agentPrompt.ID) && \n p.ExecutionOrder === order\n );\n\n if (conflictingPrompt) {\n this.executionOrderError = `Execution order ${order} is already used by another prompt. Please choose a different order.`;\n } else {\n this.executionOrderError = null;\n }\n\n this.cdr.detectChanges();\n }\n\n private async loadDropdownData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load AI Configurations\n const configurationsResult = await rv.RunView<MJAIConfigurationEntity>({\n EntityName: 'MJ: AI Configurations',\n ExtraFilter: \"Status = 'Active'\",\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n });\n\n if (configurationsResult.Success) {\n this.configurations$.next(configurationsResult.Results || []);\n }\n\n } catch (error) {\n console.error('Error loading dropdown data:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error loading form data. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n // === Validation Helpers ===\n\n isFieldInvalid(fieldName: string): boolean {\n const field = this.advancedForm.get(fieldName);\n return !!(field && field.invalid && (field.dirty || field.touched));\n }\n\n getFieldError(fieldName: string): string {\n const field = this.advancedForm.get(fieldName);\n if (field?.errors) {\n if (field.errors['required']) return `${fieldName} is required`;\n if (field.errors['min']) return `${fieldName} must be greater than or equal to ${field.errors['min'].min}`;\n }\n return '';\n }\n\n hasExecutionOrderError(): boolean {\n return !!this.executionOrderError;\n }\n\n // === Context Behavior Helpers ===\n\n requiresMessageCount(): boolean {\n const behavior = this.advancedForm.get('contextBehavior')?.value;\n return behavior === 'RecentMessages' || behavior === 'InitialMessages';\n }\n\n getContextBehaviorDescription(value: string): string {\n const option = this.contextBehaviorOptions.find(opt => opt.value === value);\n return option?.description || '';\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.dialogRef.close();\n }\n\n async save() {\n if (this.advancedForm.invalid || this.hasExecutionOrderError()) {\n this.advancedForm.markAllAsTouched();\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please fix validation errors before saving',\n 'error',\n 3000\n );\n return;\n }\n\n this.isSaving$.next(true);\n \n try {\n const formData: AgentPromptAdvancedSettingsFormData = {\n executionOrder: this.advancedForm.get('executionOrder')?.value,\n purpose: this.advancedForm.get('purpose')?.value || null,\n configurationID: this.advancedForm.get('configurationID')?.value || null,\n contextBehavior: this.advancedForm.get('contextBehavior')?.value,\n contextMessageCount: this.advancedForm.get('contextMessageCount')?.value || null,\n status: this.advancedForm.get('status')?.value\n };\n\n this.result.next(formData);\n this.dialogRef.close();\n \n } catch (error) {\n console.error('Error saving advanced settings:', error);\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Error saving settings. Please try again.',\n 'error',\n 3000\n );\n } finally {\n this.isSaving$.next(false);\n }\n }\n}","<!-- Prompt Advanced Settings Dialog -->\n<div class=\"prompt-advanced-settings-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading prompt settings...</p>\n </div>\n } @else {\n \n <!-- Form Content -->\n <form [formGroup]=\"advancedForm\" class=\"advanced-form\">\n \n <!-- Execution Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-list-ol\"></i>\n Execution Configuration\n </h3>\n \n <div class=\"form-grid\">\n <!-- Execution Order -->\n <div class=\"form-field\">\n <label for=\"executionOrder\">Execution Order *</label>\n <kendo-numerictextbox \n formControlName=\"executionOrder\"\n [min]=\"0\"\n [format]=\"'0'\"\n [class.error-border]=\"hasExecutionOrderError()\"\n class=\"form-control\">\n </kendo-numerictextbox>\n @if (isFieldInvalid('executionOrder')) {\n <div class=\"field-error\">{{ getFieldError('executionOrder') }}</div>\n }\n @if (hasExecutionOrderError()) {\n <div class=\"field-error\">{{ executionOrderError }}</div>\n }\n <small class=\"field-hint\">Order in which this prompt executes (0 = first). Must be unique among agent prompts.</small>\n </div>\n \n <!-- Purpose -->\n <div class=\"form-field\">\n <label for=\"purpose\">Purpose</label>\n <kendo-textbox \n formControlName=\"purpose\"\n placeholder=\"e.g., Initialize, ProcessData, Summarize\"\n class=\"form-control\">\n </kendo-textbox>\n <small class=\"field-hint\">Functional purpose of this prompt within the agent workflow</small>\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label for=\"status\">Status *</label>\n <kendo-dropdownlist \n formControlName=\"status\"\n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"form-control\">\n </kendo-dropdownlist>\n @if (isFieldInvalid('status')) {\n <div class=\"field-error\">{{ getFieldError('status') }}</div>\n }\n <small class=\"field-hint\">Current status of this prompt mapping</small>\n </div>\n </div>\n </div>\n\n <!-- Context Behavior Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Context Behavior\n </h3>\n \n <div class=\"form-grid\">\n <!-- Context Behavior -->\n <div class=\"form-field full-width\">\n <label for=\"contextBehavior\">Context Behavior *</label>\n <kendo-dropdownlist \n formControlName=\"contextBehavior\"\n [data]=\"contextBehaviorOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"form-control\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"context-behavior-option\">\n <div class=\"option-title\">{{ dataItem.text }}</div>\n <div class=\"option-description\">{{ dataItem.description }}</div>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (isFieldInvalid('contextBehavior')) {\n <div class=\"field-error\">{{ getFieldError('contextBehavior') }}</div>\n }\n <small class=\"field-hint\">{{ getContextBehaviorDescription(advancedForm.get('contextBehavior')?.value) }}</small>\n </div>\n \n <!-- Context Message Count (conditional) -->\n @if (requiresMessageCount()) {\n <div class=\"form-field\">\n <label for=\"contextMessageCount\">Message Count *</label>\n <kendo-numerictextbox \n formControlName=\"contextMessageCount\"\n [min]=\"1\"\n [format]=\"'0'\"\n class=\"form-control\">\n </kendo-numerictextbox>\n @if (isFieldInvalid('contextMessageCount')) {\n <div class=\"field-error\">{{ getFieldError('contextMessageCount') }}</div>\n }\n <small class=\"field-hint\">Number of messages to include for {{ advancedForm.get('contextBehavior')?.value }}</small>\n </div>\n }\n </div>\n </div>\n\n <!-- AI Configuration Section -->\n <div class=\"form-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n AI Configuration Override\n </h3>\n \n <div class=\"form-grid\">\n <!-- Configuration Override -->\n <div class=\"form-field full-width\">\n <label for=\"configurationID\">AI Configuration</label>\n <kendo-dropdownlist \n formControlName=\"configurationID\"\n [data]=\"configurations$ | async\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Use Agent Default', ID: null }\"\n class=\"form-control\">\n </kendo-dropdownlist>\n <small class=\"field-hint\">Override the agent's default AI configuration for this specific prompt</small>\n </div>\n </div>\n </div>\n </form>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\"\n [disabled]=\"(isSaving$ | async) || false\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n (click)=\"save()\"\n [disabled]=\"((isSaving$ | async) || false) || ((isLoading$ | async) || false) || hasExecutionOrderError()\">\n @if (isSaving$ | async) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n Save Settings\n }\n </button>\n </div>\n</div>"]}