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

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 (279) 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 +5 -0
  9. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  10. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +13 -9
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  12. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +1 -0
  14. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  15. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  16. package/dist/lib/custom/Companies/company-header.panel.js +9 -5
  17. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  18. package/dist/lib/custom/Companies/company-overview.panel.d.ts +4 -0
  19. package/dist/lib/custom/Companies/company-overview.panel.d.ts.map +1 -1
  20. package/dist/lib/custom/Companies/company-overview.panel.js +68 -37
  21. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  22. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  23. package/dist/lib/custom/Conversations/conversation-header.panel.js +9 -5
  24. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  25. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +25 -4
  26. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -1
  27. package/dist/lib/custom/Conversations/conversation-overview.panel.js +212 -90
  28. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  29. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  30. package/dist/lib/custom/Employees/employee-header.panel.js +9 -5
  31. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  32. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +4 -0
  33. package/dist/lib/custom/Employees/employee-overview.panel.d.ts.map +1 -1
  34. package/dist/lib/custom/Employees/employee-overview.panel.js +68 -37
  35. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  36. package/dist/lib/custom/Entities/entity-form.component.d.ts +8 -0
  37. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Entities/entity-form.component.js +19 -4
  39. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  40. package/dist/lib/custom/Files/file-form.component.d.ts +5 -5
  41. package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -1
  42. package/dist/lib/custom/Files/file-form.component.js +227 -157
  43. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  44. package/dist/lib/custom/Files/file-form.logic.d.ts +24 -0
  45. package/dist/lib/custom/Files/file-form.logic.d.ts.map +1 -0
  46. package/dist/lib/custom/Files/file-form.logic.js +57 -0
  47. package/dist/lib/custom/Files/file-form.logic.js.map +1 -0
  48. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts.map +1 -1
  49. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js +60 -45
  50. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js.map +1 -1
  51. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  52. package/dist/lib/custom/Lists/list-form.component.js +4 -2
  53. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  54. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Queries/query-form.component.js +3 -2
  56. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  57. package/dist/lib/custom/Rubrics/rubric-form.component.js +1 -1
  58. package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -1
  59. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -1
  60. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +1 -0
  61. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  62. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  63. package/dist/lib/custom/Templates/templates-form.component.js +3 -2
  64. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  65. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  66. package/dist/lib/custom/Tests/test-form.component.js +1 -0
  67. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  68. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Tests/test-run-form.component.js +1 -0
  70. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  71. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  72. package/dist/lib/custom/Tests/test-suite-form.component.js +1 -0
  73. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  74. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Tests/test-suite-run-form.component.js +1 -0
  76. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  77. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  78. package/dist/lib/custom/Users/user-header.panel.js +9 -5
  79. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  80. package/dist/lib/custom/Users/user-overview.panel.d.ts +4 -0
  81. package/dist/lib/custom/Users/user-overview.panel.d.ts.map +1 -1
  82. package/dist/lib/custom/Users/user-overview.panel.js +64 -33
  83. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  84. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +34 -0
  85. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -0
  86. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +33 -0
  87. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -0
  88. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +3 -0
  89. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  90. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +261 -242
  91. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  92. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  93. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +1 -0
  94. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  95. package/dist/lib/custom/custom-forms.module.d.ts +35 -34
  96. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  97. package/dist/lib/custom/custom-forms.module.js +6 -2
  98. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  99. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  100. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +98 -44
  101. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js +5 -9
  104. package/dist/lib/generated/Entities/MJAIAgentArtifactType/mjaiagentartifacttype.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.d.ts.map +1 -1
  106. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +15 -18
  107. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js +5 -9
  110. package/dist/lib/generated/Entities/MJAIAgentPrompt/mjaiagentprompt.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +27 -9
  113. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js +17 -15
  115. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js.map +1 -1
  116. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.d.ts.map +1 -1
  117. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js +25 -7
  118. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js.map +1 -1
  119. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js +12 -14
  120. package/dist/lib/generated/Entities/MJAIResultCache/mjairesultcache.form.component.js.map +1 -1
  121. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.d.ts.map +1 -1
  122. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js +5 -9
  123. package/dist/lib/generated/Entities/MJCommunicationLog/mjcommunicationlog.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.d.ts.map +1 -1
  125. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js +5 -9
  126. package/dist/lib/generated/Entities/MJCompanyIntegrationRunAPILog/mjcompanyintegrationrunapilog.form.component.js.map +1 -1
  127. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.d.ts.map +1 -1
  128. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +26 -8
  129. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  130. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.d.ts.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js +4 -7
  132. package/dist/lib/generated/Entities/MJContentItemAttribute/mjcontentitemattribute.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js +4 -7
  135. package/dist/lib/generated/Entities/MJContentSourceParam/mjcontentsourceparam.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  137. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +49 -13
  138. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.d.ts.map +1 -1
  140. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js +5 -9
  141. package/dist/lib/generated/Entities/MJConversationArtifactPermission/mjconversationartifactpermission.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts +10 -0
  143. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts.map +1 -0
  144. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js +111 -0
  145. package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js.map +1 -0
  146. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  147. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -75
  148. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  149. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  150. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +34 -16
  151. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  152. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js +5 -9
  154. package/dist/lib/generated/Entities/MJEmployeeRole/mjemployeerole.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +169 -97
  157. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.d.ts.map +1 -1
  159. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js +8 -11
  160. package/dist/lib/generated/Entities/MJEntityCommunicationField/mjentitycommunicationfield.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +15 -18
  163. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.d.ts +10 -0
  165. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.d.ts.map +1 -0
  166. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.js +148 -0
  167. package/dist/lib/generated/Entities/MJEntityFormContribution/mjentityformcontribution.form.component.js.map +1 -0
  168. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.d.ts.map +1 -1
  169. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +53 -56
  170. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  171. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.d.ts +10 -0
  172. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.d.ts.map +1 -0
  173. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.js +161 -0
  174. package/dist/lib/generated/Entities/MJInteraction/mjinteraction.form.component.js.map +1 -0
  175. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.d.ts +10 -0
  176. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.d.ts.map +1 -0
  177. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.js +78 -0
  178. package/dist/lib/generated/Entities/MJInteractionEvent/mjinteractionevent.form.component.js.map +1 -0
  179. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.d.ts +10 -0
  180. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.d.ts.map +1 -0
  181. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.js +68 -0
  182. package/dist/lib/generated/Entities/MJInteractionLink/mjinteractionlink.form.component.js.map +1 -0
  183. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.d.ts +10 -0
  184. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.d.ts.map +1 -0
  185. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.js +100 -0
  186. package/dist/lib/generated/Entities/MJInteractionOffer/mjinteractionoffer.form.component.js.map +1 -0
  187. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.d.ts +10 -0
  188. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.d.ts.map +1 -0
  189. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.js +119 -0
  190. package/dist/lib/generated/Entities/MJMeeting/mjmeeting.form.component.js.map +1 -0
  191. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.d.ts +10 -0
  192. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.d.ts.map +1 -0
  193. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.js +92 -0
  194. package/dist/lib/generated/Entities/MJMeetingParticipant/mjmeetingparticipant.form.component.js.map +1 -0
  195. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.d.ts +10 -0
  196. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.d.ts.map +1 -0
  197. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.js +87 -0
  198. package/dist/lib/generated/Entities/MJNumberPool/mjnumberpool.form.component.js.map +1 -0
  199. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.d.ts +10 -0
  200. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.d.ts.map +1 -0
  201. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.js +129 -0
  202. package/dist/lib/generated/Entities/MJPhoneNumber/mjphonenumber.form.component.js.map +1 -0
  203. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.d.ts.map +1 -1
  204. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js +5 -9
  205. package/dist/lib/generated/Entities/MJQueryPermission/mjquerypermission.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.d.ts.map +1 -1
  207. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js +8 -11
  208. package/dist/lib/generated/Entities/MJRecommendationItem/mjrecommendationitem.form.component.js.map +1 -1
  209. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.d.ts.map +1 -1
  210. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +36 -40
  211. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  212. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  213. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +39 -21
  214. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  215. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.d.ts.map +1 -1
  216. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +45 -48
  217. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  218. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts +10 -0
  219. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts.map +1 -0
  220. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js +106 -0
  221. package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js.map +1 -0
  222. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.d.ts.map +1 -1
  223. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +15 -18
  224. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  225. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  226. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +822 -676
  227. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  228. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.d.ts.map +1 -1
  229. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +24 -6
  230. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  231. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.d.ts.map +1 -1
  232. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js +5 -9
  233. package/dist/lib/generated/Entities/MJVersionLabelItem/mjversionlabelitem.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.d.ts +10 -0
  235. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.d.ts.map +1 -0
  236. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.js +64 -0
  237. package/dist/lib/generated/Entities/MJWorkQueueDeduplication/mjworkqueuededuplication.form.component.js.map +1 -0
  238. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.d.ts +10 -0
  239. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.d.ts.map +1 -0
  240. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.js +94 -0
  241. package/dist/lib/generated/Entities/MJWorkQueueDelivery/mjworkqueuedelivery.form.component.js.map +1 -0
  242. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.d.ts +10 -0
  243. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.d.ts.map +1 -0
  244. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.js +91 -0
  245. package/dist/lib/generated/Entities/MJWorkQueueMessage/mjworkqueuemessage.form.component.js.map +1 -0
  246. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.d.ts +10 -0
  247. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.d.ts.map +1 -0
  248. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.js +105 -0
  249. package/dist/lib/generated/Entities/MJWorkQueueSubscription/mjworkqueuesubscription.form.component.js.map +1 -0
  250. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.d.ts +10 -0
  251. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.d.ts.map +1 -0
  252. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.js +129 -0
  253. package/dist/lib/generated/Entities/MJWorkQueueTopic/mjworkqueuetopic.form.component.js.map +1 -0
  254. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.d.ts +10 -0
  255. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.d.ts.map +1 -0
  256. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.js +85 -0
  257. package/dist/lib/generated/Entities/MJWorkQueueTransport/mjworkqueuetransport.form.component.js.map +1 -0
  258. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.d.ts.map +1 -1
  259. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +17 -20
  260. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  261. package/dist/lib/generated/generated-forms.module.d.ts +448 -431
  262. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  263. package/dist/lib/generated/generated-forms.module.js +63 -12
  264. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  265. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts +7 -1
  266. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts.map +1 -1
  267. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +89 -43
  268. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
  269. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +3 -3
  270. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  271. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +5 -5
  272. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  273. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +4 -4
  274. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  275. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js +3 -3
  276. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js.map +1 -1
  277. package/dist/lib/panels/model-predictions/model-prediction.panel.js +4 -4
  278. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  279. package/package.json +48 -47
@@ -1 +1 @@
1
- {"version":3,"file":"company-header.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-header.panel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAkB,MAAM,+BAA+B,CAAC;;AAIhF,qBA6Fa,kBAAmB,SAAQ,aAAa,CAAC,eAAe,CAAC;IAC3D,WAAW,UAAS;IAEpB,QAAQ,IAAI,IAAI;IAKvB,IAAW,OAAO,IAAI,eAAe,GAAG,IAAI,CAE3C;IAEM,eAAe,IAAI,IAAI;yCAZrB,kBAAkB;2CAAlB,kBAAkB;CAgB9B"}
1
+ {"version":3,"file":"company-header.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-header.panel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAkB,MAAM,+BAA+B,CAAC;;AAIhF,qBAiGa,kBAAmB,SAAQ,aAAa,CAAC,eAAe,CAAC;IAC3D,WAAW,UAAS;IAEpB,QAAQ,IAAI,IAAI;IAKvB,IAAW,OAAO,IAAI,eAAe,GAAG,IAAI,CAE3C;IAEM,eAAe,IAAI,IAAI;yCAZrB,kBAAkB;2CAAlB,kBAAkB;CAgB9B"}
@@ -125,11 +125,15 @@ let CompanyHeaderPanel = class CompanyHeaderPanel extends BaseFormPanel {
125
125
  };
126
126
  CompanyHeaderPanel = __decorate([
127
127
  RegisterClassEx(BaseFormPanel, {
128
- key: 'form-panel:Companies:header',
128
+ key: 'form-panel:MJ: Companies:header',
129
129
  metadata: {
130
- entity: 'Companies',
131
- slot: 'header',
132
- sortKey: 10,
130
+ entity: 'MJ: Companies',
131
+ // A hero is a bare strip in before-fields. Its sortKey is above the overview's
132
+ // (higher draws first), so it draws above the overview cards.
133
+ slot: 'before-fields',
134
+ presentation: 'bare',
135
+ contributionKey: 'companies:header',
136
+ sortKey: 20,
133
137
  },
134
138
  })
135
139
  ], CompanyHeaderPanel);
@@ -186,5 +190,5 @@ export { CompanyHeaderPanel };
186
190
  }
187
191
  `, 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 "] }]
188
192
  }], null, null); })();
189
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanyHeaderPanel, { className: "CompanyHeaderPanel", filePath: "src/lib/custom/Companies/company-header.panel.ts", lineNumber: 102 }); })();
193
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanyHeaderPanel, { className: "CompanyHeaderPanel", filePath: "src/lib/custom/Companies/company-header.panel.ts", lineNumber: 106 }); })();
190
194
  //# sourceMappingURL=company-header.panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"company-header.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-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 { MJCompanyEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.companies.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:Companies:header',\n metadata: {\n entity: 'Companies',\n slot: 'header',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-company-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Company) {\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, #3b82f6, #1d4ed8);\">\n <i class=\"fa-solid fa-building-flag\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Company.Name || 'Operating Company' }}</h1>\n <div class=\"mj-hero-subline\">\n @if (Company.Description) {\n <span>{{ Company.Description }}</span>\n }\n @if (Company.Website) {\n <span>•</span>\n <span>{{ Company.Website }}</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\">Company ID</span>\n <span class=\"mj-hero-metric-val\">{{ Company.ID?.substring(0, 8) }}</span>\n </div>\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Corporate Structure</span>\n <span class=\"mj-hero-metric-val\" style=\"color: #38bdf8;\">Operating Entity</span>\n </div>\n @if (Company.Website) {\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Website</span>\n <span class=\"mj-hero-metric-val\">{{ Company.Website }}</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 CompanyHeaderPanel extends BaseFormPanel<MJCompanyEntity> {\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 Company(): MJCompanyEntity | 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":"company-header.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-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 { MJCompanyEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.companies.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:MJ: Companies:header',\n metadata: {\n entity: 'MJ: Companies',\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: 'companies:header',\n sortKey: 20,\n },\n})\n@Component({\n selector: 'mj-company-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Company) {\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, #3b82f6, #1d4ed8);\">\n <i class=\"fa-solid fa-building-flag\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Company.Name || 'Operating Company' }}</h1>\n <div class=\"mj-hero-subline\">\n @if (Company.Description) {\n <span>{{ Company.Description }}</span>\n }\n @if (Company.Website) {\n <span>•</span>\n <span>{{ Company.Website }}</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\">Company ID</span>\n <span class=\"mj-hero-metric-val\">{{ Company.ID?.substring(0, 8) }}</span>\n </div>\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Corporate Structure</span>\n <span class=\"mj-hero-metric-val\" style=\"color: #38bdf8;\">Operating Entity</span>\n </div>\n @if (Company.Website) {\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Website</span>\n <span class=\"mj-hero-metric-val\">{{ Company.Website }}</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 CompanyHeaderPanel extends BaseFormPanel<MJCompanyEntity> {\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 Company(): MJCompanyEntity | 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 EmployeeRow {
11
11
  export declare class CompanyOverviewPanel extends BaseFormPanel<MJCompanyEntity> implements OnInit {
12
12
  private cdr;
13
13
  Employees: EmployeeRow[];
14
+ /** Set when the query fails, so the card shows the failure instead of an empty list. */
15
+ LoadError: string | null;
14
16
  get Company(): MJCompanyEntity | null;
15
17
  ngOnInit(): void;
16
18
  private loadEmployees;
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<CompanyOverviewPanel, never>;
18
22
  static ɵcmp: i0.ɵɵComponentDeclaration<CompanyOverviewPanel, "mj-company-overview-panel", never, {}, {}, never, never, true, never>;
19
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"company-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-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,eAAe,EAAE,MAAM,+BAA+B,CAAC;;AAEhE,UAAU,WAAW;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAoHa,oBAAqB,SAAQ,aAAa,CAAC,eAAe,CAAE,YAAW,MAAM;IACtF,OAAO,CAAC,GAAG,CAA6B;IACjC,SAAS,EAAE,WAAW,EAAE,CAAM;IAErC,IAAW,OAAO,IAAI,eAAe,GAAG,IAAI,CAE3C;IAEM,QAAQ,IAAI,IAAI;YAIT,aAAa;yCAZlB,oBAAoB;2CAApB,oBAAoB;CA+BhC"}
1
+ {"version":3,"file":"company-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-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,eAAe,EAAE,MAAM,+BAA+B,CAAC;;AAEhE,UAAU,WAAW;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAyHa,oBAAqB,SAAQ,aAAa,CAAC,eAAe,CAAE,YAAW,MAAM;IACtF,OAAO,CAAC,GAAG,CAA6B;IACjC,SAAS,EAAE,WAAW,EAAE,CAAM;IACrC,wFAAwF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEvC,IAAW,OAAO,IAAI,eAAe,GAAG,IAAI,CAE3C;IAEM,QAAQ,IAAI,IAAI;YAIT,aAAa;IAuB3B,0FAA0F;IAC1F,OAAO,CAAC,aAAa;yCAtCZ,oBAAoB;2CAApB,oBAAoB;CAyChC"}
@@ -11,36 +11,56 @@ 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 CompanyOverviewPanel_Conditional_9_Template(rf, ctx) { if (rf & 1) {
14
+ function CompanyOverviewPanel_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.Employees.length, " Members");
22
+ } }
23
+ function CompanyOverviewPanel_Conditional_8_Template(rf, ctx) { if (rf & 1) {
15
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 CompanyOverviewPanel_Conditional_9_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵdomElementStart(0, "span", 8);
16
34
  i0.ɵɵtext(1, "No employees assigned directly to this company.");
17
35
  i0.ɵɵdomElementEnd();
18
36
  } }
19
37
  function CompanyOverviewPanel_Conditional_10_For_1_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵdomElementStart(0, "div", 9)(1, "span", 10);
38
+ i0.ɵɵdomElementStart(0, "div", 10)(1, "span", 11);
21
39
  i0.ɵɵtext(2);
22
40
  i0.ɵɵdomElementEnd();
23
- i0.ɵɵdomElementStart(3, "span", 13);
41
+ i0.ɵɵdomElementStart(3, "span", 14);
24
42
  i0.ɵɵtext(4);
25
43
  i0.ɵɵdomElementEnd()();
26
44
  } if (rf & 2) {
27
- const emp_r1 = ctx.$implicit;
45
+ const emp_r2 = ctx.$implicit;
28
46
  i0.ɵɵadvance(2);
29
- i0.ɵɵtextInterpolate2("", emp_r1.FirstName, " ", emp_r1.LastName);
47
+ i0.ɵɵtextInterpolate2("", emp_r2.FirstName, " ", emp_r2.LastName);
30
48
  i0.ɵɵadvance(2);
31
- i0.ɵɵtextInterpolate(emp_r1.Title || "Staff");
49
+ i0.ɵɵtextInterpolate(emp_r2.Title || "Staff");
32
50
  } }
33
51
  function CompanyOverviewPanel_Conditional_10_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵrepeaterCreate(0, CompanyOverviewPanel_Conditional_10_For_1_Template, 5, 3, "div", 9, _forTrack0);
52
+ i0.ɵɵrepeaterCreate(0, CompanyOverviewPanel_Conditional_10_For_1_Template, 5, 3, "div", 10, _forTrack0);
35
53
  } if (rf & 2) {
36
- const ctx_r1 = i0.ɵɵnextContext();
37
- i0.ɵɵrepeater(ctx_r1.Employees);
54
+ const ctx_r0 = i0.ɵɵnextContext();
55
+ i0.ɵɵrepeater(ctx_r0.Employees);
38
56
  } }
39
57
  let CompanyOverviewPanel = class CompanyOverviewPanel extends BaseFormPanel {
40
58
  constructor() {
41
59
  super(...arguments);
42
60
  this.cdr = inject(ChangeDetectorRef);
43
61
  this.Employees = [];
62
+ /** Set when the query fails, so the card shows the failure instead of an empty list. */
63
+ this.LoadError = null;
44
64
  }
45
65
  get Company() {
46
66
  return this.Record;
@@ -54,74 +74,81 @@ let CompanyOverviewPanel = class CompanyOverviewPanel extends BaseFormPanel {
54
74
  try {
55
75
  const rv = new RunView();
56
76
  const res = await rv.RunView({
57
- EntityName: 'Employees',
77
+ EntityName: 'MJ: Employees',
58
78
  ExtraFilter: `CompanyID = '${this.Record.ID}'`,
59
79
  Fields: ['ID', 'FirstName', 'LastName', 'Title'],
60
80
  MaxRows: 20,
61
81
  ResultType: 'simple'
62
82
  });
63
- if (res.Success && res.Results) {
64
- this.Employees = res.Results;
65
- this.cdr.markForCheck();
83
+ if (res.Success) {
84
+ this.Employees = res.Results ?? [];
85
+ }
86
+ else {
87
+ this.showLoadError(res.ErrorMessage);
66
88
  }
67
89
  }
68
90
  catch (e) {
69
91
  console.error('Failed to load company employees:', e);
92
+ this.showLoadError(e instanceof Error ? e.message : undefined);
70
93
  }
94
+ this.cdr.markForCheck();
95
+ }
96
+ /** Shows a short "could not load" line, with the underlying message when there is one. */
97
+ showLoadError(detail) {
98
+ this.LoadError = detail ? `Could not load employees: ${detail}` : 'Could not load employees.';
71
99
  }
72
100
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵCompanyOverviewPanel_BaseFactory; return function CompanyOverviewPanel_Factory(__ngFactoryType__) { return (ɵCompanyOverviewPanel_BaseFactory || (ɵCompanyOverviewPanel_BaseFactory = i0.ɵɵgetInheritedFactory(CompanyOverviewPanel)))(__ngFactoryType__ || CompanyOverviewPanel); }; })(); }
73
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CompanyOverviewPanel, selectors: [["mj-company-overview-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 34, vars: 4, consts: [[1, "mj-company-overview-grid"], [1, "mj-overview-card"], [1, "mj-card-header"], [1, "mj-card-title"], [1, "fa-solid", "fa-users", 2, "color", "var(--mj-brand-primary, #38bdf8)"], [1, "mj-card-badge"], [1, "mj-card-body"], [2, "font-size", "12px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-building-shield", 2, "color", "#10b981"], [1, "mj-metric-row"], [1, "mj-metric-label"], [1, "mj-metric-val"], [1, "mj-pill", "mj-pill-green"], [1, "mj-pill", "mj-pill-blue"]], template: function CompanyOverviewPanel_Template(rf, ctx) { if (rf & 1) {
101
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CompanyOverviewPanel, selectors: [["mj-company-overview-panel"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 34, vars: 4, consts: [[1, "mj-company-overview-grid"], [1, "mj-overview-card"], [1, "mj-card-header"], [1, "mj-card-title"], [1, "fa-solid", "fa-users", 2, "color", "var(--mj-brand-primary, #38bdf8)"], [1, "mj-card-badge"], [1, "mj-card-body"], [1, "mj-load-error"], [2, "font-size", "12px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-building-shield", 2, "color", "#10b981"], [1, "mj-metric-row"], [1, "mj-metric-label"], [1, "mj-metric-val"], [1, "mj-pill", "mj-pill-green"], [1, "mj-pill", "mj-pill-blue"]], template: function CompanyOverviewPanel_Template(rf, ctx) { if (rf & 1) {
74
102
  i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
75
103
  i0.ɵɵdomElement(4, "i", 4);
76
104
  i0.ɵɵtext(5, " Company Team");
77
105
  i0.ɵɵdomElementEnd();
78
- i0.ɵɵdomElementStart(6, "span", 5);
79
- i0.ɵɵtext(7);
80
- i0.ɵɵdomElementEnd()();
81
- i0.ɵɵdomElementStart(8, "div", 6);
82
- i0.ɵɵconditionalCreate(9, CompanyOverviewPanel_Conditional_9_Template, 2, 0, "span", 7)(10, CompanyOverviewPanel_Conditional_10_Template, 2, 0);
106
+ i0.ɵɵconditionalCreate(6, CompanyOverviewPanel_Conditional_6_Template, 2, 1, "span", 5);
107
+ i0.ɵɵdomElementEnd();
108
+ i0.ɵɵdomElementStart(7, "div", 6);
109
+ i0.ɵɵconditionalCreate(8, CompanyOverviewPanel_Conditional_8_Template, 2, 1, "span", 7)(9, CompanyOverviewPanel_Conditional_9_Template, 2, 0, "span", 8)(10, CompanyOverviewPanel_Conditional_10_Template, 2, 0);
83
110
  i0.ɵɵdomElementEnd()();
84
111
  i0.ɵɵdomElementStart(11, "div", 1)(12, "div", 2)(13, "div", 3);
85
- i0.ɵɵdomElement(14, "i", 8);
112
+ i0.ɵɵdomElement(14, "i", 9);
86
113
  i0.ɵɵtext(15, " Company Governance");
87
114
  i0.ɵɵdomElementEnd();
88
115
  i0.ɵɵdomElementStart(16, "span", 5);
89
116
  i0.ɵɵtext(17, "Profile");
90
117
  i0.ɵɵdomElementEnd()();
91
- i0.ɵɵdomElementStart(18, "div", 6)(19, "div", 9)(20, "span", 10);
118
+ i0.ɵɵdomElementStart(18, "div", 6)(19, "div", 10)(20, "span", 11);
92
119
  i0.ɵɵtext(21, "Company Name");
93
120
  i0.ɵɵdomElementEnd();
94
- i0.ɵɵdomElementStart(22, "span", 11);
121
+ i0.ɵɵdomElementStart(22, "span", 12);
95
122
  i0.ɵɵtext(23);
96
123
  i0.ɵɵdomElementEnd()();
97
- i0.ɵɵdomElementStart(24, "div", 9)(25, "span", 10);
124
+ i0.ɵɵdomElementStart(24, "div", 10)(25, "span", 11);
98
125
  i0.ɵɵtext(26, "Website");
99
126
  i0.ɵɵdomElementEnd();
100
- i0.ɵɵdomElementStart(27, "span", 11);
127
+ i0.ɵɵdomElementStart(27, "span", 12);
101
128
  i0.ɵɵtext(28);
102
129
  i0.ɵɵdomElementEnd()();
103
- i0.ɵɵdomElementStart(29, "div", 9)(30, "span", 10);
130
+ i0.ɵɵdomElementStart(29, "div", 10)(30, "span", 11);
104
131
  i0.ɵɵtext(31, "Record Type");
105
132
  i0.ɵɵdomElementEnd();
106
- i0.ɵɵdomElementStart(32, "span", 12);
133
+ i0.ɵɵdomElementStart(32, "span", 13);
107
134
  i0.ɵɵtext(33, "Corporate Entity");
108
135
  i0.ɵɵdomElementEnd()()()()();
109
136
  } if (rf & 2) {
110
- i0.ɵɵadvance(7);
111
- i0.ɵɵtextInterpolate1("", ctx.Employees.length, " Members");
137
+ i0.ɵɵadvance(6);
138
+ i0.ɵɵconditional(!ctx.LoadError ? 6 : -1);
112
139
  i0.ɵɵadvance(2);
113
- i0.ɵɵconditional(ctx.Employees.length === 0 ? 9 : 10);
114
- i0.ɵɵadvance(14);
140
+ i0.ɵɵconditional(ctx.LoadError ? 8 : ctx.Employees.length === 0 ? 9 : 10);
141
+ i0.ɵɵadvance(15);
115
142
  i0.ɵɵtextInterpolate(ctx.Company == null ? null : ctx.Company.Name);
116
143
  i0.ɵɵadvance(5);
117
144
  i0.ɵɵtextInterpolate((ctx.Company == null ? null : ctx.Company.Website) || "None Listed");
118
- } }, dependencies: [CommonModule], styles: ["[_nghost-%COMP%] { display: block; width: 100%; margin-bottom: 20px; }\n .mj-company-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 }); }
145
+ } }, dependencies: [CommonModule], styles: ["[_nghost-%COMP%] { display: block; width: 100%; margin-bottom: 20px; }\n .mj-company-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 }); }
119
146
  };
120
147
  CompanyOverviewPanel = __decorate([
121
148
  RegisterClassEx(BaseFormPanel, {
122
- key: 'form-panel:Companies:overview',
149
+ key: 'form-panel:MJ: Companies:overview',
123
150
  metadata: {
124
- entity: 'Companies',
151
+ entity: 'MJ: Companies',
125
152
  slot: 'before-fields',
126
153
  sortKey: 10,
127
154
  },
@@ -136,10 +163,14 @@ export { CompanyOverviewPanel };
136
163
  <div class="mj-overview-card">
137
164
  <div class="mj-card-header">
138
165
  <div class="mj-card-title"><i class="fa-solid fa-users" style="color: var(--mj-brand-primary, #38bdf8);"></i> Company Team</div>
139
- <span class="mj-card-badge">{{ Employees.length }} Members</span>
166
+ @if (!LoadError) {
167
+ <span class="mj-card-badge">{{ Employees.length }} Members</span>
168
+ }
140
169
  </div>
141
170
  <div class="mj-card-body">
142
- @if (Employees.length === 0) {
171
+ @if (LoadError) {
172
+ <span class="mj-load-error">{{ LoadError }}</span>
173
+ } @else if (Employees.length === 0) {
143
174
  <span style="font-size: 12px; color: var(--mj-text-muted);">No employees assigned directly to this company.</span>
144
175
  } @else {
145
176
  @for (emp of Employees; track emp.ID) {
@@ -174,7 +205,7 @@ export { CompanyOverviewPanel };
174
205
  </div>
175
206
  </div>
176
207
  </div>
177
- `, styles: ["\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-company-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 "] }]
208
+ `, styles: ["\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-company-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 "] }]
178
209
  }], null, null); })();
179
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanyOverviewPanel, { className: "CompanyOverviewPanel", filePath: "src/lib/custom/Companies/company-overview.panel.ts", lineNumber: 131 }); })();
210
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanyOverviewPanel, { className: "CompanyOverviewPanel", filePath: "src/lib/custom/Companies/company-overview.panel.ts", lineNumber: 136 }); })();
180
211
  //# sourceMappingURL=company-overview.panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"company-overview.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-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 { MJCompanyEntity } from '@memberjunction/core-entities';\n\ninterface EmployeeRow {\n ID: string;\n FirstName: string;\n LastName: string;\n Title: string;\n}\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:Companies:overview',\n metadata: {\n entity: 'Companies',\n slot: 'before-fields',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-company-overview-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-company-overview-grid\">\n <!-- Card 1: Team & Staff -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-users\" style=\"color: var(--mj-brand-primary, #38bdf8);\"></i> Company Team</div>\n <span class=\"mj-card-badge\">{{ Employees.length }} Members</span>\n </div>\n <div class=\"mj-card-body\">\n @if (Employees.length === 0) {\n <span style=\"font-size: 12px; color: var(--mj-text-muted);\">No employees assigned directly to this company.</span>\n } @else {\n @for (emp of Employees; track emp.ID) {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">{{ emp.FirstName }} {{ emp.LastName }}</span>\n <span class=\"mj-pill mj-pill-blue\">{{ emp.Title || 'Staff' }}</span>\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Card 2: Company Setup & Profile -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-building-shield\" style=\"color: #10b981;\"></i> Company Governance</div>\n <span class=\"mj-card-badge\">Profile</span>\n </div>\n <div class=\"mj-card-body\">\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Company Name</span>\n <span class=\"mj-metric-val\">{{ Company?.Name }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Website</span>\n <span class=\"mj-metric-val\">{{ Company?.Website || 'None Listed' }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Record Type</span>\n <span class=\"mj-pill mj-pill-green\">Corporate Entity</span>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-company-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 CompanyOverviewPanel extends BaseFormPanel<MJCompanyEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n public Employees: EmployeeRow[] = [];\n\n public get Company(): MJCompanyEntity | null {\n return this.Record;\n }\n\n public ngOnInit(): void {\n this.loadEmployees();\n }\n\n private async loadEmployees(): Promise<void> {\n if (!this.Record?.ID) return;\n try {\n const rv = new RunView();\n const res = await rv.RunView<EmployeeRow>({\n EntityName: 'Employees',\n ExtraFilter: `CompanyID = '${this.Record.ID}'`,\n Fields: ['ID', 'FirstName', 'LastName', 'Title'],\n MaxRows: 20,\n ResultType: 'simple'\n });\n if (res.Success && res.Results) {\n this.Employees = res.Results;\n this.cdr.markForCheck();\n }\n } catch (e) {\n console.error('Failed to load company employees:', e);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"company-overview.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Companies/company-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 { MJCompanyEntity } from '@memberjunction/core-entities';\n\ninterface EmployeeRow {\n ID: string;\n FirstName: string;\n LastName: string;\n Title: string;\n}\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:MJ: Companies:overview',\n metadata: {\n entity: 'MJ: Companies',\n slot: 'before-fields',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-company-overview-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-company-overview-grid\">\n <!-- Card 1: Team & Staff -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-users\" style=\"color: var(--mj-brand-primary, #38bdf8);\"></i> Company Team</div>\n @if (!LoadError) {\n <span class=\"mj-card-badge\">{{ Employees.length }} Members</span>\n }\n </div>\n <div class=\"mj-card-body\">\n @if (LoadError) {\n <span class=\"mj-load-error\">{{ LoadError }}</span>\n } @else if (Employees.length === 0) {\n <span style=\"font-size: 12px; color: var(--mj-text-muted);\">No employees assigned directly to this company.</span>\n } @else {\n @for (emp of Employees; track emp.ID) {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">{{ emp.FirstName }} {{ emp.LastName }}</span>\n <span class=\"mj-pill mj-pill-blue\">{{ emp.Title || 'Staff' }}</span>\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Card 2: Company Setup & Profile -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-building-shield\" style=\"color: #10b981;\"></i> Company Governance</div>\n <span class=\"mj-card-badge\">Profile</span>\n </div>\n <div class=\"mj-card-body\">\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Company Name</span>\n <span class=\"mj-metric-val\">{{ Company?.Name }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Website</span>\n <span class=\"mj-metric-val\">{{ Company?.Website || 'None Listed' }}</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Record Type</span>\n <span class=\"mj-pill mj-pill-green\">Corporate Entity</span>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-company-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 CompanyOverviewPanel extends BaseFormPanel<MJCompanyEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n public Employees: EmployeeRow[] = [];\n /** Set when the query fails, so the card shows the failure instead of an empty list. */\n public LoadError: string | null = null;\n\n public get Company(): MJCompanyEntity | null {\n return this.Record;\n }\n\n public ngOnInit(): void {\n this.loadEmployees();\n }\n\n private async loadEmployees(): Promise<void> {\n if (!this.Record?.ID) return;\n try {\n const rv = new RunView();\n const res = await rv.RunView<EmployeeRow>({\n EntityName: 'MJ: Employees',\n ExtraFilter: `CompanyID = '${this.Record.ID}'`,\n Fields: ['ID', 'FirstName', 'LastName', 'Title'],\n MaxRows: 20,\n ResultType: 'simple'\n });\n if (res.Success) {\n this.Employees = res.Results ?? [];\n } else {\n this.showLoadError(res.ErrorMessage);\n }\n } catch (e) {\n console.error('Failed to load company employees:', 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 employees: ${detail}` : 'Could not load employees.';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-header.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-header.panel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAkB,MAAM,+BAA+B,CAAC;;AAIrF,qBAmFa,uBAAwB,SAAQ,aAAa,CAAC,oBAAoB,CAAC;IACrE,WAAW,UAAS;IAEpB,QAAQ,IAAI,IAAI;IAKvB,IAAW,YAAY,IAAI,oBAAoB,GAAG,IAAI,CAErD;IAEM,eAAe,IAAI,IAAI;yCAZrB,uBAAuB;2CAAvB,uBAAuB;CAgBnC"}
1
+ {"version":3,"file":"conversation-header.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-header.panel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAkB,MAAM,+BAA+B,CAAC;;AAIrF,qBAuFa,uBAAwB,SAAQ,aAAa,CAAC,oBAAoB,CAAC;IACrE,WAAW,UAAS;IAEpB,QAAQ,IAAI,IAAI;IAKvB,IAAW,YAAY,IAAI,oBAAoB,GAAG,IAAI,CAErD;IAEM,eAAe,IAAI,IAAI;yCAZrB,uBAAuB;2CAAvB,uBAAuB;CAgBnC"}
@@ -95,11 +95,15 @@ let ConversationHeaderPanel = class ConversationHeaderPanel extends BaseFormPane
95
95
  };
96
96
  ConversationHeaderPanel = __decorate([
97
97
  RegisterClassEx(BaseFormPanel, {
98
- key: 'form-panel:Conversations:header',
98
+ key: 'form-panel:MJ: Conversations:header',
99
99
  metadata: {
100
- entity: 'Conversations',
101
- slot: 'header',
102
- sortKey: 10,
100
+ entity: 'MJ: Conversations',
101
+ // A hero is a bare strip in before-fields. Its sortKey is above the overview's
102
+ // (higher draws first), so it draws above the overview cards.
103
+ slot: 'before-fields',
104
+ presentation: 'bare',
105
+ contributionKey: 'conversations:header',
106
+ sortKey: 20,
103
107
  },
104
108
  })
105
109
  ], ConversationHeaderPanel);
@@ -146,5 +150,5 @@ export { ConversationHeaderPanel };
146
150
  }
147
151
  `, 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 "] }]
148
152
  }], null, null); })();
149
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationHeaderPanel, { className: "ConversationHeaderPanel", filePath: "src/lib/custom/Conversations/conversation-header.panel.ts", lineNumber: 92 }); })();
153
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationHeaderPanel, { className: "ConversationHeaderPanel", filePath: "src/lib/custom/Conversations/conversation-header.panel.ts", lineNumber: 96 }); })();
150
154
  //# sourceMappingURL=conversation-header.panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-header.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-header.panel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAwB,cAAc,EAAE,MAAM,+BAA+B,CAAC;;;;IA4CzD,AADJ,AADJ,kCAAiC,cACD,eACW;IAAA,+BAAe;IAAA,oBAAO;IACzD,mCAAiC;IAAA,YAAsC;IAC3E,AAD2E,oBAAO,EAC5E;IAEF,AADJ,kCAA4B,eACW;IAAA,sBAAM;IAAA,oBAAO;IAChD,mCAAyD;IAAA,+BAAc;IAE/E,AADI,AAD2E,oBAAO,EAC5E,EACJ;;;IANmC,eAAsC;IAAtC,oGAAsC;;;;IAvB3E,AADJ,AADJ,AADJ,iCAAmC,aACN,aACS,aACiE;IACvF,0BAAoC;IACxC,oBAAM;IAEF,AADJ,8BAAK,YACyB;IAAA,YAA4C;IAAA,oBAAK;IAEvE,AADJ,iCAA6B,WACnB;IAAA,aAA+C;IAAA,oBAAO;IAC5D,gCAAM;IAAA,uBAAC;IAAA,oBAAO;IACd,gCAAM;IAAA,aAAqD;;IAGvE,AADI,AADI,AAD+D,oBAAO,EAChE,EACJ,EACJ;IAEF,AADJ,kCAA6B,iBACgH;IAAxF,+LAAS,wBAAiB,KAAC;IACxE,2BAAmG;IAG/G,AADI,AADI,oBAAS,EACP,EACJ;IAEN,2GAAoB;IAYxB,oBAAM;;;IA3BoC,eAA4C;IAA5C,mEAA4C;IAE5D,eAA+C;IAA/C,2EAA+C;IAE/C,eAAqD;IAArD,kGAAqD;IAKU,eAA2D;IAA3D,mFAA2D;IAChH,cAAoC;IAAC,AAArC,oDAAoC,uCAAsC;IAK1G,cAWC;IAXD,+CAWC;;AAlDjB,MAAM,WAAW,GAAG,uCAAuC,CAAC;AAqFrD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,aAAmC;IAAzE;;QACI,gBAAW,GAAG,KAAK,CAAC;KAe9B;IAbU,QAAQ;QACX,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,GAAG;YAAE,IAAI,CAAC,WAAW,GAAG,GAAG,KAAK,MAAM,CAAC;IAC/C,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACvF,CAAC;gRAfQ,uBAAuB,yBAAvB,uBAAuB;oEAAvB,uBAAuB;YArE5B,2FAAoB;;YAApB,2CAoCC;4BAvCK,YAAY;;AAwEb,uBAAuB;IAnFnC,eAAe,CAAC,aAAa,EAAE;QAC5B,GAAG,EAAE,iCAAiC;QACtC,QAAQ,EAAE;YACN,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;SACd;KACJ,CAAC;GA4EW,uBAAuB,CAgBnC;;iFAhBY,uBAAuB;cA3EnC,SAAS;2BACI,8BAA8B,cAC5B,IAAI,WACP,CAAC,YAAY,CAAC,mBACN,uBAAuB,CAAC,MAAM,YACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsCT;;kFAgCQ,uBAAuB","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 { MJConversationEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.conversations.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:Conversations:header',\n metadata: {\n entity: 'Conversations',\n slot: 'header',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-conversation-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Conversation) {\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, #38bdf8, #0284c7);\">\n <i class=\"fa-solid fa-comments\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Conversation.Name || 'AI Conversation' }}</h1>\n <div class=\"mj-hero-subline\">\n <span>User: {{ Conversation.User || 'User Session' }}</span>\n <span>•</span>\n <span>Created: {{ Conversation.CreatedAt | date:'medium' }}</span>\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\">Conversation ID</span>\n <span class=\"mj-hero-metric-val\">{{ Conversation.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: #38bdf8;\">Active Session</span>\n </div>\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 ConversationHeaderPanel extends BaseFormPanel<MJConversationEntity> {\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 Conversation(): MJConversationEntity | 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":"conversation-header.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-header.panel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAwB,cAAc,EAAE,MAAM,+BAA+B,CAAC;;;;IAgDzD,AADJ,AADJ,kCAAiC,cACD,eACW;IAAA,+BAAe;IAAA,oBAAO;IACzD,mCAAiC;IAAA,YAAsC;IAC3E,AAD2E,oBAAO,EAC5E;IAEF,AADJ,kCAA4B,eACW;IAAA,sBAAM;IAAA,oBAAO;IAChD,mCAAyD;IAAA,+BAAc;IAE/E,AADI,AAD2E,oBAAO,EAC5E,EACJ;;;IANmC,eAAsC;IAAtC,oGAAsC;;;;IAvB3E,AADJ,AADJ,AADJ,iCAAmC,aACN,aACS,aACiE;IACvF,0BAAoC;IACxC,oBAAM;IAEF,AADJ,8BAAK,YACyB;IAAA,YAA4C;IAAA,oBAAK;IAEvE,AADJ,iCAA6B,WACnB;IAAA,aAA+C;IAAA,oBAAO;IAC5D,gCAAM;IAAA,uBAAC;IAAA,oBAAO;IACd,gCAAM;IAAA,aAAqD;;IAGvE,AADI,AADI,AAD+D,oBAAO,EAChE,EACJ,EACJ;IAEF,AADJ,kCAA6B,iBACgH;IAAxF,+LAAS,wBAAiB,KAAC;IACxE,2BAAmG;IAG/G,AADI,AADI,oBAAS,EACP,EACJ;IAEN,2GAAoB;IAYxB,oBAAM;;;IA3BoC,eAA4C;IAA5C,mEAA4C;IAE5D,eAA+C;IAA/C,2EAA+C;IAE/C,eAAqD;IAArD,kGAAqD;IAKU,eAA2D;IAA3D,mFAA2D;IAChH,cAAoC;IAAC,AAArC,oDAAoC,uCAAsC;IAK1G,cAWC;IAXD,+CAWC;;AAtDjB,MAAM,WAAW,GAAG,uCAAuC,CAAC;AAyFrD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,aAAmC;IAAzE;;QACI,gBAAW,GAAG,KAAK,CAAC;KAe9B;IAbU,QAAQ;QACX,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,GAAG;YAAE,IAAI,CAAC,WAAW,GAAG,GAAG,KAAK,MAAM,CAAC;IAC/C,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACvF,CAAC;gRAfQ,uBAAuB,yBAAvB,uBAAuB;oEAAvB,uBAAuB;YArE5B,2FAAoB;;YAApB,2CAoCC;4BAvCK,YAAY;;AAwEb,uBAAuB;IAvFnC,eAAe,CAAC,aAAa,EAAE;QAC5B,GAAG,EAAE,qCAAqC;QAC1C,QAAQ,EAAE;YACN,MAAM,EAAE,mBAAmB;YAC3B,+EAA+E;YAC/E,8DAA8D;YAC9D,IAAI,EAAE,eAAe;YACrB,YAAY,EAAE,MAAM;YACpB,eAAe,EAAE,sBAAsB;YACvC,OAAO,EAAE,EAAE;SACd;KACJ,CAAC;GA4EW,uBAAuB,CAgBnC;;iFAhBY,uBAAuB;cA3EnC,SAAS;2BACI,8BAA8B,cAC5B,IAAI,WACP,CAAC,YAAY,CAAC,mBACN,uBAAuB,CAAC,MAAM,YACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsCT;;kFAgCQ,uBAAuB","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 { MJConversationEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.conversations.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:MJ: Conversations:header',\n metadata: {\n entity: 'MJ: Conversations',\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: 'conversations:header',\n sortKey: 20,\n },\n})\n@Component({\n selector: 'mj-conversation-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Conversation) {\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, #38bdf8, #0284c7);\">\n <i class=\"fa-solid fa-comments\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Conversation.Name || 'AI Conversation' }}</h1>\n <div class=\"mj-hero-subline\">\n <span>User: {{ Conversation.User || 'User Session' }}</span>\n <span>•</span>\n <span>Created: {{ Conversation.CreatedAt | date:'medium' }}</span>\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\">Conversation ID</span>\n <span class=\"mj-hero-metric-val\">{{ Conversation.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: #38bdf8;\">Active Session</span>\n </div>\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 ConversationHeaderPanel extends BaseFormPanel<MJConversationEntity> {\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 Conversation(): MJConversationEntity | 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,21 +1,42 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { BaseFormPanel } from '@memberjunction/ng-base-forms';
3
- import { MJConversationEntity } from '@memberjunction/core-entities';
3
+ import { MJConversationDetailEntity, MJConversationEntity } from '@memberjunction/core-entities';
4
4
  import * as i0 from "@angular/core";
5
5
  interface ConversationDetailRow {
6
6
  ID: string;
7
- Role: string;
7
+ Role: MJConversationDetailEntity['Role'];
8
8
  Message: string;
9
9
  CreatedAt: string;
10
10
  }
11
11
  export declare class ConversationOverviewPanel extends BaseFormPanel<MJConversationEntity> implements OnInit {
12
12
  private cdr;
13
+ /** The newest messages in Main, newest first. */
13
14
  Messages: ConversationDetailRow[];
15
+ /** Messages in Main. */
16
+ TotalMessageCount: number;
17
+ /** User messages in Main. */
18
+ UserMessageCount: number;
19
+ /** AI messages in Main. */
20
+ AgentMessageCount: number;
21
+ /** Forks of the conversation. */
22
+ ForkCount: number;
23
+ /** Set when a read fails, so the cards show the failure instead of zero messages. */
24
+ LoadError: string | null;
14
25
  ngOnInit(): void;
15
- get UserMessageCount(): number;
16
- get AgentMessageCount(): number;
26
+ /** A turn the user sent. `Role` is stored as 'User', 'AI' or 'Error'. */
27
+ protected IsUserTurn(detail: ConversationDetailRow): boolean;
28
+ /** A turn an agent sent. An 'Error' turn is neither a user turn nor an agent turn. */
29
+ protected IsAgentTurn(detail: ConversationDetailRow): boolean;
17
30
  get RecentMessages(): ConversationDetailRow[];
31
+ /** The host form's provider, or the default provider when the panel has no host form. */
32
+ private get providerToUse();
33
+ /**
34
+ * Loads the counts and newest messages in Main, and the conversation's fork count, in one
35
+ * batch. When a detail read fails, the cards show the failure.
36
+ */
18
37
  private loadConversationMessages;
38
+ /** Shows a short "could not load" line, with the underlying message when there is one. */
39
+ private showLoadError;
19
40
  static ɵfac: i0.ɵɵFactoryDeclaration<ConversationOverviewPanel, never>;
20
41
  static ɵcmp: i0.ɵɵComponentDeclaration<ConversationOverviewPanel, "mj-conversation-overview-panel", never, {}, {}, never, never, true, never>;
21
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-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,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,UAAU,qBAAqB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAwHa,yBAA0B,SAAQ,aAAa,CAAC,oBAAoB,CAAE,YAAW,MAAM;IAChG,OAAO,CAAC,GAAG,CAA6B;IACjC,QAAQ,EAAE,qBAAqB,EAAE,CAAM;IAEvC,QAAQ,IAAI,IAAI;IAIvB,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,IAAW,iBAAiB,IAAI,MAAM,CAErC;IAED,IAAW,cAAc,IAAI,qBAAqB,EAAE,CAEnD;YAEa,wBAAwB;yCApB7B,yBAAyB;2CAAzB,yBAAyB;CAwCrC"}
1
+ {"version":3,"file":"conversation-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Conversations/conversation-overview.panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,MAAM,EAA6B,MAAM,eAAe,CAAC;AAItG,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAsB,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErH,UAAU,qBAAqB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAKD,qBAqIa,yBAA0B,SAAQ,aAAa,CAAC,oBAAoB,CAAE,YAAW,MAAM;IAChG,OAAO,CAAC,GAAG,CAA6B;IACxC,iDAAiD;IAC1C,QAAQ,EAAE,qBAAqB,EAAE,CAAM;IAC9C,wBAAwB;IACjB,iBAAiB,SAAK;IAC7B,6BAA6B;IACtB,gBAAgB,SAAK;IAC5B,2BAA2B;IACpB,iBAAiB,SAAK;IAC7B,iCAAiC;IAC1B,SAAS,SAAK;IACrB,qFAAqF;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC,QAAQ,IAAI,IAAI;IAIvB,yEAAyE;IACzE,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO;IAI5D,sFAAsF;IACtF,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO;IAI7D,IAAW,cAAc,IAAI,qBAAqB,EAAE,CAEnD;IAED,yFAAyF;IACzF,OAAO,KAAK,aAAa,GAExB;IAED;;;OAGG;YACW,wBAAwB;IAuDtC,0FAA0F;IAC1F,OAAO,CAAC,aAAa;yCAlGZ,yBAAyB;2CAAzB,yBAAyB;CAqGrC"}