@memberjunction/ng-dashboards 5.30.0 → 5.31.0
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/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lists-categories-resource.component.js","sourceRoot":"","sources":["../../../src/Lists/components/lists-categories-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewEncapsulation, ChangeDetectorRef, OnDestroy } from '@angular/core';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJListCategoryEntity, MJListEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\ninterface CategoryViewModel {\n category: MJListCategoryEntity;\n listCount: number;\n childCount: number;\n depth: number;\n isExpanded: boolean;\n}\n\n@RegisterClass(BaseResourceComponent, 'ListsCategoriesResource')\n@Component({\n standalone: false,\n selector: 'mj-lists-categories-resource',\n template: `\n <div class=\"lists-categories-container\">\n <!-- Header -->\n <div class=\"categories-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-tags\"></i>\n <h2>List Categories</h2>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-create\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Category</span>\n </button>\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading categories...\" size=\"medium\"></mj-loading>\n </div>\n }\n \n <!-- Empty State -->\n @if (!isLoading && categoryViewModels.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-state-icon-wrapper\">\n <div class=\"icon-bg\"></div>\n <i class=\"fa-solid fa-folder-tree\"></i>\n </div>\n <h3>No Categories Yet</h3>\n <p>Categories help you organize lists into logical groups.</p>\n <div class=\"empty-state-features\">\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Create hierarchical folder structures</span>\n </div>\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Quickly find related lists</span>\n </div>\n </div>\n <button class=\"btn-create-large\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Your First Category\n </button>\n </div>\n }\n \n <!-- Categories Content -->\n @if (!isLoading && categoryViewModels.length > 0) {\n <div class=\"categories-content\">\n <div class=\"categories-layout\">\n <!-- Category Tree -->\n <div class=\"category-tree-panel\">\n <div class=\"panel-header\">\n <h3>Categories</h3>\n <span class=\"count-badge\">{{categories.length}}</span>\n </div>\n <div class=\"tree-content\" role=\"tree\" aria-label=\"Category tree\">\n @for (vm of getTopLevelCategories(); track vm) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { vm: vm }\"></ng-container>\n }\n </div>\n </div>\n <!-- Category Details -->\n @if (selectedCategory) {\n <div class=\"category-detail-panel\">\n <div class=\"panel-header\">\n <h3>Category Details</h3>\n <div class=\"panel-actions\">\n <button class=\"icon-btn\" (click)=\"editCategory()\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button class=\"icon-btn danger\" (click)=\"deleteCategory()\" title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-content\">\n <div class=\"detail-field\">\n <label>Name</label>\n <span class=\"field-value\">{{selectedCategory.Name}}</span>\n </div>\n @if (selectedCategory.Description) {\n <div class=\"detail-field\">\n <label>Description</label>\n <span class=\"field-value\">{{selectedCategory.Description}}</span>\n </div>\n }\n <div class=\"detail-field\">\n <label>Parent Category</label>\n <span class=\"field-value\">\n {{getParentCategoryName(selectedCategory) || '(Top Level)'}}\n </span>\n </div>\n <div class=\"detail-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{getSelectedCategoryListCount()}}</span>\n <span class=\"stat-label\">Lists</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{getSelectedCategoryChildCount()}}</span>\n <span class=\"stat-label\">Subcategories</span>\n </div>\n </div>\n <!-- Lists in this category -->\n @if (selectedCategoryLists.length > 0) {\n <div class=\"category-lists\">\n <h4>Lists in this category</h4>\n <div class=\"mini-list\">\n @for (list of selectedCategoryLists; track list) {\n <div class=\"mini-list-item\">\n <i class=\"fa-solid fa-list\"></i>\n <span>{{list.Name}}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- No Selection State -->\n @if (!selectedCategory) {\n <div class=\"category-detail-panel empty\">\n <div class=\"no-selection\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n <p>Select a category to view details</p>\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Category Node Template -->\n <ng-template #categoryNodeTemplate let-vm=\"vm\">\n <div class=\"category-node\" [style.padding-left.px]=\"vm.depth * 20\">\n <div\n class=\"node-content\"\n [class.selected]=\"IsCategorySelected(vm.category)\"\n (click)=\"selectCategory(vm.category)\"\n (keydown.enter)=\"selectCategory(vm.category)\"\n (keydown.space)=\"selectCategory(vm.category); $event.preventDefault()\"\n (keydown.arrowRight)=\"expandNode($event, vm)\"\n (keydown.arrowLeft)=\"collapseNode($event, vm)\"\n tabindex=\"0\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren(vm.category) ? vm.isExpanded : null\"\n [attr.aria-selected]=\"IsCategorySelected(vm.category)\"\n [attr.aria-label]=\"vm.category.Name + ' - ' + vm.listCount + ' lists'\">\n @if (hasChildren(vm.category)) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand($event, vm)\"\n tabindex=\"-1\"\n aria-hidden=\"true\">\n <i [class]=\"vm.isExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (!hasChildren(vm.category)) {\n <span class=\"expand-placeholder\"></span>\n }\n <i class=\"fa-solid fa-folder\" [class.fa-folder-open]=\"vm.isExpanded\" aria-hidden=\"true\"></i>\n <span class=\"node-name\">{{vm.category.Name}}</span>\n <span class=\"node-count\" aria-hidden=\"true\">{{vm.listCount}}</span>\n </div>\n @if (vm.isExpanded && hasChildren(vm.category)) {\n <div class=\"node-children\" role=\"group\">\n @for (childVm of getChildCategories(vm.category); track childVm) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { vm: childVm }\"></ng-container>\n }\n </div>\n }\n </div>\n </ng-template>\n \n <!-- Create/Edit Dialog -->\n @if (showDialog) {\n <div class=\"modal-overlay\" (click)=\"closeDialog()\">\n <div class=\"modal-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>{{editingCategory ? 'Edit Category' : 'Create Category'}}</h3>\n <button class=\"modal-close\" (click)=\"closeDialog()\" [disabled]=\"isSaving\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"category-form\">\n <div class=\"form-group\">\n <label>Name *</label>\n <input\n type=\"text\"\n [(ngModel)]=\"dialogName\"\n placeholder=\"Enter category name\"\n class=\"form-input\" />\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea\n [(ngModel)]=\"dialogDescription\"\n placeholder=\"Optional description\"\n class=\"form-input\"\n rows=\"3\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Parent Category</label>\n <select\n [(ngModel)]=\"dialogParentId\"\n class=\"form-input\">\n @for (parent of availableParents; track parent) {\n <option [ngValue]=\"parent.ID\">{{parent.displayName}}</option>\n }\n </select>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn-primary\"\n (click)=\"saveCategory()\"\n [disabled]=\"!dialogName || isSaving\">\n @if (isSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{isSaving ? 'Saving...' : (editingCategory ? 'Save' : 'Create')}}\n </button>\n <button class=\"btn-secondary\" (click)=\"closeDialog()\" [disabled]=\"isSaving\">Cancel</button>\n </div>\n </div>\n </div>\n }\n \n <!-- Delete Confirmation Dialog -->\n @if (showDeleteConfirm) {\n <div class=\"modal-overlay\" (click)=\"cancelDelete()\">\n <div class=\"modal-dialog modal-sm\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header danger\">\n <h3>Delete Category</h3>\n <button class=\"modal-close\" (click)=\"cancelDelete()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <p>{{deleteConfirmMessage}}</p>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn-danger\" (click)=\"confirmDelete()\">\n Delete\n </button>\n <button class=\"btn-secondary\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .lists-categories-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n overflow: hidden;\n }\n\n /* Header */\n .categories-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .btn-create {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-create:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n /* Loading */\n .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n\n /* Empty State */\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 48px 40px;\n text-align: center;\n max-width: 420px;\n margin: 0 auto;\n }\n\n .empty-state-icon-wrapper {\n position: relative;\n margin-bottom: 24px;\n }\n\n .empty-state-icon-wrapper .icon-bg {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100px;\n height: 100px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .empty-state-icon-wrapper > i {\n position: relative;\n font-size: 48px;\n color: var(--mj-brand-primary);\n z-index: 1;\n }\n\n .empty-state h3 {\n margin: 0 0 12px;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .empty-state p {\n margin: 0 0 8px;\n color: var(--mj-text-secondary);\n font-size: 15px;\n line-height: 1.5;\n }\n\n .empty-state-features {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 16px 0 24px;\n text-align: left;\n }\n\n .feature-item {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n }\n\n .feature-item i {\n font-size: 14px !important;\n color: var(--mj-status-success) !important;\n }\n\n .btn-create-large {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 28px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 15px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n }\n\n .btn-create-large:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n }\n\n /* Content Layout */\n .categories-content {\n flex: 1;\n padding: 16px 24px;\n overflow: hidden;\n }\n\n .categories-layout {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n height: 100%;\n }\n\n .category-tree-panel,\n .category-detail-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .count-badge {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n .panel-actions {\n display: flex;\n gap: 4px;\n }\n\n .icon-btn {\n background: none;\n border: none;\n padding: 6px 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .icon-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .icon-btn.danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n\n /* Tree Content */\n .tree-content {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n }\n\n .category-node {\n user-select: none;\n }\n\n .node-content {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .node-content:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .node-content:focus {\n outline: none;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n }\n\n .node-content:focus-visible {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -2px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n }\n\n .node-content.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n }\n\n .node-content.selected:focus-visible {\n outline: 2px solid var(--mj-brand-primary-hover);\n }\n\n .expand-btn {\n background: none;\n border: none;\n padding: 2px;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .expand-btn:hover {\n color: var(--mj-text-secondary);\n }\n\n .expand-placeholder {\n width: 20px;\n }\n\n .node-content .fa-folder,\n .node-content .fa-folder-open {\n color: var(--mj-status-warning);\n }\n\n .node-name {\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n }\n\n .node-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 8px;\n }\n\n /* Detail Panel */\n .detail-content {\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n }\n\n .detail-field {\n margin-bottom: 16px;\n }\n\n .detail-field label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n }\n\n .field-value {\n font-size: 14px;\n color: var(--mj-text-primary);\n }\n\n .detail-stats {\n display: flex;\n gap: 24px;\n margin: 24px 0;\n padding: 16px;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n }\n\n .stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .stat-value {\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n\n .stat-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .category-lists h4 {\n margin: 0 0 12px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .mini-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .mini-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface);\n border-radius: 4px;\n font-size: 13px;\n color: var(--mj-text-primary);\n }\n\n .mini-list-item i {\n color: var(--mj-text-muted);\n }\n\n /* No Selection */\n .category-detail-panel.empty {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .no-selection {\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .no-selection i {\n font-size: 32px;\n margin-bottom: 12px;\n }\n\n .no-selection p {\n margin: 0;\n }\n\n /* Form */\n .category-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .form-group label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n }\n\n .form-input {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 14px;\n }\n\n .form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n /* Modal Styles */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n animation: fadeIn 0.15s ease-out;\n }\n\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .modal-dialog {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n width: 450px;\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n animation: slideIn 0.2s ease-out;\n }\n\n .modal-dialog.modal-sm {\n width: 400px;\n }\n\n @keyframes slideIn {\n from { transform: translateY(-20px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .modal-header.danger {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-bottom-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n }\n\n .modal-header.danger h3 {\n color: var(--mj-status-error);\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .modal-close {\n background: none;\n border: none;\n padding: 4px 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .modal-close:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .modal-close:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .modal-body {\n padding: 20px;\n overflow-y: auto;\n }\n\n .modal-body p {\n margin: 0;\n color: var(--mj-text-secondary);\n line-height: 1.6;\n }\n\n .modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .btn-secondary {\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n }\n\n .btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-danger {\n padding: 8px 16px;\n background: var(--mj-status-error);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .btn-danger:hover {\n background: var(--mj-status-error);\n }\n\n /* Responsive */\n @media (max-width: 768px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .category-detail-panel.empty {\n display: none;\n }\n\n .modal-dialog {\n width: 95vw;\n }\n }\n `],\n encapsulation: ViewEncapsulation.None\n})\nexport class ListsCategoriesResource extends BaseResourceComponent implements OnDestroy {\n protected override destroy$ = new Subject<void>();\n\n isLoading = true;\n categories: MJListCategoryEntity[] = [];\n categoryViewModels: CategoryViewModel[] = [];\n selectedCategory: MJListCategoryEntity | null = null;\n selectedCategoryLists: MJListEntity[] = [];\n\n // Dialog\n showDialog = false;\n editingCategory: MJListCategoryEntity | null = null;\n dialogName = '';\n dialogDescription = '';\n dialogParentId: string | null = null;\n availableParents: Array<{ ID: string | null; displayName: string }> = [];\n\n // Operation states\n isSaving = false;\n\n // Delete confirmation dialog\n showDeleteConfirm = false;\n deleteConfirmMessage = '';\n private categoryToDelete: MJListCategoryEntity | null = null;\n\n private listsByCategoryId: Map<string, MJListEntity[]> = new Map();\n private categoryMap: Map<string, MJListCategoryEntity> = new Map();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async ngOnInit() {\n super.ngOnInit();\n await this.loadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadData() {\n this.isLoading = true;\n\n try {\n const md = new Metadata();\n const rv = new RunView();\n const userId = md.CurrentUser?.ID;\n\n const [categoriesResult, listsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n CacheLocal: true // Categories rarely change, cache for performance\n },\n {\n EntityName: 'MJ: Lists',\n ExtraFilter: userId ? `UserID = '${userId}'` : '',\n ResultType: 'entity_object'\n }\n ]);\n\n if (!categoriesResult.Success) {\n console.error('Failed to load categories');\n return;\n }\n\n this.categories = categoriesResult.Results as MJListCategoryEntity[];\n const lists = listsResult.Results as MJListEntity[];\n\n // Build category map\n this.categoryMap.clear();\n for (const cat of this.categories) {\n this.categoryMap.set(cat.ID, cat);\n }\n\n // Group lists by category\n this.listsByCategoryId.clear();\n for (const list of lists) {\n if (list.CategoryID) {\n const existing = this.listsByCategoryId.get(list.CategoryID) || [];\n existing.push(list);\n this.listsByCategoryId.set(list.CategoryID, existing);\n }\n }\n\n // Build view models\n this.buildCategoryViewModels();\n this.buildAvailableParents();\n } catch (error) {\n console.error('Error loading categories:', error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private buildCategoryViewModels() {\n this.categoryViewModels = [];\n\n const buildVm = (category: MJListCategoryEntity, depth: number): CategoryViewModel => {\n const lists = this.listsByCategoryId.get(category.ID) || [];\n const children = this.categories.filter(c => UUIDsEqual(c.ParentID, category.ID));\n\n return {\n category,\n listCount: lists.length,\n childCount: children.length,\n depth,\n isExpanded: true\n };\n };\n\n const processCategory = (category: MJListCategoryEntity, depth: number) => {\n this.categoryViewModels.push(buildVm(category, depth));\n const children = this.categories.filter(c => UUIDsEqual(c.ParentID, category.ID));\n for (const child of children) {\n processCategory(child, depth + 1);\n }\n };\n\n const topLevel = this.categories.filter(c => !c.ParentID);\n for (const cat of topLevel) {\n processCategory(cat, 0);\n }\n }\n\n private buildAvailableParents() {\n this.availableParents = [{ ID: null, displayName: '(Top Level)' }];\n\n const addCategory = (cat: MJListCategoryEntity, prefix: string) => {\n // Exclude the editing category and its descendants\n if (this.editingCategory && this.isDescendantOf(cat, this.editingCategory)) {\n return;\n }\n this.availableParents.push({ ID: cat.ID, displayName: prefix + cat.Name });\n const children = this.categories.filter(c => UUIDsEqual(c.ParentID, cat.ID));\n for (const child of children) {\n addCategory(child, prefix + '\\u00A0\\u00A0');\n }\n };\n\n const topLevel = this.categories.filter(c => !c.ParentID);\n for (const cat of topLevel) {\n if (!UUIDsEqual(this.editingCategory?.ID, cat.ID)) {\n addCategory(cat, '');\n }\n }\n }\n\n private isDescendantOf(category: MJListCategoryEntity, ancestor: MJListCategoryEntity): boolean {\n if (UUIDsEqual(category.ID, ancestor.ID)) return true;\n if (!category.ParentID) return false;\n const parent = this.categoryMap.get(category.ParentID);\n return parent ? this.isDescendantOf(parent, ancestor) : false;\n }\n\n getTopLevelCategories(): CategoryViewModel[] {\n return this.categoryViewModels.filter(vm => !vm.category.ParentID);\n }\n\n getChildCategories(parent: MJListCategoryEntity): CategoryViewModel[] {\n return this.categoryViewModels.filter(vm => UUIDsEqual(vm.category.ParentID, parent.ID));\n }\n\n hasChildren(category: MJListCategoryEntity): boolean {\n return this.categories.some(c => UUIDsEqual(c.ParentID, category.ID));\n }\n\n toggleExpand(event: Event, vm: CategoryViewModel) {\n event.stopPropagation();\n vm.isExpanded = !vm.isExpanded;\n }\n\n expandNode(event: Event, vm: CategoryViewModel) {\n event.preventDefault();\n if (this.hasChildren(vm.category) && !vm.isExpanded) {\n vm.isExpanded = true;\n }\n }\n\n collapseNode(event: Event, vm: CategoryViewModel) {\n event.preventDefault();\n if (vm.isExpanded) {\n vm.isExpanded = false;\n }\n }\n\n IsCategorySelected(category: MJListCategoryEntity): boolean {\n return UUIDsEqual(this.selectedCategory?.ID, category.ID);\n }\n\n selectCategory(category: MJListCategoryEntity) {\n this.selectedCategory = category;\n this.selectedCategoryLists = this.listsByCategoryId.get(category.ID) || [];\n }\n\n getParentCategoryName(category: MJListCategoryEntity): string | null {\n if (!category.ParentID) return null;\n return this.categoryMap.get(category.ParentID)?.Name || null;\n }\n\n getSelectedCategoryListCount(): number {\n if (!this.selectedCategory) return 0;\n return this.listsByCategoryId.get(this.selectedCategory.ID)?.length || 0;\n }\n\n getSelectedCategoryChildCount(): number {\n if (!this.selectedCategory) return 0;\n return this.categories.filter(c => UUIDsEqual(c.ParentID, this.selectedCategory!.ID)).length\n }\n\n createCategory() {\n this.editingCategory = null;\n this.dialogName = '';\n this.dialogDescription = '';\n this.dialogParentId = null;\n this.buildAvailableParents();\n this.showDialog = true;\n }\n\n editCategory() {\n if (!this.selectedCategory) return;\n this.editingCategory = this.selectedCategory;\n this.dialogName = this.selectedCategory.Name;\n this.dialogDescription = this.selectedCategory.Description || '';\n this.dialogParentId = this.selectedCategory.ParentID || null;\n this.buildAvailableParents();\n this.showDialog = true;\n }\n\n deleteCategory() {\n if (!this.selectedCategory) return;\n\n this.categoryToDelete = this.selectedCategory;\n const categoryName = this.categoryToDelete.Name;\n const listsInCategory = this.listsByCategoryId.get(this.categoryToDelete.ID) || [];\n const childCategories = this.categories.filter(c => UUIDsEqual(c.ParentID, this.categoryToDelete!.ID));\n\n let message = `Are you sure you want to delete \"${categoryName}\"?`;\n if (listsInCategory.length > 0) {\n message += ` ${listsInCategory.length} list(s) will be uncategorized.`;\n }\n if (childCategories.length > 0) {\n message += ` ${childCategories.length} subcategory(ies) will become top-level.`;\n }\n\n this.deleteConfirmMessage = message;\n this.showDeleteConfirm = true;\n }\n\n cancelDelete() {\n this.showDeleteConfirm = false;\n this.categoryToDelete = null;\n this.deleteConfirmMessage = '';\n }\n\n async confirmDelete() {\n if (!this.categoryToDelete) return;\n\n const categoryName = this.categoryToDelete.Name;\n const categoryToDelete = this.categoryToDelete;\n this.showDeleteConfirm = false;\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n const deleted = await categoryToDelete.Delete();\n if (deleted) {\n this.notificationService.CreateSimpleNotification(`\"${categoryName}\" deleted`, 'success', 3000);\n } else {\n // Get the detailed error message from LatestResult\n const errorMessage = categoryToDelete.LatestResult?.Message || 'Unknown error occurred';\n console.error('Failed to delete category:', categoryToDelete.LatestResult);\n this.notificationService.CreateSimpleNotification(`Failed to delete category: ${errorMessage}`, 'error', 6000);\n }\n this.selectedCategory = null;\n this.categoryToDelete = null;\n await this.loadData();\n } catch (error) {\n console.error('Error deleting category:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error deleting category: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n closeDialog() {\n this.showDialog = false;\n this.editingCategory = null;\n }\n\n async saveCategory() {\n this.isSaving = true;\n this.cdr.detectChanges();\n\n const isEditing = !!this.editingCategory;\n const categoryName = this.dialogName;\n\n try {\n const md = new Metadata();\n let category: MJListCategoryEntity;\n\n if (this.editingCategory) {\n category = this.editingCategory;\n } else {\n category = await md.GetEntityObject<MJListCategoryEntity>('MJ: List Categories');\n category.UserID = md.CurrentUser!.ID;\n }\n\n category.Name = this.dialogName;\n category.Description = this.dialogDescription || null;\n category.ParentID = this.dialogParentId || null;\n\n const saved = await category.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n isEditing ? `\"${categoryName}\" updated` : `\"${categoryName}\" created`,\n 'success',\n 3000\n );\n this.closeDialog();\n await this.loadData();\n\n // Re-select the saved category\n if (isEditing) {\n this.selectedCategory = category;\n this.selectedCategoryLists = this.listsByCategoryId.get(category.ID) || [];\n }\n } else {\n // Get the detailed error message from LatestResult\n const errorMessage = category.LatestResult?.Message || 'Unknown error occurred';\n const action = isEditing ? 'update' : 'create';\n console.error(`Failed to ${action} category:`, category.LatestResult);\n this.notificationService.CreateSimpleNotification(\n `Failed to ${action} category: ${errorMessage}`,\n 'error',\n 6000\n );\n }\n } catch (error) {\n console.error('Error saving category:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error saving category: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Categories';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-tags';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lists-categories-resource.component.js","sourceRoot":"","sources":["../../../src/Lists/components/lists-categories-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewEncapsulation, ChangeDetectorRef, OnDestroy } from '@angular/core';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJListCategoryEntity, MJListEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\ninterface CategoryViewModel {\n category: MJListCategoryEntity;\n listCount: number;\n childCount: number;\n depth: number;\n isExpanded: boolean;\n}\n\n@RegisterClass(BaseResourceComponent, 'ListsCategoriesResource')\n@Component({\n standalone: false,\n selector: 'mj-lists-categories-resource',\n template: `\n <div class=\"lists-categories-container\">\n <!-- Header -->\n <div class=\"categories-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-tags\"></i>\n <h2>List Categories</h2>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-create\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Category</span>\n </button>\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading categories...\" size=\"medium\"></mj-loading>\n </div>\n }\n \n <!-- Empty State -->\n @if (!isLoading && categoryViewModels.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-state-icon-wrapper\">\n <div class=\"icon-bg\"></div>\n <i class=\"fa-solid fa-folder-tree\"></i>\n </div>\n <h3>No Categories Yet</h3>\n <p>Categories help you organize lists into logical groups.</p>\n <div class=\"empty-state-features\">\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Create hierarchical folder structures</span>\n </div>\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Quickly find related lists</span>\n </div>\n </div>\n <button class=\"btn-create-large\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Your First Category\n </button>\n </div>\n }\n \n <!-- Categories Content -->\n @if (!isLoading && categoryViewModels.length > 0) {\n <div class=\"categories-content\">\n <div class=\"categories-layout\">\n <!-- Category Tree -->\n <div class=\"category-tree-panel\">\n <div class=\"panel-header\">\n <h3>Categories</h3>\n <span class=\"count-badge\">{{categories.length}}</span>\n </div>\n <div class=\"tree-content\" role=\"tree\" aria-label=\"Category tree\">\n @for (vm of getTopLevelCategories(); track vm) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { vm: vm }\"></ng-container>\n }\n </div>\n </div>\n <!-- Category Details -->\n @if (selectedCategory) {\n <div class=\"category-detail-panel\">\n <div class=\"panel-header\">\n <h3>Category Details</h3>\n <div class=\"panel-actions\">\n <button class=\"icon-btn\" (click)=\"editCategory()\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button class=\"icon-btn danger\" (click)=\"deleteCategory()\" title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-content\">\n <div class=\"detail-field\">\n <label>Name</label>\n <span class=\"field-value\">{{selectedCategory.Name}}</span>\n </div>\n @if (selectedCategory.Description) {\n <div class=\"detail-field\">\n <label>Description</label>\n <span class=\"field-value\">{{selectedCategory.Description}}</span>\n </div>\n }\n <div class=\"detail-field\">\n <label>Parent Category</label>\n <span class=\"field-value\">\n {{getParentCategoryName(selectedCategory) || '(Top Level)'}}\n </span>\n </div>\n <div class=\"detail-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{getSelectedCategoryListCount()}}</span>\n <span class=\"stat-label\">Lists</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{getSelectedCategoryChildCount()}}</span>\n <span class=\"stat-label\">Subcategories</span>\n </div>\n </div>\n <!-- Lists in this category -->\n @if (selectedCategoryLists.length > 0) {\n <div class=\"category-lists\">\n <h4>Lists in this category</h4>\n <div class=\"mini-list\">\n @for (list of selectedCategoryLists; track list) {\n <div class=\"mini-list-item\">\n <i class=\"fa-solid fa-list\"></i>\n <span>{{list.Name}}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- No Selection State -->\n @if (!selectedCategory) {\n <div class=\"category-detail-panel empty\">\n <div class=\"no-selection\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n <p>Select a category to view details</p>\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Category Node Template -->\n <ng-template #categoryNodeTemplate let-vm=\"vm\">\n <div class=\"category-node\" [style.padding-left.px]=\"vm.depth * 20\">\n <div\n class=\"node-content\"\n [class.selected]=\"IsCategorySelected(vm.category)\"\n (click)=\"selectCategory(vm.category)\"\n (keydown.enter)=\"selectCategory(vm.category)\"\n (keydown.space)=\"selectCategory(vm.category); $event.preventDefault()\"\n (keydown.arrowRight)=\"expandNode($event, vm)\"\n (keydown.arrowLeft)=\"collapseNode($event, vm)\"\n tabindex=\"0\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"hasChildren(vm.category) ? vm.isExpanded : null\"\n [attr.aria-selected]=\"IsCategorySelected(vm.category)\"\n [attr.aria-label]=\"vm.category.Name + ' - ' + vm.listCount + ' lists'\">\n @if (hasChildren(vm.category)) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand($event, vm)\"\n tabindex=\"-1\"\n aria-hidden=\"true\">\n <i [class]=\"vm.isExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (!hasChildren(vm.category)) {\n <span class=\"expand-placeholder\"></span>\n }\n <i class=\"fa-solid fa-folder\" [class.fa-folder-open]=\"vm.isExpanded\" aria-hidden=\"true\"></i>\n <span class=\"node-name\">{{vm.category.Name}}</span>\n <span class=\"node-count\" aria-hidden=\"true\">{{vm.listCount}}</span>\n </div>\n @if (vm.isExpanded && hasChildren(vm.category)) {\n <div class=\"node-children\" role=\"group\">\n @for (childVm of getChildCategories(vm.category); track childVm) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { vm: childVm }\"></ng-container>\n }\n </div>\n }\n </div>\n </ng-template>\n \n <!-- Create/Edit Dialog -->\n @if (showDialog) {\n <div class=\"modal-overlay\" (click)=\"closeDialog()\">\n <div class=\"modal-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>{{editingCategory ? 'Edit Category' : 'Create Category'}}</h3>\n <button class=\"modal-close\" (click)=\"closeDialog()\" [disabled]=\"isSaving\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"category-form\">\n <div class=\"form-group\">\n <label>Name *</label>\n <input\n type=\"text\"\n [(ngModel)]=\"dialogName\"\n placeholder=\"Enter category name\"\n class=\"form-input\" />\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea\n [(ngModel)]=\"dialogDescription\"\n placeholder=\"Optional description\"\n class=\"form-input\"\n rows=\"3\"></textarea>\n </div>\n <div class=\"form-group\">\n <label>Parent Category</label>\n <select\n [(ngModel)]=\"dialogParentId\"\n class=\"form-input\">\n @for (parent of availableParents; track parent) {\n <option [ngValue]=\"parent.ID\">{{parent.displayName}}</option>\n }\n </select>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn-primary\"\n (click)=\"saveCategory()\"\n [disabled]=\"!dialogName || isSaving\">\n @if (isSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{isSaving ? 'Saving...' : (editingCategory ? 'Save' : 'Create')}}\n </button>\n <button class=\"btn-secondary\" (click)=\"closeDialog()\" [disabled]=\"isSaving\">Cancel</button>\n </div>\n </div>\n </div>\n }\n \n <!-- Delete Confirmation Dialog -->\n @if (showDeleteConfirm) {\n <div class=\"modal-overlay\" (click)=\"cancelDelete()\">\n <div class=\"modal-dialog modal-sm\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header danger\">\n <h3>Delete Category</h3>\n <button class=\"modal-close\" (click)=\"cancelDelete()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <p>{{deleteConfirmMessage}}</p>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn-danger\" (click)=\"confirmDelete()\">\n Delete\n </button>\n <button class=\"btn-secondary\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .lists-categories-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n overflow: hidden;\n }\n\n /* Header */\n .categories-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .btn-create {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-create:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n /* Loading */\n .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n\n /* Empty State */\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 48px 40px;\n text-align: center;\n max-width: 420px;\n margin: 0 auto;\n }\n\n .empty-state-icon-wrapper {\n position: relative;\n margin-bottom: 24px;\n }\n\n .empty-state-icon-wrapper .icon-bg {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100px;\n height: 100px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .empty-state-icon-wrapper > i {\n position: relative;\n font-size: 48px;\n color: var(--mj-brand-primary);\n z-index: 1;\n }\n\n .empty-state h3 {\n margin: 0 0 12px;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .empty-state p {\n margin: 0 0 8px;\n color: var(--mj-text-secondary);\n font-size: 15px;\n line-height: 1.5;\n }\n\n .empty-state-features {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin: 16px 0 24px;\n text-align: left;\n }\n\n .feature-item {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n }\n\n .feature-item i {\n font-size: 14px !important;\n color: var(--mj-status-success) !important;\n }\n\n .btn-create-large {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 28px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 15px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n }\n\n .btn-create-large:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n }\n\n /* Content Layout */\n .categories-content {\n flex: 1;\n padding: 16px 24px;\n overflow: hidden;\n }\n\n .categories-layout {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n height: 100%;\n }\n\n .category-tree-panel,\n .category-detail-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .count-badge {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n .panel-actions {\n display: flex;\n gap: 4px;\n }\n\n .icon-btn {\n background: none;\n border: none;\n padding: 6px 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .icon-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .icon-btn.danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n }\n\n /* Tree Content */\n .tree-content {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n }\n\n .category-node {\n user-select: none;\n }\n\n .node-content {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .node-content:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .node-content:focus {\n outline: none;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n }\n\n .node-content:focus-visible {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -2px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n }\n\n .node-content.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n }\n\n .node-content.selected:focus-visible {\n outline: 2px solid var(--mj-brand-primary-hover);\n }\n\n .expand-btn {\n background: none;\n border: none;\n padding: 2px;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .expand-btn:hover {\n color: var(--mj-text-secondary);\n }\n\n .expand-placeholder {\n width: 20px;\n }\n\n .node-content .fa-folder,\n .node-content .fa-folder-open {\n color: var(--mj-status-warning);\n }\n\n .node-name {\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n }\n\n .node-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 1px 6px;\n border-radius: 8px;\n }\n\n /* Detail Panel */\n .detail-content {\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n }\n\n .detail-field {\n margin-bottom: 16px;\n }\n\n .detail-field label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n }\n\n .field-value {\n font-size: 14px;\n color: var(--mj-text-primary);\n }\n\n .detail-stats {\n display: flex;\n gap: 24px;\n margin: 24px 0;\n padding: 16px;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n }\n\n .stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .stat-value {\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n\n .stat-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .category-lists h4 {\n margin: 0 0 12px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n .mini-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .mini-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface);\n border-radius: 4px;\n font-size: 13px;\n color: var(--mj-text-primary);\n }\n\n .mini-list-item i {\n color: var(--mj-text-muted);\n }\n\n /* No Selection */\n .category-detail-panel.empty {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .no-selection {\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .no-selection i {\n font-size: 32px;\n margin-bottom: 12px;\n }\n\n .no-selection p {\n margin: 0;\n }\n\n /* Form */\n .category-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .form-group label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n }\n\n .form-input {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 14px;\n }\n\n .form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n /* Modal Styles */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n animation: fadeIn 0.15s ease-out;\n }\n\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .modal-dialog {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n width: 450px;\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n animation: slideIn 0.2s ease-out;\n }\n\n .modal-dialog.modal-sm {\n width: 400px;\n }\n\n @keyframes slideIn {\n from { transform: translateY(-20px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .modal-header.danger {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-bottom-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n }\n\n .modal-header.danger h3 {\n color: var(--mj-status-error);\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .modal-close {\n background: none;\n border: none;\n padding: 4px 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .modal-close:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .modal-close:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .modal-body {\n padding: 20px;\n overflow-y: auto;\n }\n\n .modal-body p {\n margin: 0;\n color: var(--mj-text-secondary);\n line-height: 1.6;\n }\n\n .modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .btn-secondary {\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n font-size: 14px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n }\n\n .btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-danger {\n padding: 8px 16px;\n background: var(--mj-status-error);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .btn-danger:hover {\n background: var(--mj-status-error);\n }\n\n /* Responsive */\n @media (max-width: 768px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .category-detail-panel.empty {\n display: none;\n }\n\n .modal-dialog {\n width: 95vw;\n }\n }\n `],\n encapsulation: ViewEncapsulation.None\n})\nexport class ListsCategoriesResource extends BaseResourceComponent implements OnDestroy {\n protected override destroy$ = new Subject<void>();\n\n isLoading = true;\n categories: MJListCategoryEntity[] = [];\n categoryViewModels: CategoryViewModel[] = [];\n selectedCategory: MJListCategoryEntity | null = null;\n selectedCategoryLists: MJListEntity[] = [];\n\n // Dialog\n showDialog = false;\n editingCategory: MJListCategoryEntity | null = null;\n dialogName = '';\n dialogDescription = '';\n dialogParentId: string | null = null;\n availableParents: Array<{ ID: string | null; displayName: string }> = [];\n\n // Operation states\n isSaving = false;\n\n // Delete confirmation dialog\n showDeleteConfirm = false;\n deleteConfirmMessage = '';\n private categoryToDelete: MJListCategoryEntity | null = null;\n\n private listsByCategoryId: Map<string, MJListEntity[]> = new Map();\n private categoryMap: Map<string, MJListCategoryEntity> = new Map();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async ngOnInit() {\n super.ngOnInit();\n await this.loadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadData() {\n this.isLoading = true;\n\n try {\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const userId = md.CurrentUser?.ID;\n\n const [categoriesResult, listsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n CacheLocal: true // Categories rarely change, cache for performance\n },\n {\n EntityName: 'MJ: Lists',\n ExtraFilter: userId ? `UserID = '${userId}'` : '',\n ResultType: 'entity_object'\n }\n ]);\n\n if (!categoriesResult.Success) {\n console.error('Failed to load categories');\n return;\n }\n\n this.categories = categoriesResult.Results as MJListCategoryEntity[];\n const lists = listsResult.Results as MJListEntity[];\n\n // Build category map\n this.categoryMap.clear();\n for (const cat of this.categories) {\n this.categoryMap.set(cat.ID, cat);\n }\n\n // Group lists by category\n this.listsByCategoryId.clear();\n for (const list of lists) {\n if (list.CategoryID) {\n const existing = this.listsByCategoryId.get(list.CategoryID) || [];\n existing.push(list);\n this.listsByCategoryId.set(list.CategoryID, existing);\n }\n }\n\n // Build view models\n this.buildCategoryViewModels();\n this.buildAvailableParents();\n } catch (error) {\n console.error('Error loading categories:', error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private buildCategoryViewModels() {\n this.categoryViewModels = [];\n\n const buildVm = (category: MJListCategoryEntity, depth: number): CategoryViewModel => {\n const lists = this.listsByCategoryId.get(category.ID) || [];\n const children = this.categories.filter(c => UUIDsEqual(c.ParentID, category.ID));\n\n return {\n category,\n listCount: lists.length,\n childCount: children.length,\n depth,\n isExpanded: true\n };\n };\n\n const processCategory = (category: MJListCategoryEntity, depth: number) => {\n this.categoryViewModels.push(buildVm(category, depth));\n const children = this.categories.filter(c => UUIDsEqual(c.ParentID, category.ID));\n for (const child of children) {\n processCategory(child, depth + 1);\n }\n };\n\n const topLevel = this.categories.filter(c => !c.ParentID);\n for (const cat of topLevel) {\n processCategory(cat, 0);\n }\n }\n\n private buildAvailableParents() {\n this.availableParents = [{ ID: null, displayName: '(Top Level)' }];\n\n const addCategory = (cat: MJListCategoryEntity, prefix: string) => {\n // Exclude the editing category and its descendants\n if (this.editingCategory && this.isDescendantOf(cat, this.editingCategory)) {\n return;\n }\n this.availableParents.push({ ID: cat.ID, displayName: prefix + cat.Name });\n const children = this.categories.filter(c => UUIDsEqual(c.ParentID, cat.ID));\n for (const child of children) {\n addCategory(child, prefix + '\\u00A0\\u00A0');\n }\n };\n\n const topLevel = this.categories.filter(c => !c.ParentID);\n for (const cat of topLevel) {\n if (!UUIDsEqual(this.editingCategory?.ID, cat.ID)) {\n addCategory(cat, '');\n }\n }\n }\n\n private isDescendantOf(category: MJListCategoryEntity, ancestor: MJListCategoryEntity): boolean {\n if (UUIDsEqual(category.ID, ancestor.ID)) return true;\n if (!category.ParentID) return false;\n const parent = this.categoryMap.get(category.ParentID);\n return parent ? this.isDescendantOf(parent, ancestor) : false;\n }\n\n getTopLevelCategories(): CategoryViewModel[] {\n return this.categoryViewModels.filter(vm => !vm.category.ParentID);\n }\n\n getChildCategories(parent: MJListCategoryEntity): CategoryViewModel[] {\n return this.categoryViewModels.filter(vm => UUIDsEqual(vm.category.ParentID, parent.ID));\n }\n\n hasChildren(category: MJListCategoryEntity): boolean {\n return this.categories.some(c => UUIDsEqual(c.ParentID, category.ID));\n }\n\n toggleExpand(event: Event, vm: CategoryViewModel) {\n event.stopPropagation();\n vm.isExpanded = !vm.isExpanded;\n }\n\n expandNode(event: Event, vm: CategoryViewModel) {\n event.preventDefault();\n if (this.hasChildren(vm.category) && !vm.isExpanded) {\n vm.isExpanded = true;\n }\n }\n\n collapseNode(event: Event, vm: CategoryViewModel) {\n event.preventDefault();\n if (vm.isExpanded) {\n vm.isExpanded = false;\n }\n }\n\n IsCategorySelected(category: MJListCategoryEntity): boolean {\n return UUIDsEqual(this.selectedCategory?.ID, category.ID);\n }\n\n selectCategory(category: MJListCategoryEntity) {\n this.selectedCategory = category;\n this.selectedCategoryLists = this.listsByCategoryId.get(category.ID) || [];\n }\n\n getParentCategoryName(category: MJListCategoryEntity): string | null {\n if (!category.ParentID) return null;\n return this.categoryMap.get(category.ParentID)?.Name || null;\n }\n\n getSelectedCategoryListCount(): number {\n if (!this.selectedCategory) return 0;\n return this.listsByCategoryId.get(this.selectedCategory.ID)?.length || 0;\n }\n\n getSelectedCategoryChildCount(): number {\n if (!this.selectedCategory) return 0;\n return this.categories.filter(c => UUIDsEqual(c.ParentID, this.selectedCategory!.ID)).length\n }\n\n createCategory() {\n this.editingCategory = null;\n this.dialogName = '';\n this.dialogDescription = '';\n this.dialogParentId = null;\n this.buildAvailableParents();\n this.showDialog = true;\n }\n\n editCategory() {\n if (!this.selectedCategory) return;\n this.editingCategory = this.selectedCategory;\n this.dialogName = this.selectedCategory.Name;\n this.dialogDescription = this.selectedCategory.Description || '';\n this.dialogParentId = this.selectedCategory.ParentID || null;\n this.buildAvailableParents();\n this.showDialog = true;\n }\n\n deleteCategory() {\n if (!this.selectedCategory) return;\n\n this.categoryToDelete = this.selectedCategory;\n const categoryName = this.categoryToDelete.Name;\n const listsInCategory = this.listsByCategoryId.get(this.categoryToDelete.ID) || [];\n const childCategories = this.categories.filter(c => UUIDsEqual(c.ParentID, this.categoryToDelete!.ID));\n\n let message = `Are you sure you want to delete \"${categoryName}\"?`;\n if (listsInCategory.length > 0) {\n message += ` ${listsInCategory.length} list(s) will be uncategorized.`;\n }\n if (childCategories.length > 0) {\n message += ` ${childCategories.length} subcategory(ies) will become top-level.`;\n }\n\n this.deleteConfirmMessage = message;\n this.showDeleteConfirm = true;\n }\n\n cancelDelete() {\n this.showDeleteConfirm = false;\n this.categoryToDelete = null;\n this.deleteConfirmMessage = '';\n }\n\n async confirmDelete() {\n if (!this.categoryToDelete) return;\n\n const categoryName = this.categoryToDelete.Name;\n const categoryToDelete = this.categoryToDelete;\n this.showDeleteConfirm = false;\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n const deleted = await categoryToDelete.Delete();\n if (deleted) {\n this.notificationService.CreateSimpleNotification(`\"${categoryName}\" deleted`, 'success', 3000);\n } else {\n // Get the detailed error message from LatestResult\n const errorMessage = categoryToDelete.LatestResult?.Message || 'Unknown error occurred';\n console.error('Failed to delete category:', categoryToDelete.LatestResult);\n this.notificationService.CreateSimpleNotification(`Failed to delete category: ${errorMessage}`, 'error', 6000);\n }\n this.selectedCategory = null;\n this.categoryToDelete = null;\n await this.loadData();\n } catch (error) {\n console.error('Error deleting category:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error deleting category: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n closeDialog() {\n this.showDialog = false;\n this.editingCategory = null;\n }\n\n async saveCategory() {\n this.isSaving = true;\n this.cdr.detectChanges();\n\n const isEditing = !!this.editingCategory;\n const categoryName = this.dialogName;\n\n try {\n const md = this.ProviderToUse;\n let category: MJListCategoryEntity;\n\n if (this.editingCategory) {\n category = this.editingCategory;\n } else {\n category = await md.GetEntityObject<MJListCategoryEntity>('MJ: List Categories');\n category.UserID = md.CurrentUser!.ID;\n }\n\n category.Name = this.dialogName;\n category.Description = this.dialogDescription || null;\n category.ParentID = this.dialogParentId || null;\n\n const saved = await category.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n isEditing ? `\"${categoryName}\" updated` : `\"${categoryName}\" created`,\n 'success',\n 3000\n );\n this.closeDialog();\n await this.loadData();\n\n // Re-select the saved category\n if (isEditing) {\n this.selectedCategory = category;\n this.selectedCategoryLists = this.listsByCategoryId.get(category.ID) || [];\n }\n } else {\n // Get the detailed error message from LatestResult\n const errorMessage = category.LatestResult?.Message || 'Unknown error occurred';\n const action = isEditing ? 'update' : 'create';\n console.error(`Failed to ${action} category:`, category.LatestResult);\n this.notificationService.CreateSimpleNotification(\n `Failed to ${action} category: ${errorMessage}`,\n 'error',\n 6000\n );\n }\n } catch (error) {\n console.error('Error saving category:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error saving category: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Categories';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-tags';\n }\n}\n"]}
|
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { Component, ViewEncapsulation, HostListener } from '@angular/core';
|
|
8
8
|
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
9
9
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
|
-
import {
|
|
10
|
+
import { RunView } from '@memberjunction/core';
|
|
11
11
|
import { Subject } from 'rxjs';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@memberjunction/ng-base-application";
|
|
@@ -617,8 +617,8 @@ let ListsMyListsResource = class ListsMyListsResource extends BaseResourceCompon
|
|
|
617
617
|
async loadData() {
|
|
618
618
|
this.isLoading = true;
|
|
619
619
|
try {
|
|
620
|
-
const md =
|
|
621
|
-
const rv =
|
|
620
|
+
const md = this.ProviderToUse;
|
|
621
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
622
622
|
const userId = md.CurrentUser?.ID;
|
|
623
623
|
if (!userId) {
|
|
624
624
|
console.error('No current user');
|
|
@@ -897,8 +897,8 @@ let ListsMyListsResource = class ListsMyListsResource extends BaseResourceCompon
|
|
|
897
897
|
this.isLoading = true;
|
|
898
898
|
this.cdr.detectChanges();
|
|
899
899
|
try {
|
|
900
|
-
const md =
|
|
901
|
-
const rv =
|
|
900
|
+
const md = this.ProviderToUse;
|
|
901
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
902
902
|
const newList = await md.GetEntityObject('MJ: Lists');
|
|
903
903
|
newList.Name = `${listToDuplicate.Name} (Copy)`;
|
|
904
904
|
newList.Description = listToDuplicate.Description;
|
|
@@ -997,7 +997,7 @@ let ListsMyListsResource = class ListsMyListsResource extends BaseResourceCompon
|
|
|
997
997
|
const isEditing = !!this.editingList;
|
|
998
998
|
const listName = this.newListName;
|
|
999
999
|
try {
|
|
1000
|
-
const md =
|
|
1000
|
+
const md = this.ProviderToUse;
|
|
1001
1001
|
let list;
|
|
1002
1002
|
if (this.editingList) {
|
|
1003
1003
|
list = this.editingList;
|