@memberjunction/ng-dashboards 5.38.0 → 5.40.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/README.md +14 -7
- package/dist/AI/components/agents/agent-configuration.component.js +199 -198
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
- 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 +166 -58
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -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 +2 -1
- 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 +1 -0
- 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 +55 -36
- 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 +9 -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 +158 -117
- 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 +1 -0
- 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 +22 -8
- 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 +217 -860
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
- package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
- package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +1 -1
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +209 -208
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +130 -128
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +17 -17
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +578 -538
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -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 +331 -303
- package/dist/AI/components/vectors/vector-management-resource.component.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 +14 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/AI/services/cache-metrics.d.ts +50 -0
- package/dist/AI/services/cache-metrics.d.ts.map +1 -0
- package/dist/AI/services/cache-metrics.js +43 -0
- package/dist/AI/services/cache-metrics.js.map +1 -0
- package/dist/APIKeys/api-applications-panel.component.js +2 -2
- package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
- package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
- package/dist/APIKeys/api-keys-resource.component.js +132 -131
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +141 -141
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +15 -15
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +2 -2
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +2 -2
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +2 -2
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +72 -50
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +103 -102
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +52 -51
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +39 -38
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +92 -89
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +18 -17
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -85
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +155 -150
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +245 -243
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +18 -17
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +2 -2
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +236 -229
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +390 -389
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -2
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +3 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +3 -0
- package/dist/KnowledgeHub/index.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +525 -566
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +135 -134
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
- package/dist/MCP/mcp-dashboard.component.js +443 -438
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +436 -427
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +1 -1
- package/dist/Testing/components/testing-runs.component.js +116 -115
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +6 -7
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +173 -172
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +116 -92
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +57 -35
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +80 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +1 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +7 -1
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +12 -14
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +5 -14
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +4 -5
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +7 -5
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +57 -54
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
|
@@ -15,21 +15,22 @@ import * as i2 from "@memberjunction/ng-shared-generic";
|
|
|
15
15
|
import * as i3 from "@memberjunction/ng-credentials";
|
|
16
16
|
import * as i4 from "@angular/common";
|
|
17
17
|
const _c0 = ["categoryEditPanel"];
|
|
18
|
-
function
|
|
18
|
+
function CredentialsCategoriesResourceComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
19
19
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
20
|
-
i0.ɵɵelementStart(0, "button",
|
|
21
|
-
i0.ɵɵlistener("click", function
|
|
22
|
-
i0.ɵɵelement(1, "i",
|
|
23
|
-
i0.ɵɵ
|
|
24
|
-
i0.ɵɵ
|
|
20
|
+
i0.ɵɵelementStart(0, "button", 15);
|
|
21
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
|
|
22
|
+
i0.ɵɵelement(1, "i", 16);
|
|
23
|
+
i0.ɵɵelementStart(2, "span", 5);
|
|
24
|
+
i0.ɵɵtext(3, "New Category");
|
|
25
|
+
i0.ɵɵelementEnd()();
|
|
25
26
|
} }
|
|
26
|
-
function
|
|
27
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
27
|
+
function CredentialsCategoriesResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
i0.ɵɵelement(0, "mj-loading", 12);
|
|
28
29
|
} }
|
|
29
|
-
function
|
|
30
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
30
31
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
31
|
-
i0.ɵɵelementStart(0, "button",
|
|
32
|
-
i0.ɵɵlistener("click", function
|
|
32
|
+
i0.ɵɵelementStart(0, "button", 37);
|
|
33
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleExpand(node_r5, $event)); });
|
|
33
34
|
i0.ɵɵelement(1, "i");
|
|
34
35
|
i0.ɵɵelementEnd();
|
|
35
36
|
} if (rf & 2) {
|
|
@@ -37,11 +38,11 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
|
|
|
37
38
|
i0.ɵɵadvance();
|
|
38
39
|
i0.ɵɵclassMap(node_r5.expanded ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
|
|
39
40
|
} }
|
|
40
|
-
function
|
|
41
|
-
i0.ɵɵelement(0, "span",
|
|
41
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
42
|
+
i0.ɵɵelement(0, "span", 26);
|
|
42
43
|
} }
|
|
43
|
-
function
|
|
44
|
-
i0.ɵɵelementStart(0, "div",
|
|
44
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "div", 30);
|
|
45
46
|
i0.ɵɵtext(1);
|
|
46
47
|
i0.ɵɵpipe(2, "slice");
|
|
47
48
|
i0.ɵɵelementEnd();
|
|
@@ -50,9 +51,9 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
|
|
|
50
51
|
i0.ɵɵadvance();
|
|
51
52
|
i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind3(2, 2, node_r5.category.Description, 0, 50), "", node_r5.category.Description.length > 50 ? "..." : "", " ");
|
|
52
53
|
} }
|
|
53
|
-
function
|
|
54
|
-
i0.ɵɵelementStart(0, "span",
|
|
55
|
-
i0.ɵɵelement(1, "i",
|
|
54
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
55
|
+
i0.ɵɵelementStart(0, "span", 32);
|
|
56
|
+
i0.ɵɵelement(1, "i", 38);
|
|
56
57
|
i0.ɵɵtext(2);
|
|
57
58
|
i0.ɵɵelementEnd();
|
|
58
59
|
} if (rf & 2) {
|
|
@@ -60,9 +61,9 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
|
|
|
60
61
|
i0.ɵɵadvance(2);
|
|
61
62
|
i0.ɵɵtextInterpolate1(" ", node_r5.typeCount, " ");
|
|
62
63
|
} }
|
|
63
|
-
function
|
|
64
|
-
i0.ɵɵelementStart(0, "span",
|
|
65
|
-
i0.ɵɵelement(1, "i",
|
|
64
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
66
|
+
i0.ɵɵelement(1, "i", 39);
|
|
66
67
|
i0.ɵɵtext(2);
|
|
67
68
|
i0.ɵɵelementEnd();
|
|
68
69
|
} if (rf & 2) {
|
|
@@ -70,46 +71,46 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
|
|
|
70
71
|
i0.ɵɵadvance(2);
|
|
71
72
|
i0.ɵɵtextInterpolate1(" ", node_r5.children.length, " ");
|
|
72
73
|
} }
|
|
73
|
-
function
|
|
74
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
74
75
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
75
|
-
i0.ɵɵelementStart(0, "button",
|
|
76
|
-
i0.ɵɵlistener("click", function
|
|
77
|
-
i0.ɵɵelement(1, "i",
|
|
76
|
+
i0.ɵɵelementStart(0, "button", 40);
|
|
77
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_14_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(node_r5, $event)); });
|
|
78
|
+
i0.ɵɵelement(1, "i", 41);
|
|
78
79
|
i0.ɵɵelementEnd();
|
|
79
80
|
} }
|
|
80
|
-
function
|
|
81
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
81
82
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
82
|
-
i0.ɵɵelementStart(0, "button",
|
|
83
|
-
i0.ɵɵlistener("click", function
|
|
84
|
-
i0.ɵɵelement(1, "i",
|
|
83
|
+
i0.ɵɵelementStart(0, "button", 42);
|
|
84
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_15_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCategory(node_r5, $event)); });
|
|
85
|
+
i0.ɵɵelement(1, "i", 43);
|
|
85
86
|
i0.ɵɵelementEnd();
|
|
86
87
|
} }
|
|
87
|
-
function
|
|
88
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
88
89
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
89
|
-
i0.ɵɵelementStart(0, "div",
|
|
90
|
-
i0.ɵɵlistener("click", function
|
|
91
|
-
i0.ɵɵelementStart(1, "div",
|
|
92
|
-
i0.ɵɵconditionalCreate(2,
|
|
93
|
-
i0.ɵɵconditionalCreate(3,
|
|
94
|
-
i0.ɵɵelementStart(4, "div",
|
|
90
|
+
i0.ɵɵelementStart(0, "div", 23);
|
|
91
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Template_div_click_0_listener() { const node_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectNode(node_r5)); });
|
|
92
|
+
i0.ɵɵelementStart(1, "div", 24);
|
|
93
|
+
i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_2_Template, 2, 2, "button", 25);
|
|
94
|
+
i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_3_Template, 1, 0, "span", 26);
|
|
95
|
+
i0.ɵɵelementStart(4, "div", 27);
|
|
95
96
|
i0.ɵɵelement(5, "i");
|
|
96
97
|
i0.ɵɵelementEnd();
|
|
97
|
-
i0.ɵɵelementStart(6, "div",
|
|
98
|
+
i0.ɵɵelementStart(6, "div", 28)(7, "div", 29);
|
|
98
99
|
i0.ɵɵtext(8);
|
|
99
100
|
i0.ɵɵelementEnd();
|
|
100
|
-
i0.ɵɵconditionalCreate(9,
|
|
101
|
+
i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_9_Template, 3, 6, "div", 30);
|
|
101
102
|
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵelementStart(10, "div",
|
|
103
|
-
i0.ɵɵconditionalCreate(11,
|
|
104
|
-
i0.ɵɵconditionalCreate(12,
|
|
103
|
+
i0.ɵɵelementStart(10, "div", 31);
|
|
104
|
+
i0.ɵɵconditionalCreate(11, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_11_Template, 3, 1, "span", 32);
|
|
105
|
+
i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_12_Template, 3, 1, "span", 33);
|
|
105
106
|
i0.ɵɵelementEnd();
|
|
106
|
-
i0.ɵɵelementStart(13, "div",
|
|
107
|
-
i0.ɵɵconditionalCreate(14,
|
|
108
|
-
i0.ɵɵconditionalCreate(15,
|
|
107
|
+
i0.ɵɵelementStart(13, "div", 34);
|
|
108
|
+
i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_14_Template, 2, 0, "button", 35);
|
|
109
|
+
i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_15_Template, 2, 0, "button", 36);
|
|
109
110
|
i0.ɵɵelementEnd()()();
|
|
110
111
|
} if (rf & 2) {
|
|
111
112
|
const node_r5 = ctx.$implicit;
|
|
112
|
-
const ɵ$
|
|
113
|
+
const ɵ$index_48_r9 = ctx.$index;
|
|
113
114
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
114
115
|
i0.ɵɵstyleProp("padding-left", 12 + node_r5.level * 20, "px");
|
|
115
116
|
i0.ɵɵclassProp("selected", ctx_r2.IsNodeSelected(node_r5));
|
|
@@ -118,7 +119,7 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
|
|
|
118
119
|
i0.ɵɵadvance();
|
|
119
120
|
i0.ɵɵconditional(node_r5.children.length === 0 ? 3 : -1);
|
|
120
121
|
i0.ɵɵadvance();
|
|
121
|
-
i0.ɵɵstyleProp("background-color", ctx_r2.getCategoryColor(ɵ$
|
|
122
|
+
i0.ɵɵstyleProp("background-color", ctx_r2.getCategoryColor(ɵ$index_48_r9) + "15")("color", ctx_r2.getCategoryColor(ɵ$index_48_r9));
|
|
122
123
|
i0.ɵɵadvance();
|
|
123
124
|
i0.ɵɵclassMap(node_r5.category.IconClass || "fa-solid fa-folder");
|
|
124
125
|
i0.ɵɵadvance(3);
|
|
@@ -134,47 +135,47 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
|
|
|
134
135
|
i0.ɵɵadvance();
|
|
135
136
|
i0.ɵɵconditional(ctx_r2.UserCanDelete && node_r5.children.length === 0 && node_r5.typeCount === 0 ? 15 : -1);
|
|
136
137
|
} }
|
|
137
|
-
function
|
|
138
|
-
i0.ɵɵelementStart(0, "div",
|
|
139
|
-
i0.ɵɵrepeaterCreate(1,
|
|
138
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
140
|
+
i0.ɵɵrepeaterCreate(1, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Template, 16, 18, "div", 22, i0.ɵɵrepeaterTrackByIdentity);
|
|
140
141
|
i0.ɵɵelementEnd();
|
|
141
142
|
} if (rf & 2) {
|
|
142
143
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
143
144
|
i0.ɵɵadvance();
|
|
144
145
|
i0.ɵɵrepeater(ctx_r2.getFlattenedNodes());
|
|
145
146
|
} }
|
|
146
|
-
function
|
|
147
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
147
148
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
148
149
|
i0.ɵɵelementStart(0, "p");
|
|
149
150
|
i0.ɵɵtext(1, " No categories match your search. ");
|
|
150
|
-
i0.ɵɵelementStart(2, "button",
|
|
151
|
-
i0.ɵɵlistener("click", function
|
|
151
|
+
i0.ɵɵelementStart(2, "button", 47);
|
|
152
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearSearch()); });
|
|
152
153
|
i0.ɵɵtext(3, "Clear search");
|
|
153
154
|
i0.ɵɵelementEnd()();
|
|
154
155
|
} }
|
|
155
|
-
function
|
|
156
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
156
157
|
i0.ɵɵelementStart(0, "p");
|
|
157
158
|
i0.ɵɵtext(1, " Get started by creating your first category. ");
|
|
158
159
|
i0.ɵɵelementEnd();
|
|
159
160
|
} }
|
|
160
|
-
function
|
|
161
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
161
162
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
162
|
-
i0.ɵɵelementStart(0, "button",
|
|
163
|
-
i0.ɵɵlistener("click", function
|
|
164
|
-
i0.ɵɵelement(1, "i",
|
|
163
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
164
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
|
|
165
|
+
i0.ɵɵelement(1, "i", 16);
|
|
165
166
|
i0.ɵɵtext(2, " Create Category ");
|
|
166
167
|
i0.ɵɵelementEnd();
|
|
167
168
|
} }
|
|
168
|
-
function
|
|
169
|
-
i0.ɵɵelementStart(0, "div",
|
|
170
|
-
i0.ɵɵelement(2, "i",
|
|
169
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "div", 44);
|
|
171
|
+
i0.ɵɵelement(2, "i", 45);
|
|
171
172
|
i0.ɵɵelementEnd();
|
|
172
173
|
i0.ɵɵelementStart(3, "h3");
|
|
173
174
|
i0.ɵɵtext(4, "No Categories");
|
|
174
175
|
i0.ɵɵelementEnd();
|
|
175
|
-
i0.ɵɵconditionalCreate(5,
|
|
176
|
-
i0.ɵɵconditionalCreate(6,
|
|
177
|
-
i0.ɵɵconditionalCreate(7,
|
|
176
|
+
i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_5_Template, 4, 0, "p");
|
|
177
|
+
i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_6_Template, 2, 0, "p");
|
|
178
|
+
i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_7_Template, 3, 0, "button", 46);
|
|
178
179
|
i0.ɵɵelementEnd();
|
|
179
180
|
} if (rf & 2) {
|
|
180
181
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -185,8 +186,8 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Tem
|
|
|
185
186
|
i0.ɵɵadvance();
|
|
186
187
|
i0.ɵɵconditional(ctx_r2.UserCanCreate && !ctx_r2.searchText ? 7 : -1);
|
|
187
188
|
} }
|
|
188
|
-
function
|
|
189
|
-
i0.ɵɵelementStart(0, "span",
|
|
189
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
190
|
+
i0.ɵɵelementStart(0, "span", 52);
|
|
190
191
|
i0.ɵɵtext(1);
|
|
191
192
|
i0.ɵɵelementEnd();
|
|
192
193
|
} if (rf & 2) {
|
|
@@ -194,19 +195,19 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
|
|
|
194
195
|
i0.ɵɵadvance();
|
|
195
196
|
i0.ɵɵtextInterpolate1(" Level ", ctx_r2.selectedNode.level + 1, " ");
|
|
196
197
|
} }
|
|
197
|
-
function
|
|
198
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
198
199
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
199
|
-
i0.ɵɵelementStart(0, "button",
|
|
200
|
-
i0.ɵɵlistener("click", function
|
|
201
|
-
i0.ɵɵelement(1, "i",
|
|
200
|
+
i0.ɵɵelementStart(0, "button", 40);
|
|
201
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(ctx_r2.selectedNode)); });
|
|
202
|
+
i0.ɵɵelement(1, "i", 41);
|
|
202
203
|
i0.ɵɵelementEnd();
|
|
203
204
|
} }
|
|
204
|
-
function
|
|
205
|
-
i0.ɵɵelementStart(0, "div",
|
|
206
|
-
i0.ɵɵelement(2, "i",
|
|
205
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
i0.ɵɵelementStart(0, "div", 61)(1, "h3");
|
|
207
|
+
i0.ɵɵelement(2, "i", 66);
|
|
207
208
|
i0.ɵɵtext(3, " Description ");
|
|
208
209
|
i0.ɵɵelementEnd();
|
|
209
|
-
i0.ɵɵelementStart(4, "p",
|
|
210
|
+
i0.ɵɵelementStart(4, "p", 67);
|
|
210
211
|
i0.ɵɵtext(5);
|
|
211
212
|
i0.ɵɵelementEnd()();
|
|
212
213
|
} if (rf & 2) {
|
|
@@ -214,8 +215,8 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
|
|
|
214
215
|
i0.ɵɵadvance(5);
|
|
215
216
|
i0.ɵɵtextInterpolate(ctx_r2.selectedNode.category.Description);
|
|
216
217
|
} }
|
|
217
|
-
function
|
|
218
|
-
i0.ɵɵelementStart(0, "div",
|
|
218
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
219
|
+
i0.ɵɵelementStart(0, "div", 73);
|
|
219
220
|
i0.ɵɵtext(1);
|
|
220
221
|
i0.ɵɵpipe(2, "slice");
|
|
221
222
|
i0.ɵɵelementEnd();
|
|
@@ -224,14 +225,14 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
|
|
|
224
225
|
i0.ɵɵadvance();
|
|
225
226
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind3(2, 1, type_r14.Description, 0, 60));
|
|
226
227
|
} }
|
|
227
|
-
function
|
|
228
|
-
i0.ɵɵelementStart(0, "div",
|
|
228
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
229
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "div", 70);
|
|
229
230
|
i0.ɵɵelement(2, "i");
|
|
230
231
|
i0.ɵɵelementEnd();
|
|
231
|
-
i0.ɵɵelementStart(3, "div",
|
|
232
|
+
i0.ɵɵelementStart(3, "div", 71)(4, "div", 72);
|
|
232
233
|
i0.ɵɵtext(5);
|
|
233
234
|
i0.ɵɵelementEnd();
|
|
234
|
-
i0.ɵɵconditionalCreate(6,
|
|
235
|
+
i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Conditional_6_Template, 3, 5, "div", 73);
|
|
235
236
|
i0.ɵɵelementEnd()();
|
|
236
237
|
} if (rf & 2) {
|
|
237
238
|
const type_r14 = ctx.$implicit;
|
|
@@ -242,21 +243,21 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
|
|
|
242
243
|
i0.ɵɵadvance();
|
|
243
244
|
i0.ɵɵconditional(type_r14.Description ? 6 : -1);
|
|
244
245
|
} }
|
|
245
|
-
function
|
|
246
|
-
i0.ɵɵelementStart(0, "div",
|
|
247
|
-
i0.ɵɵelement(2, "i",
|
|
246
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
247
|
+
i0.ɵɵelementStart(0, "div", 62)(1, "h3");
|
|
248
|
+
i0.ɵɵelement(2, "i", 38);
|
|
248
249
|
i0.ɵɵtext(3, " Credential Types ");
|
|
249
250
|
i0.ɵɵelementEnd();
|
|
250
|
-
i0.ɵɵelementStart(4, "div",
|
|
251
|
-
i0.ɵɵrepeaterCreate(5,
|
|
251
|
+
i0.ɵɵelementStart(4, "div", 68);
|
|
252
|
+
i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Template, 7, 4, "div", 69, i0.ɵɵrepeaterTrackByIdentity);
|
|
252
253
|
i0.ɵɵelementEnd()();
|
|
253
254
|
} if (rf & 2) {
|
|
254
255
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
255
256
|
i0.ɵɵadvance(5);
|
|
256
257
|
i0.ɵɵrepeater(ctx_r2.getTypesForCategory(ctx_r2.selectedNode.category.Name));
|
|
257
258
|
} }
|
|
258
|
-
function
|
|
259
|
-
i0.ɵɵelementStart(0, "span",
|
|
259
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
260
|
+
i0.ɵɵelementStart(0, "span", 78);
|
|
260
261
|
i0.ɵɵtext(1);
|
|
261
262
|
i0.ɵɵelementEnd();
|
|
262
263
|
} if (rf & 2) {
|
|
@@ -264,15 +265,15 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
|
|
|
264
265
|
i0.ɵɵadvance();
|
|
265
266
|
i0.ɵɵtextInterpolate1("", child_r16.typeCount, " types");
|
|
266
267
|
} }
|
|
267
|
-
function
|
|
268
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
268
269
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
269
|
-
i0.ɵɵelementStart(0, "div",
|
|
270
|
-
i0.ɵɵlistener("click", function
|
|
270
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
271
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Template_div_click_0_listener() { const child_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectNode(child_r16)); });
|
|
271
272
|
i0.ɵɵelement(1, "i");
|
|
272
273
|
i0.ɵɵelementStart(2, "span");
|
|
273
274
|
i0.ɵɵtext(3);
|
|
274
275
|
i0.ɵɵelementEnd();
|
|
275
|
-
i0.ɵɵconditionalCreate(4,
|
|
276
|
+
i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Conditional_4_Template, 2, 1, "span", 78);
|
|
276
277
|
i0.ɵɵelementEnd();
|
|
277
278
|
} if (rf & 2) {
|
|
278
279
|
const child_r16 = ctx.$implicit;
|
|
@@ -283,63 +284,63 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
|
|
|
283
284
|
i0.ɵɵadvance();
|
|
284
285
|
i0.ɵɵconditional(child_r16.typeCount > 0 ? 4 : -1);
|
|
285
286
|
} }
|
|
286
|
-
function
|
|
287
|
-
i0.ɵɵelementStart(0, "div",
|
|
288
|
-
i0.ɵɵelement(2, "i",
|
|
287
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
288
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "h3");
|
|
289
|
+
i0.ɵɵelement(2, "i", 74);
|
|
289
290
|
i0.ɵɵtext(3, " Subcategories ");
|
|
290
291
|
i0.ɵɵelementEnd();
|
|
291
|
-
i0.ɵɵelementStart(4, "div",
|
|
292
|
-
i0.ɵɵrepeaterCreate(5,
|
|
292
|
+
i0.ɵɵelementStart(4, "div", 75);
|
|
293
|
+
i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Template, 5, 4, "div", 76, i0.ɵɵrepeaterTrackByIdentity);
|
|
293
294
|
i0.ɵɵelementEnd()();
|
|
294
295
|
} if (rf & 2) {
|
|
295
296
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
296
297
|
i0.ɵɵadvance(5);
|
|
297
298
|
i0.ɵɵrepeater(ctx_r2.selectedNode.children);
|
|
298
299
|
} }
|
|
299
|
-
function
|
|
300
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
300
301
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
301
|
-
i0.ɵɵelementStart(0, "button",
|
|
302
|
-
i0.ɵɵlistener("click", function
|
|
303
|
-
i0.ɵɵelement(1, "i",
|
|
302
|
+
i0.ɵɵelementStart(0, "button", 79);
|
|
303
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.viewTypesForCategory(ctx_r2.selectedNode.category.Name)); });
|
|
304
|
+
i0.ɵɵelement(1, "i", 38);
|
|
304
305
|
i0.ɵɵtext(2, " View Types ");
|
|
305
306
|
i0.ɵɵelementEnd();
|
|
306
307
|
} }
|
|
307
|
-
function
|
|
308
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
308
309
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
309
|
-
i0.ɵɵelementStart(0, "div",
|
|
310
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 49)(2, "div", 50);
|
|
310
311
|
i0.ɵɵelement(3, "i");
|
|
311
312
|
i0.ɵɵelementEnd();
|
|
312
|
-
i0.ɵɵelementStart(4, "div",
|
|
313
|
+
i0.ɵɵelementStart(4, "div", 51)(5, "h2");
|
|
313
314
|
i0.ɵɵtext(6);
|
|
314
315
|
i0.ɵɵelementEnd();
|
|
315
|
-
i0.ɵɵconditionalCreate(7,
|
|
316
|
+
i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_7_Template, 2, 1, "span", 52);
|
|
316
317
|
i0.ɵɵelementEnd();
|
|
317
|
-
i0.ɵɵelementStart(8, "div",
|
|
318
|
-
i0.ɵɵconditionalCreate(9,
|
|
319
|
-
i0.ɵɵelementStart(10, "button",
|
|
320
|
-
i0.ɵɵlistener("click", function
|
|
321
|
-
i0.ɵɵelement(11, "i",
|
|
318
|
+
i0.ɵɵelementStart(8, "div", 53);
|
|
319
|
+
i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_9_Template, 2, 0, "button", 35);
|
|
320
|
+
i0.ɵɵelementStart(10, "button", 54);
|
|
321
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectedNode = null); });
|
|
322
|
+
i0.ɵɵelement(11, "i", 55);
|
|
322
323
|
i0.ɵɵelementEnd()()();
|
|
323
|
-
i0.ɵɵelementStart(12, "div",
|
|
324
|
+
i0.ɵɵelementStart(12, "div", 56)(13, "div", 57)(14, "div", 58)(15, "div", 59);
|
|
324
325
|
i0.ɵɵtext(16);
|
|
325
326
|
i0.ɵɵelementEnd();
|
|
326
|
-
i0.ɵɵelementStart(17, "div",
|
|
327
|
+
i0.ɵɵelementStart(17, "div", 60);
|
|
327
328
|
i0.ɵɵtext(18, "Credential Types");
|
|
328
329
|
i0.ɵɵelementEnd()();
|
|
329
|
-
i0.ɵɵelementStart(19, "div",
|
|
330
|
+
i0.ɵɵelementStart(19, "div", 58)(20, "div", 59);
|
|
330
331
|
i0.ɵɵtext(21);
|
|
331
332
|
i0.ɵɵelementEnd();
|
|
332
|
-
i0.ɵɵelementStart(22, "div",
|
|
333
|
+
i0.ɵɵelementStart(22, "div", 60);
|
|
333
334
|
i0.ɵɵtext(23, "Subcategories");
|
|
334
335
|
i0.ɵɵelementEnd()()();
|
|
335
|
-
i0.ɵɵconditionalCreate(24,
|
|
336
|
-
i0.ɵɵconditionalCreate(25,
|
|
337
|
-
i0.ɵɵconditionalCreate(26,
|
|
338
|
-
i0.ɵɵelementStart(27, "div",
|
|
339
|
-
i0.ɵɵconditionalCreate(28,
|
|
340
|
-
i0.ɵɵelementStart(29, "button",
|
|
341
|
-
i0.ɵɵlistener("click", function
|
|
342
|
-
i0.ɵɵelement(30, "i",
|
|
336
|
+
i0.ɵɵconditionalCreate(24, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_24_Template, 6, 1, "div", 61);
|
|
337
|
+
i0.ɵɵconditionalCreate(25, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_Template, 7, 0, "div", 62);
|
|
338
|
+
i0.ɵɵconditionalCreate(26, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_Template, 7, 0, "div", 63);
|
|
339
|
+
i0.ɵɵelementStart(27, "div", 64);
|
|
340
|
+
i0.ɵɵconditionalCreate(28, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_28_Template, 3, 0, "button", 65);
|
|
341
|
+
i0.ɵɵelementStart(29, "button", 48);
|
|
342
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createCredentialWithCategory(ctx_r2.selectedNode.category.ID)); });
|
|
343
|
+
i0.ɵɵelement(30, "i", 16);
|
|
343
344
|
i0.ɵɵtext(31, " Create Credential ");
|
|
344
345
|
i0.ɵɵelementEnd()()()();
|
|
345
346
|
} if (rf & 2) {
|
|
@@ -367,9 +368,9 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Tem
|
|
|
367
368
|
i0.ɵɵadvance(2);
|
|
368
369
|
i0.ɵɵconditional(ctx_r2.selectedNode.typeCount > 0 ? 28 : -1);
|
|
369
370
|
} }
|
|
370
|
-
function
|
|
371
|
-
i0.ɵɵelementStart(0, "div",
|
|
372
|
-
i0.ɵɵelement(2, "i",
|
|
371
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
372
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 80);
|
|
373
|
+
i0.ɵɵelement(2, "i", 81);
|
|
373
374
|
i0.ɵɵelementEnd();
|
|
374
375
|
i0.ɵɵelementStart(3, "h3");
|
|
375
376
|
i0.ɵɵtext(4, "Select a Category");
|
|
@@ -378,13 +379,13 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_5_Tem
|
|
|
378
379
|
i0.ɵɵtext(6, "Click on a category to view its details and credential types");
|
|
379
380
|
i0.ɵɵelementEnd()();
|
|
380
381
|
} }
|
|
381
|
-
function
|
|
382
|
-
i0.ɵɵelementStart(0, "div",
|
|
383
|
-
i0.ɵɵconditionalCreate(2,
|
|
384
|
-
i0.ɵɵconditionalCreate(3,
|
|
382
|
+
function CredentialsCategoriesResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
383
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 17);
|
|
384
|
+
i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_Template, 3, 0, "div", 18);
|
|
385
|
+
i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Template, 8, 3, "div", 19);
|
|
385
386
|
i0.ɵɵelementEnd();
|
|
386
|
-
i0.ɵɵconditionalCreate(4,
|
|
387
|
-
i0.ɵɵconditionalCreate(5,
|
|
387
|
+
i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template, 32, 15, "div", 20);
|
|
388
|
+
i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_5_Template, 7, 0, "div", 21);
|
|
388
389
|
i0.ɵɵelementEnd();
|
|
389
390
|
} if (rf & 2) {
|
|
390
391
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -750,44 +751,46 @@ let CredentialsCategoriesResourceComponent = class CredentialsCategoriesResource
|
|
|
750
751
|
} if (rf & 2) {
|
|
751
752
|
let _t;
|
|
752
753
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.categoryEditPanel = _t.first);
|
|
753
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
754
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 5, consts: [["categoryEditPanel", ""], ["Title", "Categories", "Icon", "fa-solid fa-folder-tree"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand all", 3, "click"], [1, "fa-solid", "fa-expand"], [1, "action-btn-label"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse all", 3, "click"], [1, "fa-solid", "fa-compress"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search categories...", 3, "ValueChange", "Value"], ["text", "Loading categories..."], [1, "categories-layout"], [3, "saved", "deleted"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "tree-panel"], [1, "tree-container"], [1, "empty-state"], [1, "detail-panel"], [1, "no-selection"], [1, "tree-node", 3, "selected", "padding-left"], [1, "tree-node", 3, "click"], [1, "node-content"], [1, "expand-btn"], [1, "expand-placeholder"], [1, "node-icon"], [1, "node-info"], [1, "node-name"], [1, "node-description"], [1, "node-badges"], [1, "badge", "types"], [1, "badge", "children"], [1, "node-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "expand-btn", 3, "click"], [1, "fa-solid", "fa-shapes"], [1, "fa-solid", "fa-folder"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-open"], [1, "btn-primary"], [1, "btn-link", 3, "click"], [1, "btn-primary", 3, "click"], [1, "detail-header"], [1, "detail-icon"], [1, "detail-title"], [1, "level-badge"], [1, "detail-actions"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-body"], [1, "detail-stats"], [1, "detail-stat"], [1, "stat-value"], [1, "stat-label"], [1, "description-section"], [1, "types-section"], [1, "subcategories-section"], [1, "detail-quick-actions"], [1, "btn-secondary"], [1, "fa-solid", "fa-align-left"], [1, "description"], [1, "type-list"], [1, "type-item"], [1, "type-icon"], [1, "type-info"], [1, "type-name"], [1, "type-desc"], [1, "fa-solid", "fa-folder-tree"], [1, "subcategory-list"], [1, "subcategory-item"], [1, "subcategory-item", 3, "click"], [1, "sub-type-count"], [1, "btn-secondary", 3, "click"], [1, "no-selection-icon"], [1, "fa-solid", "fa-hand-pointer"]], template: function CredentialsCategoriesResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
754
755
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
755
756
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2)(3, "button", 3);
|
|
756
757
|
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.expandAll()); });
|
|
757
758
|
i0.ɵɵelement(4, "i", 4);
|
|
758
|
-
i0.ɵɵ
|
|
759
|
-
i0.ɵɵ
|
|
760
|
-
i0.ɵɵ
|
|
761
|
-
i0.ɵɵ
|
|
762
|
-
i0.ɵɵ
|
|
763
|
-
i0.ɵɵ
|
|
764
|
-
i0.ɵɵ
|
|
765
|
-
i0.ɵɵ
|
|
766
|
-
i0.ɵɵ
|
|
759
|
+
i0.ɵɵelementStart(5, "span", 5);
|
|
760
|
+
i0.ɵɵtext(6, "Expand");
|
|
761
|
+
i0.ɵɵelementEnd()();
|
|
762
|
+
i0.ɵɵelementStart(7, "button", 6);
|
|
763
|
+
i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.collapseAll()); });
|
|
764
|
+
i0.ɵɵelement(8, "i", 7);
|
|
765
|
+
i0.ɵɵelementStart(9, "span", 5);
|
|
766
|
+
i0.ɵɵtext(10, "Collapse");
|
|
767
|
+
i0.ɵɵelementEnd()();
|
|
768
|
+
i0.ɵɵelementStart(11, "mj-refresh-button", 8);
|
|
769
|
+
i0.ɵɵlistener("Clicked", function CredentialsCategoriesResourceComponent_Template_mj_refresh_button_Clicked_11_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
|
|
767
770
|
i0.ɵɵelementEnd();
|
|
768
|
-
i0.ɵɵconditionalCreate(
|
|
771
|
+
i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_12_Template, 4, 0, "button", 9);
|
|
769
772
|
i0.ɵɵelementEnd();
|
|
770
|
-
i0.ɵɵelementStart(
|
|
771
|
-
i0.ɵɵlistener("ValueChange", function
|
|
773
|
+
i0.ɵɵelementStart(13, "div", 10)(14, "mj-page-search", 11);
|
|
774
|
+
i0.ɵɵlistener("ValueChange", function CredentialsCategoriesResourceComponent_Template_mj_page_search_ValueChange_14_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
|
|
772
775
|
i0.ɵɵelementEnd()()();
|
|
773
|
-
i0.ɵɵelementStart(
|
|
774
|
-
i0.ɵɵconditionalCreate(
|
|
775
|
-
i0.ɵɵconditionalCreate(
|
|
776
|
+
i0.ɵɵelementStart(15, "mj-page-body");
|
|
777
|
+
i0.ɵɵconditionalCreate(16, CredentialsCategoriesResourceComponent_Conditional_16_Template, 1, 0, "mj-loading", 12);
|
|
778
|
+
i0.ɵɵconditionalCreate(17, CredentialsCategoriesResourceComponent_Conditional_17_Template, 6, 4, "div", 13);
|
|
776
779
|
i0.ɵɵelementEnd();
|
|
777
|
-
i0.ɵɵelementStart(
|
|
778
|
-
i0.ɵɵlistener("saved", function
|
|
780
|
+
i0.ɵɵelementStart(18, "mj-credential-category-edit-panel", 14, 0);
|
|
781
|
+
i0.ɵɵlistener("saved", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_saved_18_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategorySaved($event)); })("deleted", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_deleted_18_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategoryDeleted($event)); });
|
|
779
782
|
i0.ɵɵelementEnd()();
|
|
780
783
|
} if (rf & 2) {
|
|
781
|
-
i0.ɵɵadvance(
|
|
784
|
+
i0.ɵɵadvance(11);
|
|
782
785
|
i0.ɵɵproperty("Loading", ctx.isLoading);
|
|
783
786
|
i0.ɵɵadvance();
|
|
784
|
-
i0.ɵɵconditional(ctx.UserCanCreate ?
|
|
787
|
+
i0.ɵɵconditional(ctx.UserCanCreate ? 12 : -1);
|
|
785
788
|
i0.ɵɵadvance(2);
|
|
786
789
|
i0.ɵɵproperty("Value", ctx.searchText);
|
|
787
790
|
i0.ɵɵadvance(2);
|
|
788
|
-
i0.ɵɵconditional(ctx.isLoading ?
|
|
791
|
+
i0.ɵɵconditional(ctx.isLoading ? 16 : -1);
|
|
789
792
|
i0.ɵɵadvance();
|
|
790
|
-
i0.ɵɵconditional(!ctx.isLoading ?
|
|
793
|
+
i0.ɵɵconditional(!ctx.isLoading ? 17 : -1);
|
|
791
794
|
} }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageSearchComponent, i1.MJRefreshButtonComponent, i2.LoadingComponent, i3.CredentialCategoryEditPanelComponent, i4.SlicePipe], styles: ["\n\n.categories-layout[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n\n\n.tree-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container[_ngcontent-%COMP%] {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n\n\n.tree-node[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n\n\n.expand-btn[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder[_ngcontent-%COMP%] {\n width: 24px;\n flex-shrink: 0;\n}\n\n\n\n.node-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.node-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.node-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.node-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.node-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover .node-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-body[_ngcontent-%COMP%] {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n.detail-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n\n\n.description-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n\n\n.types-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.type-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.type-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.subcategories-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.subcategory-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n\n\n.detail-quick-actions[_ngcontent-%COMP%] {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions[_ngcontent-%COMP%] .btn-secondary[_ngcontent-%COMP%], \n.detail-quick-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n}\n\n\n\n.no-selection[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-border-strong);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n@media (max-width: 1024px) {\n .categories-layout[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .detail-panel[_ngcontent-%COMP%], \n .no-selection[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .categories-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%], \n .toolbar-right[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .search-container[_ngcontent-%COMP%] {\n max-width: none;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: flex-end;\n }\n}"], changeDetection: 0 });
|
|
792
795
|
};
|
|
793
796
|
CredentialsCategoriesResourceComponent = __decorate([
|
|
@@ -796,7 +799,7 @@ CredentialsCategoriesResourceComponent = __decorate([
|
|
|
796
799
|
export { CredentialsCategoriesResourceComponent };
|
|
797
800
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsCategoriesResourceComponent, [{
|
|
798
801
|
type: Component,
|
|
799
|
-
args: [{ standalone: false, selector: 'mj-credentials-categories-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Categories\"\n Icon=\"fa-solid fa-folder-tree\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n The categories count mirrored the visible tree; the cross-entity\n types count belongs on the Types page, not here. -->\n\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"expandAll()\" title=\"Expand all\">\n <i class=\"fa-solid fa-expand\"></i> Expand\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"collapseAll()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-compress\"></i> Collapse\n </button>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i> New Category\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search categories...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading categories...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <div class=\"categories-layout\">\n <!-- Tree Container -->\n <div class=\"tree-panel\">\n @if (categoryTree.length > 0) {\n <div class=\"tree-container\">\n @for (node of getFlattenedNodes(); track node; let i = $index) {\n <div\n class=\"tree-node\"\n [class.selected]=\"IsNodeSelected(node)\"\n [style.padding-left.px]=\"12 + (node.level * 20)\"\n (click)=\"selectNode(node)\"\n >\n <div class=\"node-content\">\n @if (node.children.length > 0) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node, $event)\"\n >\n <i [class]=\"node.expanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (node.children.length === 0) {\n <span class=\"expand-placeholder\"></span>\n }\n <div class=\"node-icon\" [style.backgroundColor]=\"getCategoryColor(i) + '15'\" [style.color]=\"getCategoryColor(i)\">\n <i [class]=\"node.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"node-info\">\n <div class=\"node-name\">{{node.category.Name}}</div>\n @if (node.category.Description) {\n <div class=\"node-description\">\n {{node.category.Description | slice:0:50}}{{node.category.Description.length > 50 ? '...' : ''}}\n </div>\n }\n </div>\n <div class=\"node-badges\">\n @if (node.typeCount > 0) {\n <span class=\"badge types\">\n <i class=\"fa-solid fa-shapes\"></i>\n {{node.typeCount}}\n </span>\n }\n @if (node.children.length > 0) {\n <span class=\"badge children\">\n <i class=\"fa-solid fa-folder\"></i>\n {{node.children.length}}\n </span>\n }\n </div>\n <div class=\"node-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCategory(node, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete && node.children.length === 0 && node.typeCount === 0) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCategory(node, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (categoryTree.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Categories</h3>\n @if (searchText) {\n <p>\n No categories match your search.\n <button class=\"btn-link\" (click)=\"clearSearch()\">Clear search</button>\n </p>\n }\n @if (!searchText) {\n <p>\n Get started by creating your first category.\n </p>\n }\n @if (UserCanCreate && !searchText) {\n <button class=\"btn-primary\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Category\n </button>\n }\n </div>\n }\n </div>\n <!-- Detail Panel -->\n @if (selectedNode) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-icon\" [style.backgroundColor]=\"getCategoryColor(0) + '15'\" [style.color]=\"getCategoryColor(0)\">\n <i [class]=\"selectedNode.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"detail-title\">\n <h2>{{selectedNode.category.Name}}</h2>\n @if (selectedNode.level > 0) {\n <span class=\"level-badge\">\n Level {{selectedNode.level + 1}}\n </span>\n }\n </div>\n <div class=\"detail-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"editCategory(selectedNode)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n <button class=\"close-btn\" (click)=\"selectedNode = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-body\">\n <!-- Stats -->\n <div class=\"detail-stats\">\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.typeCount}}</div>\n <div class=\"stat-label\">Credential Types</div>\n </div>\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.children.length}}</div>\n <div class=\"stat-label\">Subcategories</div>\n </div>\n </div>\n <!-- Description -->\n @if (selectedNode.category.Description) {\n <div class=\"description-section\">\n <h3>\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h3>\n <p class=\"description\">{{selectedNode.category.Description}}</p>\n </div>\n }\n <!-- Types in Category -->\n @if (selectedNode.typeCount > 0) {\n <div class=\"types-section\">\n <h3>\n <i class=\"fa-solid fa-shapes\"></i>\n Credential Types\n </h3>\n <div class=\"type-list\">\n @for (type of getTypesForCategory(selectedNode.category.Name); track type) {\n <div class=\"type-item\">\n <div class=\"type-icon\">\n <i [class]=\"type.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.Name}}</div>\n @if (type.Description) {\n <div class=\"type-desc\">{{type.Description | slice:0:60}}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Subcategories -->\n @if (selectedNode.children.length > 0) {\n <div class=\"subcategories-section\">\n <h3>\n <i class=\"fa-solid fa-folder-tree\"></i>\n Subcategories\n </h3>\n <div class=\"subcategory-list\">\n @for (child of selectedNode.children; track child) {\n <div class=\"subcategory-item\" (click)=\"selectNode(child)\">\n <i [class]=\"child.category.IconClass || 'fa-solid fa-folder'\"></i>\n <span>{{child.category.Name}}</span>\n @if (child.typeCount > 0) {\n <span class=\"sub-type-count\">{{child.typeCount}} types</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Quick Actions -->\n <div class=\"detail-quick-actions\">\n @if (selectedNode.typeCount > 0) {\n <button\n class=\"btn-secondary\"\n (click)=\"viewTypesForCategory(selectedNode.category.Name)\"\n >\n <i class=\"fa-solid fa-shapes\"></i>\n View Types\n </button>\n }\n <button\n class=\"btn-primary\"\n (click)=\"createCredentialWithCategory(selectedNode.category.ID)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </div>\n </div>\n }\n <!-- No Selection -->\n @if (!selectedNode && categoryTree.length > 0) {\n <div class=\"no-selection\">\n <div class=\"no-selection-icon\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n </div>\n <h3>Select a Category</h3>\n <p>Click on a category to view its details and credential types</p>\n </div>\n }\n </div>\n }\n </mj-page-body>\n\n <!-- Category Edit Panel -->\n <mj-credential-category-edit-panel\n #categoryEditPanel\n (saved)=\"onCategorySaved($any($event))\"\n (deleted)=\"onCategoryDeleted($any($event))\"\n ></mj-credential-category-edit-panel>\n</mj-page-layout>\n", styles: ["/* Layout */\n.categories-layout {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n/* Tree Panel */\n.tree-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n/* Tree Node */\n.tree-node {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node:last-child {\n border-bottom: none;\n}\n\n.tree-node:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n/* Expand Button */\n.expand-btn {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn i {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder {\n width: 24px;\n flex-shrink: 0;\n}\n\n/* Node Icon */\n.node-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon i {\n font-size: 14px;\n}\n\n/* Node Info */\n.node-info {\n flex: 1;\n min-width: 0;\n}\n\n.node-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Node Badges */\n.node-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge i {\n font-size: 10px;\n}\n\n/* Node Actions */\n.node-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node:hover .node-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n/* Detail Panel */\n.detail-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon i {\n font-size: 20px;\n}\n\n.detail-title {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title h2 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n/* Detail Body */\n.detail-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Detail Stats */\n.detail-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat .stat-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Description Section */\n.description-section {\n margin-bottom: 20px;\n}\n\n.description-section h3,\n.types-section h3,\n.subcategories-section h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section h3 i,\n.types-section h3 i,\n.subcategories-section h3 i {\n font-size: 12px;\n}\n\n.description {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n/* Types Section */\n.types-section {\n margin-bottom: 20px;\n}\n\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Subcategories Section */\n.subcategories-section {\n margin-bottom: 20px;\n}\n\n.subcategory-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item span {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n/* Quick Actions */\n.detail-quick-actions {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions .btn-secondary,\n.detail-quick-actions .btn-primary {\n flex: 1;\n}\n\n.btn-secondary {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-border-default);\n}\n\n/* No Selection State */\n.no-selection {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon i {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection p {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--mj-border-strong);\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .detail-panel,\n .no-selection {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container {\n padding: 16px;\n }\n\n .categories-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left,\n .toolbar-right {\n width: 100%;\n }\n\n .search-container {\n max-width: none;\n }\n\n .toolbar-right {\n justify-content: flex-end;\n }\n}\n"] }]
|
|
802
|
+
args: [{ standalone: false, selector: 'mj-credentials-categories-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Categories\"\n Icon=\"fa-solid fa-folder-tree\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n The categories count mirrored the visible tree; the cross-entity\n types count belongs on the Types page, not here. -->\n\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"expandAll()\" title=\"Expand all\">\n <i class=\"fa-solid fa-expand\"></i> <span class=\"action-btn-label\">Expand</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"collapseAll()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-compress\"></i> <span class=\"action-btn-label\">Collapse</span>\n </button>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Category</span>\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search categories...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading categories...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <div class=\"categories-layout\">\n <!-- Tree Container -->\n <div class=\"tree-panel\">\n @if (categoryTree.length > 0) {\n <div class=\"tree-container\">\n @for (node of getFlattenedNodes(); track node; let i = $index) {\n <div\n class=\"tree-node\"\n [class.selected]=\"IsNodeSelected(node)\"\n [style.padding-left.px]=\"12 + (node.level * 20)\"\n (click)=\"selectNode(node)\"\n >\n <div class=\"node-content\">\n @if (node.children.length > 0) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node, $event)\"\n >\n <i [class]=\"node.expanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (node.children.length === 0) {\n <span class=\"expand-placeholder\"></span>\n }\n <div class=\"node-icon\" [style.backgroundColor]=\"getCategoryColor(i) + '15'\" [style.color]=\"getCategoryColor(i)\">\n <i [class]=\"node.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"node-info\">\n <div class=\"node-name\">{{node.category.Name}}</div>\n @if (node.category.Description) {\n <div class=\"node-description\">\n {{node.category.Description | slice:0:50}}{{node.category.Description.length > 50 ? '...' : ''}}\n </div>\n }\n </div>\n <div class=\"node-badges\">\n @if (node.typeCount > 0) {\n <span class=\"badge types\">\n <i class=\"fa-solid fa-shapes\"></i>\n {{node.typeCount}}\n </span>\n }\n @if (node.children.length > 0) {\n <span class=\"badge children\">\n <i class=\"fa-solid fa-folder\"></i>\n {{node.children.length}}\n </span>\n }\n </div>\n <div class=\"node-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCategory(node, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete && node.children.length === 0 && node.typeCount === 0) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCategory(node, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (categoryTree.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Categories</h3>\n @if (searchText) {\n <p>\n No categories match your search.\n <button class=\"btn-link\" (click)=\"clearSearch()\">Clear search</button>\n </p>\n }\n @if (!searchText) {\n <p>\n Get started by creating your first category.\n </p>\n }\n @if (UserCanCreate && !searchText) {\n <button class=\"btn-primary\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Category\n </button>\n }\n </div>\n }\n </div>\n <!-- Detail Panel -->\n @if (selectedNode) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-icon\" [style.backgroundColor]=\"getCategoryColor(0) + '15'\" [style.color]=\"getCategoryColor(0)\">\n <i [class]=\"selectedNode.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"detail-title\">\n <h2>{{selectedNode.category.Name}}</h2>\n @if (selectedNode.level > 0) {\n <span class=\"level-badge\">\n Level {{selectedNode.level + 1}}\n </span>\n }\n </div>\n <div class=\"detail-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"editCategory(selectedNode)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n <button class=\"close-btn\" (click)=\"selectedNode = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-body\">\n <!-- Stats -->\n <div class=\"detail-stats\">\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.typeCount}}</div>\n <div class=\"stat-label\">Credential Types</div>\n </div>\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.children.length}}</div>\n <div class=\"stat-label\">Subcategories</div>\n </div>\n </div>\n <!-- Description -->\n @if (selectedNode.category.Description) {\n <div class=\"description-section\">\n <h3>\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h3>\n <p class=\"description\">{{selectedNode.category.Description}}</p>\n </div>\n }\n <!-- Types in Category -->\n @if (selectedNode.typeCount > 0) {\n <div class=\"types-section\">\n <h3>\n <i class=\"fa-solid fa-shapes\"></i>\n Credential Types\n </h3>\n <div class=\"type-list\">\n @for (type of getTypesForCategory(selectedNode.category.Name); track type) {\n <div class=\"type-item\">\n <div class=\"type-icon\">\n <i [class]=\"type.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.Name}}</div>\n @if (type.Description) {\n <div class=\"type-desc\">{{type.Description | slice:0:60}}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Subcategories -->\n @if (selectedNode.children.length > 0) {\n <div class=\"subcategories-section\">\n <h3>\n <i class=\"fa-solid fa-folder-tree\"></i>\n Subcategories\n </h3>\n <div class=\"subcategory-list\">\n @for (child of selectedNode.children; track child) {\n <div class=\"subcategory-item\" (click)=\"selectNode(child)\">\n <i [class]=\"child.category.IconClass || 'fa-solid fa-folder'\"></i>\n <span>{{child.category.Name}}</span>\n @if (child.typeCount > 0) {\n <span class=\"sub-type-count\">{{child.typeCount}} types</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Quick Actions -->\n <div class=\"detail-quick-actions\">\n @if (selectedNode.typeCount > 0) {\n <button\n class=\"btn-secondary\"\n (click)=\"viewTypesForCategory(selectedNode.category.Name)\"\n >\n <i class=\"fa-solid fa-shapes\"></i>\n View Types\n </button>\n }\n <button\n class=\"btn-primary\"\n (click)=\"createCredentialWithCategory(selectedNode.category.ID)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </div>\n </div>\n }\n <!-- No Selection -->\n @if (!selectedNode && categoryTree.length > 0) {\n <div class=\"no-selection\">\n <div class=\"no-selection-icon\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n </div>\n <h3>Select a Category</h3>\n <p>Click on a category to view its details and credential types</p>\n </div>\n }\n </div>\n }\n </mj-page-body>\n\n <!-- Category Edit Panel -->\n <mj-credential-category-edit-panel\n #categoryEditPanel\n (saved)=\"onCategorySaved($any($event))\"\n (deleted)=\"onCategoryDeleted($any($event))\"\n ></mj-credential-category-edit-panel>\n</mj-page-layout>\n", styles: ["/* Layout */\n.categories-layout {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n/* Tree Panel */\n.tree-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n/* Tree Node */\n.tree-node {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node:last-child {\n border-bottom: none;\n}\n\n.tree-node:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n/* Expand Button */\n.expand-btn {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn i {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder {\n width: 24px;\n flex-shrink: 0;\n}\n\n/* Node Icon */\n.node-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon i {\n font-size: 14px;\n}\n\n/* Node Info */\n.node-info {\n flex: 1;\n min-width: 0;\n}\n\n.node-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Node Badges */\n.node-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge i {\n font-size: 10px;\n}\n\n/* Node Actions */\n.node-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node:hover .node-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n/* Detail Panel */\n.detail-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon i {\n font-size: 20px;\n}\n\n.detail-title {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title h2 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n/* Detail Body */\n.detail-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Detail Stats */\n.detail-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat .stat-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Description Section */\n.description-section {\n margin-bottom: 20px;\n}\n\n.description-section h3,\n.types-section h3,\n.subcategories-section h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section h3 i,\n.types-section h3 i,\n.subcategories-section h3 i {\n font-size: 12px;\n}\n\n.description {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n/* Types Section */\n.types-section {\n margin-bottom: 20px;\n}\n\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Subcategories Section */\n.subcategories-section {\n margin-bottom: 20px;\n}\n\n.subcategory-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item span {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n/* Quick Actions */\n.detail-quick-actions {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions .btn-secondary,\n.detail-quick-actions .btn-primary {\n flex: 1;\n}\n\n.btn-secondary {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-border-default);\n}\n\n/* No Selection State */\n.no-selection {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon i {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection p {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--mj-border-strong);\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .detail-panel,\n .no-selection {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container {\n padding: 16px;\n }\n\n .categories-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left,\n .toolbar-right {\n width: 100%;\n }\n\n .search-container {\n max-width: none;\n }\n\n .toolbar-right {\n justify-content: flex-end;\n }\n}\n"] }]
|
|
800
803
|
}], () => [{ type: i0.ChangeDetectorRef }], { categoryEditPanel: [{
|
|
801
804
|
type: ViewChild,
|
|
802
805
|
args: ['categoryEditPanel']
|