@memberjunction/ng-core-entity-forms 6.2.0-edge.1 → 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/agent-form-tabs.d.ts +1 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-form-tabs.js +2 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.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 +529 -521
- 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/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +10 -16
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/pending-records.d.ts +11 -0
- package/dist/lib/custom/AIPrompts/pending-records.d.ts.map +1 -0
- package/dist/lib/custom/AIPrompts/pending-records.js +21 -0
- package/dist/lib/custom/AIPrompts/pending-records.js.map +1 -0
- 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 +8 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +241 -147
- 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/RecordProcesses/record-process-form.component.d.ts +19 -0
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +50 -8
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts +37 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.js +399 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.d.ts +69 -0
- package/dist/lib/custom/Rubrics/record-forms.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js +587 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.d.ts +67 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.js +534 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts +25 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.js +299 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.js.map +1 -0
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts +31 -0
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/scale-form.component.js +395 -0
- package/dist/lib/custom/Rubrics/scale-form.component.js.map +1 -0
- 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 +13 -4
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +111 -113
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +6 -0
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +403 -361
- 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 +5 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +705 -664
- 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 +65 -34
- 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/custom/custom-forms.module.d.ts +56 -48
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +60 -0
- 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 +115 -43
- 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/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +37 -19
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.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/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +31 -13
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.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 +210 -84
- 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/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js.map +1 -0
- 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/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- 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/MJRecordChange/mjrecordchange.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +24 -16
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js.map +1 -0
- 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/MJRubric/mjrubric.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js +135 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js +155 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js +183 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js +120 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js +103 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js +171 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.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/MJTest/mjtest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -16
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.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 +299 -119
- 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 +451 -422
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +101 -14
- 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/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts +116 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts.map +1 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js +820 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js.map +1 -0
- package/dist/lib/shared/components/template-editor.component.d.ts +25 -1
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +67 -3
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +47 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Lists/list-form.component.ts","../../../../src/lib/custom/Lists/list-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\nimport { RegisterClass, UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJListFormComponent } from '../../generated/Entities/MJList/mjlist.form.component';\nimport { MJListEntity, MJListDetailEntity, MJListDetailEntityExtended, MJListCategoryEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';\nimport { CompositeKey, Metadata, RunView, RunViewResult, EntityInfo, LogError, LogStatus } from '@memberjunction/core';\nimport { ListShareDialogConfig, ListShareDialogResult, GetRecordDisplayField, IsTextSearchableField, FormatRecordDisplayValue } from '@memberjunction/ng-list-management';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\n\nexport type ListSection = 'overview' | 'items' | 'sharing' | 'activity' | 'settings';\n\nexport interface ListItemViewModel {\n detail: MJListDetailEntity; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n recordName: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isLoading: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\nexport interface ListStats {\n itemCount: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n shareCount: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n invitationCount: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n lastUpdated: Date | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Represents a record that can be added to a list\n */\nexport interface AddableRecord {\n ID: string;\n Name: string;\n isInList: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isSelected: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * World-class List form component that provides a rich exploration experience\n * for managing lists in the MemberJunction system.\n *\n * Features:\n * - Overview with visual stats and entity context\n * - Items grid with inline record navigation\n * - Sharing management (coming soon)\n * - Activity history\n * - Settings and configuration\n */\n@RegisterClass(BaseFormComponent, 'MJ: Lists')\n@Component({\n standalone: false,\n selector: 'mj-list-form-extended',\n templateUrl: './list-form.component.html',\n styleUrls: ['./list-form.component.css', '../../../shared/form-styles.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJListFormComponentExtended extends MJListFormComponent implements OnInit, OnDestroy {\n private sharedService = inject(SharedService);\n private confirmService = inject(MJConfirmService);\n\n public override record!: MJListEntity;\n\n // Navigation\n public ActiveSection: ListSection = 'overview';\n\n /** @deprecated Use {@link ActiveSection}. */\n public get activeSection(): ListSection {\n return this.ActiveSection;\n }\n /** @deprecated Use {@link ActiveSection}. */\n public set activeSection(value: ListSection) {\n this.ActiveSection = value;\n }\n public NavItems = [\n { id: 'overview' as ListSection, icon: 'fa-solid fa-house', label: 'Overview' },\n { id: 'items' as ListSection, icon: 'fa-solid fa-list', label: 'Items', badge: 0 },\n { id: 'sharing' as ListSection, icon: 'fa-solid fa-share-nodes', label: 'Sharing', badge: 0, disabled: false },\n { id: 'activity' as ListSection, icon: 'fa-solid fa-clock-rotate-left', label: 'Activity' },\n { id: 'settings' as ListSection, icon: 'fa-solid fa-gear', label: 'Settings' }\n ];\n\n /** @deprecated Use {@link NavItems}. */\n public get navItems() {\n return this.NavItems;\n }\n /** @deprecated Use {@link NavItems}. */\n public set navItems(value) {\n this.NavItems = value;\n }\n\n // Data\n public ListItems: ListItemViewModel[] = [];\n\n /** @deprecated Use {@link ListItems}. */\n public get listItems(): ListItemViewModel[] {\n return this.ListItems;\n }\n /** @deprecated Use {@link ListItems}. */\n public set listItems(value: ListItemViewModel[]) {\n this.ListItems = value;\n }\n public Categories: MJListCategoryEntity[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): MJListCategoryEntity[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: MJListCategoryEntity[]) {\n this.Categories = value;\n }\n public entityInfo: EntityInfo | null = null; // case-violation-ok-legacy-back-compat: an ancestor class already declares the PascalCase name\n public Stats: ListStats = {\n itemCount: 0,\n shareCount: 0,\n invitationCount: 0,\n lastUpdated: null\n };\n\n /** @deprecated Use {@link Stats}. */\n public get stats(): ListStats {\n return this.Stats;\n }\n /** @deprecated Use {@link Stats}. */\n public set stats(value: ListStats) {\n this.Stats = value;\n }\n\n // Loading states\n public IsLoadingItems = false;\n\n /** @deprecated Use {@link IsLoadingItems}. */\n public get isLoadingItems() {\n return this.IsLoadingItems;\n }\n /** @deprecated Use {@link IsLoadingItems}. */\n public set isLoadingItems(value) {\n this.IsLoadingItems = value;\n }\n public IsLoadingStats = false;\n\n /** @deprecated Use {@link IsLoadingStats}. */\n public get isLoadingStats() {\n return this.IsLoadingStats;\n }\n /** @deprecated Use {@link IsLoadingStats}. */\n public set isLoadingStats(value) {\n this.IsLoadingStats = value;\n }\n public ExplorerError: string | null = null;\n\n /** @deprecated Use {@link ExplorerError}. */\n public get explorerError(): string | null {\n return this.ExplorerError;\n }\n /** @deprecated Use {@link ExplorerError}. */\n public set explorerError(value: string | null) {\n this.ExplorerError = value;\n }\n\n // Items section\n public ItemSearchTerm = '';\n\n /** @deprecated Use {@link ItemSearchTerm}. */\n public get itemSearchTerm() {\n return this.ItemSearchTerm;\n }\n /** @deprecated Use {@link ItemSearchTerm}. */\n public set itemSearchTerm(value) {\n this.ItemSearchTerm = value;\n }\n public SelectedItems = new Set<string>();\n\n /** @deprecated Use {@link SelectedItems}. */\n public get selectedItems() {\n return this.SelectedItems;\n }\n /** @deprecated Use {@link SelectedItems}. */\n public set selectedItems(value) {\n this.SelectedItems = value;\n }\n public IsSelectAllChecked = false;\n\n /** @deprecated Use {@link IsSelectAllChecked}. */\n public get isSelectAllChecked() {\n return this.IsSelectAllChecked;\n }\n /** @deprecated Use {@link IsSelectAllChecked}. */\n public set isSelectAllChecked(value) {\n this.IsSelectAllChecked = value;\n }\n\n // Items pagination — the Items grid loads one page at a time so large\n // lists (thousands of members) don't pull the entire membership into the\n // browser. Display-name resolution is likewise batched per page.\n public ItemsPage = 0;\n\n /** @deprecated Use {@link ItemsPage}. */\n public get itemsPage() {\n return this.ItemsPage;\n }\n /** @deprecated Use {@link ItemsPage}. */\n public set itemsPage(value) {\n this.ItemsPage = value;\n }\n public readonly ItemsPageSize = 100;\n\n /** @deprecated Use {@link ItemsPageSize}. */\n public get itemsPageSize() {\n return this.ItemsPageSize;\n }\n\n // Edit state\n public IsEditingName = false;\n\n /** @deprecated Use {@link IsEditingName}. */\n public get isEditingName() {\n return this.IsEditingName;\n }\n /** @deprecated Use {@link IsEditingName}. */\n public set isEditingName(value) {\n this.IsEditingName = value;\n }\n public IsEditingDescription = false;\n\n /** @deprecated Use {@link IsEditingDescription}. */\n public get isEditingDescription() {\n return this.IsEditingDescription;\n }\n /** @deprecated Use {@link IsEditingDescription}. */\n public set isEditingDescription(value) {\n this.IsEditingDescription = value;\n }\n public EditingName = '';\n\n /** @deprecated Use {@link EditingName}. */\n public get editingName() {\n return this.EditingName;\n }\n /** @deprecated Use {@link EditingName}. */\n public set editingName(value) {\n this.EditingName = value;\n }\n public EditingDescription = '';\n\n /** @deprecated Use {@link EditingDescription}. */\n public get editingDescription() {\n return this.EditingDescription;\n }\n /** @deprecated Use {@link EditingDescription}. */\n public set editingDescription(value) {\n this.EditingDescription = value;\n }\n\n // Add Records dialog\n public ShowAddRecordsDialog = false;\n\n /** @deprecated Use {@link ShowAddRecordsDialog}. */\n public get showAddRecordsDialog() {\n return this.ShowAddRecordsDialog;\n }\n /** @deprecated Use {@link ShowAddRecordsDialog}. */\n public set showAddRecordsDialog(value) {\n this.ShowAddRecordsDialog = value;\n }\n public AddDialogLoading = false;\n\n /** @deprecated Use {@link AddDialogLoading}. */\n public get addDialogLoading() {\n return this.AddDialogLoading;\n }\n /** @deprecated Use {@link AddDialogLoading}. */\n public set addDialogLoading(value) {\n this.AddDialogLoading = value;\n }\n public AddDialogSaving = false;\n\n /** @deprecated Use {@link AddDialogSaving}. */\n public get addDialogSaving() {\n return this.AddDialogSaving;\n }\n /** @deprecated Use {@link AddDialogSaving}. */\n public set addDialogSaving(value) {\n this.AddDialogSaving = value;\n }\n public AddableRecords: AddableRecord[] = [];\n\n /** @deprecated Use {@link AddableRecords}. */\n public get addableRecords(): AddableRecord[] {\n return this.AddableRecords;\n }\n /** @deprecated Use {@link AddableRecords}. */\n public set addableRecords(value: AddableRecord[]) {\n this.AddableRecords = value;\n }\n public AddRecordsSearchFilter = '';\n\n /** @deprecated Use {@link AddRecordsSearchFilter}. */\n public get addRecordsSearchFilter() {\n return this.AddRecordsSearchFilter;\n }\n /** @deprecated Use {@link AddRecordsSearchFilter}. */\n public set addRecordsSearchFilter(value) {\n this.AddRecordsSearchFilter = value;\n }\n public ExistingListDetailIds = new Set<string>();\n\n /** @deprecated Use {@link ExistingListDetailIds}. */\n public get existingListDetailIds() {\n return this.ExistingListDetailIds;\n }\n /** @deprecated Use {@link ExistingListDetailIds}. */\n public set existingListDetailIds(value) {\n this.ExistingListDetailIds = value;\n }\n public AddProgress = 0;\n\n /** @deprecated Use {@link AddProgress}. */\n public get addProgress() {\n return this.AddProgress;\n }\n /** @deprecated Use {@link AddProgress}. */\n public set addProgress(value) {\n this.AddProgress = value;\n }\n public AddTotal = 0;\n\n /** @deprecated Use {@link AddTotal}. */\n public get addTotal() {\n return this.AddTotal;\n }\n /** @deprecated Use {@link AddTotal}. */\n public set addTotal(value) {\n this.AddTotal = value;\n }\n private searchSubject = new Subject<string>();\n\n // Add From View dialog\n public ShowAddFromViewDialog = false;\n\n /** @deprecated Use {@link ShowAddFromViewDialog}. */\n public get showAddFromViewDialog() {\n return this.ShowAddFromViewDialog;\n }\n /** @deprecated Use {@link ShowAddFromViewDialog}. */\n public set showAddFromViewDialog(value) {\n this.ShowAddFromViewDialog = value;\n }\n public ShowAddFromViewLoader = false;\n\n /** @deprecated Use {@link ShowAddFromViewLoader}. */\n public get showAddFromViewLoader() {\n return this.ShowAddFromViewLoader;\n }\n /** @deprecated Use {@link ShowAddFromViewLoader}. */\n public set showAddFromViewLoader(value) {\n this.ShowAddFromViewLoader = value;\n }\n public UserViews: MJUserViewEntityExtended[] | null = null;\n\n /** @deprecated Use {@link UserViews}. */\n public get userViews(): MJUserViewEntityExtended[] | null {\n return this.UserViews;\n }\n /** @deprecated Use {@link UserViews}. */\n public set userViews(value: MJUserViewEntityExtended[] | null) {\n this.UserViews = value;\n }\n public UserViewsToAdd: MJUserViewEntityExtended[] = [];\n\n /** @deprecated Use {@link UserViewsToAdd}. */\n public get userViewsToAdd(): MJUserViewEntityExtended[] {\n return this.UserViewsToAdd;\n }\n /** @deprecated Use {@link UserViewsToAdd}. */\n public set userViewsToAdd(value: MJUserViewEntityExtended[]) {\n this.UserViewsToAdd = value;\n }\n /**\n * Normalized-UUID set of the IDs in {@link userViewsToAdd}, kept in sync with that\n * array. Lets {@link isViewSelected} (bound per-row in the dialog's @for, ~2x/row)\n * do an O(1) lookup instead of scanning the array with UUIDsEqual on every check.\n */\n private userViewsToAddIds: Set<string> = new Set<string>();\n public AddFromViewProgress = 0;\n\n /** @deprecated Use {@link AddFromViewProgress}. */\n public get addFromViewProgress() {\n return this.AddFromViewProgress;\n }\n /** @deprecated Use {@link AddFromViewProgress}. */\n public set addFromViewProgress(value) {\n this.AddFromViewProgress = value;\n }\n public AddFromViewTotal = 0;\n\n /** @deprecated Use {@link AddFromViewTotal}. */\n public get addFromViewTotal() {\n return this.AddFromViewTotal;\n }\n /** @deprecated Use {@link AddFromViewTotal}. */\n public set addFromViewTotal(value) {\n this.AddFromViewTotal = value;\n }\n public FetchingRecordsToSave = false;\n\n /** @deprecated Use {@link FetchingRecordsToSave}. */\n public get fetchingRecordsToSave() {\n return this.FetchingRecordsToSave;\n }\n /** @deprecated Use {@link FetchingRecordsToSave}. */\n public set fetchingRecordsToSave(value) {\n this.FetchingRecordsToSave = value;\n }\n\n // Share dialog\n public ShowShareDialog = false;\n\n /** @deprecated Use {@link ShowShareDialog}. */\n public get showShareDialog() {\n return this.ShowShareDialog;\n }\n /** @deprecated Use {@link ShowShareDialog}. */\n public set showShareDialog(value) {\n this.ShowShareDialog = value;\n }\n public ShareDialogConfig: ListShareDialogConfig | null = null;\n\n /** @deprecated Use {@link ShareDialogConfig}. */\n public get shareDialogConfig(): ListShareDialogConfig | null {\n return this.ShareDialogConfig;\n }\n /** @deprecated Use {@link ShareDialogConfig}. */\n public set shareDialogConfig(value: ListShareDialogConfig | null) {\n this.ShareDialogConfig = value;\n }\n\n // Invitations / audit log dialogs — opened from the share dialog.\n public ShowInvitationsDialog = false;\n\n /** @deprecated Use {@link ShowInvitationsDialog}. */\n public get showInvitationsDialog() {\n return this.ShowInvitationsDialog;\n }\n /** @deprecated Use {@link ShowInvitationsDialog}. */\n public set showInvitationsDialog(value) {\n this.ShowInvitationsDialog = value;\n }\n public ShowAuditLogDialog = false;\n\n /** @deprecated Use {@link ShowAuditLogDialog}. */\n public get showAuditLogDialog() {\n return this.ShowAuditLogDialog;\n }\n /** @deprecated Use {@link ShowAuditLogDialog}. */\n public set showAuditLogDialog(value) {\n this.ShowAuditLogDialog = value;\n }\n\n private destroy$ = new Subject<void>();\n private get metadata() { return this.ProviderToUse; }\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Set up search debounce\n this.searchSubject\n .pipe(debounceTime(300), takeUntil(this.destroy$))\n .subscribe((searchText) => this.searchRecords(searchText));\n\n await this.loadExplorerData();\n }\n\n // Helper to show notifications using SharedService's deprecated method\n private showNotification(message: string, style: 'success' | 'error' | 'info' = 'info', duration: number = 3000): void {\n this.sharedService.CreateSimpleNotification(message, style, duration);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async loadExplorerData(): Promise<void> {\n try {\n // Load entity info for context\n if (this.record?.EntityID) {\n this.entityInfo = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.record.EntityID)) || null;\n }\n\n // Load categories for dropdown\n await this.loadCategories();\n\n // Load items and stats in parallel\n await Promise.all([\n this.loadItems(),\n this.loadStats()\n ]);\n\n this.updateNavBadges();\n } catch (error) {\n console.error('Error loading list data:', error);\n this.ExplorerError = 'Failed to load list data';\n } finally {\n this.cdr.detectChanges();\n }\n }\n\n private async loadCategories(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListCategoryEntity>({\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (result.Success) {\n this.Categories = result.Results;\n }\n }\n\n private async loadItems(page: number = 0): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.IsLoadingItems = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n StartRow: page * this.ItemsPageSize,\n MaxRows: this.ItemsPageSize,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.ItemsPage = page;\n this.ListItems = result.Results.map(detail => ({\n detail,\n recordName: detail.RecordID || 'Loading...',\n isLoading: true\n }));\n this.SelectedItems.clear();\n this.IsSelectAllChecked = false;\n\n // Resolve display names for this page in one batched query\n await this.loadRecordNames();\n }\n } catch (error) {\n console.error('Error loading list items:', error);\n } finally {\n this.IsLoadingItems = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Resolves display names for the current page of items with a single\n * batched `PK IN (...)` query per 250 items — never one query per item.\n */\n private async loadRecordNames(): Promise<void> {\n const finish = () => {\n for (const item of this.ListItems) item.isLoading = false;\n this.cdr.detectChanges();\n };\n\n if (!this.entityInfo || this.ListItems.length === 0) {\n finish();\n return;\n }\n\n // NameField when the entity has one; otherwise the fallback field\n // (first non-PK/non-FK/non-system field), shown as \"<id> — <value>\"\n const displayField = GetRecordDisplayField(this.entityInfo);\n if (!displayField.Field) {\n // Entity has only key fields — the record ID is the best label available\n for (const item of this.ListItems) {\n item.recordName = item.detail.RecordID || 'Unknown';\n }\n finish();\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const entityInfo = this.entityInfo;\n // Keyed by the compact key segment (raw value for a single-column key, \"F1|v1||F2|v2\" for a\n // composite one) — the same form ListDetail.RecordID stores, so the lookups below line up.\n const valueMap = new Map<string, unknown>();\n const ids = this.ListItems\n .map(i => i.detail.RecordID)\n .filter((id): id is string => !!id);\n\n const CHUNK_SIZE = 250;\n for (let start = 0; start < ids.length; start += CHUNK_SIZE) {\n const chunk = ids.slice(start, start + CHUNK_SIZE);\n try {\n const result = await rv.RunView({\n EntityName: entityInfo.Name,\n ExtraFilter: this.buildRecordIdFilter(entityInfo, chunk),\n Fields: [...entityInfo.PrimaryKeys.map(pk => pk.Name), displayField.Field.Name],\n ResultType: 'simple'\n });\n if (result.Success) {\n for (const row of result.Results as Array<Record<string, unknown>>) {\n const key = CompositeKey.FromEntityRecord(entityInfo, row).ToCompactURLSegment();\n valueMap.set(NormalizeUUID(key), row[displayField.Field.Name]);\n }\n }\n } catch (error) {\n // Fall through — unresolved items display their RecordID\n }\n }\n\n for (const item of this.ListItems) {\n const id = item.detail.RecordID || 'Unknown';\n const value = item.detail.RecordID ? valueMap.get(NormalizeUUID(item.detail.RecordID)) : undefined;\n item.recordName = FormatRecordDisplayValue(id, value, displayField);\n }\n finish();\n }\n\n /**\n * Predicate selecting the records identified by compact key segments. A single-column key\n * collapses to one `<pk> IN (...)`; a composite key expands each segment to its full\n * `(F1='v1' AND F2='v2')` predicate and ORs them — an IN on the first column alone would\n * silently match the wrong rows.\n */\n private buildRecordIdFilter(entityInfo: EntityInfo, recordIds: string[]): string {\n if (entityInfo.PrimaryKeys.length === 1) {\n const inList = recordIds.map(id => `'${id.replace(/'/g, \"''\")}'`).join(',');\n return `${entityInfo.FirstPrimaryKey.Name} IN (${inList})`; // first-pk-ok: guarded by PrimaryKeys.length === 1 above\n }\n return recordIds\n .map(id => `(${CompositeKey.FromURLSegment(entityInfo, id).ToWhereClause()})`)\n .join(' OR ');\n }\n\n // === Items pagination ===\n\n public get TotalPages(): number {\n return Math.max(1, Math.ceil(this.Stats.itemCount / this.ItemsPageSize));\n }\n\n /** @deprecated Use {@link TotalPages}. */\n public get totalPages(): number {\n return this.TotalPages;\n }\n\n public async GoToPage(page: number): Promise<void> {\n if (page < 0 || page >= this.TotalPages || page === this.ItemsPage) return;\n await this.loadItems(page);\n }\n\n /** @deprecated Use {@link GoToPage}. */\n public async goToPage(page: number): Promise<void> {\n return this.GoToPage(page);\n }\n\n private async loadStats(): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.IsLoadingStats = true;\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [itemsResult, sharesResult, invitationsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Shares',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Invitations',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n }\n ]);\n\n this.Stats = {\n itemCount: itemsResult.Success ? itemsResult.TotalRowCount : 0,\n shareCount: sharesResult.Success ? sharesResult.TotalRowCount : 0,\n invitationCount: invitationsResult.Success ? invitationsResult.TotalRowCount : 0,\n lastUpdated: this.record.__mj_UpdatedAt\n };\n } catch (error) {\n console.error('Error loading stats:', error);\n } finally {\n this.IsLoadingStats = false;\n this.cdr.detectChanges();\n }\n }\n\n private updateNavBadges(): void {\n this.NavItems = this.NavItems.map(item => {\n switch (item.id) {\n case 'items':\n return { ...item, badge: this.Stats.itemCount };\n case 'sharing':\n return { ...item, badge: this.Stats.shareCount + this.Stats.invitationCount };\n default:\n return item;\n }\n });\n }\n\n // === Navigation ===\n\n public SetActiveSection(section: ListSection): void {\n const navItem = this.NavItems.find(n => n.id === section);\n if (navItem?.disabled) return;\n\n this.ActiveSection = section;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SetActiveSection}. */\n public setActiveSection(section: ListSection): void {\n return this.SetActiveSection(section);\n }\n\n // === Items Management ===\n\n public get FilteredItems(): ListItemViewModel[] {\n if (!this.ItemSearchTerm) return this.ListItems;\n\n const term = this.ItemSearchTerm.toLowerCase();\n return this.ListItems.filter(item =>\n item.recordName.toLowerCase().includes(term) ||\n item.detail.RecordID?.toLowerCase().includes(term)\n );\n }\n\n /** @deprecated Use {@link FilteredItems}. */\n public get filteredItems(): ListItemViewModel[] {\n return this.FilteredItems;\n }\n\n public ToggleItemSelection(item: ListItemViewModel): void {\n const id = item.detail.ID;\n if (this.SelectedItems.has(id)) {\n this.SelectedItems.delete(id);\n } else {\n this.SelectedItems.add(id);\n }\n this.updateSelectAllState();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleItemSelection}. */\n public toggleItemSelection(item: ListItemViewModel): void {\n return this.ToggleItemSelection(item);\n }\n\n public ToggleSelectAll(): void {\n if (this.IsSelectAllChecked) {\n this.SelectedItems.clear();\n } else {\n for (const item of this.FilteredItems) {\n this.SelectedItems.add(item.detail.ID);\n }\n }\n this.IsSelectAllChecked = !this.IsSelectAllChecked;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleSelectAll}. */\n public toggleSelectAll(): void {\n return this.ToggleSelectAll();\n }\n\n private updateSelectAllState(): void {\n this.IsSelectAllChecked = this.FilteredItems.length > 0 &&\n this.FilteredItems.every(item => this.SelectedItems.has(item.detail.ID));\n }\n\n public async RemoveSelectedItems(): Promise<void> {\n if (this.SelectedItems.size === 0) return;\n\n const count = this.SelectedItems.size;\n const confirmMessage = `Remove ${count} item${count > 1 ? 's' : ''} from this list?`;\n\n if (!(await this.confirmService.ConfirmDelete({ message: confirmMessage }))) return;\n\n try {\n // Queue all deletes in one TransactionGroup — one round trip\n // instead of one per selected item. Deliberately atomic (unlike\n // the server bulk paths, which trade atomicity for per-record\n // error isolation): if Submit() fails, the transaction rolled\n // back and NO rows were removed.\n const tg = await this.metadata.CreateTransactionGroup();\n let queued = 0;\n let failedToQueue = 0;\n for (const id of this.SelectedItems) {\n const item = this.ListItems.find(i => UUIDsEqual(i.detail.ID, id));\n if (item) {\n item.detail.TransactionGroup = tg;\n // With a TransactionGroup set, Delete() returns true once\n // enqueued; false means a pre-enqueue failure (validation/\n // permission) and the row never joined the transaction.\n if (await item.detail.Delete()) {\n queued++;\n } else {\n failedToQueue++;\n LogError(`Failed to queue list item removal: ${item.detail.LatestResult?.CompleteMessage ?? 'unknown error'}`);\n }\n }\n }\n const success = queued === 0 || await tg.Submit();\n if (!success) {\n this.showNotification('Error removing items from list', 'error', 4000);\n return;\n }\n\n if (failedToQueue > 0) {\n this.showNotification(\n `Removed ${queued} item${queued === 1 ? '' : 's'} from list; ${failedToQueue} failed`,\n 'error',\n 4000\n );\n } else {\n this.showNotification(\n `Removed ${count} item${count > 1 ? 's' : ''} from list`,\n 'success',\n 3000\n );\n }\n\n this.SelectedItems.clear();\n await this.loadStats();\n await this.loadItems(Math.min(this.ItemsPage, this.TotalPages - 1));\n this.updateNavBadges();\n } catch (error) {\n console.error('Error removing items:', error);\n this.showNotification(\n 'Error removing items from list',\n 'error',\n 4000\n );\n }\n }\n\n /** @deprecated Use {@link RemoveSelectedItems}. */\n public async removeSelectedItems(): Promise<void> {\n return this.RemoveSelectedItems();\n }\n\n public OpenRecord(item: ListItemViewModel): void {\n if (!this.entityInfo || !item.detail.RecordID) return;\n\n // ListDetail.RecordID is the compact CompositeKey segment: the raw value for a single-column\n // key (whatever the column is called), \"F1|v1||F2|v2\" for a composite key. FromURLSegment\n // reads both against this list's entity metadata — `FromID` assumed the column was `ID`.\n SharedService.Instance.OpenEntityRecord(this.entityInfo.Name, CompositeKey.FromURLSegment(this.entityInfo, item.detail.RecordID));\n }\n\n /** @deprecated Use {@link OpenRecord}. */\n public openRecord(item: ListItemViewModel): void {\n return this.OpenRecord(item);\n }\n\n // === Inline Editing ===\n\n public StartEditingName(): void {\n this.EditingName = this.record.Name;\n this.IsEditingName = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link StartEditingName}. */\n public startEditingName(): void {\n return this.StartEditingName();\n }\n\n public async SaveNameEdit(): Promise<void> {\n if (!this.EditingName.trim()) {\n this.CancelNameEdit();\n return;\n }\n\n this.record.Name = this.EditingName.trim();\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Name updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update name', 'error', 3000);\n }\n\n this.IsEditingName = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SaveNameEdit}. */\n public async saveNameEdit(): Promise<void> {\n return this.SaveNameEdit();\n }\n\n public CancelNameEdit(): void {\n this.IsEditingName = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CancelNameEdit}. */\n public cancelNameEdit(): void {\n return this.CancelNameEdit();\n }\n\n public StartEditingDescription(): void {\n this.EditingDescription = this.record.Description || '';\n this.IsEditingDescription = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link StartEditingDescription}. */\n public startEditingDescription(): void {\n return this.StartEditingDescription();\n }\n\n public async SaveDescriptionEdit(): Promise<void> {\n this.record.Description = this.EditingDescription.trim() || null;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Description updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update description', 'error', 3000);\n }\n\n this.IsEditingDescription = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SaveDescriptionEdit}. */\n public async saveDescriptionEdit(): Promise<void> {\n return this.SaveDescriptionEdit();\n }\n\n public CancelDescriptionEdit(): void {\n this.IsEditingDescription = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CancelDescriptionEdit}. */\n public cancelDescriptionEdit(): void {\n return this.CancelDescriptionEdit();\n }\n\n // === Helpers ===\n\n public get EntityDisplayName(): string {\n return this.entityInfo?.DisplayName || this.entityInfo?.Name || this.record?.Entity || 'Unknown';\n }\n\n /** @deprecated Use {@link EntityDisplayName}. */\n public get entityDisplayName(): string {\n return this.EntityDisplayName;\n }\n\n public get EntityIcon(): string {\n return this.entityInfo?.Icon || 'fa-solid fa-table';\n }\n\n /** @deprecated Use {@link EntityIcon}. */\n public get entityIcon(): string {\n return this.EntityIcon;\n }\n\n public get CategoryName(): string {\n if (!this.record?.CategoryID) return 'Uncategorized';\n const category = this.Categories.find(c => UUIDsEqual(c.ID, this.record.CategoryID));\n return category?.Name || 'Unknown';\n }\n\n /** @deprecated Use {@link CategoryName}. */\n public get categoryName(): string {\n return this.CategoryName;\n }\n\n public get FormattedItemCount(): string {\n return this.Stats.itemCount.toLocaleString();\n }\n\n /** @deprecated Use {@link FormattedItemCount}. */\n public get formattedItemCount(): string {\n return this.FormattedItemCount;\n }\n\n public get FormattedLastUpdated(): string {\n if (!this.Stats.lastUpdated) return 'Never';\n const date = new Date(this.Stats.lastUpdated);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n return date.toLocaleDateString();\n }\n\n /** @deprecated Use {@link FormattedLastUpdated}. */\n public get formattedLastUpdated(): string {\n return this.FormattedLastUpdated;\n }\n\n public GetOwnerName(): string {\n return this.record?.User || 'Unknown';\n }\n\n /** @deprecated Use {@link GetOwnerName}. */\n public getOwnerName(): string {\n return this.GetOwnerName();\n }\n\n public IsCurrentUserOwner(): boolean {\n return UUIDsEqual(this.record?.UserID, this.metadata.CurrentUser?.ID);\n }\n\n /** @deprecated Use {@link IsCurrentUserOwner}. */\n public isCurrentUserOwner(): boolean {\n return this.IsCurrentUserOwner();\n }\n\n public async OnCategoryChange(categoryId: string | null): Promise<void> {\n this.record.CategoryID = categoryId;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Category updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update category', 'error', 3000);\n }\n\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnCategoryChange}. */\n public async onCategoryChange(categoryId: string | null): Promise<void> {\n return this.OnCategoryChange(categoryId);\n }\n\n public async RefreshItems(): Promise<void> {\n await this.loadStats();\n await this.loadItems(Math.min(this.ItemsPage, this.TotalPages - 1));\n this.updateNavBadges();\n }\n\n /** @deprecated Use {@link RefreshItems}. */\n public async refreshItems(): Promise<void> {\n return this.RefreshItems();\n }\n\n // ==========================================\n // Add Records Dialog\n // ==========================================\n\n public async OpenAddRecordsDialog(): Promise<void> {\n this.ShowAddRecordsDialog = true;\n this.AddableRecords = [];\n this.AddRecordsSearchFilter = '';\n this.AddDialogLoading = true;\n this.AddDialogSaving = false;\n\n // Load existing list detail IDs to mark which records are already in the list\n await this.loadExistingListDetailIds();\n this.AddDialogLoading = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenAddRecordsDialog}. */\n public async openAddRecordsDialog(): Promise<void> {\n return this.OpenAddRecordsDialog();\n }\n\n public CloseAddRecordsDialog(): void {\n this.ShowAddRecordsDialog = false;\n this.AddableRecords = [];\n this.AddRecordsSearchFilter = '';\n this.ExistingListDetailIds.clear();\n this.AddDialogSaving = false;\n this.AddProgress = 0;\n this.AddTotal = 0;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseAddRecordsDialog}. */\n public closeAddRecordsDialog(): void {\n return this.CloseAddRecordsDialog();\n }\n\n private async loadExistingListDetailIds(): Promise<void> {\n if (!this.record) return;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple'\n }, this.metadata.CurrentUser);\n\n if (result.Success) {\n this.ExistingListDetailIds = new Set(result.Results.map(r => NormalizeUUID(r.RecordID)));\n }\n }\n\n public OnAddRecordsSearchChange(value: string): void {\n this.AddRecordsSearchFilter = value;\n this.searchSubject.next(value);\n }\n\n /** @deprecated Use {@link OnAddRecordsSearchChange}. */\n public onAddRecordsSearchChange(value: string): void {\n return this.OnAddRecordsSearchChange(value);\n }\n\n private async searchRecords(searchText: string): Promise<void> {\n if (!this.record || !searchText || searchText.length < 2) {\n this.AddableRecords = [];\n this.cdr.detectChanges();\n return;\n }\n\n this.AddDialogLoading = true;\n this.cdr.detectChanges();\n\n const sourceEntityInfo = this.metadata.EntityByID(this.record.EntityID);\n if (!sourceEntityInfo) {\n this.AddDialogLoading = false;\n this.cdr.detectChanges();\n return;\n }\n\n // NameField when present; otherwise the fallback display field\n // (first non-PK/non-FK/non-system field). Text-typed fields also\n // drive the LIKE search so name-less entities remain searchable.\n const displayField = GetRecordDisplayField(sourceEntityInfo);\n\n let filter: string | undefined;\n if (displayField.Field && IsTextSearchableField(displayField.Field)) {\n filter = `${displayField.Field.Name} LIKE '%${searchText.replace(/'/g, \"''\")}%'`;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result: RunViewResult = await rv.RunView({\n EntityName: this.record.Entity,\n ExtraFilter: filter,\n MaxRows: 100,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.AddableRecords = result.Results.map((record: Record<string, unknown>) => {\n // Compact key segment (raw value, or \"F1|v1||F2|v2\" for a composite key) — the form ListDetail.RecordID stores\n const recordId = CompositeKey.FromEntityRecord(sourceEntityInfo, record).ToCompactURLSegment();\n return {\n ID: recordId,\n Name: displayField.Field\n ? FormatRecordDisplayValue(recordId, record[displayField.Field.Name], displayField)\n : recordId,\n isInList: this.ExistingListDetailIds.has(NormalizeUUID(recordId)),\n isSelected: false\n };\n });\n }\n\n this.AddDialogLoading = false;\n this.cdr.detectChanges();\n }\n\n public ToggleRecordSelection(record: AddableRecord): void {\n if (record.isInList) return; // Can't select records already in list\n record.isSelected = !record.isSelected;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleRecordSelection}. */\n public toggleRecordSelection(record: AddableRecord): void {\n return this.ToggleRecordSelection(record);\n }\n\n public get SelectedAddableRecords(): AddableRecord[] {\n return this.AddableRecords.filter(r => r.isSelected);\n }\n\n /** @deprecated Use {@link SelectedAddableRecords}. */\n public get selectedAddableRecords(): AddableRecord[] {\n return this.SelectedAddableRecords;\n }\n\n public SelectAllAddable(): void {\n this.AddableRecords.forEach(r => {\n if (!r.isInList) r.isSelected = true;\n });\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SelectAllAddable}. */\n public selectAllAddable(): void {\n return this.SelectAllAddable();\n }\n\n public DeselectAllAddable(): void {\n this.AddableRecords.forEach(r => r.isSelected = false);\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link DeselectAllAddable}. */\n public deselectAllAddable(): void {\n return this.DeselectAllAddable();\n }\n\n public async ConfirmAddRecords(): Promise<void> {\n const recordsToAdd = this.SelectedAddableRecords;\n if (recordsToAdd.length === 0 || !this.record) return;\n\n this.AddDialogSaving = true;\n this.AddTotal = recordsToAdd.length;\n this.AddProgress = 0;\n this.cdr.detectChanges();\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const record of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = record.ID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.AddProgress = this.AddTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.CloseAddRecordsDialog();\n await this.RefreshItems();\n } else {\n LogError('Error adding records to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.AddDialogSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link ConfirmAddRecords}. */\n public async confirmAddRecords(): Promise<void> {\n return this.ConfirmAddRecords();\n }\n\n // ==========================================\n // Add From View Dialog\n // ==========================================\n\n public async OpenAddFromViewDialog(): Promise<void> {\n this.ShowAddFromViewDialog = true;\n this.UserViewsToAdd = [];\n this.userViewsToAddIds.clear();\n this.cdr.detectChanges();\n\n if (!this.UserViews) {\n await this.loadEntityViews();\n }\n }\n\n /** @deprecated Use {@link OpenAddFromViewDialog}. */\n public async openAddFromViewDialog(): Promise<void> {\n return this.OpenAddFromViewDialog();\n }\n\n public CloseAddFromViewDialog(): void {\n this.ShowAddFromViewDialog = false;\n this.UserViewsToAdd = [];\n this.userViewsToAddIds.clear();\n this.ShowAddFromViewLoader = false;\n this.AddFromViewProgress = 0;\n this.AddFromViewTotal = 0;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseAddFromViewDialog}. */\n public closeAddFromViewDialog(): void {\n return this.CloseAddFromViewDialog();\n }\n\n private async loadEntityViews(): Promise<void> {\n if (!this.record || !this.record.Entity) return;\n\n this.ShowAddFromViewLoader = true;\n this.cdr.detectChanges();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const runViewResult = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `UserID = '${this.metadata.CurrentUser.ID}' AND EntityID = '${this.record.EntityID}'`,\n ResultType: 'entity_object'\n }, this.metadata.CurrentUser);\n\n if (!runViewResult.Success) {\n LogError(`Error loading User Views for entity ${this.record.Entity}`);\n } else {\n this.UserViews = runViewResult.Results;\n }\n\n this.ShowAddFromViewLoader = false;\n this.cdr.detectChanges();\n }\n\n public ToggleViewSelection(view: MJUserViewEntityExtended): void {\n const index = this.UserViewsToAdd.findIndex(v => UUIDsEqual(v.ID, view.ID));\n if (index >= 0) {\n this.UserViewsToAdd.splice(index, 1);\n this.userViewsToAddIds.delete(NormalizeUUID(view.ID));\n } else {\n this.UserViewsToAdd.push(view);\n this.userViewsToAddIds.add(NormalizeUUID(view.ID));\n }\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleViewSelection}. */\n public toggleViewSelection(view: MJUserViewEntityExtended): void {\n return this.ToggleViewSelection(view);\n }\n\n public IsViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.userViewsToAddIds.has(NormalizeUUID(view.ID));\n }\n\n /** @deprecated Use {@link IsViewSelected}. */\n public isViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.IsViewSelected(view);\n }\n\n public async ConfirmAddFromView(): Promise<void> {\n if (!this.record || this.UserViewsToAdd.length === 0) return;\n\n this.ShowAddFromViewLoader = true;\n this.FetchingRecordsToSave = true;\n this.cdr.detectChanges();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Collect all unique record IDs from selected views\n const recordIdSet = new Set<string>();\n\n for (const userView of this.UserViewsToAdd) {\n const runViewResult = await rv.RunView({\n ViewID: userView.ID,\n ViewEntity: userView,\n Fields: ['ID']\n }, this.metadata.CurrentUser);\n\n if (runViewResult.Success) {\n const records = runViewResult.Results as Array<Record<string, string>>;\n records.forEach(r => recordIdSet.add(NormalizeUUID(r.ID)));\n }\n }\n\n // Filter out records already in the list\n await this.loadExistingListDetailIds();\n const recordsToAdd = [...recordIdSet].filter(id => !this.ExistingListDetailIds.has(id));\n\n this.AddFromViewTotal = recordsToAdd.length;\n this.AddFromViewProgress = 0;\n this.FetchingRecordsToSave = false;\n this.cdr.detectChanges();\n\n if (recordsToAdd.length === 0) {\n this.showNotification('All records already in list', 'info', 2500);\n this.ShowAddFromViewLoader = false;\n this.cdr.detectChanges();\n return;\n }\n\n LogStatus(`Adding ${recordsToAdd.length} records to list`);\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const recordID of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = recordID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.AddFromViewProgress = this.AddFromViewTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.CloseAddFromViewDialog();\n await this.RefreshItems();\n } else {\n LogError('Error adding records from view to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.ShowAddFromViewLoader = false;\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link ConfirmAddFromView}. */\n public async confirmAddFromView(): Promise<void> {\n return this.ConfirmAddFromView();\n }\n\n // ==========================================\n // Share Dialog\n // ==========================================\n\n public OpenShareDialog(): void {\n if (!this.record?.IsSaved) return;\n\n this.ShareDialogConfig = {\n listId: this.record.ID,\n listName: this.record.Name,\n currentUserId: this.metadata.CurrentUser.ID,\n isOwner: this.IsCurrentUserOwner()\n };\n this.ShowShareDialog = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenShareDialog}. */\n public openShareDialog(): void {\n return this.OpenShareDialog();\n }\n\n public OnShareDialogComplete(result: ListShareDialogResult): void {\n this.ShowShareDialog = false;\n this.ShareDialogConfig = null;\n\n if (result.action === 'apply') {\n // Refresh stats to update share counts\n this.loadStats().then(() => {\n this.updateNavBadges();\n this.cdr.detectChanges();\n });\n }\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnShareDialogComplete}. */\n public onShareDialogComplete(result: ListShareDialogResult): void {\n return this.OnShareDialogComplete(result);\n }\n\n public OnShareDialogCancel(): void {\n this.ShowShareDialog = false;\n this.ShareDialogConfig = null;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnShareDialogCancel}. */\n public onShareDialogCancel(): void {\n return this.OnShareDialogCancel();\n }\n\n // ==========================================\n // Invitations / Audit Log dialogs (mockups 16, 18)\n // ==========================================\n\n public OpenInvitationsDialog(): void {\n // Closing share dialog so it doesn't stack visually. User can\n // reopen via toolbar; the share dialog isn't stateful enough to\n // need preservation across this transition.\n this.ShowShareDialog = false;\n this.ShowInvitationsDialog = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenInvitationsDialog}. */\n public openInvitationsDialog(): void {\n return this.OpenInvitationsDialog();\n }\n\n public CloseInvitationsDialog(): void {\n this.ShowInvitationsDialog = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseInvitationsDialog}. */\n public closeInvitationsDialog(): void {\n return this.CloseInvitationsDialog();\n }\n\n public OpenAuditLogDialog(): void {\n this.ShowShareDialog = false;\n this.ShowAuditLogDialog = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenAuditLogDialog}. */\n public openAuditLogDialog(): void {\n return this.OpenAuditLogDialog();\n }\n\n public CloseAuditLogDialog(): void {\n this.ShowAuditLogDialog = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseAuditLogDialog}. */\n public closeAuditLogDialog(): void {\n return this.CloseAuditLogDialog();\n }\n}\n","<!-- World-Class List Form -->\n<div class=\"list-form-explorer\">\n <!-- Header -->\n <header class=\"list-header\">\n <div class=\"header-content\">\n <div class=\"header-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"header-info\">\n <div class=\"name-row\">\n @if (!isEditingName) {\n <h1 class=\"list-name\">{{record.Name || 'Untitled List'}}</h1>\n @if (isCurrentUserOwner()) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingName()\"\n title=\"Edit name\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n }\n @if (isEditingName) {\n <input\n type=\"text\"\n class=\"inline-edit-input name-input\"\n [(ngModel)]=\"editingName\"\n (keydown.enter)=\"saveNameEdit()\"\n (keydown.escape)=\"cancelNameEdit()\"\n #nameInput />\n <button class=\"save-btn\" (click)=\"saveNameEdit()\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button class=\"cancel-btn\" (click)=\"cancelNameEdit()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <div class=\"entity-badge\">\n <i [class]=\"entityIcon\"></i>\n <span>{{entityDisplayName}}</span>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedItemCount}}</span>\n <span class=\"stat-label\">Items</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{stats.shareCount}}</span>\n <span class=\"stat-label\">Shares</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedLastUpdated}}</span>\n <span class=\"stat-label\">Updated</span>\n </div>\n </div>\n </header>\n\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (nav of navItems; track nav) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === nav.id\"\n [class.disabled]=\"nav.disabled\"\n (click)=\"setActiveSection(nav.id)\"\n [title]=\"nav.label\">\n <i [class]=\"nav.icon\"></i>\n <span class=\"nav-label\">{{nav.label}}</span>\n @if (nav.badge && nav.badge > 0) {\n <span class=\"nav-badge\">{{nav.badge}}</span>\n }\n </button>\n }\n </nav>\n\n <!-- Main Content -->\n <main class=\"main-content\">\n <!-- Overview Section -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"overview-grid\">\n <!-- Description Card -->\n <div class=\"overview-card description-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-align-left\"></i> Description</h3>\n @if (isCurrentUserOwner() && !isEditingDescription) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingDescription()\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n <div class=\"card-body\">\n @if (!isEditingDescription) {\n @if (record.Description) {\n <p class=\"description-text\">{{record.Description}}</p>\n }\n @if (!record.Description) {\n <p class=\"description-empty\">No description provided</p>\n }\n }\n @if (isEditingDescription) {\n <textarea\n class=\"inline-edit-input description-input\"\n [(ngModel)]=\"editingDescription\"\n placeholder=\"Add a description...\"\n rows=\"3\"\n (keydown.escape)=\"cancelDescriptionEdit()\"></textarea>\n <div class=\"edit-actions\">\n <button class=\"btn-primary\" (click)=\"saveDescriptionEdit()\">Save</button>\n <button class=\"btn-secondary\" (click)=\"cancelDescriptionEdit()\">Cancel</button>\n </div>\n }\n </div>\n </div>\n <!-- Details Card -->\n <div class=\"overview-card details-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Details</h3>\n </div>\n <div class=\"card-body\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Entity</span>\n <span class=\"detail-value\">\n <i [class]=\"entityIcon\" class=\"detail-icon\"></i>\n {{entityDisplayName}}\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Category</span>\n @if (!isCurrentUserOwner()) {\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-folder detail-icon\"></i>\n {{categoryName}}\n </span>\n }\n @if (isCurrentUserOwner()) {\n <select\n class=\"category-select\"\n [ngModel]=\"record.CategoryID\"\n (ngModelChange)=\"onCategoryChange($event)\">\n <option [ngValue]=\"null\">Uncategorized</option>\n @for (cat of categories; track cat) {\n <option [ngValue]=\"cat.ID\">{{cat.Name}}</option>\n }\n </select>\n }\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Owner</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-user detail-icon\"></i>\n {{getOwnerName()}}\n @if (isCurrentUserOwner()) {\n <span class=\"owner-badge\">You</span>\n }\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-calendar detail-icon\"></i>\n {{record.__mj_CreatedAt | date:'mediumDate'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Quick Actions Card -->\n <div class=\"overview-card actions-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-bolt\"></i> Quick Actions</h3>\n </div>\n <div class=\"card-body\">\n <button class=\"action-btn\" (click)=\"setActiveSection('items')\">\n <i class=\"fa-solid fa-list\"></i>\n <span>View Items</span>\n <span class=\"action-count\">{{stats.itemCount}}</span>\n </button>\n @if (isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>Share List</span>\n @if (stats.shareCount > 0) {\n <span class=\"action-count\">{{stats.shareCount}}</span>\n }\n </button>\n }\n @if (!isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"setActiveSection('sharing')\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>View Sharing</span>\n </button>\n }\n <button class=\"action-btn\" [disabled]=\"true\" title=\"Coming soon\">\n <i class=\"fa-solid fa-file-export\"></i>\n <span>Export Data</span>\n <span class=\"coming-soon\">Soon</span>\n </button>\n </div>\n </div>\n </div>\n </section>\n }\n\n <!-- Items Section -->\n @if (activeSection === 'items') {\n <section class=\"section items-section\">\n <div class=\"section-header\">\n <h2>List Items</h2>\n <div class=\"section-actions\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search this page...\"\n [(ngModel)]=\"itemSearchTerm\" />\n </div>\n @if (isCurrentUserOwner()) {\n <div class=\"add-buttons\">\n <button class=\"btn-secondary\" (click)=\"openAddRecordsDialog()\" title=\"Add individual records\">\n <i class=\"fa-solid fa-plus\"></i> Add Records\n </button>\n <button class=\"btn-secondary\" (click)=\"openAddFromViewDialog()\" title=\"Add records from a saved view\">\n <i class=\"fa-solid fa-table-list\"></i> Add From View\n </button>\n </div>\n }\n <button class=\"btn-icon\" (click)=\"refreshItems()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Loading State -->\n @if (isLoadingItems) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading items...\" size=\"medium\"></mj-loading>\n </div>\n }\n <!-- Empty State -->\n @if (!isLoadingItems && listItems.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-inbox\"\n Title=\"No Items Yet\"\n [Message]=\"'This list doesn\\'t have any items. Add records from the ' + entityDisplayName + ' entity.'\" />\n }\n <!-- Items Table -->\n @if (!isLoadingItems && listItems.length > 0) {\n <div class=\"items-table-container\">\n @if (selectedItems.size > 0) {\n <div class=\"items-toolbar\">\n <span class=\"selection-count\">{{selectedItems.size}} selected</span>\n <button class=\"btn-danger\" (click)=\"removeSelectedItems()\">\n <i class=\"fa-solid fa-trash\"></i>\n Remove from List\n </button>\n </div>\n }\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"toggleSelectAll()\" />\n </th>\n <th class=\"col-name\">Name</th>\n <th class=\"col-id\">Record ID</th>\n <th class=\"col-added\">Added</th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredItems; track item) {\n <tr\n [class.selected]=\"selectedItems.has(item.detail.ID)\">\n <td class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedItems.has(item.detail.ID)\"\n (change)=\"toggleItemSelection(item)\" />\n </td>\n <td class=\"col-name\">\n <div class=\"item-name\" [class.loading]=\"item.isLoading\">\n <i [class]=\"entityIcon\" class=\"item-icon\"></i>\n <span>{{item.recordName}}</span>\n @if (item.isLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n </div>\n </td>\n <td class=\"col-id\">\n <code class=\"record-id\">{{item.detail.RecordID}}</code>\n </td>\n <td class=\"col-added\">\n {{item.detail.__mj_CreatedAt | date:'shortDate'}}\n </td>\n <td class=\"col-actions\">\n <button\n class=\"btn-icon\"\n (click)=\"openRecord(item)\"\n title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n <div class=\"items-footer\">\n <span class=\"items-count\">\n Showing {{filteredItems.length}} of {{stats.itemCount}} items\n </span>\n @if (totalPages > 1) {\n <div class=\"items-pager\">\n <button class=\"btn-icon\" [disabled]=\"itemsPage === 0\" (click)=\"goToPage(itemsPage - 1)\" title=\"Previous page\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n <span class=\"page-label\">Page {{itemsPage + 1}} of {{totalPages}}</span>\n <button class=\"btn-icon\" [disabled]=\"itemsPage >= totalPages - 1\" (click)=\"goToPage(itemsPage + 1)\" title=\"Next page\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- Sharing Section -->\n @if (activeSection === 'sharing') {\n <section class=\"section sharing-section\">\n <div class=\"section-header\">\n <h2>Sharing</h2>\n @if (isCurrentUserOwner()) {\n <div class=\"section-actions\">\n <button class=\"btn-primary\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-user-plus\"></i> Manage Sharing\n </button>\n </div>\n }\n </div>\n <!-- Sharing summary -->\n @if (stats.shareCount > 0 || stats.invitationCount > 0) {\n <div class=\"sharing-summary\">\n <div class=\"summary-card\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.shareCount}}</span>\n <span class=\"summary-label\">Active Share{{stats.shareCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n @if (stats.invitationCount > 0) {\n <div class=\"summary-card\">\n <div class=\"summary-icon pending\">\n <i class=\"fa-solid fa-envelope\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.invitationCount}}</span>\n <span class=\"summary-label\">Pending Invitation{{stats.invitationCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty state for no shares -->\n @if (stats.shareCount === 0 && stats.invitationCount === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-share-nodes\"\n Title=\"Not Shared Yet\"\n [Message]=\"isCurrentUserOwner() ? 'This list is private. Click "Manage Sharing" to share it with other users or roles.' : 'This list hasn\\'t been shared with anyone else.'\"\n [ActionText]=\"isCurrentUserOwner() ? 'Share This List' : ''\"\n ActionIcon=\"fa-solid fa-user-plus\"\n (Action)=\"openShareDialog()\" />\n }\n <!-- Read-only notice for non-owners -->\n @if (!isCurrentUserOwner() && (stats.shareCount > 0 || stats.invitationCount > 0)) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing settings.</span>\n </div>\n }\n </section>\n }\n\n <!-- Activity Section -->\n @if (activeSection === 'activity') {\n <section class=\"section activity-section\">\n <div class=\"section-header\">\n <h2>Activity</h2>\n </div>\n <div class=\"activity-timeline\">\n <div class=\"timeline-item\">\n <div class=\"timeline-icon\">\n <i class=\"fa-solid fa-edit\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List updated</p>\n <span class=\"timeline-date\">{{record.__mj_UpdatedAt | date:'medium'}}</span>\n </div>\n </div>\n <div class=\"timeline-item\">\n <div class=\"timeline-icon create\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List created</p>\n <span class=\"timeline-date\">{{record.__mj_CreatedAt | date:'medium'}}</span>\n </div>\n </div>\n </div>\n <div class=\"activity-info\">\n <p>Detailed activity tracking coming soon. You'll be able to see who added items, when shares were created, and more.</p>\n </div>\n </section>\n }\n\n <!-- Settings Section -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-header\">\n <h2>Settings</h2>\n </div>\n <div class=\"settings-form\">\n <mj-collapsible-panel\n SectionKey=\"listSettings\"\n SectionName=\"List Settings\"\n Icon=\"fa fa-cog\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CategoryID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n <mj-collapsible-panel\n SectionKey=\"systemInfo\"\n SectionName=\"System Information\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n </div>\n </section>\n }\n </main>\n</div>\n\n<!-- Add Records Dialog -->\n@if (showAddRecordsDialog) {\n <mj-dialog\n [Title]=\"'Add ' + entityDisplayName + ' to List'\"\n (Close)=\"closeAddRecordsDialog()\"\n [Visible]=\"showAddRecordsDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"550\">\n <div class=\"dialog-content add-records-dialog\">\n @if (addDialogSaving) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogSaving) {\n <!-- Search Input -->\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n [placeholder]=\"'Search ' + entityDisplayName + '...'\"\n [(ngModel)]=\"addRecordsSearchFilter\"\n (ngModelChange)=\"onAddRecordsSearchChange($event)\" />\n </div>\n <span class=\"search-hint\">Type at least 2 characters to search</span>\n </div>\n <!-- Records List -->\n <div class=\"records-list\">\n @if (addDialogLoading) {\n <div class=\"list-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length >= 2) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n [Title]=\"'No records found matching "' + addRecordsSearchFilter + '"'\" />\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length < 2) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-list\"\n Title=\"Search for records to add to this list\" />\n }\n @if (!addDialogLoading && addableRecords.length > 0) {\n <!-- Selection controls -->\n <div class=\"selection-controls\">\n <button mjButton variant=\"flat\" (click)=\"selectAllAddable()\">Select All</button>\n <button mjButton variant=\"flat\" (click)=\"deselectAllAddable()\">Deselect All</button>\n <span class=\"selection-info\">{{ selectedAddableRecords.length }} selected</span>\n </div>\n <!-- Records -->\n <div class=\"records-scroll\">\n @for (record of addableRecords; track record) {\n <div class=\"record-item\"\n [class.in-list]=\"record.isInList\"\n [class.selected]=\"record.isSelected\"\n (click)=\"toggleRecordSelection(record)\">\n <div class=\"record-checkbox\">\n @if (record.isInList) {\n <span class=\"fa-solid fa-check in-list-icon\" title=\"Already in list\"></span>\n }\n @if (!record.isInList) {\n <input type=\"checkbox\"\n [checked]=\"record.isSelected\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRecordSelection(record)\">\n }\n </div>\n <div class=\"record-name\">{{ record.Name }}</div>\n @if (record.isInList) {\n <span class=\"in-list-badge\">In List</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddRecords()\"\n [disabled]=\"addDialogSaving || selectedAddableRecords.length === 0\"\n variant=\"primary\">\n Add {{ selectedAddableRecords.length > 0 ? selectedAddableRecords.length : '' }} Record{{ selectedAddableRecords.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddRecordsDialog()\"\n [disabled]=\"addDialogSaving\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add From View Dialog -->\n@if (showAddFromViewDialog) {\n <mj-dialog\n Title=\"Add Records from Views\"\n (Close)=\"closeAddFromViewDialog()\"\n [Visible]=\"showAddFromViewDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"500\">\n <div class=\"dialog-content\">\n @if (showAddFromViewLoader && fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading records from views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && addFromViewTotal > 0 && !fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addFromViewTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && !fetchingRecordsToSave && addFromViewTotal === 0) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!showAddFromViewLoader) {\n <p class=\"dialog-instruction\">Select views to add their records to this list:</p>\n <div class=\"views-list\">\n @if (!userViews || userViews.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-folder-open\"\n Title=\"No saved views found for this entity\" />\n }\n @if (userViews && userViews.length > 0) {\n @for (view of userViews; track view) {\n <div class=\"view-item\"\n [class.selected]=\"isViewSelected(view)\"\n (click)=\"toggleViewSelection(view)\">\n <input type=\"checkbox\"\n [checked]=\"isViewSelected(view)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleViewSelection(view)\">\n <span class=\"fa-solid fa-table-list view-icon\"></span>\n <span class=\"view-name\">{{ view.Name }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddFromView()\"\n [disabled]=\"showAddFromViewLoader || userViewsToAdd.length === 0\"\n variant=\"primary\">\n Add from {{ userViewsToAdd.length }} View{{ userViewsToAdd.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddFromViewDialog()\"\n [disabled]=\"showAddFromViewLoader\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Share Dialog -->\n@if (showShareDialog && shareDialogConfig) {\n <mj-list-share-dialog\n [config]=\"shareDialogConfig\"\n [visible]=\"showShareDialog\"\n (complete)=\"onShareDialogComplete($event)\"\n (cancel)=\"onShareDialogCancel()\"\n (manageInvitations)=\"openInvitationsDialog()\"\n (viewAuditLog)=\"openAuditLogDialog()\">\n </mj-list-share-dialog>\n}\n\n<!-- Invitations Dialog (mockup 16). Opened from the share dialog's\n \"Manage Invitations\" button. Per-list — bound to record.ID. -->\n@if (showInvitationsDialog && record?.IsSaved) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Invitations — ' + record.Name\"\n (Close)=\"closeInvitationsDialog()\"\n [MinWidth]=\"640\"\n [Width]=\"900\"\n [Height]=\"640\">\n <div class=\"dialog-content invitations-dialog\">\n <mj-list-invitations\n [Provider]=\"ProviderToUse\"\n [ListID]=\"record.ID\"\n [ListName]=\"record.Name\">\n </mj-list-invitations>\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"closeInvitationsDialog()\" variant=\"outline\">Close</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Audit Log Dialog (mockup 18). Opened from the share dialog's\n \"View audit log\" link. Per-list — bound to record.ID. -->\n@if (showAuditLogDialog && record?.IsSaved) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Audit Log — ' + record.Name\"\n (Close)=\"closeAuditLogDialog()\"\n [MinWidth]=\"720\"\n [Width]=\"980\"\n [Height]=\"680\">\n <div class=\"dialog-content audit-log-dialog\">\n <mj-list-audit-log\n [Provider]=\"ProviderToUse\"\n [ListID]=\"record.ID\">\n </mj-list-audit-log>\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"closeAuditLogDialog()\" variant=\"outline\">Close</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"list-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Lists/list-form.component.ts","../../../../src/lib/custom/Lists/list-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\nimport { RegisterClass, UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJListFormComponent } from '../../generated/Entities/MJList/mjlist.form.component';\nimport { MJListEntity, MJListDetailEntity, MJListDetailEntityExtended, MJListCategoryEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';\nimport { CompositeKey, Metadata, RunView, RunViewResult, EntityInfo, LogError, LogStatus } from '@memberjunction/core';\nimport { ListShareDialogConfig, ListShareDialogResult, GetRecordDisplayField, IsTextSearchableField, FormatRecordDisplayValue } from '@memberjunction/ng-list-management';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\n\nexport type ListSection = 'overview' | 'items' | 'sharing' | 'activity' | 'settings';\n\nexport interface ListItemViewModel {\n detail: MJListDetailEntity; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n recordName: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isLoading: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\nexport interface ListStats {\n itemCount: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n shareCount: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n invitationCount: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n lastUpdated: Date | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Represents a record that can be added to a list\n */\nexport interface AddableRecord {\n ID: string;\n Name: string;\n isInList: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isSelected: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * World-class List form component that provides a rich exploration experience\n * for managing lists in the MemberJunction system.\n *\n * Features:\n * - Overview with visual stats and entity context\n * - Items grid with inline record navigation\n * - Sharing management (coming soon)\n * - Activity history\n * - Settings and configuration\n */\n@RegisterClass(BaseFormComponent, 'MJ: Lists')\n@Component({\n standalone: false,\n selector: 'mj-list-form-extended',\n templateUrl: './list-form.component.html',\n styleUrls: ['./list-form.component.css', '../../../shared/form-styles.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJListFormComponentExtended extends MJListFormComponent implements OnInit, OnDestroy {\n private sharedService = inject(SharedService);\n private confirmService = inject(MJConfirmService);\n\n public override record!: MJListEntity;\n\n // Navigation\n public ActiveSection: ListSection = 'overview';\n\n /** @deprecated Use {@link ActiveSection}. */\n public get activeSection(): ListSection {\n return this.ActiveSection;\n }\n /** @deprecated Use {@link ActiveSection}. */\n public set activeSection(value: ListSection) {\n this.ActiveSection = value;\n }\n public NavItems = [\n { id: 'overview' as ListSection, icon: 'fa-solid fa-house', label: 'Overview' },\n { id: 'items' as ListSection, icon: 'fa-solid fa-list', label: 'Items', badge: 0 },\n { id: 'sharing' as ListSection, icon: 'fa-solid fa-share-nodes', label: 'Sharing', badge: 0, disabled: false },\n { id: 'activity' as ListSection, icon: 'fa-solid fa-clock-rotate-left', label: 'Activity' },\n { id: 'settings' as ListSection, icon: 'fa-solid fa-gear', label: 'Settings' }\n ];\n\n /** @deprecated Use {@link NavItems}. */\n public get navItems() {\n return this.NavItems;\n }\n /** @deprecated Use {@link NavItems}. */\n public set navItems(value) {\n this.NavItems = value;\n }\n\n // Data\n public ListItems: ListItemViewModel[] = [];\n\n /** @deprecated Use {@link ListItems}. */\n public get listItems(): ListItemViewModel[] {\n return this.ListItems;\n }\n /** @deprecated Use {@link ListItems}. */\n public set listItems(value: ListItemViewModel[]) {\n this.ListItems = value;\n }\n public Categories: MJListCategoryEntity[] = [];\n\n /** @deprecated Use {@link Categories}. */\n public get categories(): MJListCategoryEntity[] {\n return this.Categories;\n }\n /** @deprecated Use {@link Categories}. */\n public set categories(value: MJListCategoryEntity[]) {\n this.Categories = value;\n }\n public entityInfo: EntityInfo | null = null; // case-violation-ok-legacy-back-compat: an ancestor class already declares the PascalCase name\n public Stats: ListStats = {\n itemCount: 0,\n shareCount: 0,\n invitationCount: 0,\n lastUpdated: null\n };\n\n /** @deprecated Use {@link Stats}. */\n public get stats(): ListStats {\n return this.Stats;\n }\n /** @deprecated Use {@link Stats}. */\n public set stats(value: ListStats) {\n this.Stats = value;\n }\n\n // Loading states\n public IsLoadingItems = false;\n\n /** @deprecated Use {@link IsLoadingItems}. */\n public get isLoadingItems() {\n return this.IsLoadingItems;\n }\n /** @deprecated Use {@link IsLoadingItems}. */\n public set isLoadingItems(value) {\n this.IsLoadingItems = value;\n }\n public IsLoadingStats = false;\n\n /** @deprecated Use {@link IsLoadingStats}. */\n public get isLoadingStats() {\n return this.IsLoadingStats;\n }\n /** @deprecated Use {@link IsLoadingStats}. */\n public set isLoadingStats(value) {\n this.IsLoadingStats = value;\n }\n public ExplorerError: string | null = null;\n\n /** @deprecated Use {@link ExplorerError}. */\n public get explorerError(): string | null {\n return this.ExplorerError;\n }\n /** @deprecated Use {@link ExplorerError}. */\n public set explorerError(value: string | null) {\n this.ExplorerError = value;\n }\n\n // Items section\n public ItemSearchTerm = '';\n\n /** @deprecated Use {@link ItemSearchTerm}. */\n public get itemSearchTerm() {\n return this.ItemSearchTerm;\n }\n /** @deprecated Use {@link ItemSearchTerm}. */\n public set itemSearchTerm(value) {\n this.ItemSearchTerm = value;\n }\n public SelectedItems = new Set<string>();\n\n /** @deprecated Use {@link SelectedItems}. */\n public get selectedItems() {\n return this.SelectedItems;\n }\n /** @deprecated Use {@link SelectedItems}. */\n public set selectedItems(value) {\n this.SelectedItems = value;\n }\n public IsSelectAllChecked = false;\n\n /** @deprecated Use {@link IsSelectAllChecked}. */\n public get isSelectAllChecked() {\n return this.IsSelectAllChecked;\n }\n /** @deprecated Use {@link IsSelectAllChecked}. */\n public set isSelectAllChecked(value) {\n this.IsSelectAllChecked = value;\n }\n\n // Items pagination — the Items grid loads one page at a time so large\n // lists (thousands of members) don't pull the entire membership into the\n // browser. Display-name resolution is likewise batched per page.\n public ItemsPage = 0;\n\n /** @deprecated Use {@link ItemsPage}. */\n public get itemsPage() {\n return this.ItemsPage;\n }\n /** @deprecated Use {@link ItemsPage}. */\n public set itemsPage(value) {\n this.ItemsPage = value;\n }\n public readonly ItemsPageSize = 100;\n\n /** @deprecated Use {@link ItemsPageSize}. */\n public get itemsPageSize() {\n return this.ItemsPageSize;\n }\n\n // Edit state\n public IsEditingName = false;\n\n /** @deprecated Use {@link IsEditingName}. */\n public get isEditingName() {\n return this.IsEditingName;\n }\n /** @deprecated Use {@link IsEditingName}. */\n public set isEditingName(value) {\n this.IsEditingName = value;\n }\n public IsEditingDescription = false;\n\n /** @deprecated Use {@link IsEditingDescription}. */\n public get isEditingDescription() {\n return this.IsEditingDescription;\n }\n /** @deprecated Use {@link IsEditingDescription}. */\n public set isEditingDescription(value) {\n this.IsEditingDescription = value;\n }\n public EditingName = '';\n\n /** @deprecated Use {@link EditingName}. */\n public get editingName() {\n return this.EditingName;\n }\n /** @deprecated Use {@link EditingName}. */\n public set editingName(value) {\n this.EditingName = value;\n }\n public EditingDescription = '';\n\n /** @deprecated Use {@link EditingDescription}. */\n public get editingDescription() {\n return this.EditingDescription;\n }\n /** @deprecated Use {@link EditingDescription}. */\n public set editingDescription(value) {\n this.EditingDescription = value;\n }\n\n // Add Records dialog\n public ShowAddRecordsDialog = false;\n\n /** @deprecated Use {@link ShowAddRecordsDialog}. */\n public get showAddRecordsDialog() {\n return this.ShowAddRecordsDialog;\n }\n /** @deprecated Use {@link ShowAddRecordsDialog}. */\n public set showAddRecordsDialog(value) {\n this.ShowAddRecordsDialog = value;\n }\n public AddDialogLoading = false;\n\n /** @deprecated Use {@link AddDialogLoading}. */\n public get addDialogLoading() {\n return this.AddDialogLoading;\n }\n /** @deprecated Use {@link AddDialogLoading}. */\n public set addDialogLoading(value) {\n this.AddDialogLoading = value;\n }\n public AddDialogSaving = false;\n\n /** @deprecated Use {@link AddDialogSaving}. */\n public get addDialogSaving() {\n return this.AddDialogSaving;\n }\n /** @deprecated Use {@link AddDialogSaving}. */\n public set addDialogSaving(value) {\n this.AddDialogSaving = value;\n }\n public AddableRecords: AddableRecord[] = [];\n\n /** @deprecated Use {@link AddableRecords}. */\n public get addableRecords(): AddableRecord[] {\n return this.AddableRecords;\n }\n /** @deprecated Use {@link AddableRecords}. */\n public set addableRecords(value: AddableRecord[]) {\n this.AddableRecords = value;\n }\n public AddRecordsSearchFilter = '';\n\n /** @deprecated Use {@link AddRecordsSearchFilter}. */\n public get addRecordsSearchFilter() {\n return this.AddRecordsSearchFilter;\n }\n /** @deprecated Use {@link AddRecordsSearchFilter}. */\n public set addRecordsSearchFilter(value) {\n this.AddRecordsSearchFilter = value;\n }\n public ExistingListDetailIds = new Set<string>();\n\n /** @deprecated Use {@link ExistingListDetailIds}. */\n public get existingListDetailIds() {\n return this.ExistingListDetailIds;\n }\n /** @deprecated Use {@link ExistingListDetailIds}. */\n public set existingListDetailIds(value) {\n this.ExistingListDetailIds = value;\n }\n public AddProgress = 0;\n\n /** @deprecated Use {@link AddProgress}. */\n public get addProgress() {\n return this.AddProgress;\n }\n /** @deprecated Use {@link AddProgress}. */\n public set addProgress(value) {\n this.AddProgress = value;\n }\n public AddTotal = 0;\n\n /** @deprecated Use {@link AddTotal}. */\n public get addTotal() {\n return this.AddTotal;\n }\n /** @deprecated Use {@link AddTotal}. */\n public set addTotal(value) {\n this.AddTotal = value;\n }\n private searchSubject = new Subject<string>();\n\n // Add From View dialog\n public ShowAddFromViewDialog = false;\n\n /** @deprecated Use {@link ShowAddFromViewDialog}. */\n public get showAddFromViewDialog() {\n return this.ShowAddFromViewDialog;\n }\n /** @deprecated Use {@link ShowAddFromViewDialog}. */\n public set showAddFromViewDialog(value) {\n this.ShowAddFromViewDialog = value;\n }\n public ShowAddFromViewLoader = false;\n\n /** @deprecated Use {@link ShowAddFromViewLoader}. */\n public get showAddFromViewLoader() {\n return this.ShowAddFromViewLoader;\n }\n /** @deprecated Use {@link ShowAddFromViewLoader}. */\n public set showAddFromViewLoader(value) {\n this.ShowAddFromViewLoader = value;\n }\n public UserViews: MJUserViewEntityExtended[] | null = null;\n\n /** @deprecated Use {@link UserViews}. */\n public get userViews(): MJUserViewEntityExtended[] | null {\n return this.UserViews;\n }\n /** @deprecated Use {@link UserViews}. */\n public set userViews(value: MJUserViewEntityExtended[] | null) {\n this.UserViews = value;\n }\n public UserViewsToAdd: MJUserViewEntityExtended[] = [];\n\n /** @deprecated Use {@link UserViewsToAdd}. */\n public get userViewsToAdd(): MJUserViewEntityExtended[] {\n return this.UserViewsToAdd;\n }\n /** @deprecated Use {@link UserViewsToAdd}. */\n public set userViewsToAdd(value: MJUserViewEntityExtended[]) {\n this.UserViewsToAdd = value;\n }\n /**\n * Normalized-UUID set of the IDs in {@link userViewsToAdd}, kept in sync with that\n * array. Lets {@link isViewSelected} (bound per-row in the dialog's @for, ~2x/row)\n * do an O(1) lookup instead of scanning the array with UUIDsEqual on every check.\n */\n private userViewsToAddIds: Set<string> = new Set<string>();\n public AddFromViewProgress = 0;\n\n /** @deprecated Use {@link AddFromViewProgress}. */\n public get addFromViewProgress() {\n return this.AddFromViewProgress;\n }\n /** @deprecated Use {@link AddFromViewProgress}. */\n public set addFromViewProgress(value) {\n this.AddFromViewProgress = value;\n }\n public AddFromViewTotal = 0;\n\n /** @deprecated Use {@link AddFromViewTotal}. */\n public get addFromViewTotal() {\n return this.AddFromViewTotal;\n }\n /** @deprecated Use {@link AddFromViewTotal}. */\n public set addFromViewTotal(value) {\n this.AddFromViewTotal = value;\n }\n public FetchingRecordsToSave = false;\n\n /** @deprecated Use {@link FetchingRecordsToSave}. */\n public get fetchingRecordsToSave() {\n return this.FetchingRecordsToSave;\n }\n /** @deprecated Use {@link FetchingRecordsToSave}. */\n public set fetchingRecordsToSave(value) {\n this.FetchingRecordsToSave = value;\n }\n\n // Share dialog\n public ShowShareDialog = false;\n\n /** @deprecated Use {@link ShowShareDialog}. */\n public get showShareDialog() {\n return this.ShowShareDialog;\n }\n /** @deprecated Use {@link ShowShareDialog}. */\n public set showShareDialog(value) {\n this.ShowShareDialog = value;\n }\n public ShareDialogConfig: ListShareDialogConfig | null = null;\n\n /** @deprecated Use {@link ShareDialogConfig}. */\n public get shareDialogConfig(): ListShareDialogConfig | null {\n return this.ShareDialogConfig;\n }\n /** @deprecated Use {@link ShareDialogConfig}. */\n public set shareDialogConfig(value: ListShareDialogConfig | null) {\n this.ShareDialogConfig = value;\n }\n\n // Invitations / audit log dialogs — opened from the share dialog.\n public ShowInvitationsDialog = false;\n\n /** @deprecated Use {@link ShowInvitationsDialog}. */\n public get showInvitationsDialog() {\n return this.ShowInvitationsDialog;\n }\n /** @deprecated Use {@link ShowInvitationsDialog}. */\n public set showInvitationsDialog(value) {\n this.ShowInvitationsDialog = value;\n }\n public ShowAuditLogDialog = false;\n\n /** @deprecated Use {@link ShowAuditLogDialog}. */\n public get showAuditLogDialog() {\n return this.ShowAuditLogDialog;\n }\n /** @deprecated Use {@link ShowAuditLogDialog}. */\n public set showAuditLogDialog(value) {\n this.ShowAuditLogDialog = value;\n }\n\n private destroy$ = new Subject<void>();\n private get metadata() { return this.ProviderToUse; }\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Set up search debounce\n this.searchSubject\n .pipe(debounceTime(300), takeUntil(this.destroy$))\n .subscribe((searchText) => this.searchRecords(searchText));\n\n await this.loadExplorerData();\n }\n\n // Helper to show notifications using SharedService's deprecated method\n private showNotification(message: string, style: 'success' | 'error' | 'info' = 'info', duration: number = 3000): void {\n this.sharedService.CreateSimpleNotification(message, style, duration);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async loadExplorerData(): Promise<void> {\n try {\n // Load entity info for context\n if (this.record?.EntityID) {\n this.entityInfo = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.record.EntityID)) || null;\n }\n\n // Load categories for dropdown\n await this.loadCategories();\n\n // Load items and stats in parallel\n await Promise.all([\n this.loadItems(),\n this.loadStats()\n ]);\n\n this.updateNavBadges();\n } catch (error) {\n console.error('Error loading list data:', error);\n this.ExplorerError = 'Failed to load list data';\n } finally {\n this.cdr.detectChanges();\n }\n }\n\n private async loadCategories(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListCategoryEntity>({\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (result.Success) {\n this.Categories = result.Results;\n }\n }\n\n private async loadItems(page: number = 0): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.IsLoadingItems = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n StartRow: page * this.ItemsPageSize,\n MaxRows: this.ItemsPageSize,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.ItemsPage = page;\n this.ListItems = result.Results.map(detail => ({\n detail,\n recordName: detail.RecordID || 'Loading...',\n isLoading: true\n }));\n this.SelectedItems.clear();\n this.IsSelectAllChecked = false;\n\n // Resolve display names for this page in one batched query\n await this.loadRecordNames();\n }\n } catch (error) {\n console.error('Error loading list items:', error);\n } finally {\n this.IsLoadingItems = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Resolves display names for the current page of items with a single\n * batched `PK IN (...)` query per 250 items — never one query per item.\n */\n private async loadRecordNames(): Promise<void> {\n const finish = () => {\n for (const item of this.ListItems) item.isLoading = false;\n this.cdr.detectChanges();\n };\n\n if (!this.entityInfo || this.ListItems.length === 0) {\n finish();\n return;\n }\n\n // NameField when the entity has one; otherwise the fallback field\n // (first non-PK/non-FK/non-system field), shown as \"<id> — <value>\"\n const displayField = GetRecordDisplayField(this.entityInfo);\n if (!displayField.Field) {\n // Entity has only key fields — the record ID is the best label available\n for (const item of this.ListItems) {\n item.recordName = item.detail.RecordID || 'Unknown';\n }\n finish();\n return;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const entityInfo = this.entityInfo;\n // Keyed by the compact key segment (raw value for a single-column key, \"F1|v1||F2|v2\" for a\n // composite one) — the same form ListDetail.RecordID stores, so the lookups below line up.\n const valueMap = new Map<string, unknown>();\n const ids = this.ListItems\n .map(i => i.detail.RecordID)\n .filter((id): id is string => !!id);\n\n const CHUNK_SIZE = 250;\n for (let start = 0; start < ids.length; start += CHUNK_SIZE) {\n const chunk = ids.slice(start, start + CHUNK_SIZE);\n try {\n const result = await rv.RunView({\n EntityName: entityInfo.Name,\n ExtraFilter: this.buildRecordIdFilter(entityInfo, chunk),\n Fields: [...entityInfo.PrimaryKeys.map(pk => pk.Name), displayField.Field.Name],\n ResultType: 'simple'\n });\n if (result.Success) {\n for (const row of result.Results as Array<Record<string, unknown>>) {\n const key = CompositeKey.FromEntityRecord(entityInfo, row).ToCompactURLSegment();\n valueMap.set(NormalizeUUID(key), row[displayField.Field.Name]);\n }\n }\n } catch (error) {\n // Fall through — unresolved items display their RecordID\n }\n }\n\n for (const item of this.ListItems) {\n const id = item.detail.RecordID || 'Unknown';\n const value = item.detail.RecordID ? valueMap.get(NormalizeUUID(item.detail.RecordID)) : undefined;\n item.recordName = FormatRecordDisplayValue(id, value, displayField);\n }\n finish();\n }\n\n /**\n * Predicate selecting the records identified by compact key segments. A single-column key\n * collapses to one `<pk> IN (...)`; a composite key expands each segment to its full\n * `(F1='v1' AND F2='v2')` predicate and ORs them — an IN on the first column alone would\n * silently match the wrong rows.\n */\n private buildRecordIdFilter(entityInfo: EntityInfo, recordIds: string[]): string {\n if (entityInfo.PrimaryKeys.length === 1) {\n const inList = recordIds.map(id => `'${id.replace(/'/g, \"''\")}'`).join(',');\n return `${entityInfo.FirstPrimaryKey.Name} IN (${inList})`; // first-pk-ok: guarded by PrimaryKeys.length === 1 above\n }\n return recordIds\n .map(id => `(${CompositeKey.FromURLSegment(entityInfo, id).ToWhereClause()})`)\n .join(' OR ');\n }\n\n // === Items pagination ===\n\n public get TotalPages(): number {\n return Math.max(1, Math.ceil(this.Stats.itemCount / this.ItemsPageSize));\n }\n\n /** @deprecated Use {@link TotalPages}. */\n public get totalPages(): number {\n return this.TotalPages;\n }\n\n public async GoToPage(page: number): Promise<void> {\n if (page < 0 || page >= this.TotalPages || page === this.ItemsPage) return;\n await this.loadItems(page);\n }\n\n /** @deprecated Use {@link GoToPage}. */\n public async goToPage(page: number): Promise<void> {\n return this.GoToPage(page);\n }\n\n private async loadStats(): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.IsLoadingStats = true;\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [itemsResult, sharesResult, invitationsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Shares',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Invitations',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n }\n ]);\n\n this.Stats = {\n itemCount: itemsResult.Success ? itemsResult.TotalRowCount : 0,\n shareCount: sharesResult.Success ? sharesResult.TotalRowCount : 0,\n invitationCount: invitationsResult.Success ? invitationsResult.TotalRowCount : 0,\n lastUpdated: this.record.__mj_UpdatedAt\n };\n } catch (error) {\n console.error('Error loading stats:', error);\n } finally {\n this.IsLoadingStats = false;\n this.cdr.detectChanges();\n }\n }\n\n private updateNavBadges(): void {\n this.NavItems = this.NavItems.map(item => {\n switch (item.id) {\n case 'items':\n return { ...item, badge: this.Stats.itemCount };\n case 'sharing':\n return { ...item, badge: this.Stats.shareCount + this.Stats.invitationCount };\n default:\n return item;\n }\n });\n }\n\n // === Navigation ===\n\n public SetActiveSection(section: ListSection): void {\n const navItem = this.NavItems.find(n => n.id === section);\n if (navItem?.disabled) return;\n\n this.ActiveSection = section;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SetActiveSection}. */\n public setActiveSection(section: ListSection): void {\n return this.SetActiveSection(section);\n }\n\n // === Items Management ===\n\n public get FilteredItems(): ListItemViewModel[] {\n if (!this.ItemSearchTerm) return this.ListItems;\n\n const term = this.ItemSearchTerm.toLowerCase();\n return this.ListItems.filter(item =>\n item.recordName.toLowerCase().includes(term) ||\n item.detail.RecordID?.toLowerCase().includes(term)\n );\n }\n\n /** @deprecated Use {@link FilteredItems}. */\n public get filteredItems(): ListItemViewModel[] {\n return this.FilteredItems;\n }\n\n public ToggleItemSelection(item: ListItemViewModel): void {\n const id = item.detail.ID;\n if (this.SelectedItems.has(id)) {\n this.SelectedItems.delete(id);\n } else {\n this.SelectedItems.add(id);\n }\n this.updateSelectAllState();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleItemSelection}. */\n public toggleItemSelection(item: ListItemViewModel): void {\n return this.ToggleItemSelection(item);\n }\n\n public ToggleSelectAll(): void {\n if (this.IsSelectAllChecked) {\n this.SelectedItems.clear();\n } else {\n for (const item of this.FilteredItems) {\n this.SelectedItems.add(item.detail.ID);\n }\n }\n this.IsSelectAllChecked = !this.IsSelectAllChecked;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleSelectAll}. */\n public toggleSelectAll(): void {\n return this.ToggleSelectAll();\n }\n\n private updateSelectAllState(): void {\n this.IsSelectAllChecked = this.FilteredItems.length > 0 &&\n this.FilteredItems.every(item => this.SelectedItems.has(item.detail.ID));\n }\n\n public async RemoveSelectedItems(): Promise<void> {\n if (this.SelectedItems.size === 0) return;\n\n const count = this.SelectedItems.size;\n const confirmMessage = `Remove ${count} item${count > 1 ? 's' : ''} from this list?`;\n\n if (!(await this.confirmService.ConfirmDelete({ message: confirmMessage }))) return;\n\n try {\n // Queue all deletes in one TransactionGroup — one round trip\n // instead of one per selected item. Deliberately atomic (unlike\n // the server bulk paths, which trade atomicity for per-record\n // error isolation): if Submit() fails, the transaction rolled\n // back and NO rows were removed.\n const tg = await this.metadata.CreateTransactionGroup();\n let queued = 0;\n let failedToQueue = 0;\n for (const id of this.SelectedItems) {\n const item = this.ListItems.find(i => UUIDsEqual(i.detail.ID, id));\n if (item) {\n item.detail.TransactionGroup = tg;\n // With a TransactionGroup set, Delete() returns true once\n // enqueued; false means a pre-enqueue failure (validation/\n // permission) and the row never joined the transaction.\n if (await item.detail.Delete()) {\n queued++;\n } else {\n failedToQueue++;\n LogError(`Failed to queue list item removal: ${item.detail.LatestResult?.CompleteMessage ?? 'unknown error'}`);\n }\n }\n }\n const success = queued === 0 || await tg.Submit();\n if (!success) {\n this.showNotification('Error removing items from list', 'error', 4000);\n return;\n }\n\n if (failedToQueue > 0) {\n this.showNotification(\n `Removed ${queued} item${queued === 1 ? '' : 's'} from list; ${failedToQueue} failed`,\n 'error',\n 4000\n );\n } else {\n this.showNotification(\n `Removed ${count} item${count > 1 ? 's' : ''} from list`,\n 'success',\n 3000\n );\n }\n\n this.SelectedItems.clear();\n await this.loadStats();\n await this.loadItems(Math.min(this.ItemsPage, this.TotalPages - 1));\n this.updateNavBadges();\n } catch (error) {\n console.error('Error removing items:', error);\n this.showNotification(\n 'Error removing items from list',\n 'error',\n 4000\n );\n }\n }\n\n /** @deprecated Use {@link RemoveSelectedItems}. */\n public async removeSelectedItems(): Promise<void> {\n return this.RemoveSelectedItems();\n }\n\n public OpenRecord(item: ListItemViewModel): void {\n if (!this.entityInfo || !item.detail.RecordID) return;\n\n // ListDetail.RecordID is the compact CompositeKey segment: the raw value for a single-column\n // key (whatever the column is called), \"F1|v1||F2|v2\" for a composite key. FromURLSegment\n // reads both against this list's entity metadata — `FromID` assumed the column was `ID`.\n SharedService.Instance.OpenEntityRecord(this.entityInfo.Name, CompositeKey.FromURLSegment(this.entityInfo, item.detail.RecordID));\n }\n\n /** @deprecated Use {@link OpenRecord}. */\n public openRecord(item: ListItemViewModel): void {\n return this.OpenRecord(item);\n }\n\n // === Inline Editing ===\n\n public StartEditingName(): void {\n this.EditingName = this.record.Name;\n this.IsEditingName = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link StartEditingName}. */\n public startEditingName(): void {\n return this.StartEditingName();\n }\n\n public async SaveNameEdit(): Promise<void> {\n if (!this.EditingName.trim()) {\n this.CancelNameEdit();\n return;\n }\n\n this.record.Name = this.EditingName.trim();\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Name updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update name', 'error', 3000);\n }\n\n this.IsEditingName = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SaveNameEdit}. */\n public async saveNameEdit(): Promise<void> {\n return this.SaveNameEdit();\n }\n\n public CancelNameEdit(): void {\n this.IsEditingName = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CancelNameEdit}. */\n public cancelNameEdit(): void {\n return this.CancelNameEdit();\n }\n\n public StartEditingDescription(): void {\n this.EditingDescription = this.record.Description || '';\n this.IsEditingDescription = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link StartEditingDescription}. */\n public startEditingDescription(): void {\n return this.StartEditingDescription();\n }\n\n public async SaveDescriptionEdit(): Promise<void> {\n this.record.Description = this.EditingDescription.trim() || null;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Description updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update description', 'error', 3000);\n }\n\n this.IsEditingDescription = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SaveDescriptionEdit}. */\n public async saveDescriptionEdit(): Promise<void> {\n return this.SaveDescriptionEdit();\n }\n\n public CancelDescriptionEdit(): void {\n this.IsEditingDescription = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CancelDescriptionEdit}. */\n public cancelDescriptionEdit(): void {\n return this.CancelDescriptionEdit();\n }\n\n // === Helpers ===\n\n public get EntityDisplayName(): string {\n return this.entityInfo?.DisplayName || this.entityInfo?.Name || this.record?.Entity || 'Unknown';\n }\n\n /** @deprecated Use {@link EntityDisplayName}. */\n public get entityDisplayName(): string {\n return this.EntityDisplayName;\n }\n\n public get EntityIcon(): string {\n return this.entityInfo?.Icon || 'fa-solid fa-table';\n }\n\n /** @deprecated Use {@link EntityIcon}. */\n public get entityIcon(): string {\n return this.EntityIcon;\n }\n\n public get CategoryName(): string {\n if (!this.record?.CategoryID) return 'Uncategorized';\n const category = this.Categories.find(c => UUIDsEqual(c.ID, this.record.CategoryID));\n return category?.Name || 'Unknown';\n }\n\n /** @deprecated Use {@link CategoryName}. */\n public get categoryName(): string {\n return this.CategoryName;\n }\n\n public get FormattedItemCount(): string {\n return this.Stats.itemCount.toLocaleString();\n }\n\n /** @deprecated Use {@link FormattedItemCount}. */\n public get formattedItemCount(): string {\n return this.FormattedItemCount;\n }\n\n public get FormattedLastUpdated(): string {\n if (!this.Stats.lastUpdated) return 'Never';\n const date = new Date(this.Stats.lastUpdated);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n return date.toLocaleDateString();\n }\n\n /** @deprecated Use {@link FormattedLastUpdated}. */\n public get formattedLastUpdated(): string {\n return this.FormattedLastUpdated;\n }\n\n public GetOwnerName(): string {\n return this.record?.User || 'Unknown';\n }\n\n /** @deprecated Use {@link GetOwnerName}. */\n public getOwnerName(): string {\n return this.GetOwnerName();\n }\n\n public IsCurrentUserOwner(): boolean {\n return UUIDsEqual(this.record?.UserID, this.metadata.CurrentUser?.ID);\n }\n\n /** @deprecated Use {@link IsCurrentUserOwner}. */\n public isCurrentUserOwner(): boolean {\n return this.IsCurrentUserOwner();\n }\n\n public async OnCategoryChange(categoryId: string | null): Promise<void> {\n this.record.CategoryID = categoryId;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Category updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update category', 'error', 3000);\n }\n\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnCategoryChange}. */\n public async onCategoryChange(categoryId: string | null): Promise<void> {\n return this.OnCategoryChange(categoryId);\n }\n\n public async RefreshItems(): Promise<void> {\n await this.loadStats();\n await this.loadItems(Math.min(this.ItemsPage, this.TotalPages - 1));\n this.updateNavBadges();\n }\n\n /** @deprecated Use {@link RefreshItems}. */\n public async refreshItems(): Promise<void> {\n return this.RefreshItems();\n }\n\n // ==========================================\n // Add Records Dialog\n // ==========================================\n\n public async OpenAddRecordsDialog(): Promise<void> {\n this.ShowAddRecordsDialog = true;\n this.AddableRecords = [];\n this.AddRecordsSearchFilter = '';\n this.AddDialogLoading = true;\n this.AddDialogSaving = false;\n\n // Load existing list detail IDs to mark which records are already in the list\n await this.loadExistingListDetailIds();\n this.AddDialogLoading = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenAddRecordsDialog}. */\n public async openAddRecordsDialog(): Promise<void> {\n return this.OpenAddRecordsDialog();\n }\n\n public CloseAddRecordsDialog(): void {\n this.ShowAddRecordsDialog = false;\n this.AddableRecords = [];\n this.AddRecordsSearchFilter = '';\n this.ExistingListDetailIds.clear();\n this.AddDialogSaving = false;\n this.AddProgress = 0;\n this.AddTotal = 0;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseAddRecordsDialog}. */\n public closeAddRecordsDialog(): void {\n return this.CloseAddRecordsDialog();\n }\n\n private async loadExistingListDetailIds(): Promise<void> {\n if (!this.record) return;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple'\n }, this.metadata.CurrentUser);\n\n if (result.Success) {\n this.ExistingListDetailIds = new Set(result.Results.map(r => NormalizeUUID(r.RecordID)));\n }\n }\n\n public OnAddRecordsSearchChange(value: string): void {\n this.AddRecordsSearchFilter = value;\n this.searchSubject.next(value);\n }\n\n /** @deprecated Use {@link OnAddRecordsSearchChange}. */\n public onAddRecordsSearchChange(value: string): void {\n return this.OnAddRecordsSearchChange(value);\n }\n\n private async searchRecords(searchText: string): Promise<void> {\n if (!this.record || !searchText || searchText.length < 2) {\n this.AddableRecords = [];\n this.cdr.detectChanges();\n return;\n }\n\n this.AddDialogLoading = true;\n this.cdr.detectChanges();\n\n const sourceEntityInfo = this.metadata.EntityByID(this.record.EntityID);\n if (!sourceEntityInfo) {\n this.AddDialogLoading = false;\n this.cdr.detectChanges();\n return;\n }\n\n // NameField when present; otherwise the fallback display field\n // (first non-PK/non-FK/non-system field). Text-typed fields also\n // drive the LIKE search so name-less entities remain searchable.\n const displayField = GetRecordDisplayField(sourceEntityInfo);\n\n let filter: string | undefined;\n if (displayField.Field && IsTextSearchableField(displayField.Field)) {\n filter = `${displayField.Field.Name} LIKE '%${searchText.replace(/'/g, \"''\")}%'`;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result: RunViewResult = await rv.RunView({\n EntityName: this.record.Entity,\n ExtraFilter: filter,\n MaxRows: 100,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.AddableRecords = result.Results.map((record: Record<string, unknown>) => {\n // Compact key segment (raw value, or \"F1|v1||F2|v2\" for a composite key) — the form ListDetail.RecordID stores\n const recordId = CompositeKey.FromEntityRecord(sourceEntityInfo, record).ToCompactURLSegment();\n return {\n ID: recordId,\n Name: displayField.Field\n ? FormatRecordDisplayValue(recordId, record[displayField.Field.Name], displayField)\n : recordId,\n isInList: this.ExistingListDetailIds.has(NormalizeUUID(recordId)),\n isSelected: false\n };\n });\n }\n\n this.AddDialogLoading = false;\n this.cdr.detectChanges();\n }\n\n public ToggleRecordSelection(record: AddableRecord): void {\n if (record.isInList) return; // Can't select records already in list\n record.isSelected = !record.isSelected;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleRecordSelection}. */\n public toggleRecordSelection(record: AddableRecord): void {\n return this.ToggleRecordSelection(record);\n }\n\n public get SelectedAddableRecords(): AddableRecord[] {\n return this.AddableRecords.filter(r => r.isSelected);\n }\n\n /** @deprecated Use {@link SelectedAddableRecords}. */\n public get selectedAddableRecords(): AddableRecord[] {\n return this.SelectedAddableRecords;\n }\n\n public SelectAllAddable(): void {\n this.AddableRecords.forEach(r => {\n if (!r.isInList) r.isSelected = true;\n });\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SelectAllAddable}. */\n public selectAllAddable(): void {\n return this.SelectAllAddable();\n }\n\n public DeselectAllAddable(): void {\n this.AddableRecords.forEach(r => r.isSelected = false);\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link DeselectAllAddable}. */\n public deselectAllAddable(): void {\n return this.DeselectAllAddable();\n }\n\n public async ConfirmAddRecords(): Promise<void> {\n const recordsToAdd = this.SelectedAddableRecords;\n if (recordsToAdd.length === 0 || !this.record) return;\n\n this.AddDialogSaving = true;\n this.AddTotal = recordsToAdd.length;\n this.AddProgress = 0;\n this.cdr.detectChanges();\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const record of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = record.ID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.AddProgress = this.AddTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.CloseAddRecordsDialog();\n await this.RefreshItems();\n } else {\n LogError('Error adding records to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.AddDialogSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link ConfirmAddRecords}. */\n public async confirmAddRecords(): Promise<void> {\n return this.ConfirmAddRecords();\n }\n\n // ==========================================\n // Add From View Dialog\n // ==========================================\n\n public async OpenAddFromViewDialog(): Promise<void> {\n this.ShowAddFromViewDialog = true;\n this.UserViewsToAdd = [];\n this.userViewsToAddIds.clear();\n this.cdr.detectChanges();\n\n if (!this.UserViews) {\n await this.loadEntityViews();\n }\n }\n\n /** @deprecated Use {@link OpenAddFromViewDialog}. */\n public async openAddFromViewDialog(): Promise<void> {\n return this.OpenAddFromViewDialog();\n }\n\n public CloseAddFromViewDialog(): void {\n this.ShowAddFromViewDialog = false;\n this.UserViewsToAdd = [];\n this.userViewsToAddIds.clear();\n this.ShowAddFromViewLoader = false;\n this.AddFromViewProgress = 0;\n this.AddFromViewTotal = 0;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseAddFromViewDialog}. */\n public closeAddFromViewDialog(): void {\n return this.CloseAddFromViewDialog();\n }\n\n private async loadEntityViews(): Promise<void> {\n if (!this.record || !this.record.Entity) return;\n\n this.ShowAddFromViewLoader = true;\n this.cdr.detectChanges();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const runViewResult = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `UserID = '${this.metadata.CurrentUser.ID}' AND EntityID = '${this.record.EntityID}'`,\n ResultType: 'entity_object'\n }, this.metadata.CurrentUser);\n\n if (!runViewResult.Success) {\n LogError(`Error loading User Views for entity ${this.record.Entity}`);\n } else {\n this.UserViews = runViewResult.Results;\n }\n\n this.ShowAddFromViewLoader = false;\n this.cdr.detectChanges();\n }\n\n public ToggleViewSelection(view: MJUserViewEntityExtended): void {\n const index = this.UserViewsToAdd.findIndex(v => UUIDsEqual(v.ID, view.ID));\n if (index >= 0) {\n this.UserViewsToAdd.splice(index, 1);\n this.userViewsToAddIds.delete(NormalizeUUID(view.ID));\n } else {\n this.UserViewsToAdd.push(view);\n this.userViewsToAddIds.add(NormalizeUUID(view.ID));\n }\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link ToggleViewSelection}. */\n public toggleViewSelection(view: MJUserViewEntityExtended): void {\n return this.ToggleViewSelection(view);\n }\n\n public IsViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.userViewsToAddIds.has(NormalizeUUID(view.ID));\n }\n\n /** @deprecated Use {@link IsViewSelected}. */\n public isViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.IsViewSelected(view);\n }\n\n public async ConfirmAddFromView(): Promise<void> {\n if (!this.record || this.UserViewsToAdd.length === 0) return;\n\n this.ShowAddFromViewLoader = true;\n this.FetchingRecordsToSave = true;\n this.cdr.detectChanges();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Collect all unique record IDs from selected views\n const recordIdSet = new Set<string>();\n\n for (const userView of this.UserViewsToAdd) {\n const runViewResult = await rv.RunView({\n ViewID: userView.ID,\n ViewEntity: userView,\n Fields: ['ID']\n }, this.metadata.CurrentUser);\n\n if (runViewResult.Success) {\n const records = runViewResult.Results as Array<Record<string, string>>;\n records.forEach(r => recordIdSet.add(NormalizeUUID(r.ID)));\n }\n }\n\n // Filter out records already in the list\n await this.loadExistingListDetailIds();\n const recordsToAdd = [...recordIdSet].filter(id => !this.ExistingListDetailIds.has(id));\n\n this.AddFromViewTotal = recordsToAdd.length;\n this.AddFromViewProgress = 0;\n this.FetchingRecordsToSave = false;\n this.cdr.detectChanges();\n\n if (recordsToAdd.length === 0) {\n this.showNotification('All records already in list', 'info', 2500);\n this.ShowAddFromViewLoader = false;\n this.cdr.detectChanges();\n return;\n }\n\n LogStatus(`Adding ${recordsToAdd.length} records to list`);\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const recordID of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = recordID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.AddFromViewProgress = this.AddFromViewTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.CloseAddFromViewDialog();\n await this.RefreshItems();\n } else {\n LogError('Error adding records from view to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.ShowAddFromViewLoader = false;\n this.cdr.detectChanges();\n }\n }\n\n /** @deprecated Use {@link ConfirmAddFromView}. */\n public async confirmAddFromView(): Promise<void> {\n return this.ConfirmAddFromView();\n }\n\n // ==========================================\n // Share Dialog\n // ==========================================\n\n public OpenShareDialog(): void {\n if (!this.record?.IsSaved) return;\n\n this.ShareDialogConfig = {\n listId: this.record.ID,\n listName: this.record.Name,\n currentUserId: this.metadata.CurrentUser.ID,\n isOwner: this.IsCurrentUserOwner()\n };\n this.ShowShareDialog = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenShareDialog}. */\n public openShareDialog(): void {\n return this.OpenShareDialog();\n }\n\n public OnShareDialogComplete(result: ListShareDialogResult): void {\n this.ShowShareDialog = false;\n this.ShareDialogConfig = null;\n\n if (result.action === 'apply') {\n // Refresh stats to update share counts\n this.loadStats().then(() => {\n this.updateNavBadges();\n this.cdr.detectChanges();\n });\n }\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnShareDialogComplete}. */\n public onShareDialogComplete(result: ListShareDialogResult): void {\n return this.OnShareDialogComplete(result);\n }\n\n public OnShareDialogCancel(): void {\n this.ShowShareDialog = false;\n this.ShareDialogConfig = null;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OnShareDialogCancel}. */\n public onShareDialogCancel(): void {\n return this.OnShareDialogCancel();\n }\n\n // ==========================================\n // Invitations / Audit Log dialogs (mockups 16, 18)\n // ==========================================\n\n public OpenInvitationsDialog(): void {\n // Closing share dialog so it doesn't stack visually. User can\n // reopen via toolbar; the share dialog isn't stateful enough to\n // need preservation across this transition.\n this.ShowShareDialog = false;\n this.ShowInvitationsDialog = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenInvitationsDialog}. */\n public openInvitationsDialog(): void {\n return this.OpenInvitationsDialog();\n }\n\n public CloseInvitationsDialog(): void {\n this.ShowInvitationsDialog = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseInvitationsDialog}. */\n public closeInvitationsDialog(): void {\n return this.CloseInvitationsDialog();\n }\n\n public OpenAuditLogDialog(): void {\n this.ShowShareDialog = false;\n this.ShowAuditLogDialog = true;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link OpenAuditLogDialog}. */\n public openAuditLogDialog(): void {\n return this.OpenAuditLogDialog();\n }\n\n public CloseAuditLogDialog(): void {\n this.ShowAuditLogDialog = false;\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link CloseAuditLogDialog}. */\n public closeAuditLogDialog(): void {\n return this.CloseAuditLogDialog();\n }\n}\n","<!-- World-Class List Form -->\n<div class=\"list-form-explorer\">\n <!-- Header -->\n <header class=\"list-header\">\n <div class=\"header-content\">\n <div class=\"header-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"header-info\">\n <div class=\"name-row\">\n @if (!isEditingName) {\n <h1 class=\"list-name\">{{record.Name || 'Untitled List'}}</h1>\n @if (isCurrentUserOwner()) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingName()\"\n title=\"Edit name\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n }\n @if (isEditingName) {\n <input\n type=\"text\"\n class=\"inline-edit-input name-input\"\n [(ngModel)]=\"editingName\"\n (keydown.enter)=\"saveNameEdit()\"\n (keydown.escape)=\"cancelNameEdit()\"\n #nameInput />\n <button class=\"save-btn\" (click)=\"saveNameEdit()\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button class=\"cancel-btn\" (click)=\"cancelNameEdit()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <div class=\"entity-badge\">\n <i [class]=\"entityIcon\"></i>\n <span>{{entityDisplayName}}</span>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedItemCount}}</span>\n <span class=\"stat-label\">Items</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{stats.shareCount}}</span>\n <span class=\"stat-label\">Shares</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedLastUpdated}}</span>\n <span class=\"stat-label\">Updated</span>\n </div>\n </div>\n </header>\n\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (nav of navItems; track nav) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === nav.id\"\n [class.disabled]=\"nav.disabled\"\n (click)=\"setActiveSection(nav.id)\"\n [title]=\"nav.label\">\n <i [class]=\"nav.icon\"></i>\n <span class=\"nav-label\">{{nav.label}}</span>\n @if (nav.badge && nav.badge > 0) {\n <span class=\"nav-badge\">{{nav.badge}}</span>\n }\n </button>\n }\n </nav>\n\n <!-- Main Content -->\n <main class=\"main-content\">\n <!-- Overview Section -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"overview-grid\">\n <!-- Description Card -->\n <div class=\"overview-card description-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-align-left\"></i> Description</h3>\n @if (isCurrentUserOwner() && !isEditingDescription) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingDescription()\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n <div class=\"card-body\">\n @if (!isEditingDescription) {\n @if (record.Description) {\n <p class=\"description-text\">{{record.Description}}</p>\n }\n @if (!record.Description) {\n <p class=\"description-empty\">No description provided</p>\n }\n }\n @if (isEditingDescription) {\n <textarea\n class=\"inline-edit-input description-input\"\n [(ngModel)]=\"editingDescription\"\n placeholder=\"Add a description...\"\n rows=\"3\"\n (keydown.escape)=\"cancelDescriptionEdit()\"></textarea>\n <div class=\"edit-actions\">\n <button class=\"btn-primary\" (click)=\"saveDescriptionEdit()\">Save</button>\n <button class=\"btn-secondary\" (click)=\"cancelDescriptionEdit()\">Cancel</button>\n </div>\n }\n </div>\n </div>\n <!-- Details Card -->\n <div class=\"overview-card details-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Details</h3>\n </div>\n <div class=\"card-body\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Entity</span>\n <span class=\"detail-value\">\n <i [class]=\"entityIcon\" class=\"detail-icon\"></i>\n {{entityDisplayName}}\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Category</span>\n @if (!isCurrentUserOwner()) {\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-folder detail-icon\"></i>\n {{categoryName}}\n </span>\n }\n @if (isCurrentUserOwner()) {\n <select\n class=\"category-select\"\n [ngModel]=\"record.CategoryID\"\n (ngModelChange)=\"onCategoryChange($event)\">\n <option [ngValue]=\"null\">Uncategorized</option>\n @for (cat of categories; track cat) {\n <option [ngValue]=\"cat.ID\">{{cat.Name}}</option>\n }\n </select>\n }\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Owner</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-user detail-icon\"></i>\n {{getOwnerName()}}\n @if (isCurrentUserOwner()) {\n <span class=\"owner-badge\">You</span>\n }\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-calendar detail-icon\"></i>\n {{record.__mj_CreatedAt | date:'mediumDate'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Quick Actions Card -->\n <div class=\"overview-card actions-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-bolt\"></i> Quick Actions</h3>\n </div>\n <div class=\"card-body\">\n <button class=\"action-btn\" (click)=\"setActiveSection('items')\">\n <i class=\"fa-solid fa-list\"></i>\n <span>View Items</span>\n <span class=\"action-count\">{{stats.itemCount}}</span>\n </button>\n @if (isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>Share List</span>\n @if (stats.shareCount > 0) {\n <span class=\"action-count\">{{stats.shareCount}}</span>\n }\n </button>\n }\n @if (!isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"setActiveSection('sharing')\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>View Sharing</span>\n </button>\n }\n <button class=\"action-btn\" [disabled]=\"true\" title=\"Coming soon\">\n <i class=\"fa-solid fa-file-export\"></i>\n <span>Export Data</span>\n <span class=\"coming-soon\">Soon</span>\n </button>\n </div>\n </div>\n </div>\n </section>\n }\n\n <!-- Items Section -->\n @if (activeSection === 'items') {\n <section class=\"section items-section\">\n <div class=\"section-header\">\n <h2>List Items</h2>\n <div class=\"section-actions\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search this page...\"\n [(ngModel)]=\"itemSearchTerm\" />\n </div>\n @if (isCurrentUserOwner()) {\n <div class=\"add-buttons\">\n <button class=\"btn-secondary\" (click)=\"openAddRecordsDialog()\" title=\"Add individual records\">\n <i class=\"fa-solid fa-plus\"></i> Add Records\n </button>\n <button class=\"btn-secondary\" (click)=\"openAddFromViewDialog()\" title=\"Add records from a saved view\">\n <i class=\"fa-solid fa-table-list\"></i> Add From View\n </button>\n </div>\n }\n <button class=\"btn-icon\" (click)=\"refreshItems()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Loading State -->\n @if (isLoadingItems) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading items...\" size=\"medium\"></mj-loading>\n </div>\n }\n <!-- Empty State -->\n @if (!isLoadingItems && listItems.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-inbox\"\n Title=\"No Items Yet\"\n [Message]=\"'This list doesn\\'t have any items. Add records from the ' + entityDisplayName + ' entity.'\" />\n }\n <!-- Items Table -->\n @if (!isLoadingItems && listItems.length > 0) {\n <div class=\"items-table-container\">\n @if (selectedItems.size > 0) {\n <div class=\"items-toolbar\">\n <span class=\"selection-count\">{{selectedItems.size}} selected</span>\n <button class=\"btn-danger\" (click)=\"removeSelectedItems()\">\n <i class=\"fa-solid fa-trash\"></i>\n Remove from List\n </button>\n </div>\n }\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"toggleSelectAll()\" />\n </th>\n <th class=\"col-name\">Name</th>\n <th class=\"col-id\">Record ID</th>\n <th class=\"col-added\">Added</th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredItems; track item) {\n <tr\n [class.selected]=\"selectedItems.has(item.detail.ID)\">\n <td class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedItems.has(item.detail.ID)\"\n (change)=\"toggleItemSelection(item)\" />\n </td>\n <td class=\"col-name\">\n <div class=\"item-name\" [class.loading]=\"item.isLoading\">\n <i [class]=\"entityIcon\" class=\"item-icon\"></i>\n <span>{{item.recordName}}</span>\n @if (item.isLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n </div>\n </td>\n <td class=\"col-id\">\n <code class=\"record-id\">{{item.detail.RecordID}}</code>\n </td>\n <td class=\"col-added\">\n {{item.detail.__mj_CreatedAt | date:'shortDate'}}\n </td>\n <td class=\"col-actions\">\n <button\n class=\"btn-icon\"\n (click)=\"openRecord(item)\"\n title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n <div class=\"items-footer\">\n <span class=\"items-count\">\n Showing {{filteredItems.length}} of {{stats.itemCount}} items\n </span>\n @if (totalPages > 1) {\n <div class=\"items-pager\">\n <button class=\"btn-icon\" [disabled]=\"itemsPage === 0\" (click)=\"goToPage(itemsPage - 1)\" title=\"Previous page\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n <span class=\"page-label\">Page {{itemsPage + 1}} of {{totalPages}}</span>\n <button class=\"btn-icon\" [disabled]=\"itemsPage >= totalPages - 1\" (click)=\"goToPage(itemsPage + 1)\" title=\"Next page\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- Sharing Section -->\n @if (activeSection === 'sharing') {\n <section class=\"section sharing-section\">\n <div class=\"section-header\">\n <h2>Sharing</h2>\n @if (isCurrentUserOwner()) {\n <div class=\"section-actions\">\n <button class=\"btn-primary\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-user-plus\"></i> Manage Sharing\n </button>\n </div>\n }\n </div>\n <!-- Sharing summary -->\n @if (stats.shareCount > 0 || stats.invitationCount > 0) {\n <div class=\"sharing-summary\">\n <div class=\"summary-card\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.shareCount}}</span>\n <span class=\"summary-label\">Active Share{{stats.shareCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n @if (stats.invitationCount > 0) {\n <div class=\"summary-card\">\n <div class=\"summary-icon pending\">\n <i class=\"fa-solid fa-envelope\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.invitationCount}}</span>\n <span class=\"summary-label\">Pending Invitation{{stats.invitationCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty state for no shares -->\n @if (stats.shareCount === 0 && stats.invitationCount === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-share-nodes\"\n Title=\"Not Shared Yet\"\n [Message]=\"isCurrentUserOwner() ? 'This list is private. Click "Manage Sharing" to share it with other users or roles.' : 'This list hasn\\'t been shared with anyone else.'\"\n [ActionText]=\"isCurrentUserOwner() ? 'Share This List' : ''\"\n ActionIcon=\"fa-solid fa-user-plus\"\n (Action)=\"openShareDialog()\" />\n }\n <!-- Read-only notice for non-owners -->\n @if (!isCurrentUserOwner() && (stats.shareCount > 0 || stats.invitationCount > 0)) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing settings.</span>\n </div>\n }\n </section>\n }\n\n <!-- Activity Section -->\n @if (activeSection === 'activity') {\n <section class=\"section activity-section\">\n <div class=\"section-header\">\n <h2>Activity</h2>\n </div>\n <div class=\"activity-timeline\">\n <div class=\"timeline-item\">\n <div class=\"timeline-icon\">\n <i class=\"fa-solid fa-edit\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List updated</p>\n <span class=\"timeline-date\">{{record.__mj_UpdatedAt | date:'medium'}}</span>\n </div>\n </div>\n <div class=\"timeline-item\">\n <div class=\"timeline-icon create\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List created</p>\n <span class=\"timeline-date\">{{record.__mj_CreatedAt | date:'medium'}}</span>\n </div>\n </div>\n </div>\n <div class=\"activity-info\">\n <p>Detailed activity tracking coming soon. You'll be able to see who added items, when shares were created, and more.</p>\n </div>\n </section>\n }\n\n <!-- Settings Section -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-header\">\n <h2>Settings</h2>\n </div>\n <div class=\"settings-form\">\n <mj-collapsible-panel\n SectionKey=\"listSettings\"\n SectionName=\"List Settings\"\n Icon=\"fa fa-cog\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CategoryID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n <mj-collapsible-panel\n SectionKey=\"systemInfo\"\n SectionName=\"System Information\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n </div>\n </section>\n }\n </main>\n</div>\n\n<!-- Add Records Dialog -->\n@if (showAddRecordsDialog) {\n <mj-dialog\n [Title]=\"'Add ' + entityDisplayName + ' to List'\"\n (Close)=\"closeAddRecordsDialog()\"\n [Visible]=\"showAddRecordsDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"550\">\n <div class=\"dialog-content add-records-dialog\">\n @if (addDialogSaving) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogSaving) {\n <!-- Search Input -->\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n [placeholder]=\"'Search ' + entityDisplayName + '...'\"\n [(ngModel)]=\"addRecordsSearchFilter\"\n (ngModelChange)=\"onAddRecordsSearchChange($event)\" />\n </div>\n <span class=\"search-hint\">Type at least 2 characters to search</span>\n </div>\n <!-- Records List -->\n <div class=\"records-list\">\n @if (addDialogLoading) {\n <div class=\"list-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length >= 2) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n [Title]=\"'No records found matching "' + addRecordsSearchFilter + '"'\" />\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length < 2) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-list\"\n Title=\"Search for records to add to this list\" />\n }\n @if (!addDialogLoading && addableRecords.length > 0) {\n <!-- Selection controls -->\n <div class=\"selection-controls\">\n <button mjButton variant=\"flat\" (click)=\"selectAllAddable()\">Select All</button>\n <button mjButton variant=\"flat\" (click)=\"deselectAllAddable()\">Deselect All</button>\n <span class=\"selection-info\">{{ selectedAddableRecords.length }} selected</span>\n </div>\n <!-- Records -->\n <div class=\"records-scroll\">\n @for (record of addableRecords; track record) {\n <div class=\"record-item\"\n [class.in-list]=\"record.isInList\"\n [class.selected]=\"record.isSelected\"\n (click)=\"toggleRecordSelection(record)\">\n <div class=\"record-checkbox\">\n @if (record.isInList) {\n <span class=\"fa-solid fa-check in-list-icon\" title=\"Already in list\"></span>\n }\n @if (!record.isInList) {\n <input type=\"checkbox\"\n [checked]=\"record.isSelected\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRecordSelection(record)\">\n }\n </div>\n <div class=\"record-name\">{{ record.Name }}</div>\n @if (record.isInList) {\n <span class=\"in-list-badge\">In List</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddRecords()\"\n [disabled]=\"addDialogSaving || selectedAddableRecords.length === 0\"\n variant=\"primary\">\n Add {{ selectedAddableRecords.length > 0 ? selectedAddableRecords.length : '' }} Record{{ selectedAddableRecords.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddRecordsDialog()\"\n [disabled]=\"addDialogSaving\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add From View Dialog -->\n@if (showAddFromViewDialog) {\n <mj-dialog\n Title=\"Add Records from Views\"\n (Close)=\"closeAddFromViewDialog()\"\n [Visible]=\"showAddFromViewDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"500\">\n <div class=\"dialog-content\">\n @if (showAddFromViewLoader && fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading records from views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && addFromViewTotal > 0 && !fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addFromViewTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && !fetchingRecordsToSave && addFromViewTotal === 0) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!showAddFromViewLoader) {\n <p class=\"dialog-instruction\">Select views to add their records to this list:</p>\n <div class=\"views-list\">\n @if (!userViews || userViews.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-folder-open\"\n Title=\"No saved views found for this entity\" />\n }\n @if (userViews && userViews.length > 0) {\n @for (view of userViews; track view) {\n <div class=\"view-item\"\n [class.selected]=\"isViewSelected(view)\"\n (click)=\"toggleViewSelection(view)\">\n <input type=\"checkbox\"\n [checked]=\"isViewSelected(view)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleViewSelection(view)\">\n <span class=\"fa-solid fa-table-list view-icon\"></span>\n <span class=\"view-name\">{{ view.Name }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddFromView()\"\n [disabled]=\"showAddFromViewLoader || userViewsToAdd.length === 0\"\n variant=\"primary\">\n Add from {{ userViewsToAdd.length }} View{{ userViewsToAdd.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddFromViewDialog()\"\n [disabled]=\"showAddFromViewLoader\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Share Dialog -->\n@if (showShareDialog && shareDialogConfig) {\n <mj-list-share-dialog\n [config]=\"shareDialogConfig\"\n [visible]=\"showShareDialog\"\n (complete)=\"onShareDialogComplete($event)\"\n (cancel)=\"onShareDialogCancel()\"\n (manageInvitations)=\"openInvitationsDialog()\"\n (viewAuditLog)=\"openAuditLogDialog()\">\n </mj-list-share-dialog>\n}\n\n<!-- Invitations Dialog (mockup 16). Opened from the share dialog's\n \"Manage Invitations\" button. Per-list — bound to record.ID. -->\n@if (showInvitationsDialog && record?.IsSaved) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Invitations — ' + record.Name\"\n (Close)=\"closeInvitationsDialog()\"\n [MinWidth]=\"640\"\n [Width]=\"900\"\n [Height]=\"640\">\n <div class=\"dialog-content invitations-dialog\">\n <mj-list-invitations\n [Provider]=\"ProviderToUse\"\n [ListID]=\"record.ID\"\n [ListName]=\"record.Name\">\n </mj-list-invitations>\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"closeInvitationsDialog()\" variant=\"outline\">Close</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Audit Log Dialog (mockup 18). Opened from the share dialog's\n \"View audit log\" link. Per-list — bound to record.ID. -->\n@if (showAuditLogDialog && record?.IsSaved) {\n <mj-dialog\n [Visible]=\"true\"\n [Title]=\"'Audit Log — ' + record.Name\"\n (Close)=\"closeAuditLogDialog()\"\n [MinWidth]=\"720\"\n [Width]=\"980\"\n [Height]=\"680\">\n <div class=\"dialog-content audit-log-dialog\">\n <mj-list-audit-log\n [Provider]=\"ProviderToUse\"\n [ListID]=\"record.ID\">\n </mj-list-audit-log>\n </div>\n <mj-dialog-actions>\n <button mjButton (click)=\"closeAuditLogDialog()\" variant=\"outline\">Close</button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
|