@memberjunction/ng-core-entity-forms 6.2.0-edge.2 → 6.2.0-edge.3

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 (243) hide show
  1. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +9 -5
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +4 -0
  5. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts.map +1 -1
  6. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +67 -36
  7. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
  8. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1 -0
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  11. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +1 -0
  13. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  14. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  15. package/dist/lib/custom/Companies/company-header.panel.js +9 -5
  16. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  17. package/dist/lib/custom/Companies/company-overview.panel.d.ts +4 -0
  18. package/dist/lib/custom/Companies/company-overview.panel.d.ts.map +1 -1
  19. package/dist/lib/custom/Companies/company-overview.panel.js +68 -37
  20. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  21. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  22. package/dist/lib/custom/Conversations/conversation-header.panel.js +9 -5
  23. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  24. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +10 -2
  25. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -1
  26. package/dist/lib/custom/Conversations/conversation-overview.panel.js +138 -76
  27. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  28. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  29. package/dist/lib/custom/Employees/employee-header.panel.js +9 -5
  30. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  31. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +4 -0
  32. package/dist/lib/custom/Employees/employee-overview.panel.d.ts.map +1 -1
  33. package/dist/lib/custom/Employees/employee-overview.panel.js +68 -37
  34. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  35. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/Entities/entity-form.component.js +1 -0
  37. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  38. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts.map +1 -1
  39. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js +60 -45
  40. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js.map +1 -1
  41. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  42. package/dist/lib/custom/Lists/list-form.component.js +1 -0
  43. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  44. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  45. package/dist/lib/custom/Queries/query-form.component.js +1 -0
  46. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  47. package/dist/lib/custom/Rubrics/rubric-form.component.js +1 -1
  48. package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -1
  49. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -1
  50. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +1 -0
  51. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  52. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  53. package/dist/lib/custom/Templates/templates-form.component.js +1 -0
  54. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  55. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  56. package/dist/lib/custom/Tests/test-form.component.js +1 -0
  57. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  58. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  59. package/dist/lib/custom/Tests/test-run-form.component.js +1 -0
  60. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  61. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  62. package/dist/lib/custom/Tests/test-suite-form.component.js +1 -0
  63. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  64. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  65. package/dist/lib/custom/Tests/test-suite-run-form.component.js +1 -0
  66. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  67. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  68. package/dist/lib/custom/Users/user-header.panel.js +9 -5
  69. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  70. package/dist/lib/custom/Users/user-overview.panel.d.ts +4 -0
  71. package/dist/lib/custom/Users/user-overview.panel.d.ts.map +1 -1
  72. package/dist/lib/custom/Users/user-overview.panel.js +64 -33
  73. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  74. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  75. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +1 -0
  76. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  77. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  78. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +98 -44
  79. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  80. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.d.ts.map +1 -1
  81. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js +5 -9
  82. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js.map +1 -1
  83. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.d.ts.map +1 -1
  84. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +15 -18
  85. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.d.ts.map +1 -1
  87. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js +5 -9
  88. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js.map +1 -1
  89. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
  90. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +27 -9
  91. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js +17 -15
  93. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js.map +1 -1
  94. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.d.ts.map +1 -1
  95. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js +25 -7
  96. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js.map +1 -1
  97. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js +12 -14
  98. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js.map +1 -1
  99. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.d.ts.map +1 -1
  100. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js +5 -9
  101. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js +5 -9
  104. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.d.ts.map +1 -1
  106. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +26 -8
  107. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js +4 -7
  110. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js +4 -7
  113. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +31 -13
  116. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.d.ts.map +1 -1
  118. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js +5 -9
  119. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  121. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +34 -16
  122. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js +5 -9
  125. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  127. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +151 -97
  128. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  129. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.d.ts.map +1 -1
  130. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js +8 -11
  131. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +15 -18
  134. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.d.ts +10 -0
  136. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.d.ts.map +1 -0
  137. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.js +148 -0
  138. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.js.map +1 -0
  139. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.d.ts.map +1 -1
  140. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +53 -56
  141. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.d.ts +10 -0
  143. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.d.ts.map +1 -0
  144. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.js +161 -0
  145. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.js.map +1 -0
  146. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.d.ts +10 -0
  147. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.d.ts.map +1 -0
  148. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.js +78 -0
  149. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.js.map +1 -0
  150. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.d.ts +10 -0
  151. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.d.ts.map +1 -0
  152. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.js +68 -0
  153. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.js.map +1 -0
  154. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.d.ts +10 -0
  155. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.d.ts.map +1 -0
  156. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.js +100 -0
  157. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.js.map +1 -0
  158. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.js +119 -0
  161. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.d.ts +10 -0
  163. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.d.ts.map +1 -0
  164. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.js +92 -0
  165. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.js.map +1 -0
  166. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.d.ts +10 -0
  167. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.d.ts.map +1 -0
  168. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.js +87 -0
  169. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.js.map +1 -0
  170. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.d.ts +10 -0
  171. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.d.ts.map +1 -0
  172. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.js +129 -0
  173. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.js.map +1 -0
  174. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.d.ts.map +1 -1
  175. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js +5 -9
  176. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js.map +1 -1
  177. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.d.ts.map +1 -1
  178. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js +8 -11
  179. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +36 -40
  182. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  184. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +39 -21
  185. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  186. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.d.ts.map +1 -1
  187. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +45 -48
  188. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  189. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.d.ts.map +1 -1
  190. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +15 -18
  191. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  192. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  193. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +254 -128
  194. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  195. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.d.ts.map +1 -1
  196. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js +5 -9
  197. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js.map +1 -1
  198. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.d.ts +10 -0
  199. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.d.ts.map +1 -0
  200. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.js +64 -0
  201. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.js.map +1 -0
  202. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.d.ts +10 -0
  203. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.d.ts.map +1 -0
  204. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.js +94 -0
  205. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.js.map +1 -0
  206. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.d.ts +10 -0
  207. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.d.ts.map +1 -0
  208. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.js +91 -0
  209. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.js.map +1 -0
  210. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.d.ts +10 -0
  211. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.d.ts.map +1 -0
  212. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.js +105 -0
  213. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.js.map +1 -0
  214. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.d.ts +10 -0
  215. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.d.ts.map +1 -0
  216. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.js +129 -0
  217. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.js.map +1 -0
  218. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.d.ts +10 -0
  219. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.d.ts.map +1 -0
  220. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.js +85 -0
  221. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.js.map +1 -0
  222. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.d.ts.map +1 -1
  223. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +17 -20
  224. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  225. package/dist/lib/generated/generated-forms.module.d.ts +446 -431
  226. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  227. package/dist/lib/generated/generated-forms.module.js +57 -12
  228. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  229. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts +7 -1
  230. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts.map +1 -1
  231. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +89 -43
  232. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
  233. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +3 -3
  234. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  235. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +5 -5
  236. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  237. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +4 -4
  238. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  239. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js +3 -3
  240. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js.map +1 -1
  241. package/dist/lib/panels/model-predictions/model-prediction.panel.js +4 -4
  242. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  243. package/package.json +47 -47
@@ -11,51 +11,117 @@ import { RegisterClassEx } from '@memberjunction/global';
11
11
  import { BaseFormPanel } from '@memberjunction/ng-base-forms';
12
12
  import * as i0 from "@angular/core";
13
13
  const _forTrack0 = ($index, $item) => $item.ID;
14
- function ConversationOverviewPanel_Conditional_32_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵdomElementStart(0, "span", 11);
14
+ function ConversationOverviewPanel_Conditional_6_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵdomElementStart(0, "span", 5);
16
+ i0.ɵɵtext(1);
17
+ i0.ɵɵdomElementEnd();
18
+ } if (rf & 2) {
19
+ const ctx_r0 = i0.ɵɵnextContext();
20
+ i0.ɵɵadvance();
21
+ i0.ɵɵtextInterpolate1("", ctx_r0.Messages.length, " Turns");
22
+ } }
23
+ function ConversationOverviewPanel_Conditional_8_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵdomElementStart(0, "span", 7);
25
+ i0.ɵɵtext(1);
26
+ i0.ɵɵdomElementEnd();
27
+ } if (rf & 2) {
28
+ const ctx_r0 = i0.ɵɵnextContext();
29
+ i0.ɵɵadvance();
30
+ i0.ɵɵtextInterpolate(ctx_r0.LoadError);
31
+ } }
32
+ function ConversationOverviewPanel_Conditional_9_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵdomElementStart(0, "div", 10)(1, "span", 11);
34
+ i0.ɵɵtext(2, "Total Messages");
35
+ i0.ɵɵdomElementEnd();
36
+ i0.ɵɵdomElementStart(3, "span", 12);
37
+ i0.ɵɵtext(4);
38
+ i0.ɵɵdomElementEnd()();
39
+ i0.ɵɵdomElementStart(5, "div", 10)(6, "span", 11);
40
+ i0.ɵɵtext(7, "User Prompts");
41
+ i0.ɵɵdomElementEnd();
42
+ i0.ɵɵdomElementStart(8, "span", 12);
43
+ i0.ɵɵtext(9);
44
+ i0.ɵɵdomElementEnd()();
45
+ i0.ɵɵdomElementStart(10, "div", 10)(11, "span", 11);
46
+ i0.ɵɵtext(12, "Agent Responses");
47
+ i0.ɵɵdomElementEnd();
48
+ i0.ɵɵdomElementStart(13, "span", 12);
49
+ i0.ɵɵtext(14);
50
+ i0.ɵɵdomElementEnd()();
51
+ } if (rf & 2) {
52
+ const ctx_r0 = i0.ɵɵnextContext();
53
+ i0.ɵɵadvance(4);
54
+ i0.ɵɵtextInterpolate(ctx_r0.Messages.length);
55
+ i0.ɵɵadvance(5);
56
+ i0.ɵɵtextInterpolate(ctx_r0.UserMessageCount);
57
+ i0.ɵɵadvance(5);
58
+ i0.ɵɵtextInterpolate(ctx_r0.AgentMessageCount);
59
+ } }
60
+ function ConversationOverviewPanel_Conditional_18_Template(rf, ctx) { if (rf & 1) {
61
+ i0.ɵɵdomElementStart(0, "span", 7);
62
+ i0.ɵɵtext(1);
63
+ i0.ɵɵdomElementEnd();
64
+ } if (rf & 2) {
65
+ const ctx_r0 = i0.ɵɵnextContext();
66
+ i0.ɵɵadvance();
67
+ i0.ɵɵtextInterpolate(ctx_r0.LoadError);
68
+ } }
69
+ function ConversationOverviewPanel_Conditional_19_Template(rf, ctx) { if (rf & 1) {
70
+ i0.ɵɵdomElementStart(0, "span", 9);
16
71
  i0.ɵɵtext(1, "No messages in this conversation yet.");
17
72
  i0.ɵɵdomElementEnd();
18
73
  } }
19
- function ConversationOverviewPanel_Conditional_33_For_1_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵdomElementStart(0, "div", 7)(1, "span", 12)(2, "strong");
74
+ function ConversationOverviewPanel_Conditional_20_For_1_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵdomElementStart(0, "div", 10)(1, "span", 13)(2, "strong");
21
76
  i0.ɵɵtext(3);
22
77
  i0.ɵɵdomElementEnd();
23
78
  i0.ɵɵtext(4);
24
79
  i0.ɵɵdomElementEnd();
25
- i0.ɵɵdomElementStart(5, "span", 13);
80
+ i0.ɵɵdomElementStart(5, "span", 14);
26
81
  i0.ɵɵtext(6);
27
82
  i0.ɵɵdomElementEnd()();
28
83
  } if (rf & 2) {
29
- const msg_r1 = ctx.$implicit;
84
+ const msg_r2 = ctx.$implicit;
85
+ const ctx_r0 = i0.ɵɵnextContext(2);
30
86
  i0.ɵɵadvance(3);
31
- i0.ɵɵtextInterpolate1("", msg_r1.Role, ":");
87
+ i0.ɵɵtextInterpolate1("", msg_r2.Role, ":");
32
88
  i0.ɵɵadvance();
33
- i0.ɵɵtextInterpolate1(" ", msg_r1.Message, " ");
89
+ i0.ɵɵtextInterpolate1(" ", msg_r2.Message, " ");
34
90
  i0.ɵɵadvance();
35
- i0.ɵɵclassProp("mj-pill-blue", msg_r1.Role === "user")("mj-pill-green", msg_r1.Role !== "user");
91
+ i0.ɵɵclassProp("mj-pill-blue", ctx_r0.IsUserTurn(msg_r2))("mj-pill-green", ctx_r0.IsAgentTurn(msg_r2));
36
92
  i0.ɵɵadvance();
37
- i0.ɵɵtextInterpolate1(" ", msg_r1.Role, " ");
93
+ i0.ɵɵtextInterpolate1(" ", msg_r2.Role, " ");
38
94
  } }
39
- function ConversationOverviewPanel_Conditional_33_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵrepeaterCreate(0, ConversationOverviewPanel_Conditional_33_For_1_Template, 7, 7, "div", 7, _forTrack0);
95
+ function ConversationOverviewPanel_Conditional_20_Template(rf, ctx) { if (rf & 1) {
96
+ i0.ɵɵrepeaterCreate(0, ConversationOverviewPanel_Conditional_20_For_1_Template, 7, 7, "div", 10, _forTrack0);
41
97
  } if (rf & 2) {
42
- const ctx_r1 = i0.ɵɵnextContext();
43
- i0.ɵɵrepeater(ctx_r1.RecentMessages);
98
+ const ctx_r0 = i0.ɵɵnextContext();
99
+ i0.ɵɵrepeater(ctx_r0.RecentMessages);
44
100
  } }
45
101
  let ConversationOverviewPanel = class ConversationOverviewPanel extends BaseFormPanel {
46
102
  constructor() {
47
103
  super(...arguments);
48
104
  this.cdr = inject(ChangeDetectorRef);
49
105
  this.Messages = [];
106
+ /** Set when the query fails, so the cards show the failure instead of zero messages. */
107
+ this.LoadError = null;
50
108
  }
51
109
  ngOnInit() {
52
110
  this.loadConversationMessages();
53
111
  }
54
112
  get UserMessageCount() {
55
- return this.Messages.filter(m => m.Role?.toLowerCase() === 'user').length;
113
+ return this.Messages.filter(m => this.IsUserTurn(m)).length;
56
114
  }
57
115
  get AgentMessageCount() {
58
- return this.Messages.filter(m => m.Role?.toLowerCase() !== 'user').length;
116
+ return this.Messages.filter(m => this.IsAgentTurn(m)).length;
117
+ }
118
+ /** A turn the user sent. `Role` is stored as 'User', 'AI' or 'Error'. */
119
+ IsUserTurn(detail) {
120
+ return detail.Role === 'User';
121
+ }
122
+ /** A turn an agent sent. An 'Error' turn is neither a user turn nor an agent turn. */
123
+ IsAgentTurn(detail) {
124
+ return detail.Role === 'AI';
59
125
  }
60
126
  get RecentMessages() {
61
127
  return this.Messages.slice(0, 4);
@@ -66,77 +132,65 @@ let ConversationOverviewPanel = class ConversationOverviewPanel extends BaseForm
66
132
  try {
67
133
  const rv = new RunView();
68
134
  const res = await rv.RunView({
69
- EntityName: 'Conversation Details',
135
+ EntityName: 'MJ: Conversation Details',
70
136
  ExtraFilter: `ConversationID = '${this.Record.ID}'`,
71
137
  Fields: ['ID', 'Role', 'Message', '__mj_CreatedAt'],
72
138
  OrderBy: '__mj_CreatedAt DESC',
73
139
  MaxRows: 50,
74
140
  ResultType: 'simple'
75
141
  });
76
- if (res.Success && res.Results) {
77
- this.Messages = res.Results;
78
- this.cdr.markForCheck();
142
+ if (res.Success) {
143
+ this.Messages = res.Results ?? [];
144
+ }
145
+ else {
146
+ this.showLoadError(res.ErrorMessage);
79
147
  }
80
148
  }
81
149
  catch (e) {
82
150
  console.error('Failed to load conversation details:', e);
151
+ this.showLoadError(e instanceof Error ? e.message : undefined);
83
152
  }
153
+ this.cdr.markForCheck();
154
+ }
155
+ /** Shows a short "could not load" line, with the underlying message when there is one. */
156
+ showLoadError(detail) {
157
+ this.LoadError = detail ? `Could not load messages: ${detail}` : 'Could not load messages.';
84
158
  }
85
159
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵConversationOverviewPanel_BaseFactory; return function ConversationOverviewPanel_Factory(__ngFactoryType__) { return (ɵConversationOverviewPanel_BaseFactory || (ɵConversationOverviewPanel_BaseFactory = i0.ɵɵgetInheritedFactory(ConversationOverviewPanel)))(__ngFactoryType__ || ConversationOverviewPanel); }; })(); }
86
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationOverviewPanel, selectors: [["mj-conversation-overview-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 34, vars: 5, consts: [[1, "mj-convo-overview-grid"], [1, "mj-overview-card"], [1, "mj-card-header"], [1, "mj-card-title"], [1, "fa-solid", "fa-comments", 2, "color", "var(--mj-brand-primary, #38bdf8)"], [1, "mj-card-badge"], [1, "mj-card-body"], [1, "mj-metric-row"], [1, "mj-metric-label"], [1, "mj-metric-val"], [1, "fa-solid", "fa-clock-rotate-left", 2, "color", "#10b981"], [2, "font-size", "12px", "color", "var(--mj-text-muted)"], [1, "mj-metric-label", 2, "text-overflow", "ellipsis", "overflow", "hidden", "white-space", "nowrap", "max-width", "200px"], [1, "mj-pill"]], template: function ConversationOverviewPanel_Template(rf, ctx) { if (rf & 1) {
160
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationOverviewPanel, selectors: [["mj-conversation-overview-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 21, vars: 3, consts: [[1, "mj-convo-overview-grid"], [1, "mj-overview-card"], [1, "mj-card-header"], [1, "mj-card-title"], [1, "fa-solid", "fa-comments", 2, "color", "var(--mj-brand-primary, #38bdf8)"], [1, "mj-card-badge"], [1, "mj-card-body"], [1, "mj-load-error"], [1, "fa-solid", "fa-clock-rotate-left", 2, "color", "#10b981"], [2, "font-size", "12px", "color", "var(--mj-text-muted)"], [1, "mj-metric-row"], [1, "mj-metric-label"], [1, "mj-metric-val"], [1, "mj-metric-label", 2, "text-overflow", "ellipsis", "overflow", "hidden", "white-space", "nowrap", "max-width", "200px"], [1, "mj-pill"]], template: function ConversationOverviewPanel_Template(rf, ctx) { if (rf & 1) {
87
161
  i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
88
162
  i0.ɵɵdomElement(4, "i", 4);
89
163
  i0.ɵɵtext(5, " Turn Summary");
90
164
  i0.ɵɵdomElementEnd();
91
- i0.ɵɵdomElementStart(6, "span", 5);
92
- i0.ɵɵtext(7);
93
- i0.ɵɵdomElementEnd()();
94
- i0.ɵɵdomElementStart(8, "div", 6)(9, "div", 7)(10, "span", 8);
95
- i0.ɵɵtext(11, "Total Messages");
96
- i0.ɵɵdomElementEnd();
97
- i0.ɵɵdomElementStart(12, "span", 9);
98
- i0.ɵɵtext(13);
99
- i0.ɵɵdomElementEnd()();
100
- i0.ɵɵdomElementStart(14, "div", 7)(15, "span", 8);
101
- i0.ɵɵtext(16, "User Prompts");
165
+ i0.ɵɵconditionalCreate(6, ConversationOverviewPanel_Conditional_6_Template, 2, 1, "span", 5);
102
166
  i0.ɵɵdomElementEnd();
103
- i0.ɵɵdomElementStart(17, "span", 9);
104
- i0.ɵɵtext(18);
167
+ i0.ɵɵdomElementStart(7, "div", 6);
168
+ i0.ɵɵconditionalCreate(8, ConversationOverviewPanel_Conditional_8_Template, 2, 1, "span", 7)(9, ConversationOverviewPanel_Conditional_9_Template, 15, 3);
105
169
  i0.ɵɵdomElementEnd()();
106
- i0.ɵɵdomElementStart(19, "div", 7)(20, "span", 8);
107
- i0.ɵɵtext(21, "Agent Responses");
170
+ i0.ɵɵdomElementStart(10, "div", 1)(11, "div", 2)(12, "div", 3);
171
+ i0.ɵɵdomElement(13, "i", 8);
172
+ i0.ɵɵtext(14, " Recent Turns");
108
173
  i0.ɵɵdomElementEnd();
109
- i0.ɵɵdomElementStart(22, "span", 9);
110
- i0.ɵɵtext(23);
111
- i0.ɵɵdomElementEnd()()()();
112
- i0.ɵɵdomElementStart(24, "div", 1)(25, "div", 2)(26, "div", 3);
113
- i0.ɵɵdomElement(27, "i", 10);
114
- i0.ɵɵtext(28, " Recent Turns");
115
- i0.ɵɵdomElementEnd();
116
- i0.ɵɵdomElementStart(29, "span", 5);
117
- i0.ɵɵtext(30, "History");
174
+ i0.ɵɵdomElementStart(15, "span", 5);
175
+ i0.ɵɵtext(16, "History");
118
176
  i0.ɵɵdomElementEnd()();
119
- i0.ɵɵdomElementStart(31, "div", 6);
120
- i0.ɵɵconditionalCreate(32, ConversationOverviewPanel_Conditional_32_Template, 2, 0, "span", 11)(33, ConversationOverviewPanel_Conditional_33_Template, 2, 0);
177
+ i0.ɵɵdomElementStart(17, "div", 6);
178
+ i0.ɵɵconditionalCreate(18, ConversationOverviewPanel_Conditional_18_Template, 2, 1, "span", 7)(19, ConversationOverviewPanel_Conditional_19_Template, 2, 0, "span", 9)(20, ConversationOverviewPanel_Conditional_20_Template, 2, 0);
121
179
  i0.ɵɵdomElementEnd()()();
122
180
  } if (rf & 2) {
123
- i0.ɵɵadvance(7);
124
- i0.ɵɵtextInterpolate1("", ctx.Messages.length, " Turns");
125
181
  i0.ɵɵadvance(6);
126
- i0.ɵɵtextInterpolate(ctx.Messages.length);
127
- i0.ɵɵadvance(5);
128
- i0.ɵɵtextInterpolate(ctx.UserMessageCount);
129
- i0.ɵɵadvance(5);
130
- i0.ɵɵtextInterpolate(ctx.AgentMessageCount);
131
- i0.ɵɵadvance(9);
132
- i0.ɵɵconditional(ctx.Messages.length === 0 ? 32 : 33);
133
- } }, dependencies: [CommonModule], styles: ["[_nghost-%COMP%] { display: block; width: 100%; margin-bottom: 20px; }\n .mj-convo-overview-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header[_ngcontent-%COMP%] {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body[_ngcontent-%COMP%] {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label[_ngcontent-%COMP%] { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val[_ngcontent-%COMP%] { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-pill[_ngcontent-%COMP%] { font-size: 10.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }\n .mj-pill-green[_ngcontent-%COMP%] { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n .mj-pill-blue[_ngcontent-%COMP%] { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }"], changeDetection: 0 }); }
182
+ i0.ɵɵconditional(!ctx.LoadError ? 6 : -1);
183
+ i0.ɵɵadvance(2);
184
+ i0.ɵɵconditional(ctx.LoadError ? 8 : 9);
185
+ i0.ɵɵadvance(10);
186
+ i0.ɵɵconditional(ctx.LoadError ? 18 : ctx.Messages.length === 0 ? 19 : 20);
187
+ } }, dependencies: [CommonModule], styles: ["[_nghost-%COMP%] { display: block; width: 100%; margin-bottom: 20px; }\n .mj-convo-overview-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header[_ngcontent-%COMP%] {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body[_ngcontent-%COMP%] {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label[_ngcontent-%COMP%] { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val[_ngcontent-%COMP%] { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-load-error[_ngcontent-%COMP%] { font-size: 12px; color: var(--mj-status-error); }\n .mj-pill[_ngcontent-%COMP%] { font-size: 10.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }\n .mj-pill-green[_ngcontent-%COMP%] { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n .mj-pill-blue[_ngcontent-%COMP%] { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }"], changeDetection: 0 }); }
134
188
  };
135
189
  ConversationOverviewPanel = __decorate([
136
190
  RegisterClassEx(BaseFormPanel, {
137
- key: 'form-panel:Conversations:overview',
191
+ key: 'form-panel:MJ: Conversations:overview',
138
192
  metadata: {
139
- entity: 'Conversations',
193
+ entity: 'MJ: Conversations',
140
194
  slot: 'before-fields',
141
195
  sortKey: 10,
142
196
  },
@@ -151,21 +205,27 @@ export { ConversationOverviewPanel };
151
205
  <div class="mj-overview-card">
152
206
  <div class="mj-card-header">
153
207
  <div class="mj-card-title"><i class="fa-solid fa-comments" style="color: var(--mj-brand-primary, #38bdf8);"></i> Turn Summary</div>
154
- <span class="mj-card-badge">{{ Messages.length }} Turns</span>
208
+ @if (!LoadError) {
209
+ <span class="mj-card-badge">{{ Messages.length }} Turns</span>
210
+ }
155
211
  </div>
156
212
  <div class="mj-card-body">
157
- <div class="mj-metric-row">
158
- <span class="mj-metric-label">Total Messages</span>
159
- <span class="mj-metric-val">{{ Messages.length }}</span>
160
- </div>
161
- <div class="mj-metric-row">
162
- <span class="mj-metric-label">User Prompts</span>
163
- <span class="mj-metric-val">{{ UserMessageCount }}</span>
164
- </div>
165
- <div class="mj-metric-row">
166
- <span class="mj-metric-label">Agent Responses</span>
167
- <span class="mj-metric-val">{{ AgentMessageCount }}</span>
168
- </div>
213
+ @if (LoadError) {
214
+ <span class="mj-load-error">{{ LoadError }}</span>
215
+ } @else {
216
+ <div class="mj-metric-row">
217
+ <span class="mj-metric-label">Total Messages</span>
218
+ <span class="mj-metric-val">{{ Messages.length }}</span>
219
+ </div>
220
+ <div class="mj-metric-row">
221
+ <span class="mj-metric-label">User Prompts</span>
222
+ <span class="mj-metric-val">{{ UserMessageCount }}</span>
223
+ </div>
224
+ <div class="mj-metric-row">
225
+ <span class="mj-metric-label">Agent Responses</span>
226
+ <span class="mj-metric-val">{{ AgentMessageCount }}</span>
227
+ </div>
228
+ }
169
229
  </div>
170
230
  </div>
171
231
 
@@ -176,7 +236,9 @@ export { ConversationOverviewPanel };
176
236
  <span class="mj-card-badge">History</span>
177
237
  </div>
178
238
  <div class="mj-card-body">
179
- @if (Messages.length === 0) {
239
+ @if (LoadError) {
240
+ <span class="mj-load-error">{{ LoadError }}</span>
241
+ } @else if (Messages.length === 0) {
180
242
  <span style="font-size: 12px; color: var(--mj-text-muted);">No messages in this conversation yet.</span>
181
243
  } @else {
182
244
  @for (msg of RecentMessages; track msg.ID) {
@@ -184,7 +246,7 @@ export { ConversationOverviewPanel };
184
246
  <span class="mj-metric-label" style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 200px;">
185
247
  <strong>{{ msg.Role }}:</strong> {{ msg.Message }}
186
248
  </span>
187
- <span class="mj-pill" [class.mj-pill-blue]="msg.Role === 'user'" [class.mj-pill-green]="msg.Role !== 'user'">
249
+ <span class="mj-pill" [class.mj-pill-blue]="IsUserTurn(msg)" [class.mj-pill-green]="IsAgentTurn(msg)">
188
250
  {{ msg.Role }}
189
251
  </span>
190
252
  </div>
@@ -193,7 +255,7 @@ export { ConversationOverviewPanel };
193
255
  </div>
194
256
  </div>
195
257
  </div>
196
- `, styles: ["\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-convo-overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-pill { font-size: 10.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }\n .mj-pill-green { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n .mj-pill-blue { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }\n "] }]
258
+ `, styles: ["\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-convo-overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-load-error { font-size: 12px; color: var(--mj-status-error); }\n .mj-pill { font-size: 10.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }\n .mj-pill-green { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n .mj-pill-blue { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }\n "] }]
197
259
  }], null, null); })();
198
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationOverviewPanel, { className: "ConversationOverviewPanel", filePath: "src/lib/custom/Conversations/conversation-overview.panel.ts", lineNumber: 135 }); })();
260
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationOverviewPanel, { className: "ConversationOverviewPanel", filePath: "src/lib/custom/Conversations/conversation-overview.panel.ts", lineNumber: 144 }); })();
199
261
  //# sourceMappingURL=conversation-overview.panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-overview.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-overview.panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ChangeDetectionStrategy, OnInit, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RunView } from '@memberjunction/core';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJConversationEntity } from '@memberjunction/core-entities';\n\ninterface ConversationDetailRow {\n ID: string;\n Role: string;\n Message: string;\n CreatedAt: string;\n}\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:Conversations:overview',\n metadata: {\n entity: 'Conversations',\n slot: 'before-fields',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-conversation-overview-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-convo-overview-grid\">\n <!-- Card 1: Message Flow Metrics -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-comments\" style=\"color: var(--mj-brand-primary, #38bdf8);\"></i> Turn Summary</div>\n <span class=\"mj-card-badge\">{{ Messages.length }} Turns</span>\n </div>\n <div class=\"mj-card-body\">\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Total Messages</span>\n <span class=\"mj-metric-val\">{{ Messages.length }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">User Prompts</span>\n <span class=\"mj-metric-val\">{{ UserMessageCount }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Agent Responses</span>\n <span class=\"mj-metric-val\">{{ AgentMessageCount }}</span>\n </div>\n </div>\n </div>\n\n <!-- Card 2: Recent Activity Stream -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color: #10b981;\"></i> Recent Turns</div>\n <span class=\"mj-card-badge\">History</span>\n </div>\n <div class=\"mj-card-body\">\n @if (Messages.length === 0) {\n <span style=\"font-size: 12px; color: var(--mj-text-muted);\">No messages in this conversation yet.</span>\n } @else {\n @for (msg of RecentMessages; track msg.ID) {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\" style=\"text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 200px;\">\n <strong>{{ msg.Role }}:</strong> {{ msg.Message }}\n </span>\n <span class=\"mj-pill\" [class.mj-pill-blue]=\"msg.Role === 'user'\" [class.mj-pill-green]=\"msg.Role !== 'user'\">\n {{ msg.Role }}\n </span>\n </div>\n }\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-convo-overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-pill { font-size: 10.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }\n .mj-pill-green { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n .mj-pill-blue { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }\n `]\n})\nexport class ConversationOverviewPanel extends BaseFormPanel<MJConversationEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n public Messages: ConversationDetailRow[] = [];\n\n public ngOnInit(): void {\n this.loadConversationMessages();\n }\n\n public get UserMessageCount(): number {\n return this.Messages.filter(m => m.Role?.toLowerCase() === 'user').length;\n }\n\n public get AgentMessageCount(): number {\n return this.Messages.filter(m => m.Role?.toLowerCase() !== 'user').length;\n }\n\n public get RecentMessages(): ConversationDetailRow[] {\n return this.Messages.slice(0, 4);\n }\n\n private async loadConversationMessages(): Promise<void> {\n if (!this.Record?.ID) return;\n try {\n const rv = new RunView();\n const res = await rv.RunView<ConversationDetailRow>({\n EntityName: 'Conversation Details',\n ExtraFilter: `ConversationID = '${this.Record.ID}'`,\n Fields: ['ID', 'Role', 'Message', '__mj_CreatedAt'],\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 50,\n ResultType: 'simple'\n });\n if (res.Success && res.Results) {\n this.Messages = res.Results;\n this.cdr.markForCheck();\n }\n } catch (e) {\n console.error('Failed to load conversation details:', e);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"conversation-overview.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-overview.panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ChangeDetectionStrategy, OnInit, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RunView } from '@memberjunction/core';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJConversationDetailEntity, MJConversationEntity } from '@memberjunction/core-entities';\n\ninterface ConversationDetailRow {\n ID: string;\n Role: MJConversationDetailEntity['Role'];\n Message: string;\n CreatedAt: string;\n}\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:MJ: Conversations:overview',\n metadata: {\n entity: 'MJ: Conversations',\n slot: 'before-fields',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-conversation-overview-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-convo-overview-grid\">\n <!-- Card 1: Message Flow Metrics -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-comments\" style=\"color: var(--mj-brand-primary, #38bdf8);\"></i> Turn Summary</div>\n @if (!LoadError) {\n <span class=\"mj-card-badge\">{{ Messages.length }} Turns</span>\n }\n </div>\n <div class=\"mj-card-body\">\n @if (LoadError) {\n <span class=\"mj-load-error\">{{ LoadError }}</span>\n } @else {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Total Messages</span>\n <span class=\"mj-metric-val\">{{ Messages.length }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">User Prompts</span>\n <span class=\"mj-metric-val\">{{ UserMessageCount }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Agent Responses</span>\n <span class=\"mj-metric-val\">{{ AgentMessageCount }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Card 2: Recent Activity Stream -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color: #10b981;\"></i> Recent Turns</div>\n <span class=\"mj-card-badge\">History</span>\n </div>\n <div class=\"mj-card-body\">\n @if (LoadError) {\n <span class=\"mj-load-error\">{{ LoadError }}</span>\n } @else if (Messages.length === 0) {\n <span style=\"font-size: 12px; color: var(--mj-text-muted);\">No messages in this conversation yet.</span>\n } @else {\n @for (msg of RecentMessages; track msg.ID) {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\" style=\"text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 200px;\">\n <strong>{{ msg.Role }}:</strong> {{ msg.Message }}\n </span>\n <span class=\"mj-pill\" [class.mj-pill-blue]=\"IsUserTurn(msg)\" [class.mj-pill-green]=\"IsAgentTurn(msg)\">\n {{ msg.Role }}\n </span>\n </div>\n }\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-convo-overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-load-error { font-size: 12px; color: var(--mj-status-error); }\n .mj-pill { font-size: 10.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }\n .mj-pill-green { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n .mj-pill-blue { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }\n `]\n})\nexport class ConversationOverviewPanel extends BaseFormPanel<MJConversationEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n public Messages: ConversationDetailRow[] = [];\n /** Set when the query fails, so the cards show the failure instead of zero messages. */\n public LoadError: string | null = null;\n\n public ngOnInit(): void {\n this.loadConversationMessages();\n }\n\n public get UserMessageCount(): number {\n return this.Messages.filter(m => this.IsUserTurn(m)).length;\n }\n\n public get AgentMessageCount(): number {\n return this.Messages.filter(m => this.IsAgentTurn(m)).length;\n }\n\n /** A turn the user sent. `Role` is stored as 'User', 'AI' or 'Error'. */\n protected IsUserTurn(detail: ConversationDetailRow): boolean {\n return detail.Role === 'User';\n }\n\n /** A turn an agent sent. An 'Error' turn is neither a user turn nor an agent turn. */\n protected IsAgentTurn(detail: ConversationDetailRow): boolean {\n return detail.Role === 'AI';\n }\n\n public get RecentMessages(): ConversationDetailRow[] {\n return this.Messages.slice(0, 4);\n }\n\n private async loadConversationMessages(): Promise<void> {\n if (!this.Record?.ID) return;\n try {\n const rv = new RunView();\n const res = await rv.RunView<ConversationDetailRow>({\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: `ConversationID = '${this.Record.ID}'`,\n Fields: ['ID', 'Role', 'Message', '__mj_CreatedAt'],\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 50,\n ResultType: 'simple'\n });\n if (res.Success) {\n this.Messages = res.Results ?? [];\n } else {\n this.showLoadError(res.ErrorMessage);\n }\n } catch (e) {\n console.error('Failed to load conversation details:', e);\n this.showLoadError(e instanceof Error ? e.message : undefined);\n }\n this.cdr.markForCheck();\n }\n\n /** Shows a short \"could not load\" line, with the underlying message when there is one. */\n private showLoadError(detail: string | undefined): void {\n this.LoadError = detail ? `Could not load messages: ${detail}` : 'Could not load messages.';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"employee-header.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-header.panel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,+BAA+B,CAAC;;AAIjF,qBA2Fa,mBAAoB,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAC7D,WAAW,UAAS;IAEpB,QAAQ,IAAI,IAAI;IAKvB,IAAW,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAE7C;IAEM,eAAe,IAAI,IAAI;yCAZrB,mBAAmB;2CAAnB,mBAAmB;CAgB/B"}
1
+ {"version":3,"file":"employee-header.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-header.panel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,+BAA+B,CAAC;;AAIjF,qBA+Fa,mBAAoB,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAC7D,WAAW,UAAS;IAEpB,QAAQ,IAAI,IAAI;IAKvB,IAAW,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAE7C;IAEM,eAAe,IAAI,IAAI;yCAZrB,mBAAmB;2CAAnB,mBAAmB;CAgB/B"}
@@ -117,11 +117,15 @@ let EmployeeHeaderPanel = class EmployeeHeaderPanel extends BaseFormPanel {
117
117
  };
118
118
  EmployeeHeaderPanel = __decorate([
119
119
  RegisterClassEx(BaseFormPanel, {
120
- key: 'form-panel:Employees:header',
120
+ key: 'form-panel:MJ: Employees:header',
121
121
  metadata: {
122
- entity: 'Employees',
123
- slot: 'header',
124
- sortKey: 10,
122
+ entity: 'MJ: Employees',
123
+ // A hero is a bare strip in before-fields. Its sortKey is above the overview's
124
+ // (higher draws first), so it draws above the overview cards.
125
+ slot: 'before-fields',
126
+ presentation: 'bare',
127
+ contributionKey: 'employees:header',
128
+ sortKey: 20,
125
129
  },
126
130
  })
127
131
  ], EmployeeHeaderPanel);
@@ -176,5 +180,5 @@ export { EmployeeHeaderPanel };
176
180
  }
177
181
  `, styles: ["\n :host { display: block; width: 100%; }\n .mj-entity-hero-header {\n background: linear-gradient(180deg, var(--mj-bg-surface, #111a2e) 0%, var(--mj-bg-surface-card, #141f36) 100%);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n padding: 16px 24px;\n }\n .mj-hero-top { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n .mj-hero-identity { display: flex; align-items: center; gap: 14px; }\n .mj-hero-avatar {\n width: 44px; height: 44px; border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: #fff; flex-shrink: 0;\n }\n .mj-hero-title { font-size: 18px; font-weight: 800; color: var(--mj-text-primary, #f8fafc); }\n .mj-hero-subline { font-size: 12.5px; color: var(--mj-text-secondary, #94a3b8); margin-top: 2px; display: flex; gap: 8px; align-items: center; }\n .mj-hero-toggle-btn {\n background: none; border: 1px solid var(--mj-border-default, #223254);\n color: var(--mj-text-muted, #64748b); border-radius: 6px;\n padding: 6px 10px; cursor: pointer;\n }\n .mj-hero-metrics-row {\n display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px; margin-top: 14px; padding-top: 12px;\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n .mj-hero-metric { display: flex; flex-direction: column; gap: 2px; }\n .mj-hero-metric-label { font-size: 10.5px; font-weight: 700; color: var(--mj-text-muted, #64748b); text-transform: uppercase; }\n .mj-hero-metric-val { font-size: 14px; font-weight: 700; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n "] }]
178
182
  }], null, null); })();
179
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EmployeeHeaderPanel, { className: "EmployeeHeaderPanel", filePath: "src/lib/custom/Employees/employee-header.panel.ts", lineNumber: 100 }); })();
183
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EmployeeHeaderPanel, { className: "EmployeeHeaderPanel", filePath: "src/lib/custom/Employees/employee-header.panel.ts", lineNumber: 104 }); })();
180
184
  //# sourceMappingURL=employee-header.panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"employee-header.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-header.panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJEmployeeEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.employees.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:Employees:header',\n metadata: {\n entity: 'Employees',\n slot: 'header',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-employee-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Employee) {\n <div class=\"mj-entity-hero-header\">\n <div class=\"mj-hero-top\">\n <div class=\"mj-hero-identity\">\n <div class=\"mj-hero-avatar\" style=\"background: linear-gradient(135deg, #10b981, #047857);\">\n <i class=\"fa-solid fa-id-badge\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Employee.FirstName }} {{ Employee.LastName }}</h1>\n <div class=\"mj-hero-subline\">\n <span>{{ Employee.Title || 'Team Member' }}</span>\n @if (Employee.Email) {\n <span>•</span>\n <span>{{ Employee.Email }}</span>\n }\n </div>\n </div>\n </div>\n <div class=\"mj-hero-actions\">\n <button type=\"button\" class=\"mj-hero-toggle-btn\" (click)=\"ToggleCollapsed()\" [title]=\"IsCollapsed ? 'Expand Header' : 'Collapse Header'\">\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"!IsCollapsed\" [class.fa-chevron-down]=\"IsCollapsed\"></i>\n </button>\n </div>\n </div>\n\n @if (!IsCollapsed) {\n <div class=\"mj-hero-metrics-row\">\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Employee ID</span>\n <span class=\"mj-hero-metric-val\">{{ Employee.ID?.substring(0, 8) }}</span>\n </div>\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Status</span>\n <span class=\"mj-hero-metric-val\" style=\"color: #10b981;\">Active</span>\n </div>\n @if (Employee.Phone) {\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Phone</span>\n <span class=\"mj-hero-metric-val\">{{ Employee.Phone }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mj-entity-hero-header {\n background: linear-gradient(180deg, var(--mj-bg-surface, #111a2e) 0%, var(--mj-bg-surface-card, #141f36) 100%);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n padding: 16px 24px;\n }\n .mj-hero-top { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n .mj-hero-identity { display: flex; align-items: center; gap: 14px; }\n .mj-hero-avatar {\n width: 44px; height: 44px; border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: #fff; flex-shrink: 0;\n }\n .mj-hero-title { font-size: 18px; font-weight: 800; color: var(--mj-text-primary, #f8fafc); }\n .mj-hero-subline { font-size: 12.5px; color: var(--mj-text-secondary, #94a3b8); margin-top: 2px; display: flex; gap: 8px; align-items: center; }\n .mj-hero-toggle-btn {\n background: none; border: 1px solid var(--mj-border-default, #223254);\n color: var(--mj-text-muted, #64748b); border-radius: 6px;\n padding: 6px 10px; cursor: pointer;\n }\n .mj-hero-metrics-row {\n display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px; margin-top: 14px; padding-top: 12px;\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n .mj-hero-metric { display: flex; flex-direction: column; gap: 2px; }\n .mj-hero-metric-label { font-size: 10.5px; font-weight: 700; color: var(--mj-text-muted, #64748b); text-transform: uppercase; }\n .mj-hero-metric-val { font-size: 14px; font-weight: 700; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n `]\n})\nexport class EmployeeHeaderPanel extends BaseFormPanel<MJEmployeeEntity> {\n public IsCollapsed = false;\n\n public ngOnInit(): void {\n const raw = UserInfoEngine.Instance.GetSetting(SETTING_KEY);\n if (raw) this.IsCollapsed = raw === 'true';\n }\n\n public get Employee(): MJEmployeeEntity | null {\n return this.Record;\n }\n\n public ToggleCollapsed(): void {\n this.IsCollapsed = !this.IsCollapsed;\n UserInfoEngine.Instance.SetSettingDebounced(SETTING_KEY, String(this.IsCollapsed));\n }\n}\n"]}
1
+ {"version":3,"file":"employee-header.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-header.panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJEmployeeEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.employees.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:MJ: Employees:header',\n metadata: {\n entity: 'MJ: Employees',\n // A hero is a bare strip in before-fields. Its sortKey is above the overview's\n // (higher draws first), so it draws above the overview cards.\n slot: 'before-fields',\n presentation: 'bare',\n contributionKey: 'employees:header',\n sortKey: 20,\n },\n})\n@Component({\n selector: 'mj-employee-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Employee) {\n <div class=\"mj-entity-hero-header\">\n <div class=\"mj-hero-top\">\n <div class=\"mj-hero-identity\">\n <div class=\"mj-hero-avatar\" style=\"background: linear-gradient(135deg, #10b981, #047857);\">\n <i class=\"fa-solid fa-id-badge\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Employee.FirstName }} {{ Employee.LastName }}</h1>\n <div class=\"mj-hero-subline\">\n <span>{{ Employee.Title || 'Team Member' }}</span>\n @if (Employee.Email) {\n <span>•</span>\n <span>{{ Employee.Email }}</span>\n }\n </div>\n </div>\n </div>\n <div class=\"mj-hero-actions\">\n <button type=\"button\" class=\"mj-hero-toggle-btn\" (click)=\"ToggleCollapsed()\" [title]=\"IsCollapsed ? 'Expand Header' : 'Collapse Header'\">\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"!IsCollapsed\" [class.fa-chevron-down]=\"IsCollapsed\"></i>\n </button>\n </div>\n </div>\n\n @if (!IsCollapsed) {\n <div class=\"mj-hero-metrics-row\">\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Employee ID</span>\n <span class=\"mj-hero-metric-val\">{{ Employee.ID?.substring(0, 8) }}</span>\n </div>\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Status</span>\n <span class=\"mj-hero-metric-val\" style=\"color: #10b981;\">Active</span>\n </div>\n @if (Employee.Phone) {\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Phone</span>\n <span class=\"mj-hero-metric-val\">{{ Employee.Phone }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mj-entity-hero-header {\n background: linear-gradient(180deg, var(--mj-bg-surface, #111a2e) 0%, var(--mj-bg-surface-card, #141f36) 100%);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n padding: 16px 24px;\n }\n .mj-hero-top { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n .mj-hero-identity { display: flex; align-items: center; gap: 14px; }\n .mj-hero-avatar {\n width: 44px; height: 44px; border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: #fff; flex-shrink: 0;\n }\n .mj-hero-title { font-size: 18px; font-weight: 800; color: var(--mj-text-primary, #f8fafc); }\n .mj-hero-subline { font-size: 12.5px; color: var(--mj-text-secondary, #94a3b8); margin-top: 2px; display: flex; gap: 8px; align-items: center; }\n .mj-hero-toggle-btn {\n background: none; border: 1px solid var(--mj-border-default, #223254);\n color: var(--mj-text-muted, #64748b); border-radius: 6px;\n padding: 6px 10px; cursor: pointer;\n }\n .mj-hero-metrics-row {\n display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px; margin-top: 14px; padding-top: 12px;\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n .mj-hero-metric { display: flex; flex-direction: column; gap: 2px; }\n .mj-hero-metric-label { font-size: 10.5px; font-weight: 700; color: var(--mj-text-muted, #64748b); text-transform: uppercase; }\n .mj-hero-metric-val { font-size: 14px; font-weight: 700; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n `]\n})\nexport class EmployeeHeaderPanel extends BaseFormPanel<MJEmployeeEntity> {\n public IsCollapsed = false;\n\n public ngOnInit(): void {\n const raw = UserInfoEngine.Instance.GetSetting(SETTING_KEY);\n if (raw) this.IsCollapsed = raw === 'true';\n }\n\n public get Employee(): MJEmployeeEntity | null {\n return this.Record;\n }\n\n public ToggleCollapsed(): void {\n this.IsCollapsed = !this.IsCollapsed;\n UserInfoEngine.Instance.SetSettingDebounced(SETTING_KEY, String(this.IsCollapsed));\n }\n}\n"]}
@@ -11,9 +11,13 @@ interface DirectReportRow {
11
11
  export declare class EmployeeOverviewPanel extends BaseFormPanel<MJEmployeeEntity> implements OnInit {
12
12
  private cdr;
13
13
  Reports: DirectReportRow[];
14
+ /** Set when the query fails, so the card shows the failure instead of an empty list. */
15
+ LoadError: string | null;
14
16
  get Employee(): MJEmployeeEntity | null;
15
17
  ngOnInit(): void;
16
18
  private loadDirectReports;
19
+ /** Shows a short "could not load" line, with the underlying message when there is one. */
20
+ private showLoadError;
17
21
  static ɵfac: i0.ɵɵFactoryDeclaration<EmployeeOverviewPanel, never>;
18
22
  static ɵcmp: i0.ɵɵComponentDeclaration<EmployeeOverviewPanel, "mj-employee-overview-panel", never, {}, {}, never, never, true, never>;
19
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"employee-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-overview.panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,MAAM,EAA6B,MAAM,eAAe,CAAC;AAItG,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;;AAEjE,UAAU,eAAe;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAmHa,qBAAsB,SAAQ,aAAa,CAAC,gBAAgB,CAAE,YAAW,MAAM;IACxF,OAAO,CAAC,GAAG,CAA6B;IACjC,OAAO,EAAE,eAAe,EAAE,CAAM;IAEvC,IAAW,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAE7C;IAEM,QAAQ,IAAI,IAAI;YAIT,iBAAiB;yCAZtB,qBAAqB;2CAArB,qBAAqB;CA+BjC"}
1
+ {"version":3,"file":"employee-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-overview.panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,MAAM,EAA6B,MAAM,eAAe,CAAC;AAItG,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;;AAEjE,UAAU,eAAe;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAwHa,qBAAsB,SAAQ,aAAa,CAAC,gBAAgB,CAAE,YAAW,MAAM;IACxF,OAAO,CAAC,GAAG,CAA6B;IACjC,OAAO,EAAE,eAAe,EAAE,CAAM;IACvC,wFAAwF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEvC,IAAW,QAAQ,IAAI,gBAAgB,GAAG,IAAI,CAE7C;IAEM,QAAQ,IAAI,IAAI;YAIT,iBAAiB;IAuB/B,0FAA0F;IAC1F,OAAO,CAAC,aAAa;yCAtCZ,qBAAqB;2CAArB,qBAAqB;CAyCjC"}