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