@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.
- 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 +5 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +13 -9
- 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 +25 -4
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +212 -90
- 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 +8 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +19 -4
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +5 -5
- package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Files/file-form.component.js +227 -157
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.logic.d.ts +24 -0
- package/dist/lib/custom/Files/file-form.logic.d.ts.map +1 -0
- package/dist/lib/custom/Files/file-form.logic.js +57 -0
- package/dist/lib/custom/Files/file-form.logic.js.map +1 -0
- 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 +4 -2
- 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 +3 -2
- 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 +3 -2
- 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/agent-run-cost-split.d.ts +34 -0
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +33 -0
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +3 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +261 -242
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.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/custom/custom-forms.module.d.ts +35 -34
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +6 -2
- package/dist/lib/custom/custom-forms.module.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 +49 -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/MJConversationBranch/mjconversationbranch.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js +111 -0
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -75
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.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 +169 -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/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js +106 -0
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js.map +1 -0
- 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 +822 -676
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.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 +448 -431
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +63 -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 +48 -47
|
@@ -6,137 +6,248 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { Component, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
|
-
import { RunView } from '@memberjunction/core';
|
|
10
|
-
import { RegisterClassEx } from '@memberjunction/global';
|
|
9
|
+
import { LogError, Metadata, RunView } from '@memberjunction/core';
|
|
10
|
+
import { EscapeSQLString, RegisterClassEx } from '@memberjunction/global';
|
|
11
11
|
import { BaseFormPanel } from '@memberjunction/ng-base-forms';
|
|
12
|
+
import { ConversationEngine } from '@memberjunction/core-entities';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
14
|
-
function
|
|
15
|
-
i0.ɵɵdomElementStart(0, "span",
|
|
15
|
+
function ConversationOverviewPanel_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵdomElementStart(0, "span", 5);
|
|
17
|
+
i0.ɵɵtext(1);
|
|
18
|
+
i0.ɵɵdomElementEnd();
|
|
19
|
+
} if (rf & 2) {
|
|
20
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
21
|
+
i0.ɵɵadvance();
|
|
22
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.TotalMessageCount, " Turns");
|
|
23
|
+
} }
|
|
24
|
+
function ConversationOverviewPanel_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵdomElementStart(0, "span", 7);
|
|
26
|
+
i0.ɵɵtext(1);
|
|
27
|
+
i0.ɵɵdomElementEnd();
|
|
28
|
+
} if (rf & 2) {
|
|
29
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
30
|
+
i0.ɵɵadvance();
|
|
31
|
+
i0.ɵɵtextInterpolate(ctx_r0.LoadError);
|
|
32
|
+
} }
|
|
33
|
+
function ConversationOverviewPanel_Conditional_9_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵdomElementStart(0, "div", 13);
|
|
35
|
+
i0.ɵɵtext(1);
|
|
36
|
+
i0.ɵɵdomElementEnd();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
39
|
+
i0.ɵɵadvance();
|
|
40
|
+
i0.ɵɵtextInterpolate2("plus ", ctx_r0.ForkCount, " ", ctx_r0.ForkCount === 1 ? "fork" : "forks");
|
|
41
|
+
} }
|
|
42
|
+
function ConversationOverviewPanel_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵdomElementStart(0, "div", 10)(1, "span", 11);
|
|
44
|
+
i0.ɵɵtext(2, "Total Messages");
|
|
45
|
+
i0.ɵɵdomElementEnd();
|
|
46
|
+
i0.ɵɵdomElementStart(3, "span", 12);
|
|
47
|
+
i0.ɵɵtext(4);
|
|
48
|
+
i0.ɵɵdomElementEnd()();
|
|
49
|
+
i0.ɵɵconditionalCreate(5, ConversationOverviewPanel_Conditional_9_Conditional_5_Template, 2, 2, "div", 13);
|
|
50
|
+
i0.ɵɵdomElementStart(6, "div", 10)(7, "span", 11);
|
|
51
|
+
i0.ɵɵtext(8, "User Prompts");
|
|
52
|
+
i0.ɵɵdomElementEnd();
|
|
53
|
+
i0.ɵɵdomElementStart(9, "span", 12);
|
|
54
|
+
i0.ɵɵtext(10);
|
|
55
|
+
i0.ɵɵdomElementEnd()();
|
|
56
|
+
i0.ɵɵdomElementStart(11, "div", 10)(12, "span", 11);
|
|
57
|
+
i0.ɵɵtext(13, "Agent Responses");
|
|
58
|
+
i0.ɵɵdomElementEnd();
|
|
59
|
+
i0.ɵɵdomElementStart(14, "span", 12);
|
|
60
|
+
i0.ɵɵtext(15);
|
|
61
|
+
i0.ɵɵdomElementEnd()();
|
|
62
|
+
} if (rf & 2) {
|
|
63
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
64
|
+
i0.ɵɵadvance(4);
|
|
65
|
+
i0.ɵɵtextInterpolate(ctx_r0.TotalMessageCount);
|
|
66
|
+
i0.ɵɵadvance();
|
|
67
|
+
i0.ɵɵconditional(ctx_r0.ForkCount > 0 ? 5 : -1);
|
|
68
|
+
i0.ɵɵadvance(5);
|
|
69
|
+
i0.ɵɵtextInterpolate(ctx_r0.UserMessageCount);
|
|
70
|
+
i0.ɵɵadvance(5);
|
|
71
|
+
i0.ɵɵtextInterpolate(ctx_r0.AgentMessageCount);
|
|
72
|
+
} }
|
|
73
|
+
function ConversationOverviewPanel_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵdomElementStart(0, "span", 7);
|
|
75
|
+
i0.ɵɵtext(1);
|
|
76
|
+
i0.ɵɵdomElementEnd();
|
|
77
|
+
} if (rf & 2) {
|
|
78
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
79
|
+
i0.ɵɵadvance();
|
|
80
|
+
i0.ɵɵtextInterpolate(ctx_r0.LoadError);
|
|
81
|
+
} }
|
|
82
|
+
function ConversationOverviewPanel_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
83
|
+
i0.ɵɵdomElementStart(0, "span", 9);
|
|
16
84
|
i0.ɵɵtext(1, "No messages in this conversation yet.");
|
|
17
85
|
i0.ɵɵdomElementEnd();
|
|
18
86
|
} }
|
|
19
|
-
function
|
|
20
|
-
i0.ɵɵdomElementStart(0, "div",
|
|
87
|
+
function ConversationOverviewPanel_Conditional_20_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵdomElementStart(0, "div", 10)(1, "span", 14)(2, "strong");
|
|
21
89
|
i0.ɵɵtext(3);
|
|
22
90
|
i0.ɵɵdomElementEnd();
|
|
23
91
|
i0.ɵɵtext(4);
|
|
24
92
|
i0.ɵɵdomElementEnd();
|
|
25
|
-
i0.ɵɵdomElementStart(5, "span",
|
|
93
|
+
i0.ɵɵdomElementStart(5, "span", 15);
|
|
26
94
|
i0.ɵɵtext(6);
|
|
27
95
|
i0.ɵɵdomElementEnd()();
|
|
28
96
|
} if (rf & 2) {
|
|
29
|
-
const
|
|
97
|
+
const msg_r2 = ctx.$implicit;
|
|
98
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
30
99
|
i0.ɵɵadvance(3);
|
|
31
|
-
i0.ɵɵtextInterpolate1("",
|
|
100
|
+
i0.ɵɵtextInterpolate1("", msg_r2.Role, ":");
|
|
32
101
|
i0.ɵɵadvance();
|
|
33
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
102
|
+
i0.ɵɵtextInterpolate1(" ", msg_r2.Message, " ");
|
|
34
103
|
i0.ɵɵadvance();
|
|
35
|
-
i0.ɵɵclassProp("mj-pill-blue",
|
|
104
|
+
i0.ɵɵclassProp("mj-pill-blue", ctx_r0.IsUserTurn(msg_r2))("mj-pill-green", ctx_r0.IsAgentTurn(msg_r2));
|
|
36
105
|
i0.ɵɵadvance();
|
|
37
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
106
|
+
i0.ɵɵtextInterpolate1(" ", msg_r2.Role, " ");
|
|
38
107
|
} }
|
|
39
|
-
function
|
|
40
|
-
i0.ɵɵrepeaterCreate(0,
|
|
108
|
+
function ConversationOverviewPanel_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵrepeaterCreate(0, ConversationOverviewPanel_Conditional_20_For_1_Template, 7, 7, "div", 10, _forTrack0);
|
|
41
110
|
} if (rf & 2) {
|
|
42
|
-
const
|
|
43
|
-
i0.ɵɵrepeater(
|
|
111
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
112
|
+
i0.ɵɵrepeater(ctx_r0.RecentMessages);
|
|
44
113
|
} }
|
|
114
|
+
/** Number of newest messages the Recent Turns card shows. */
|
|
115
|
+
const RECENT_MESSAGE_COUNT = 4;
|
|
45
116
|
let ConversationOverviewPanel = class ConversationOverviewPanel extends BaseFormPanel {
|
|
46
117
|
constructor() {
|
|
47
118
|
super(...arguments);
|
|
48
119
|
this.cdr = inject(ChangeDetectorRef);
|
|
120
|
+
/** The newest messages in Main, newest first. */
|
|
49
121
|
this.Messages = [];
|
|
122
|
+
/** Messages in Main. */
|
|
123
|
+
this.TotalMessageCount = 0;
|
|
124
|
+
/** User messages in Main. */
|
|
125
|
+
this.UserMessageCount = 0;
|
|
126
|
+
/** AI messages in Main. */
|
|
127
|
+
this.AgentMessageCount = 0;
|
|
128
|
+
/** Forks of the conversation. */
|
|
129
|
+
this.ForkCount = 0;
|
|
130
|
+
/** Set when a read fails, so the cards show the failure instead of zero messages. */
|
|
131
|
+
this.LoadError = null;
|
|
50
132
|
}
|
|
51
133
|
ngOnInit() {
|
|
52
134
|
this.loadConversationMessages();
|
|
53
135
|
}
|
|
54
|
-
|
|
55
|
-
|
|
136
|
+
/** A turn the user sent. `Role` is stored as 'User', 'AI' or 'Error'. */
|
|
137
|
+
IsUserTurn(detail) {
|
|
138
|
+
return detail.Role === 'User';
|
|
56
139
|
}
|
|
57
|
-
|
|
58
|
-
|
|
140
|
+
/** A turn an agent sent. An 'Error' turn is neither a user turn nor an agent turn. */
|
|
141
|
+
IsAgentTurn(detail) {
|
|
142
|
+
return detail.Role === 'AI';
|
|
59
143
|
}
|
|
60
144
|
get RecentMessages() {
|
|
61
|
-
return this.Messages.slice(0,
|
|
145
|
+
return this.Messages.slice(0, RECENT_MESSAGE_COUNT);
|
|
62
146
|
}
|
|
147
|
+
/** The host form's provider, or the default provider when the panel has no host form. */
|
|
148
|
+
get providerToUse() {
|
|
149
|
+
return this.FormComponent?.ProviderToUse ?? Metadata.Provider; // global-provider-ok: BaseFormPanel has no Provider input; a panel without a host form uses the default provider
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Loads the counts and newest messages in Main, and the conversation's fork count, in one
|
|
153
|
+
* batch. When a detail read fails, the cards show the failure.
|
|
154
|
+
*/
|
|
63
155
|
async loadConversationMessages() {
|
|
64
156
|
if (!this.Record?.ID)
|
|
65
157
|
return;
|
|
158
|
+
const provider = this.providerToUse;
|
|
159
|
+
const scope = ConversationEngine.TrunkScope(this.Record.ID);
|
|
66
160
|
try {
|
|
67
|
-
const rv =
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
161
|
+
const rv = RunView.FromMetadataProvider(provider);
|
|
162
|
+
const [total, user, agent, recent, forks] = await rv.RunViews([
|
|
163
|
+
{
|
|
164
|
+
EntityName: 'MJ: Conversation Details',
|
|
165
|
+
ExtraFilter: ConversationEngine.ScopeFilter(scope),
|
|
166
|
+
ResultType: 'count_only',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
EntityName: 'MJ: Conversation Details',
|
|
170
|
+
ExtraFilter: `${ConversationEngine.ScopeFilter(scope)} AND [Role]='User'`,
|
|
171
|
+
ResultType: 'count_only',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
EntityName: 'MJ: Conversation Details',
|
|
175
|
+
ExtraFilter: `${ConversationEngine.ScopeFilter(scope)} AND [Role]='AI'`,
|
|
176
|
+
ResultType: 'count_only',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
EntityName: 'MJ: Conversation Details',
|
|
180
|
+
ExtraFilter: ConversationEngine.ScopeFilter(scope),
|
|
181
|
+
Fields: ['ID', 'Role', 'Message', '__mj_CreatedAt'],
|
|
182
|
+
OrderBy: 'Sequence DESC',
|
|
183
|
+
MaxRows: RECENT_MESSAGE_COUNT,
|
|
184
|
+
ResultType: 'simple',
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
EntityName: 'MJ: Conversation Branches',
|
|
188
|
+
ExtraFilter: `ConversationID='${EscapeSQLString(this.Record.ID)}'`,
|
|
189
|
+
ResultType: 'count_only',
|
|
190
|
+
},
|
|
191
|
+
], provider.CurrentUser);
|
|
192
|
+
const detailReads = [total, user, agent, recent];
|
|
193
|
+
const failed = detailReads.findIndex(r => !r?.Success);
|
|
194
|
+
if (failed >= 0) {
|
|
195
|
+
this.showLoadError(detailReads[failed]?.ErrorMessage);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
this.TotalMessageCount = total?.TotalRowCount ?? 0;
|
|
199
|
+
this.UserMessageCount = user?.TotalRowCount ?? 0;
|
|
200
|
+
this.AgentMessageCount = agent?.TotalRowCount ?? 0;
|
|
201
|
+
this.Messages = recent?.Results ?? [];
|
|
79
202
|
}
|
|
203
|
+
this.ForkCount = forks?.Success ? forks.TotalRowCount : 0;
|
|
80
204
|
}
|
|
81
205
|
catch (e) {
|
|
82
|
-
|
|
206
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
207
|
+
LogError(`Conversation overview: could not load the details of conversation ${this.Record.ID}: ${message}`);
|
|
208
|
+
this.showLoadError(message);
|
|
83
209
|
}
|
|
210
|
+
this.cdr.markForCheck();
|
|
211
|
+
}
|
|
212
|
+
/** Shows a short "could not load" line, with the underlying message when there is one. */
|
|
213
|
+
showLoadError(detail) {
|
|
214
|
+
this.LoadError = detail ? `Could not load messages: ${detail}` : 'Could not load messages.';
|
|
84
215
|
}
|
|
85
216
|
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:
|
|
217
|
+
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-fork-note"], [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
218
|
i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
88
219
|
i0.ɵɵdomElement(4, "i", 4);
|
|
89
220
|
i0.ɵɵtext(5, " Turn Summary");
|
|
90
221
|
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");
|
|
222
|
+
i0.ɵɵconditionalCreate(6, ConversationOverviewPanel_Conditional_6_Template, 2, 1, "span", 5);
|
|
96
223
|
i0.ɵɵdomElementEnd();
|
|
97
|
-
i0.ɵɵdomElementStart(
|
|
98
|
-
i0.ɵɵ
|
|
224
|
+
i0.ɵɵdomElementStart(7, "div", 6);
|
|
225
|
+
i0.ɵɵconditionalCreate(8, ConversationOverviewPanel_Conditional_8_Template, 2, 1, "span", 7)(9, ConversationOverviewPanel_Conditional_9_Template, 16, 4);
|
|
99
226
|
i0.ɵɵdomElementEnd()();
|
|
100
|
-
i0.ɵɵdomElementStart(
|
|
101
|
-
i0.ɵɵ
|
|
102
|
-
i0.ɵɵ
|
|
103
|
-
i0.ɵɵdomElementStart(17, "span", 9);
|
|
104
|
-
i0.ɵɵtext(18);
|
|
105
|
-
i0.ɵɵdomElementEnd()();
|
|
106
|
-
i0.ɵɵdomElementStart(19, "div", 7)(20, "span", 8);
|
|
107
|
-
i0.ɵɵtext(21, "Agent Responses");
|
|
108
|
-
i0.ɵɵdomElementEnd();
|
|
109
|
-
i0.ɵɵdomElementStart(22, "span", 9);
|
|
110
|
-
i0.ɵɵtext(23);
|
|
111
|
-
i0.ɵɵdomElementEnd()()()();
|
|
112
|
-
i0.ɵɵdomElementStart(24, "div", 1)(25, "div", 2)(26, "div", 3);
|
|
113
|
-
i0.ɵɵdomElement(27, "i", 10);
|
|
114
|
-
i0.ɵɵtext(28, " Recent Turns");
|
|
227
|
+
i0.ɵɵdomElementStart(10, "div", 1)(11, "div", 2)(12, "div", 3);
|
|
228
|
+
i0.ɵɵdomElement(13, "i", 8);
|
|
229
|
+
i0.ɵɵtext(14, " Recent Turns");
|
|
115
230
|
i0.ɵɵdomElementEnd();
|
|
116
|
-
i0.ɵɵdomElementStart(
|
|
117
|
-
i0.ɵɵtext(
|
|
231
|
+
i0.ɵɵdomElementStart(15, "span", 5);
|
|
232
|
+
i0.ɵɵtext(16, "History");
|
|
118
233
|
i0.ɵɵdomElementEnd()();
|
|
119
|
-
i0.ɵɵdomElementStart(
|
|
120
|
-
i0.ɵɵconditionalCreate(
|
|
234
|
+
i0.ɵɵdomElementStart(17, "div", 6);
|
|
235
|
+
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
236
|
i0.ɵɵdomElementEnd()()();
|
|
122
237
|
} if (rf & 2) {
|
|
123
|
-
i0.ɵɵadvance(7);
|
|
124
|
-
i0.ɵɵtextInterpolate1("", ctx.Messages.length, " Turns");
|
|
125
238
|
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 }); }
|
|
239
|
+
i0.ɵɵconditional(!ctx.LoadError ? 6 : -1);
|
|
240
|
+
i0.ɵɵadvance(2);
|
|
241
|
+
i0.ɵɵconditional(ctx.LoadError ? 8 : 9);
|
|
242
|
+
i0.ɵɵadvance(10);
|
|
243
|
+
i0.ɵɵconditional(ctx.LoadError ? 18 : ctx.Messages.length === 0 ? 19 : 20);
|
|
244
|
+
} }, 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-fork-note[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-muted); margin-top: -6px; }\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
245
|
};
|
|
135
246
|
ConversationOverviewPanel = __decorate([
|
|
136
247
|
RegisterClassEx(BaseFormPanel, {
|
|
137
|
-
key: 'form-panel:Conversations:overview',
|
|
248
|
+
key: 'form-panel:MJ: Conversations:overview',
|
|
138
249
|
metadata: {
|
|
139
|
-
entity: 'Conversations',
|
|
250
|
+
entity: 'MJ: Conversations',
|
|
140
251
|
slot: 'before-fields',
|
|
141
252
|
sortKey: 10,
|
|
142
253
|
},
|
|
@@ -151,21 +262,30 @@ export { ConversationOverviewPanel };
|
|
|
151
262
|
<div class="mj-overview-card">
|
|
152
263
|
<div class="mj-card-header">
|
|
153
264
|
<div class="mj-card-title"><i class="fa-solid fa-comments" style="color: var(--mj-brand-primary, #38bdf8);"></i> Turn Summary</div>
|
|
154
|
-
|
|
265
|
+
@if (!LoadError) {
|
|
266
|
+
<span class="mj-card-badge">{{ TotalMessageCount }} Turns</span>
|
|
267
|
+
}
|
|
155
268
|
</div>
|
|
156
269
|
<div class="mj-card-body">
|
|
157
|
-
|
|
158
|
-
<span class="mj-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
<
|
|
168
|
-
|
|
270
|
+
@if (LoadError) {
|
|
271
|
+
<span class="mj-load-error">{{ LoadError }}</span>
|
|
272
|
+
} @else {
|
|
273
|
+
<div class="mj-metric-row">
|
|
274
|
+
<span class="mj-metric-label">Total Messages</span>
|
|
275
|
+
<span class="mj-metric-val">{{ TotalMessageCount }}</span>
|
|
276
|
+
</div>
|
|
277
|
+
@if (ForkCount > 0) {
|
|
278
|
+
<div class="mj-fork-note">plus {{ ForkCount }} {{ ForkCount === 1 ? 'fork' : 'forks' }}</div>
|
|
279
|
+
}
|
|
280
|
+
<div class="mj-metric-row">
|
|
281
|
+
<span class="mj-metric-label">User Prompts</span>
|
|
282
|
+
<span class="mj-metric-val">{{ UserMessageCount }}</span>
|
|
283
|
+
</div>
|
|
284
|
+
<div class="mj-metric-row">
|
|
285
|
+
<span class="mj-metric-label">Agent Responses</span>
|
|
286
|
+
<span class="mj-metric-val">{{ AgentMessageCount }}</span>
|
|
287
|
+
</div>
|
|
288
|
+
}
|
|
169
289
|
</div>
|
|
170
290
|
</div>
|
|
171
291
|
|
|
@@ -176,7 +296,9 @@ export { ConversationOverviewPanel };
|
|
|
176
296
|
<span class="mj-card-badge">History</span>
|
|
177
297
|
</div>
|
|
178
298
|
<div class="mj-card-body">
|
|
179
|
-
@if (
|
|
299
|
+
@if (LoadError) {
|
|
300
|
+
<span class="mj-load-error">{{ LoadError }}</span>
|
|
301
|
+
} @else if (Messages.length === 0) {
|
|
180
302
|
<span style="font-size: 12px; color: var(--mj-text-muted);">No messages in this conversation yet.</span>
|
|
181
303
|
} @else {
|
|
182
304
|
@for (msg of RecentMessages; track msg.ID) {
|
|
@@ -184,7 +306,7 @@ export { ConversationOverviewPanel };
|
|
|
184
306
|
<span class="mj-metric-label" style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 200px;">
|
|
185
307
|
<strong>{{ msg.Role }}:</strong> {{ msg.Message }}
|
|
186
308
|
</span>
|
|
187
|
-
<span class="mj-pill" [class.mj-pill-blue]="msg
|
|
309
|
+
<span class="mj-pill" [class.mj-pill-blue]="IsUserTurn(msg)" [class.mj-pill-green]="IsAgentTurn(msg)">
|
|
188
310
|
{{ msg.Role }}
|
|
189
311
|
</span>
|
|
190
312
|
</div>
|
|
@@ -193,7 +315,7 @@ export { ConversationOverviewPanel };
|
|
|
193
315
|
</div>
|
|
194
316
|
</div>
|
|
195
317
|
</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 "] }]
|
|
318
|
+
`, 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-fork-note { font-size: 11px; color: var(--mj-text-muted); margin-top: -6px; }\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
319
|
}], null, null); })();
|
|
198
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationOverviewPanel, { className: "ConversationOverviewPanel", filePath: "src/lib/custom/Conversations/conversation-overview.panel.ts", lineNumber:
|
|
320
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationOverviewPanel, { className: "ConversationOverviewPanel", filePath: "src/lib/custom/Conversations/conversation-overview.panel.ts", lineNumber: 151 }); })();
|
|
199
321
|
//# 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 { IMetadataProvider, LogError, Metadata, RunView } from '@memberjunction/core';\nimport { EscapeSQLString, RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { ConversationEngine, 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/** Number of newest messages the Recent Turns card shows. */\nconst RECENT_MESSAGE_COUNT = 4;\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\">{{ TotalMessageCount }} 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\">{{ TotalMessageCount }}</span>\n </div>\n @if (ForkCount > 0) {\n <div class=\"mj-fork-note\">plus {{ ForkCount }} {{ ForkCount === 1 ? 'fork' : 'forks' }}</div>\n }\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-fork-note { font-size: 11px; color: var(--mj-text-muted); margin-top: -6px; }\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 /** The newest messages in Main, newest first. */\n public Messages: ConversationDetailRow[] = [];\n /** Messages in Main. */\n public TotalMessageCount = 0;\n /** User messages in Main. */\n public UserMessageCount = 0;\n /** AI messages in Main. */\n public AgentMessageCount = 0;\n /** Forks of the conversation. */\n public ForkCount = 0;\n /** Set when a read 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 /** 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, RECENT_MESSAGE_COUNT);\n }\n\n /** The host form's provider, or the default provider when the panel has no host form. */\n private get providerToUse(): IMetadataProvider {\n return this.FormComponent?.ProviderToUse ?? Metadata.Provider; // global-provider-ok: BaseFormPanel has no Provider input; a panel without a host form uses the default provider\n }\n\n /**\n * Loads the counts and newest messages in Main, and the conversation's fork count, in one\n * batch. When a detail read fails, the cards show the failure.\n */\n private async loadConversationMessages(): Promise<void> {\n if (!this.Record?.ID) return;\n const provider = this.providerToUse;\n const scope = ConversationEngine.TrunkScope(this.Record.ID);\n try {\n const rv = RunView.FromMetadataProvider(provider);\n const [total, user, agent, recent, forks] = await rv.RunViews<ConversationDetailRow>([\n {\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: ConversationEngine.ScopeFilter(scope),\n ResultType: 'count_only',\n },\n {\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: `${ConversationEngine.ScopeFilter(scope)} AND [Role]='User'`,\n ResultType: 'count_only',\n },\n {\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: `${ConversationEngine.ScopeFilter(scope)} AND [Role]='AI'`,\n ResultType: 'count_only',\n },\n {\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: ConversationEngine.ScopeFilter(scope),\n Fields: ['ID', 'Role', 'Message', '__mj_CreatedAt'],\n OrderBy: 'Sequence DESC',\n MaxRows: RECENT_MESSAGE_COUNT,\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: Conversation Branches',\n ExtraFilter: `ConversationID='${EscapeSQLString(this.Record.ID)}'`,\n ResultType: 'count_only',\n },\n ], provider.CurrentUser);\n const detailReads = [total, user, agent, recent];\n const failed = detailReads.findIndex(r => !r?.Success);\n if (failed >= 0) {\n this.showLoadError(detailReads[failed]?.ErrorMessage);\n } else {\n this.TotalMessageCount = total?.TotalRowCount ?? 0;\n this.UserMessageCount = user?.TotalRowCount ?? 0;\n this.AgentMessageCount = agent?.TotalRowCount ?? 0;\n this.Messages = recent?.Results ?? [];\n }\n this.ForkCount = forks?.Success ? forks.TotalRowCount : 0;\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n LogError(`Conversation overview: could not load the details of conversation ${this.Record.ID}: ${message}`);\n this.showLoadError(message);\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":"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","sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJEmployeeEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\nconst SETTING_KEY = 'mj.form.employees.headerCollapsed';\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:MJ: Employees:header',\n metadata: {\n entity: 'MJ: Employees',\n // A hero is a bare strip in before-fields. Its sortKey is above the overview's\n // (higher draws first), so it draws above the overview cards.\n slot: 'before-fields',\n presentation: 'bare',\n contributionKey: 'employees:header',\n sortKey: 20,\n },\n})\n@Component({\n selector: 'mj-employee-header-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (Employee) {\n <div class=\"mj-entity-hero-header\">\n <div class=\"mj-hero-top\">\n <div class=\"mj-hero-identity\">\n <div class=\"mj-hero-avatar\" style=\"background: linear-gradient(135deg, #10b981, #047857);\">\n <i class=\"fa-solid fa-id-badge\"></i>\n </div>\n <div>\n <h1 class=\"mj-hero-title\">{{ Employee.FirstName }} {{ Employee.LastName }}</h1>\n <div class=\"mj-hero-subline\">\n <span>{{ Employee.Title || 'Team Member' }}</span>\n @if (Employee.Email) {\n <span>•</span>\n <span>{{ Employee.Email }}</span>\n }\n </div>\n </div>\n </div>\n <div class=\"mj-hero-actions\">\n <button type=\"button\" class=\"mj-hero-toggle-btn\" (click)=\"ToggleCollapsed()\" [title]=\"IsCollapsed ? 'Expand Header' : 'Collapse Header'\">\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"!IsCollapsed\" [class.fa-chevron-down]=\"IsCollapsed\"></i>\n </button>\n </div>\n </div>\n\n @if (!IsCollapsed) {\n <div class=\"mj-hero-metrics-row\">\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Employee ID</span>\n <span class=\"mj-hero-metric-val\">{{ Employee.ID?.substring(0, 8) }}</span>\n </div>\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Status</span>\n <span class=\"mj-hero-metric-val\" style=\"color: #10b981;\">Active</span>\n </div>\n @if (Employee.Phone) {\n <div class=\"mj-hero-metric\">\n <span class=\"mj-hero-metric-label\">Phone</span>\n <span class=\"mj-hero-metric-val\">{{ Employee.Phone }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mj-entity-hero-header {\n background: linear-gradient(180deg, var(--mj-bg-surface, #111a2e) 0%, var(--mj-bg-surface-card, #141f36) 100%);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n padding: 16px 24px;\n }\n .mj-hero-top { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n .mj-hero-identity { display: flex; align-items: center; gap: 14px; }\n .mj-hero-avatar {\n width: 44px; height: 44px; border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: #fff; flex-shrink: 0;\n }\n .mj-hero-title { font-size: 18px; font-weight: 800; color: var(--mj-text-primary, #f8fafc); }\n .mj-hero-subline { font-size: 12.5px; color: var(--mj-text-secondary, #94a3b8); margin-top: 2px; display: flex; gap: 8px; align-items: center; }\n .mj-hero-toggle-btn {\n background: none; border: 1px solid var(--mj-border-default, #223254);\n color: var(--mj-text-muted, #64748b); border-radius: 6px;\n padding: 6px 10px; cursor: pointer;\n }\n .mj-hero-metrics-row {\n display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px; margin-top: 14px; padding-top: 12px;\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n .mj-hero-metric { display: flex; flex-direction: column; gap: 2px; }\n .mj-hero-metric-label { font-size: 10.5px; font-weight: 700; color: var(--mj-text-muted, #64748b); text-transform: uppercase; }\n .mj-hero-metric-val { font-size: 14px; font-weight: 700; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n `]\n})\nexport class EmployeeHeaderPanel extends BaseFormPanel<MJEmployeeEntity> {\n public IsCollapsed = false;\n\n public ngOnInit(): void {\n const raw = UserInfoEngine.Instance.GetSetting(SETTING_KEY);\n if (raw) this.IsCollapsed = raw === 'true';\n }\n\n public get Employee(): MJEmployeeEntity | null {\n return this.Record;\n }\n\n public ToggleCollapsed(): void {\n this.IsCollapsed = !this.IsCollapsed;\n UserInfoEngine.Instance.SetSettingDebounced(SETTING_KEY, String(this.IsCollapsed));\n }\n}\n"]}
|
|
@@ -11,9 +11,13 @@ interface DirectReportRow {
|
|
|
11
11
|
export declare class EmployeeOverviewPanel extends BaseFormPanel<MJEmployeeEntity> implements OnInit {
|
|
12
12
|
private cdr;
|
|
13
13
|
Reports: DirectReportRow[];
|
|
14
|
+
/** Set when the query fails, so the card shows the failure instead of an empty list. */
|
|
15
|
+
LoadError: string | null;
|
|
14
16
|
get Employee(): MJEmployeeEntity | null;
|
|
15
17
|
ngOnInit(): void;
|
|
16
18
|
private loadDirectReports;
|
|
19
|
+
/** Shows a short "could not load" line, with the underlying message when there is one. */
|
|
20
|
+
private showLoadError;
|
|
17
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<EmployeeOverviewPanel, never>;
|
|
18
22
|
static ɵcmp: i0.ɵɵComponentDeclaration<EmployeeOverviewPanel, "mj-employee-overview-panel", never, {}, {}, never, never, true, never>;
|
|
19
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"employee-overview.panel.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Employees/employee-overview.panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,MAAM,EAA6B,MAAM,eAAe,CAAC;AAItG,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;;AAEjE,UAAU,eAAe;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,
|
|
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"}
|