@memberjunction/ng-dashboards 5.37.0 → 5.39.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 +46 -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 +89 -842
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1353 -7683
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- 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 +235 -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 +1735 -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 +43 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.js +209 -0
- package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts +276 -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 +40 -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 +402 -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 +122 -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 +752 -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 +166 -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 +1384 -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 +70 -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 +448 -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 +47 -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 +220 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +293 -289
- package/dist/AI/components/duplicates/duplicate-detection-resource.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.js +550 -532
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +1 -1
- 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-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/ComponentStudio/component-studio-dashboard.component.d.ts +73 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +512 -127
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-resource.component.d.ts +22 -0
- package/dist/ComponentStudio/component-studio-resource.component.d.ts.map +1 -0
- package/dist/ComponentStudio/component-studio-resource.component.js +55 -0
- package/dist/ComponentStudio/component-studio-resource.component.js.map +1 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +104 -45
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +234 -331
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.d.ts +54 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.js +339 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.js.map +1 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.d.ts +65 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.js +492 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.js.map +1 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.d.ts +88 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.js +457 -0
- package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.js.map +1 -0
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +106 -0
- package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/form-override-dialog.component.js +478 -0
- package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +54 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +361 -50
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +10 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +114 -45
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
- package/dist/ComponentStudio/services/canvas-to-code.d.ts +32 -0
- package/dist/ComponentStudio/services/canvas-to-code.d.ts.map +1 -0
- package/dist/ComponentStudio/services/canvas-to-code.js +347 -0
- package/dist/ComponentStudio/services/canvas-to-code.js.map +1 -0
- package/dist/ComponentStudio/services/code-to-canvas.d.ts +32 -0
- package/dist/ComponentStudio/services/code-to-canvas.d.ts.map +1 -0
- package/dist/ComponentStudio/services/code-to-canvas.js +92 -0
- package/dist/ComponentStudio/services/code-to-canvas.js.map +1 -0
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +29 -0
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +76 -0
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/entity-form-override.service.d.ts +86 -0
- package/dist/ComponentStudio/services/entity-form-override.service.d.ts.map +1 -0
- package/dist/ComponentStudio/services/entity-form-override.service.js +246 -0
- package/dist/ComponentStudio/services/entity-form-override.service.js.map +1 -0
- package/dist/ComponentStudio/services/field-binding-scanner.d.ts +29 -0
- package/dist/ComponentStudio/services/field-binding-scanner.d.ts.map +1 -0
- package/dist/ComponentStudio/services/field-binding-scanner.js +110 -0
- package/dist/ComponentStudio/services/field-binding-scanner.js.map +1 -0
- package/dist/ComponentStudio/services/form-canvas-model.d.ts +56 -0
- package/dist/ComponentStudio/services/form-canvas-model.d.ts.map +1 -0
- package/dist/ComponentStudio/services/form-canvas-model.js +35 -0
- package/dist/ComponentStudio/services/form-canvas-model.js.map +1 -0
- package/dist/ComponentStudio/services/form-host-props-fixture.d.ts +10 -0
- package/dist/ComponentStudio/services/form-host-props-fixture.d.ts.map +1 -0
- package/dist/ComponentStudio/services/form-host-props-fixture.js +10 -0
- package/dist/ComponentStudio/services/form-host-props-fixture.js.map +1 -0
- 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.js +2 -2
- package/dist/DataExplorer/data-explorer-dashboard.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/FormBuilder/form-builder-resource.component.d.ts +964 -0
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -0
- package/dist/FormBuilder/form-builder-resource.component.js +4487 -0
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -0
- package/dist/FormBuilder/form-builder-version-rail.helpers.d.ts +55 -0
- package/dist/FormBuilder/form-builder-version-rail.helpers.d.ts.map +1 -0
- package/dist/FormBuilder/form-builder-version-rail.helpers.js +73 -0
- package/dist/FormBuilder/form-builder-version-rail.helpers.js.map +1 -0
- package/dist/Home/home-application.d.ts +21 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +60 -8
- package/dist/Home/home-application.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.js +2 -2
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +45 -44
- 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/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/mcp-dashboard.component.js +443 -438
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +14 -14
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +11 -10
- 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 +47 -35
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +40 -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/component-studio-dashboards.module.d.ts +34 -22
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +65 -9
- package/dist/component-studio-dashboards.module.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 +55 -53
|
@@ -18,15 +18,16 @@ function CredentialsOverviewResourceComponent_Conditional_4_Template(rf, ctx) {
|
|
|
18
18
|
i0.ɵɵelementStart(0, "button", 5);
|
|
19
19
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
|
|
20
20
|
i0.ɵɵelement(1, "i", 6);
|
|
21
|
-
i0.ɵɵ
|
|
22
|
-
i0.ɵɵ
|
|
21
|
+
i0.ɵɵelementStart(2, "span", 7);
|
|
22
|
+
i0.ɵɵtext(3, "New Credential");
|
|
23
|
+
i0.ɵɵelementEnd()();
|
|
23
24
|
} }
|
|
24
25
|
function CredentialsOverviewResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
25
26
|
i0.ɵɵelement(0, "mj-loading", 4);
|
|
26
27
|
} }
|
|
27
28
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
-
i0.ɵɵelementStart(0, "span",
|
|
29
|
-
i0.ɵɵelement(1, "i",
|
|
29
|
+
i0.ɵɵelementStart(0, "span", 18);
|
|
30
|
+
i0.ɵɵelement(1, "i", 58);
|
|
30
31
|
i0.ɵɵtext(2);
|
|
31
32
|
i0.ɵɵelementEnd();
|
|
32
33
|
} if (rf & 2) {
|
|
@@ -36,9 +37,9 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_12_Templ
|
|
|
36
37
|
} }
|
|
37
38
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
38
39
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
39
|
-
i0.ɵɵelementStart(0, "span",
|
|
40
|
+
i0.ɵɵelementStart(0, "span", 59);
|
|
40
41
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewExpiringCredentials()); });
|
|
41
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
i0.ɵɵelement(1, "i", 36);
|
|
42
43
|
i0.ɵɵtext(2);
|
|
43
44
|
i0.ɵɵelementEnd();
|
|
44
45
|
} if (rf & 2) {
|
|
@@ -47,44 +48,44 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Templ
|
|
|
47
48
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.expiringSoonCount, " expiring soon ");
|
|
48
49
|
} }
|
|
49
50
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
-
i0.ɵɵelementStart(0, "span",
|
|
51
|
-
i0.ɵɵelement(1, "i",
|
|
51
|
+
i0.ɵɵelementStart(0, "span", 20);
|
|
52
|
+
i0.ɵɵelement(1, "i", 31);
|
|
52
53
|
i0.ɵɵtext(2, " All credentials healthy ");
|
|
53
54
|
i0.ɵɵelementEnd();
|
|
54
55
|
} }
|
|
55
56
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
-
i0.ɵɵelementStart(0, "div",
|
|
57
|
-
i0.ɵɵelement(1, "i",
|
|
57
|
+
i0.ɵɵelementStart(0, "div", 37);
|
|
58
|
+
i0.ɵɵelement(1, "i", 29);
|
|
58
59
|
i0.ɵɵelementEnd();
|
|
59
60
|
} }
|
|
60
61
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
61
62
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
62
63
|
i0.ɵɵnamespaceSVG();
|
|
63
64
|
i0.ɵɵelementContainerStart(0);
|
|
64
|
-
i0.ɵɵelementStart(1, "circle",
|
|
65
|
+
i0.ɵɵelementStart(1, "circle", 68);
|
|
65
66
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_5_Template_circle_click_1_listener() { const stat_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryClick(stat_r6)); });
|
|
66
67
|
i0.ɵɵelementEnd();
|
|
67
68
|
i0.ɵɵelementContainerEnd();
|
|
68
69
|
} if (rf & 2) {
|
|
69
70
|
const stat_r6 = ctx.$implicit;
|
|
70
|
-
const ɵ$
|
|
71
|
+
const ɵ$index_176_r7 = ctx.$index;
|
|
71
72
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
72
73
|
i0.ɵɵadvance();
|
|
73
|
-
i0.ɵɵattribute("stroke", stat_r6.color)("stroke-dasharray", stat_r6.percentage * 2.51 + " " + (251 - stat_r6.percentage * 2.51))("stroke-dashoffset", ctx_r1.getDonutOffset(ɵ$
|
|
74
|
+
i0.ɵɵattribute("stroke", stat_r6.color)("stroke-dasharray", stat_r6.percentage * 2.51 + " " + (251 - stat_r6.percentage * 2.51))("stroke-dashoffset", ctx_r1.getDonutOffset(ɵ$index_176_r7));
|
|
74
75
|
} }
|
|
75
76
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
76
77
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
77
|
-
i0.ɵɵelementStart(0, "div",
|
|
78
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
78
79
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template_div_click_0_listener() { const stat_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryClick(stat_r9)); });
|
|
79
|
-
i0.ɵɵelement(1, "div",
|
|
80
|
-
i0.ɵɵelementStart(2, "div",
|
|
80
|
+
i0.ɵɵelement(1, "div", 70);
|
|
81
|
+
i0.ɵɵelementStart(2, "div", 71)(3, "div", 72);
|
|
81
82
|
i0.ɵɵelement(4, "i");
|
|
82
83
|
i0.ɵɵtext(5);
|
|
83
84
|
i0.ɵɵelementEnd();
|
|
84
|
-
i0.ɵɵelementStart(6, "div",
|
|
85
|
+
i0.ɵɵelementStart(6, "div", 73);
|
|
85
86
|
i0.ɵɵtext(7);
|
|
86
87
|
i0.ɵɵelementEnd()();
|
|
87
|
-
i0.ɵɵelement(8, "i",
|
|
88
|
+
i0.ɵɵelement(8, "i", 74);
|
|
88
89
|
i0.ɵɵelementEnd();
|
|
89
90
|
} if (rf & 2) {
|
|
90
91
|
const stat_r9 = ctx.$implicit;
|
|
@@ -98,21 +99,21 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_1
|
|
|
98
99
|
i0.ɵɵtextInterpolate2("", stat_r9.count, " (", stat_r9.percentage, "%)");
|
|
99
100
|
} }
|
|
100
101
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
-
i0.ɵɵelementStart(0, "div",
|
|
102
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "div", 60);
|
|
102
103
|
i0.ɵɵnamespaceSVG();
|
|
103
|
-
i0.ɵɵelementStart(2, "svg",
|
|
104
|
-
i0.ɵɵelement(3, "circle",
|
|
104
|
+
i0.ɵɵelementStart(2, "svg", 61);
|
|
105
|
+
i0.ɵɵelement(3, "circle", 62);
|
|
105
106
|
i0.ɵɵrepeaterCreate(4, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_5_Template, 2, 3, ":svg:ng-container", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
106
107
|
i0.ɵɵelementEnd();
|
|
107
108
|
i0.ɵɵnamespaceHTML();
|
|
108
|
-
i0.ɵɵelementStart(6, "div",
|
|
109
|
+
i0.ɵɵelementStart(6, "div", 63)(7, "div", 64);
|
|
109
110
|
i0.ɵɵtext(8);
|
|
110
111
|
i0.ɵɵelementEnd();
|
|
111
|
-
i0.ɵɵelementStart(9, "div",
|
|
112
|
+
i0.ɵɵelementStart(9, "div", 65);
|
|
112
113
|
i0.ɵɵtext(10, "Total");
|
|
113
114
|
i0.ɵɵelementEnd()()();
|
|
114
|
-
i0.ɵɵelementStart(11, "div",
|
|
115
|
-
i0.ɵɵrepeaterCreate(12, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template, 9, 7, "div",
|
|
115
|
+
i0.ɵɵelementStart(11, "div", 66);
|
|
116
|
+
i0.ɵɵrepeaterCreate(12, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template, 9, 7, "div", 67, i0.ɵɵrepeaterTrackByIdentity);
|
|
116
117
|
i0.ɵɵelementEnd()();
|
|
117
118
|
} if (rf & 2) {
|
|
118
119
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -124,15 +125,15 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_Templ
|
|
|
124
125
|
i0.ɵɵrepeater(ctx_r1.categoryStats);
|
|
125
126
|
} }
|
|
126
127
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_73_Template(rf, ctx) { if (rf & 1) {
|
|
127
|
-
i0.ɵɵelementStart(0, "div",
|
|
128
|
-
i0.ɵɵelement(1, "i",
|
|
128
|
+
i0.ɵɵelementStart(0, "div", 47);
|
|
129
|
+
i0.ɵɵelement(1, "i", 75);
|
|
129
130
|
i0.ɵɵelementStart(2, "span");
|
|
130
131
|
i0.ɵɵtext(3, "No credentials configured");
|
|
131
132
|
i0.ɵɵelementEnd()();
|
|
132
133
|
} }
|
|
133
134
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
-
i0.ɵɵelementStart(0, "span",
|
|
135
|
-
i0.ɵɵelement(1, "i",
|
|
135
|
+
i0.ɵɵelementStart(0, "span", 88);
|
|
136
|
+
i0.ɵɵelement(1, "i", 90);
|
|
136
137
|
i0.ɵɵtext(2);
|
|
137
138
|
i0.ɵɵelementEnd();
|
|
138
139
|
} if (rf & 2) {
|
|
@@ -141,8 +142,8 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2
|
|
|
141
142
|
i0.ɵɵtextInterpolate1(" ", type_r11.activeCount, " ");
|
|
142
143
|
} }
|
|
143
144
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
-
i0.ɵɵelementStart(0, "span",
|
|
145
|
-
i0.ɵɵelement(1, "i",
|
|
145
|
+
i0.ɵɵelementStart(0, "span", 89);
|
|
146
|
+
i0.ɵɵelement(1, "i", 36);
|
|
146
147
|
i0.ɵɵtext(2);
|
|
147
148
|
i0.ɵɵelementEnd();
|
|
148
149
|
} if (rf & 2) {
|
|
@@ -152,26 +153,26 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2
|
|
|
152
153
|
} }
|
|
153
154
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
154
155
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
155
|
-
i0.ɵɵelementStart(0, "div",
|
|
156
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
156
157
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template_div_click_0_listener() { const type_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onTypeClick(type_r11)); });
|
|
157
|
-
i0.ɵɵelementStart(1, "div",
|
|
158
|
+
i0.ɵɵelementStart(1, "div", 78)(2, "div", 79);
|
|
158
159
|
i0.ɵɵtext(3);
|
|
159
160
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵelementStart(4, "div",
|
|
161
|
+
i0.ɵɵelementStart(4, "div", 80);
|
|
161
162
|
i0.ɵɵtext(5);
|
|
162
163
|
i0.ɵɵelementEnd()();
|
|
163
|
-
i0.ɵɵelementStart(6, "div",
|
|
164
|
+
i0.ɵɵelementStart(6, "div", 81)(7, "div", 82)(8, "span", 83);
|
|
164
165
|
i0.ɵɵtext(9);
|
|
165
166
|
i0.ɵɵelementEnd();
|
|
166
|
-
i0.ɵɵelementStart(10, "span",
|
|
167
|
+
i0.ɵɵelementStart(10, "span", 84);
|
|
167
168
|
i0.ɵɵtext(11, "credentials");
|
|
168
169
|
i0.ɵɵelementEnd()();
|
|
169
|
-
i0.ɵɵelementStart(12, "div",
|
|
170
|
-
i0.ɵɵelement(13, "div",
|
|
170
|
+
i0.ɵɵelementStart(12, "div", 85);
|
|
171
|
+
i0.ɵɵelement(13, "div", 86);
|
|
171
172
|
i0.ɵɵelementEnd();
|
|
172
|
-
i0.ɵɵelementStart(14, "div",
|
|
173
|
-
i0.ɵɵconditionalCreate(15, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_15_Template, 3, 1, "span",
|
|
174
|
-
i0.ɵɵconditionalCreate(16, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_16_Template, 3, 1, "span",
|
|
173
|
+
i0.ɵɵelementStart(14, "div", 87);
|
|
174
|
+
i0.ɵɵconditionalCreate(15, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_15_Template, 3, 1, "span", 88);
|
|
175
|
+
i0.ɵɵconditionalCreate(16, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_16_Template, 3, 1, "span", 89);
|
|
175
176
|
i0.ɵɵelementEnd()()();
|
|
176
177
|
} if (rf & 2) {
|
|
177
178
|
const type_r11 = ctx.$implicit;
|
|
@@ -190,8 +191,8 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2
|
|
|
190
191
|
i0.ɵɵconditional(type_r11.expiringCount > 0 ? 16 : -1);
|
|
191
192
|
} }
|
|
192
193
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
-
i0.ɵɵelementStart(0, "div",
|
|
194
|
-
i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template, 17, 7, "div",
|
|
194
|
+
i0.ɵɵelementStart(0, "div", 50);
|
|
195
|
+
i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template, 17, 7, "div", 76, i0.ɵɵrepeaterTrackByIdentity);
|
|
195
196
|
i0.ɵɵelementEnd();
|
|
196
197
|
} if (rf & 2) {
|
|
197
198
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -199,14 +200,14 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_Templ
|
|
|
199
200
|
i0.ɵɵrepeater(ctx_r1.typeStats.slice(0, 6));
|
|
200
201
|
} }
|
|
201
202
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_85_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
-
i0.ɵɵelementStart(0, "div",
|
|
203
|
-
i0.ɵɵelement(1, "i",
|
|
203
|
+
i0.ɵɵelementStart(0, "div", 47);
|
|
204
|
+
i0.ɵɵelement(1, "i", 91);
|
|
204
205
|
i0.ɵɵelementStart(2, "span");
|
|
205
206
|
i0.ɵɵtext(3, "No credential types configured");
|
|
206
207
|
i0.ɵɵelementEnd()();
|
|
207
208
|
} }
|
|
208
209
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
-
i0.ɵɵelementStart(0, "span",
|
|
210
|
+
i0.ɵɵelementStart(0, "span", 100);
|
|
210
211
|
i0.ɵɵtext(1);
|
|
211
212
|
i0.ɵɵelementEnd();
|
|
212
213
|
} if (rf & 2) {
|
|
@@ -216,23 +217,23 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2
|
|
|
216
217
|
} }
|
|
217
218
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
218
219
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
219
|
-
i0.ɵɵelementStart(0, "div",
|
|
220
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
220
221
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template_div_click_0_listener() { const activity_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onActivityClick(activity_r13)); });
|
|
221
|
-
i0.ɵɵelementStart(1, "div",
|
|
222
|
+
i0.ɵɵelementStart(1, "div", 94);
|
|
222
223
|
i0.ɵɵelement(2, "i");
|
|
223
224
|
i0.ɵɵelementEnd();
|
|
224
|
-
i0.ɵɵelementStart(3, "div",
|
|
225
|
+
i0.ɵɵelementStart(3, "div", 95)(4, "div", 96);
|
|
225
226
|
i0.ɵɵtext(5);
|
|
226
227
|
i0.ɵɵelementEnd();
|
|
227
|
-
i0.ɵɵelementStart(6, "div",
|
|
228
|
+
i0.ɵɵelementStart(6, "div", 97)(7, "span", 98);
|
|
228
229
|
i0.ɵɵtext(8);
|
|
229
230
|
i0.ɵɵelementEnd();
|
|
230
|
-
i0.ɵɵelementStart(9, "span",
|
|
231
|
+
i0.ɵɵelementStart(9, "span", 99);
|
|
231
232
|
i0.ɵɵtext(10);
|
|
232
233
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵconditionalCreate(11, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Conditional_11_Template, 2, 1, "span",
|
|
234
|
+
i0.ɵɵconditionalCreate(11, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Conditional_11_Template, 2, 1, "span", 100);
|
|
234
235
|
i0.ɵɵelementEnd()();
|
|
235
|
-
i0.ɵɵelementStart(12, "div",
|
|
236
|
+
i0.ɵɵelementStart(12, "div", 101);
|
|
236
237
|
i0.ɵɵtext(13);
|
|
237
238
|
i0.ɵɵelementEnd()();
|
|
238
239
|
} if (rf & 2) {
|
|
@@ -254,8 +255,8 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2
|
|
|
254
255
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDate(activity_r13.date), " ");
|
|
255
256
|
} }
|
|
256
257
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_Template(rf, ctx) { if (rf & 1) {
|
|
257
|
-
i0.ɵɵelementStart(0, "div",
|
|
258
|
-
i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template, 14, 8, "div",
|
|
258
|
+
i0.ɵɵelementStart(0, "div", 53);
|
|
259
|
+
i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template, 14, 8, "div", 92, i0.ɵɵrepeaterTrackByIdentity);
|
|
259
260
|
i0.ɵɵelementEnd();
|
|
260
261
|
} if (rf & 2) {
|
|
261
262
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -263,164 +264,164 @@ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_Templ
|
|
|
263
264
|
i0.ɵɵrepeater(ctx_r1.recentActivity);
|
|
264
265
|
} }
|
|
265
266
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_97_Template(rf, ctx) { if (rf & 1) {
|
|
266
|
-
i0.ɵɵelementStart(0, "div",
|
|
267
|
-
i0.ɵɵelement(1, "i",
|
|
267
|
+
i0.ɵɵelementStart(0, "div", 47);
|
|
268
|
+
i0.ɵɵelement(1, "i", 102);
|
|
268
269
|
i0.ɵɵelementStart(2, "span");
|
|
269
270
|
i0.ɵɵtext(3, "No recent activity");
|
|
270
271
|
i0.ɵɵelementEnd()();
|
|
271
272
|
} }
|
|
272
273
|
function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template(rf, ctx) { if (rf & 1) {
|
|
273
274
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
274
|
-
i0.ɵɵelementStart(0, "div",
|
|
275
|
+
i0.ɵɵelementStart(0, "div", 54)(1, "div", 103);
|
|
275
276
|
i0.ɵɵtext(2, "Quick Actions");
|
|
276
277
|
i0.ɵɵelementEnd();
|
|
277
|
-
i0.ɵɵelementStart(3, "div",
|
|
278
|
+
i0.ɵɵelementStart(3, "div", 104)(4, "button", 105);
|
|
278
279
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
|
|
279
280
|
i0.ɵɵelement(5, "i", 6);
|
|
280
281
|
i0.ɵɵelementStart(6, "span");
|
|
281
282
|
i0.ɵɵtext(7, "Add Credential");
|
|
282
283
|
i0.ɵɵelementEnd()();
|
|
283
|
-
i0.ɵɵelementStart(8, "button",
|
|
284
|
+
i0.ɵɵelementStart(8, "button", 105);
|
|
284
285
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAllTypes()); });
|
|
285
|
-
i0.ɵɵelement(9, "i",
|
|
286
|
+
i0.ɵɵelement(9, "i", 91);
|
|
286
287
|
i0.ɵɵelementStart(10, "span");
|
|
287
288
|
i0.ɵɵtext(11, "Manage Types");
|
|
288
289
|
i0.ɵɵelementEnd()();
|
|
289
|
-
i0.ɵɵelementStart(12, "button",
|
|
290
|
+
i0.ɵɵelementStart(12, "button", 105);
|
|
290
291
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAllCategories()); });
|
|
291
|
-
i0.ɵɵelement(13, "i",
|
|
292
|
+
i0.ɵɵelement(13, "i", 106);
|
|
292
293
|
i0.ɵɵelementStart(14, "span");
|
|
293
294
|
i0.ɵɵtext(15, "Categories");
|
|
294
295
|
i0.ɵɵelementEnd()();
|
|
295
|
-
i0.ɵɵelementStart(16, "button",
|
|
296
|
+
i0.ɵɵelementStart(16, "button", 105);
|
|
296
297
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAuditLog()); });
|
|
297
|
-
i0.ɵɵelement(17, "i",
|
|
298
|
+
i0.ɵɵelement(17, "i", 107);
|
|
298
299
|
i0.ɵɵelementStart(18, "span");
|
|
299
300
|
i0.ɵɵtext(19, "Audit Log");
|
|
300
301
|
i0.ɵɵelementEnd()()()();
|
|
301
302
|
} }
|
|
302
303
|
function CredentialsOverviewResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
303
304
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
304
|
-
i0.ɵɵelementStart(0, "div",
|
|
305
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "div", 9)(2, "div", 10);
|
|
305
306
|
i0.ɵɵnamespaceSVG();
|
|
306
|
-
i0.ɵɵelementStart(3, "svg",
|
|
307
|
-
i0.ɵɵelement(4, "path",
|
|
307
|
+
i0.ɵɵelementStart(3, "svg", 11);
|
|
308
|
+
i0.ɵɵelement(4, "path", 12)(5, "path", 13);
|
|
308
309
|
i0.ɵɵelementEnd();
|
|
309
310
|
i0.ɵɵnamespaceHTML();
|
|
310
|
-
i0.ɵɵelementStart(6, "div",
|
|
311
|
+
i0.ɵɵelementStart(6, "div", 14);
|
|
311
312
|
i0.ɵɵtext(7);
|
|
312
313
|
i0.ɵɵelementEnd()()();
|
|
313
|
-
i0.ɵɵelementStart(8, "div",
|
|
314
|
+
i0.ɵɵelementStart(8, "div", 15)(9, "div", 16);
|
|
314
315
|
i0.ɵɵtext(10);
|
|
315
316
|
i0.ɵɵelementEnd();
|
|
316
|
-
i0.ɵɵelementStart(11, "div",
|
|
317
|
-
i0.ɵɵconditionalCreate(12, CredentialsOverviewResourceComponent_Conditional_7_Conditional_12_Template, 3, 1, "span",
|
|
318
|
-
i0.ɵɵconditionalCreate(13, CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template, 3, 1, "span",
|
|
319
|
-
i0.ɵɵconditionalCreate(14, CredentialsOverviewResourceComponent_Conditional_7_Conditional_14_Template, 3, 0, "span",
|
|
317
|
+
i0.ɵɵelementStart(11, "div", 17);
|
|
318
|
+
i0.ɵɵconditionalCreate(12, CredentialsOverviewResourceComponent_Conditional_7_Conditional_12_Template, 3, 1, "span", 18);
|
|
319
|
+
i0.ɵɵconditionalCreate(13, CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template, 3, 1, "span", 19);
|
|
320
|
+
i0.ɵɵconditionalCreate(14, CredentialsOverviewResourceComponent_Conditional_7_Conditional_14_Template, 3, 0, "span", 20);
|
|
320
321
|
i0.ɵɵelementEnd()()();
|
|
321
|
-
i0.ɵɵelementStart(15, "div",
|
|
322
|
+
i0.ɵɵelementStart(15, "div", 21)(16, "div", 22);
|
|
322
323
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllCredentials()); });
|
|
323
|
-
i0.ɵɵelementStart(17, "div",
|
|
324
|
-
i0.ɵɵelement(18, "i",
|
|
324
|
+
i0.ɵɵelementStart(17, "div", 23);
|
|
325
|
+
i0.ɵɵelement(18, "i", 24);
|
|
325
326
|
i0.ɵɵelementEnd();
|
|
326
|
-
i0.ɵɵelementStart(19, "div",
|
|
327
|
+
i0.ɵɵelementStart(19, "div", 25)(20, "div", 26);
|
|
327
328
|
i0.ɵɵtext(21);
|
|
328
329
|
i0.ɵɵelementEnd();
|
|
329
|
-
i0.ɵɵelementStart(22, "div",
|
|
330
|
+
i0.ɵɵelementStart(22, "div", 27);
|
|
330
331
|
i0.ɵɵtext(23, "Total Credentials");
|
|
331
332
|
i0.ɵɵelementEnd()();
|
|
332
|
-
i0.ɵɵelementStart(24, "div",
|
|
333
|
-
i0.ɵɵelement(25, "i",
|
|
333
|
+
i0.ɵɵelementStart(24, "div", 28);
|
|
334
|
+
i0.ɵɵelement(25, "i", 29);
|
|
334
335
|
i0.ɵɵelementEnd()();
|
|
335
|
-
i0.ɵɵelementStart(26, "div",
|
|
336
|
+
i0.ɵɵelementStart(26, "div", 30);
|
|
336
337
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_div_click_26_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllCredentials()); });
|
|
337
|
-
i0.ɵɵelementStart(27, "div",
|
|
338
|
-
i0.ɵɵelement(28, "i",
|
|
338
|
+
i0.ɵɵelementStart(27, "div", 23);
|
|
339
|
+
i0.ɵɵelement(28, "i", 31);
|
|
339
340
|
i0.ɵɵelementEnd();
|
|
340
|
-
i0.ɵɵelementStart(29, "div",
|
|
341
|
+
i0.ɵɵelementStart(29, "div", 25)(30, "div", 26);
|
|
341
342
|
i0.ɵɵtext(31);
|
|
342
343
|
i0.ɵɵelementEnd();
|
|
343
|
-
i0.ɵɵelementStart(32, "div",
|
|
344
|
+
i0.ɵɵelementStart(32, "div", 27);
|
|
344
345
|
i0.ɵɵtext(33, "Active");
|
|
345
346
|
i0.ɵɵelementEnd()();
|
|
346
|
-
i0.ɵɵelementStart(34, "div",
|
|
347
|
+
i0.ɵɵelementStart(34, "div", 32)(35, "span", 33);
|
|
347
348
|
i0.ɵɵtext(36);
|
|
348
349
|
i0.ɵɵelementEnd()()();
|
|
349
|
-
i0.ɵɵelementStart(37, "div",
|
|
350
|
-
i0.ɵɵelement(39, "i",
|
|
350
|
+
i0.ɵɵelementStart(37, "div", 34)(38, "div", 23);
|
|
351
|
+
i0.ɵɵelement(39, "i", 35);
|
|
351
352
|
i0.ɵɵelementEnd();
|
|
352
|
-
i0.ɵɵelementStart(40, "div",
|
|
353
|
+
i0.ɵɵelementStart(40, "div", 25)(41, "div", 26);
|
|
353
354
|
i0.ɵɵtext(42);
|
|
354
355
|
i0.ɵɵelementEnd();
|
|
355
|
-
i0.ɵɵelementStart(43, "div",
|
|
356
|
+
i0.ɵɵelementStart(43, "div", 27);
|
|
356
357
|
i0.ɵɵtext(44, "Types");
|
|
357
358
|
i0.ɵɵelementEnd()()();
|
|
358
|
-
i0.ɵɵelementStart(45, "div",
|
|
359
|
+
i0.ɵɵelementStart(45, "div", 22);
|
|
359
360
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_div_click_45_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewExpiringCredentials()); });
|
|
360
|
-
i0.ɵɵelementStart(46, "div",
|
|
361
|
-
i0.ɵɵelement(47, "i",
|
|
361
|
+
i0.ɵɵelementStart(46, "div", 23);
|
|
362
|
+
i0.ɵɵelement(47, "i", 36);
|
|
362
363
|
i0.ɵɵelementEnd();
|
|
363
|
-
i0.ɵɵelementStart(48, "div",
|
|
364
|
+
i0.ɵɵelementStart(48, "div", 25)(49, "div", 26);
|
|
364
365
|
i0.ɵɵtext(50);
|
|
365
366
|
i0.ɵɵelementEnd();
|
|
366
|
-
i0.ɵɵelementStart(51, "div",
|
|
367
|
+
i0.ɵɵelementStart(51, "div", 27);
|
|
367
368
|
i0.ɵɵtext(52, "Expiring Soon");
|
|
368
369
|
i0.ɵɵelementEnd()();
|
|
369
|
-
i0.ɵɵconditionalCreate(53, CredentialsOverviewResourceComponent_Conditional_7_Conditional_53_Template, 2, 0, "div",
|
|
370
|
+
i0.ɵɵconditionalCreate(53, CredentialsOverviewResourceComponent_Conditional_7_Conditional_53_Template, 2, 0, "div", 37);
|
|
370
371
|
i0.ɵɵelementEnd();
|
|
371
|
-
i0.ɵɵelementStart(54, "div",
|
|
372
|
-
i0.ɵɵelement(56, "i",
|
|
372
|
+
i0.ɵɵelementStart(54, "div", 34)(55, "div", 23);
|
|
373
|
+
i0.ɵɵelement(56, "i", 38);
|
|
373
374
|
i0.ɵɵelementEnd();
|
|
374
|
-
i0.ɵɵelementStart(57, "div",
|
|
375
|
+
i0.ɵɵelementStart(57, "div", 25)(58, "div", 26);
|
|
375
376
|
i0.ɵɵtext(59);
|
|
376
377
|
i0.ɵɵelementEnd();
|
|
377
|
-
i0.ɵɵelementStart(60, "div",
|
|
378
|
+
i0.ɵɵelementStart(60, "div", 27);
|
|
378
379
|
i0.ɵɵtext(61, "Expired");
|
|
379
380
|
i0.ɵɵelementEnd()()()();
|
|
380
|
-
i0.ɵɵelementStart(62, "div",
|
|
381
|
-
i0.ɵɵelement(66, "i",
|
|
381
|
+
i0.ɵɵelementStart(62, "div", 39)(63, "div", 40)(64, "div", 41)(65, "div", 42);
|
|
382
|
+
i0.ɵɵelement(66, "i", 43);
|
|
382
383
|
i0.ɵɵelementStart(67, "span");
|
|
383
384
|
i0.ɵɵtext(68, "Credentials by Category");
|
|
384
385
|
i0.ɵɵelementEnd()();
|
|
385
|
-
i0.ɵɵelementStart(69, "span",
|
|
386
|
+
i0.ɵɵelementStart(69, "span", 44);
|
|
386
387
|
i0.ɵɵtext(70, "Click to filter by category");
|
|
387
388
|
i0.ɵɵelementEnd()();
|
|
388
|
-
i0.ɵɵelementStart(71, "div",
|
|
389
|
-
i0.ɵɵconditionalCreate(72, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_Template, 14, 1, "div",
|
|
390
|
-
i0.ɵɵconditionalCreate(73, CredentialsOverviewResourceComponent_Conditional_7_Conditional_73_Template, 4, 0, "div",
|
|
389
|
+
i0.ɵɵelementStart(71, "div", 45);
|
|
390
|
+
i0.ɵɵconditionalCreate(72, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_Template, 14, 1, "div", 46);
|
|
391
|
+
i0.ɵɵconditionalCreate(73, CredentialsOverviewResourceComponent_Conditional_7_Conditional_73_Template, 4, 0, "div", 47);
|
|
391
392
|
i0.ɵɵelementEnd()();
|
|
392
|
-
i0.ɵɵelementStart(74, "div",
|
|
393
|
-
i0.ɵɵelement(77, "i",
|
|
393
|
+
i0.ɵɵelementStart(74, "div", 48)(75, "div", 41)(76, "div", 42);
|
|
394
|
+
i0.ɵɵelement(77, "i", 35);
|
|
394
395
|
i0.ɵɵelementStart(78, "span");
|
|
395
396
|
i0.ɵɵtext(79, "Top Credential Types");
|
|
396
397
|
i0.ɵɵelementEnd()();
|
|
397
|
-
i0.ɵɵelementStart(80, "button",
|
|
398
|
+
i0.ɵɵelementStart(80, "button", 49);
|
|
398
399
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_button_click_80_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllTypes()); });
|
|
399
400
|
i0.ɵɵtext(81, " View All ");
|
|
400
|
-
i0.ɵɵelement(82, "i",
|
|
401
|
+
i0.ɵɵelement(82, "i", 29);
|
|
401
402
|
i0.ɵɵelementEnd()();
|
|
402
|
-
i0.ɵɵelementStart(83, "div",
|
|
403
|
-
i0.ɵɵconditionalCreate(84, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_Template, 3, 0, "div",
|
|
404
|
-
i0.ɵɵconditionalCreate(85, CredentialsOverviewResourceComponent_Conditional_7_Conditional_85_Template, 4, 0, "div",
|
|
403
|
+
i0.ɵɵelementStart(83, "div", 45);
|
|
404
|
+
i0.ɵɵconditionalCreate(84, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_Template, 3, 0, "div", 50);
|
|
405
|
+
i0.ɵɵconditionalCreate(85, CredentialsOverviewResourceComponent_Conditional_7_Conditional_85_Template, 4, 0, "div", 47);
|
|
405
406
|
i0.ɵɵelementEnd()();
|
|
406
|
-
i0.ɵɵelementStart(86, "div",
|
|
407
|
-
i0.ɵɵelement(89, "i",
|
|
407
|
+
i0.ɵɵelementStart(86, "div", 51)(87, "div", 41)(88, "div", 42);
|
|
408
|
+
i0.ɵɵelement(89, "i", 52);
|
|
408
409
|
i0.ɵɵelementStart(90, "span");
|
|
409
410
|
i0.ɵɵtext(91, "Recent Activity");
|
|
410
411
|
i0.ɵɵelementEnd()();
|
|
411
|
-
i0.ɵɵelementStart(92, "button",
|
|
412
|
+
i0.ɵɵelementStart(92, "button", 49);
|
|
412
413
|
i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_button_click_92_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAuditLog()); });
|
|
413
414
|
i0.ɵɵtext(93, " View All ");
|
|
414
|
-
i0.ɵɵelement(94, "i",
|
|
415
|
+
i0.ɵɵelement(94, "i", 29);
|
|
415
416
|
i0.ɵɵelementEnd()();
|
|
416
|
-
i0.ɵɵelementStart(95, "div",
|
|
417
|
-
i0.ɵɵconditionalCreate(96, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_Template, 3, 0, "div",
|
|
418
|
-
i0.ɵɵconditionalCreate(97, CredentialsOverviewResourceComponent_Conditional_7_Conditional_97_Template, 4, 0, "div",
|
|
417
|
+
i0.ɵɵelementStart(95, "div", 45);
|
|
418
|
+
i0.ɵɵconditionalCreate(96, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_Template, 3, 0, "div", 53);
|
|
419
|
+
i0.ɵɵconditionalCreate(97, CredentialsOverviewResourceComponent_Conditional_7_Conditional_97_Template, 4, 0, "div", 47);
|
|
419
420
|
i0.ɵɵelementEnd()()();
|
|
420
|
-
i0.ɵɵconditionalCreate(98, CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template, 20, 0, "div",
|
|
421
|
-
i0.ɵɵelementStart(99, "div",
|
|
422
|
-
i0.ɵɵelement(100, "i",
|
|
423
|
-
i0.ɵɵelementStart(101, "div",
|
|
421
|
+
i0.ɵɵconditionalCreate(98, CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template, 20, 0, "div", 54);
|
|
422
|
+
i0.ɵɵelementStart(99, "div", 55);
|
|
423
|
+
i0.ɵɵelement(100, "i", 56);
|
|
424
|
+
i0.ɵɵelementStart(101, "div", 57)(102, "strong");
|
|
424
425
|
i0.ɵɵtext(103, "Security Note:");
|
|
425
426
|
i0.ɵɵelementEnd();
|
|
426
427
|
i0.ɵɵtext(104, " All credential values are encrypted. Access to credentials is logged in the audit trail for compliance and security monitoring. ");
|
|
@@ -899,11 +900,11 @@ let CredentialsOverviewResourceComponent = class CredentialsOverviewResourceComp
|
|
|
899
900
|
return offset;
|
|
900
901
|
}
|
|
901
902
|
static ɵfac = function CredentialsOverviewResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CredentialsOverviewResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
902
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CredentialsOverviewResourceComponent, selectors: [["mj-credentials-overview-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 4, consts: [["Title", "Credential Overview", "Icon", "fa-solid fa-chart-pie", "Subtitle", "Monitor and manage your organization's credentials"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["text", "Loading overview..."], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "health-banner", 3, "ngClass"], [1, "health-score-container"], [1, "health-score-ring"], ["viewBox", "0 0 36 36", 1, "circular-chart"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle-bg"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle"], [1, "health-score-value"], [1, "health-info"], [1, "health-label"], [1, "health-details"], [1, "health-alert"], [1, "health-warning-text"], [1, "health-ok"], [1, "kpi-row"], [1, "kpi-card", "clickable", 3, "click"], [1, "kpi-icon"], [1, "fa-solid", "fa-key"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-trend"], [1, "fa-solid", "fa-arrow-right"], [1, "kpi-card", "active", "clickable", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "kpi-trend", "success"], [1, "percentage"], [1, "kpi-card"], [1, "fa-solid", "fa-cubes"], [1, "fa-solid", "fa-clock"], [1, "kpi-trend", "warning"], [1, "fa-solid", "fa-circle-xmark"], [1, "content-grid"], [1, "panel", "category-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-chart-pie"], [1, "panel-subtitle"], [1, "panel-body"], [1, "category-chart"], [1, "empty-state"], [1, "panel", "types-panel"], [1, "panel-action", 3, "click"], [1, "type-list"], [1, "panel", "activity-panel"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "activity-list"], [1, "quick-actions"], [1, "security-notice"], [1, "fa-solid", "fa-shield-check"], [1, "notice-content"], [1, "fa-solid", "fa-circle-exclamation"], [1, "health-warning-text", 3, "click"], [1, "donut-chart-container"], ["viewBox", "0 0 100 100", 1, "donut-chart"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "12"], [1, "donut-center"], [1, "donut-total"], [1, "donut-label"], [1, "category-legend"], [1, "legend-item"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke-width", "12", 1, "donut-segment", 3, "click"], [1, "legend-item", 3, "click"], [1, "legend-color"], [1, "legend-info"], [1, "legend-name"], [1, "legend-value"], [1, "fa-solid", "fa-chevron-right", "legend-arrow"], [1, "fa-solid", "fa-folder-open"], [1, "type-item"], [1, "type-item", 3, "click"], [1, "type-info"], [1, "type-name"], [1, "type-category"], [1, "type-stats"], [1, "type-count"], [1, "count-value"], [1, "count-label"], [1, "type-bar"], [1, "type-bar-fill"], [1, "type-indicators"], ["title", "Active", 1, "indicator", "active"], ["title", "Expiring Soon", 1, "indicator", "warning"], [1, "fa-solid", "fa-circle"], [1, "fa-solid", "fa-shapes"], [1, "activity-item"], [1, "activity-item", 3, "click"], [1, "activity-icon", 3, "ngClass"], [1, "activity-info"], [1, "activity-name"], [1, "activity-meta"], [1, "activity-type"], [1, "activity-action"], [1, "activity-user"], [1, "activity-time"], [1, "fa-solid", "fa-inbox"], [1, "quick-actions-title"], [1, "quick-actions-grid"], [1, "quick-action", 3, "click"], [1, "fa-solid", "fa-folder-tree"], [1, "fa-solid", "fa-clipboard-list"]], template: function CredentialsOverviewResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CredentialsOverviewResourceComponent, selectors: [["mj-credentials-overview-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 4, consts: [["Title", "Credential Overview", "Icon", "fa-solid fa-chart-pie", "Subtitle", "Monitor and manage your organization's credentials"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["text", "Loading overview..."], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "action-btn-label"], [1, "health-banner", 3, "ngClass"], [1, "health-score-container"], [1, "health-score-ring"], ["viewBox", "0 0 36 36", 1, "circular-chart"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle-bg"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle"], [1, "health-score-value"], [1, "health-info"], [1, "health-label"], [1, "health-details"], [1, "health-alert"], [1, "health-warning-text"], [1, "health-ok"], [1, "kpi-row"], [1, "kpi-card", "clickable", 3, "click"], [1, "kpi-icon"], [1, "fa-solid", "fa-key"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-trend"], [1, "fa-solid", "fa-arrow-right"], [1, "kpi-card", "active", "clickable", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "kpi-trend", "success"], [1, "percentage"], [1, "kpi-card"], [1, "fa-solid", "fa-cubes"], [1, "fa-solid", "fa-clock"], [1, "kpi-trend", "warning"], [1, "fa-solid", "fa-circle-xmark"], [1, "content-grid"], [1, "panel", "category-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-chart-pie"], [1, "panel-subtitle"], [1, "panel-body"], [1, "category-chart"], [1, "empty-state"], [1, "panel", "types-panel"], [1, "panel-action", 3, "click"], [1, "type-list"], [1, "panel", "activity-panel"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "activity-list"], [1, "quick-actions"], [1, "security-notice"], [1, "fa-solid", "fa-shield-check"], [1, "notice-content"], [1, "fa-solid", "fa-circle-exclamation"], [1, "health-warning-text", 3, "click"], [1, "donut-chart-container"], ["viewBox", "0 0 100 100", 1, "donut-chart"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "12"], [1, "donut-center"], [1, "donut-total"], [1, "donut-label"], [1, "category-legend"], [1, "legend-item"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke-width", "12", 1, "donut-segment", 3, "click"], [1, "legend-item", 3, "click"], [1, "legend-color"], [1, "legend-info"], [1, "legend-name"], [1, "legend-value"], [1, "fa-solid", "fa-chevron-right", "legend-arrow"], [1, "fa-solid", "fa-folder-open"], [1, "type-item"], [1, "type-item", 3, "click"], [1, "type-info"], [1, "type-name"], [1, "type-category"], [1, "type-stats"], [1, "type-count"], [1, "count-value"], [1, "count-label"], [1, "type-bar"], [1, "type-bar-fill"], [1, "type-indicators"], ["title", "Active", 1, "indicator", "active"], ["title", "Expiring Soon", 1, "indicator", "warning"], [1, "fa-solid", "fa-circle"], [1, "fa-solid", "fa-shapes"], [1, "activity-item"], [1, "activity-item", 3, "click"], [1, "activity-icon", 3, "ngClass"], [1, "activity-info"], [1, "activity-name"], [1, "activity-meta"], [1, "activity-type"], [1, "activity-action"], [1, "activity-user"], [1, "activity-time"], [1, "fa-solid", "fa-inbox"], [1, "quick-actions-title"], [1, "quick-actions-grid"], [1, "quick-action", 3, "click"], [1, "fa-solid", "fa-folder-tree"], [1, "fa-solid", "fa-clipboard-list"]], template: function CredentialsOverviewResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
903
904
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "mj-refresh-button", 2);
|
|
904
905
|
i0.ɵɵlistener("Clicked", function CredentialsOverviewResourceComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.refresh(); });
|
|
905
906
|
i0.ɵɵelementEnd();
|
|
906
|
-
i0.ɵɵconditionalCreate(4, CredentialsOverviewResourceComponent_Conditional_4_Template,
|
|
907
|
+
i0.ɵɵconditionalCreate(4, CredentialsOverviewResourceComponent_Conditional_4_Template, 4, 0, "button", 3);
|
|
907
908
|
i0.ɵɵelementEnd()();
|
|
908
909
|
i0.ɵɵelementStart(5, "mj-page-body");
|
|
909
910
|
i0.ɵɵconditionalCreate(6, CredentialsOverviewResourceComponent_Conditional_6_Template, 1, 0, "mj-loading", 4);
|
|
@@ -926,7 +927,7 @@ CredentialsOverviewResourceComponent = __decorate([
|
|
|
926
927
|
export { CredentialsOverviewResourceComponent };
|
|
927
928
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsOverviewResourceComponent, [{
|
|
928
929
|
type: Component,
|
|
929
|
-
args: [{ standalone: false, selector: 'mj-credentials-overview-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Credential Overview\"\n Icon=\"fa-solid fa-chart-pie\"\n Subtitle=\"Monitor and manage your organization's credentials\">\n <div actions>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreateCredentials) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading overview...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Health Score Banner -->\n <div class=\"health-banner\" [ngClass]=\"getHealthClass()\">\n <div class=\"health-score-container\">\n <div class=\"health-score-ring\">\n <svg viewBox=\"0 0 36 36\" class=\"circular-chart\">\n <path class=\"circle-bg\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n <path class=\"circle\"\n [attr.stroke-dasharray]=\"getHealthScore() + ', 100'\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n </svg>\n <div class=\"health-score-value\">{{getHealthScore()}}</div>\n </div>\n </div>\n <div class=\"health-info\">\n <div class=\"health-label\">{{getHealthLabel()}}</div>\n <div class=\"health-details\">\n @if (expiredCredentials > 0) {\n <span class=\"health-alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{expiredCredentials}} expired\n </span>\n }\n @if (expiringSoonCount > 0) {\n <span class=\"health-warning-text\" (click)=\"viewExpiringCredentials()\">\n <i class=\"fa-solid fa-clock\"></i>\n {{expiringSoonCount}} expiring soon\n </span>\n }\n @if (expiredCredentials === 0 && expiringSoonCount === 0) {\n <span class=\"health-ok\">\n <i class=\"fa-solid fa-check-circle\"></i>\n All credentials healthy\n </span>\n }\n </div>\n </div>\n </div>\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{totalCredentials}}</div>\n <div class=\"kpi-label\">Total Credentials</div>\n </div>\n <div class=\"kpi-trend\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"kpi-card active clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{activeCredentials}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n <div class=\"kpi-trend success\">\n <span class=\"percentage\">{{totalCredentials > 0 ? (activeCredentials / totalCredentials * 100).toFixed(0) : 0}}%</span>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-cubes\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{credentialTypes}}</div>\n <div class=\"kpi-label\">Types</div>\n </div>\n </div>\n <div class=\"kpi-card clickable\" [class.warning]=\"expiringSoonCount > 0\" (click)=\"viewExpiringCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiringSoonCount}}</div>\n <div class=\"kpi-label\">Expiring Soon</div>\n </div>\n @if (expiringSoonCount > 0) {\n <div class=\"kpi-trend warning\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n </div>\n <div class=\"kpi-card\" [class.danger]=\"expiredCredentials > 0\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-circle-xmark\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiredCredentials}}</div>\n <div class=\"kpi-label\">Expired</div>\n </div>\n </div>\n </div>\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Distribution Chart -->\n <div class=\"panel category-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-chart-pie\"></i>\n <span>Credentials by Category</span>\n </div>\n <span class=\"panel-subtitle\">Click to filter by category</span>\n </div>\n <div class=\"panel-body\">\n @if (categoryStats.length > 0) {\n <div class=\"category-chart\">\n <!-- Visual Donut Chart -->\n <div class=\"donut-chart-container\">\n <svg viewBox=\"0 0 100 100\" class=\"donut-chart\">\n <circle cx=\"50\" cy=\"50\" r=\"40\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"12\"/>\n @for (stat of categoryStats; track stat; let i = $index) {\n <ng-container>\n <circle\n cx=\"50\" cy=\"50\" r=\"40\"\n fill=\"none\"\n [attr.stroke]=\"stat.color\"\n stroke-width=\"12\"\n [attr.stroke-dasharray]=\"stat.percentage * 2.51 + ' ' + (251 - stat.percentage * 2.51)\"\n [attr.stroke-dashoffset]=\"getDonutOffset(i)\"\n class=\"donut-segment\"\n (click)=\"onCategoryClick(stat)\"\n />\n </ng-container>\n }\n </svg>\n <div class=\"donut-center\">\n <div class=\"donut-total\">{{totalCredentials}}</div>\n <div class=\"donut-label\">Total</div>\n </div>\n </div>\n <!-- Legend -->\n <div class=\"category-legend\">\n @for (stat of categoryStats; track stat) {\n <div class=\"legend-item\" (click)=\"onCategoryClick(stat)\">\n <div class=\"legend-color\" [style.backgroundColor]=\"stat.color\"></div>\n <div class=\"legend-info\">\n <div class=\"legend-name\">\n <i [class]=\"stat.iconClass\"></i>\n {{stat.category}}\n </div>\n <div class=\"legend-value\">{{stat.count}} ({{stat.percentage}}%)</div>\n </div>\n <i class=\"fa-solid fa-chevron-right legend-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n @if (categoryStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>No credentials configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Types Breakdown -->\n <div class=\"panel types-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-cubes\"></i>\n <span>Top Credential Types</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAllTypes()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (typeStats.length > 0) {\n <div class=\"type-list\">\n @for (type of typeStats.slice(0, 6); track type) {\n <div class=\"type-item\" (click)=\"onTypeClick(type)\">\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.typeName}}</div>\n <div class=\"type-category\">{{type.category}}</div>\n </div>\n <div class=\"type-stats\">\n <div class=\"type-count\">\n <span class=\"count-value\">{{type.credentialCount}}</span>\n <span class=\"count-label\">credentials</span>\n </div>\n <div class=\"type-bar\">\n <div class=\"type-bar-fill\"\n [style.width.%]=\"totalCredentials > 0 ? (type.credentialCount / totalCredentials * 100) : 0\">\n </div>\n </div>\n <div class=\"type-indicators\">\n @if (type.activeCount > 0) {\n <span class=\"indicator active\" title=\"Active\">\n <i class=\"fa-solid fa-circle\"></i> {{type.activeCount}}\n </span>\n }\n @if (type.expiringCount > 0) {\n <span class=\"indicator warning\" title=\"Expiring Soon\">\n <i class=\"fa-solid fa-clock\"></i> {{type.expiringCount}}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (typeStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>No credential types configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Recent Activity -->\n <div class=\"panel activity-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Recent Activity</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAuditLog()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (recentActivity.length > 0) {\n <div class=\"activity-list\">\n @for (activity of recentActivity; track activity) {\n <div class=\"activity-item\" (click)=\"onActivityClick(activity)\">\n <div class=\"activity-icon\" [ngClass]=\"getActionClass(activity.action)\">\n <i [class]=\"getActionIcon(activity.action)\"></i>\n </div>\n <div class=\"activity-info\">\n <div class=\"activity-name\">{{activity.credentialName}}</div>\n <div class=\"activity-meta\">\n <span class=\"activity-type\">{{activity.typeName}}</span>\n <span class=\"activity-action\">{{activity.action}}</span>\n @if (activity.user) {\n <span class=\"activity-user\">by {{activity.user}}</span>\n }\n </div>\n </div>\n <div class=\"activity-time\">\n {{formatDate(activity.date)}}\n </div>\n </div>\n }\n </div>\n }\n @if (recentActivity.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent activity</span>\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Quick Actions -->\n @if (UserCanCreateCredentials) {\n <div class=\"quick-actions\">\n <div class=\"quick-actions-title\">Quick Actions</div>\n <div class=\"quick-actions-grid\">\n <button class=\"quick-action\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Add Credential</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllTypes()\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>Manage Types</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllCategories()\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n <span>Categories</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAuditLog()\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n <span>Audit Log</span>\n </button>\n </div>\n </div>\n }\n <!-- Security Notice -->\n <div class=\"security-notice\">\n <i class=\"fa-solid fa-shield-check\"></i>\n <div class=\"notice-content\">\n <strong>Security Note:</strong> All credential values are encrypted.\n Access to credentials is logged in the audit trail for compliance and security monitoring.\n </div>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Health Banner */\n.health-banner {\n display: flex;\n align-items: center;\n padding: 20px 24px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n border-radius: 16px;\n margin-bottom: 24px;\n}\n\n.health-banner.health-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.health-banner.health-critical {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.health-score-container {\n margin-right: 24px;\n}\n\n.health-score-ring {\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.circular-chart {\n display: block;\n margin: 0 auto;\n max-height: 80px;\n transform: rotate(-90deg);\n}\n\n.circle-bg {\n fill: none;\n stroke: var(--mj-border-default);\n stroke-width: 3.8;\n}\n\n.circle {\n fill: none;\n stroke-width: 3.8;\n stroke-linecap: round;\n stroke: var(--mj-status-success);\n animation: progress 1s ease-out forwards;\n}\n\n.health-banner.health-warning .circle {\n stroke: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .circle {\n stroke: var(--mj-status-error);\n}\n\n@keyframes progress {\n 0% {\n stroke-dasharray: 0 100;\n }\n}\n\n.health-score-value {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.health-info {\n flex: 1;\n}\n\n.health-label {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-status-success);\n margin-bottom: 4px;\n}\n\n.health-banner.health-warning .health-label {\n color: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .health-label {\n color: var(--mj-status-error);\n}\n\n.health-details {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.health-alert {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-error);\n font-weight: 500;\n font-size: 14px;\n}\n\n.health-warning-text {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-warning);\n font-weight: 500;\n font-size: 14px;\n cursor: pointer;\n}\n\n.health-warning-text:hover {\n text-decoration: underline;\n}\n\n.health-ok {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-success);\n font-weight: 500;\n font-size: 14px;\n}\n\n/* KPI Cards */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.kpi-card.clickable {\n cursor: pointer;\n}\n\n.kpi-card.clickable:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.kpi-card.active .kpi-icon {\n background: var(--mj-status-success);\n}\n\n.kpi-card.warning .kpi-icon {\n background: var(--mj-status-warning);\n}\n\n.kpi-card.danger .kpi-icon {\n background: var(--mj-status-error);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-right: 14px;\n flex-shrink: 0;\n}\n\n.kpi-icon i {\n font-size: 20px;\n color: var(--mj-text-inverse);\n}\n\n.kpi-content {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.kpi-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n}\n\n.kpi-trend {\n display: flex;\n align-items: center;\n margin-left: 8px;\n color: var(--mj-text-disabled);\n}\n\n.kpi-trend.success {\n color: var(--mj-status-success);\n}\n\n.kpi-trend.warning {\n color: var(--mj-status-warning);\n}\n\n.kpi-trend .percentage {\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Content Grid */\n.content-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.category-panel {\n grid-row: span 2;\n}\n\n.panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.panel-title i {\n color: var(--mj-brand-primary);\n}\n\n.panel-subtitle {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.panel-action {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.panel-action:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.panel-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Category Chart */\n.category-chart {\n display: flex;\n flex-direction: column;\n gap: 24px;\n height: 100%;\n}\n\n.donut-chart-container {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n}\n\n.donut-chart {\n width: 100%;\n height: 100%;\n transform: rotate(-90deg);\n}\n\n.donut-segment {\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.donut-segment:hover {\n opacity: 0.8;\n}\n\n.donut-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}\n\n.donut-total {\n font-size: 32px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.donut-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Category Legend */\n.category-legend {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\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.legend-item:hover {\n background: var(--mj-bg-surface-sunken);\n transform: translateX(4px);\n}\n\n.legend-color {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.legend-info {\n flex: 1;\n}\n\n.legend-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.legend-name i {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-value {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-arrow {\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n/* Type List */\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-category {\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n}\n\n.type-stats {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n margin-left: 16px;\n}\n\n.type-count {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.count-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.type-bar {\n width: 100px;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.type-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.type-indicators {\n display: flex;\n gap: 8px;\n}\n\n.indicator {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n}\n\n.indicator.active {\n color: var(--mj-status-success);\n}\n\n.indicator.warning {\n color: var(--mj-status-warning);\n}\n\n.indicator i {\n font-size: 6px;\n}\n\n/* Activity List */\n.activity-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.activity-item {\n display: flex;\n align-items: center;\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.activity-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.activity-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) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.activity-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-created i {\n color: var(--mj-status-success);\n}\n\n.activity-icon.action-updated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-updated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-accessed {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-accessed i {\n color: var(--mj-status-warning);\n}\n\n.activity-icon.action-rotated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-rotated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-info {\n flex: 1;\n min-width: 0;\n}\n\n.activity-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.activity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.activity-type {\n background: var(--mj-border-default);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n.activity-action {\n font-weight: 500;\n}\n\n.activity-time {\n font-size: 11px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n/* Quick Actions */\n.quick-actions {\n margin-bottom: 24px;\n}\n\n.quick-actions-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 12px;\n}\n\n.quick-actions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n}\n\n.quick-action {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.quick-action:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n transform: translateY(-2px);\n}\n\n.quick-action i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.quick-action span {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\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: 32px;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n/* Security Notice */\n.security-notice {\n display: flex;\n align-items: flex-start;\n padding: 16px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.security-notice i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n margin-right: 12px;\n margin-top: 2px;\n}\n\n.notice-content {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.notice-content strong {\n font-weight: 600;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .content-grid {\n grid-template-columns: 1fr;\n }\n\n .category-panel {\n grid-row: auto;\n }\n\n .category-chart {\n flex-direction: row;\n align-items: center;\n }\n\n .donut-chart-container {\n width: 160px;\n height: 160px;\n }\n\n .category-legend {\n flex: 1;\n }\n}\n\n@media (max-width: 768px) {\n .overview-container {\n padding: 16px;\n }\n\n .overview-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: flex-end;\n }\n\n .health-banner {\n flex-direction: column;\n text-align: center;\n }\n\n .health-score-container {\n margin-right: 0;\n margin-bottom: 16px;\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .category-chart {\n flex-direction: column;\n }\n\n .quick-actions-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n"] }]
|
|
930
|
+
args: [{ standalone: false, selector: 'mj-credentials-overview-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Credential Overview\"\n Icon=\"fa-solid fa-chart-pie\"\n Subtitle=\"Monitor and manage your organization's credentials\">\n <div actions>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreateCredentials) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Credential</span>\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading overview...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Health Score Banner -->\n <div class=\"health-banner\" [ngClass]=\"getHealthClass()\">\n <div class=\"health-score-container\">\n <div class=\"health-score-ring\">\n <svg viewBox=\"0 0 36 36\" class=\"circular-chart\">\n <path class=\"circle-bg\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n <path class=\"circle\"\n [attr.stroke-dasharray]=\"getHealthScore() + ', 100'\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n </svg>\n <div class=\"health-score-value\">{{getHealthScore()}}</div>\n </div>\n </div>\n <div class=\"health-info\">\n <div class=\"health-label\">{{getHealthLabel()}}</div>\n <div class=\"health-details\">\n @if (expiredCredentials > 0) {\n <span class=\"health-alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{expiredCredentials}} expired\n </span>\n }\n @if (expiringSoonCount > 0) {\n <span class=\"health-warning-text\" (click)=\"viewExpiringCredentials()\">\n <i class=\"fa-solid fa-clock\"></i>\n {{expiringSoonCount}} expiring soon\n </span>\n }\n @if (expiredCredentials === 0 && expiringSoonCount === 0) {\n <span class=\"health-ok\">\n <i class=\"fa-solid fa-check-circle\"></i>\n All credentials healthy\n </span>\n }\n </div>\n </div>\n </div>\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{totalCredentials}}</div>\n <div class=\"kpi-label\">Total Credentials</div>\n </div>\n <div class=\"kpi-trend\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"kpi-card active clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{activeCredentials}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n <div class=\"kpi-trend success\">\n <span class=\"percentage\">{{totalCredentials > 0 ? (activeCredentials / totalCredentials * 100).toFixed(0) : 0}}%</span>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-cubes\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{credentialTypes}}</div>\n <div class=\"kpi-label\">Types</div>\n </div>\n </div>\n <div class=\"kpi-card clickable\" [class.warning]=\"expiringSoonCount > 0\" (click)=\"viewExpiringCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiringSoonCount}}</div>\n <div class=\"kpi-label\">Expiring Soon</div>\n </div>\n @if (expiringSoonCount > 0) {\n <div class=\"kpi-trend warning\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n </div>\n <div class=\"kpi-card\" [class.danger]=\"expiredCredentials > 0\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-circle-xmark\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiredCredentials}}</div>\n <div class=\"kpi-label\">Expired</div>\n </div>\n </div>\n </div>\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Distribution Chart -->\n <div class=\"panel category-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-chart-pie\"></i>\n <span>Credentials by Category</span>\n </div>\n <span class=\"panel-subtitle\">Click to filter by category</span>\n </div>\n <div class=\"panel-body\">\n @if (categoryStats.length > 0) {\n <div class=\"category-chart\">\n <!-- Visual Donut Chart -->\n <div class=\"donut-chart-container\">\n <svg viewBox=\"0 0 100 100\" class=\"donut-chart\">\n <circle cx=\"50\" cy=\"50\" r=\"40\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"12\"/>\n @for (stat of categoryStats; track stat; let i = $index) {\n <ng-container>\n <circle\n cx=\"50\" cy=\"50\" r=\"40\"\n fill=\"none\"\n [attr.stroke]=\"stat.color\"\n stroke-width=\"12\"\n [attr.stroke-dasharray]=\"stat.percentage * 2.51 + ' ' + (251 - stat.percentage * 2.51)\"\n [attr.stroke-dashoffset]=\"getDonutOffset(i)\"\n class=\"donut-segment\"\n (click)=\"onCategoryClick(stat)\"\n />\n </ng-container>\n }\n </svg>\n <div class=\"donut-center\">\n <div class=\"donut-total\">{{totalCredentials}}</div>\n <div class=\"donut-label\">Total</div>\n </div>\n </div>\n <!-- Legend -->\n <div class=\"category-legend\">\n @for (stat of categoryStats; track stat) {\n <div class=\"legend-item\" (click)=\"onCategoryClick(stat)\">\n <div class=\"legend-color\" [style.backgroundColor]=\"stat.color\"></div>\n <div class=\"legend-info\">\n <div class=\"legend-name\">\n <i [class]=\"stat.iconClass\"></i>\n {{stat.category}}\n </div>\n <div class=\"legend-value\">{{stat.count}} ({{stat.percentage}}%)</div>\n </div>\n <i class=\"fa-solid fa-chevron-right legend-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n @if (categoryStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>No credentials configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Types Breakdown -->\n <div class=\"panel types-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-cubes\"></i>\n <span>Top Credential Types</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAllTypes()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (typeStats.length > 0) {\n <div class=\"type-list\">\n @for (type of typeStats.slice(0, 6); track type) {\n <div class=\"type-item\" (click)=\"onTypeClick(type)\">\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.typeName}}</div>\n <div class=\"type-category\">{{type.category}}</div>\n </div>\n <div class=\"type-stats\">\n <div class=\"type-count\">\n <span class=\"count-value\">{{type.credentialCount}}</span>\n <span class=\"count-label\">credentials</span>\n </div>\n <div class=\"type-bar\">\n <div class=\"type-bar-fill\"\n [style.width.%]=\"totalCredentials > 0 ? (type.credentialCount / totalCredentials * 100) : 0\">\n </div>\n </div>\n <div class=\"type-indicators\">\n @if (type.activeCount > 0) {\n <span class=\"indicator active\" title=\"Active\">\n <i class=\"fa-solid fa-circle\"></i> {{type.activeCount}}\n </span>\n }\n @if (type.expiringCount > 0) {\n <span class=\"indicator warning\" title=\"Expiring Soon\">\n <i class=\"fa-solid fa-clock\"></i> {{type.expiringCount}}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (typeStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>No credential types configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Recent Activity -->\n <div class=\"panel activity-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Recent Activity</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAuditLog()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (recentActivity.length > 0) {\n <div class=\"activity-list\">\n @for (activity of recentActivity; track activity) {\n <div class=\"activity-item\" (click)=\"onActivityClick(activity)\">\n <div class=\"activity-icon\" [ngClass]=\"getActionClass(activity.action)\">\n <i [class]=\"getActionIcon(activity.action)\"></i>\n </div>\n <div class=\"activity-info\">\n <div class=\"activity-name\">{{activity.credentialName}}</div>\n <div class=\"activity-meta\">\n <span class=\"activity-type\">{{activity.typeName}}</span>\n <span class=\"activity-action\">{{activity.action}}</span>\n @if (activity.user) {\n <span class=\"activity-user\">by {{activity.user}}</span>\n }\n </div>\n </div>\n <div class=\"activity-time\">\n {{formatDate(activity.date)}}\n </div>\n </div>\n }\n </div>\n }\n @if (recentActivity.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent activity</span>\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Quick Actions -->\n @if (UserCanCreateCredentials) {\n <div class=\"quick-actions\">\n <div class=\"quick-actions-title\">Quick Actions</div>\n <div class=\"quick-actions-grid\">\n <button class=\"quick-action\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Add Credential</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllTypes()\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>Manage Types</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllCategories()\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n <span>Categories</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAuditLog()\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n <span>Audit Log</span>\n </button>\n </div>\n </div>\n }\n <!-- Security Notice -->\n <div class=\"security-notice\">\n <i class=\"fa-solid fa-shield-check\"></i>\n <div class=\"notice-content\">\n <strong>Security Note:</strong> All credential values are encrypted.\n Access to credentials is logged in the audit trail for compliance and security monitoring.\n </div>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Health Banner */\n.health-banner {\n display: flex;\n align-items: center;\n padding: 20px 24px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n border-radius: 16px;\n margin-bottom: 24px;\n}\n\n.health-banner.health-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.health-banner.health-critical {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.health-score-container {\n margin-right: 24px;\n}\n\n.health-score-ring {\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.circular-chart {\n display: block;\n margin: 0 auto;\n max-height: 80px;\n transform: rotate(-90deg);\n}\n\n.circle-bg {\n fill: none;\n stroke: var(--mj-border-default);\n stroke-width: 3.8;\n}\n\n.circle {\n fill: none;\n stroke-width: 3.8;\n stroke-linecap: round;\n stroke: var(--mj-status-success);\n animation: progress 1s ease-out forwards;\n}\n\n.health-banner.health-warning .circle {\n stroke: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .circle {\n stroke: var(--mj-status-error);\n}\n\n@keyframes progress {\n 0% {\n stroke-dasharray: 0 100;\n }\n}\n\n.health-score-value {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.health-info {\n flex: 1;\n}\n\n.health-label {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-status-success);\n margin-bottom: 4px;\n}\n\n.health-banner.health-warning .health-label {\n color: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .health-label {\n color: var(--mj-status-error);\n}\n\n.health-details {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.health-alert {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-error);\n font-weight: 500;\n font-size: 14px;\n}\n\n.health-warning-text {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-warning);\n font-weight: 500;\n font-size: 14px;\n cursor: pointer;\n}\n\n.health-warning-text:hover {\n text-decoration: underline;\n}\n\n.health-ok {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-success);\n font-weight: 500;\n font-size: 14px;\n}\n\n/* KPI Cards */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.kpi-card.clickable {\n cursor: pointer;\n}\n\n.kpi-card.clickable:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.kpi-card.active .kpi-icon {\n background: var(--mj-status-success);\n}\n\n.kpi-card.warning .kpi-icon {\n background: var(--mj-status-warning);\n}\n\n.kpi-card.danger .kpi-icon {\n background: var(--mj-status-error);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-right: 14px;\n flex-shrink: 0;\n}\n\n.kpi-icon i {\n font-size: 20px;\n color: var(--mj-text-inverse);\n}\n\n.kpi-content {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.kpi-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n}\n\n.kpi-trend {\n display: flex;\n align-items: center;\n margin-left: 8px;\n color: var(--mj-text-disabled);\n}\n\n.kpi-trend.success {\n color: var(--mj-status-success);\n}\n\n.kpi-trend.warning {\n color: var(--mj-status-warning);\n}\n\n.kpi-trend .percentage {\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Content Grid */\n.content-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.category-panel {\n grid-row: span 2;\n}\n\n.panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.panel-title i {\n color: var(--mj-brand-primary);\n}\n\n.panel-subtitle {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.panel-action {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.panel-action:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.panel-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Category Chart */\n.category-chart {\n display: flex;\n flex-direction: column;\n gap: 24px;\n height: 100%;\n}\n\n.donut-chart-container {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n}\n\n.donut-chart {\n width: 100%;\n height: 100%;\n transform: rotate(-90deg);\n}\n\n.donut-segment {\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.donut-segment:hover {\n opacity: 0.8;\n}\n\n.donut-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}\n\n.donut-total {\n font-size: 32px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.donut-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Category Legend */\n.category-legend {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\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.legend-item:hover {\n background: var(--mj-bg-surface-sunken);\n transform: translateX(4px);\n}\n\n.legend-color {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.legend-info {\n flex: 1;\n}\n\n.legend-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.legend-name i {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-value {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-arrow {\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n/* Type List */\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-category {\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n}\n\n.type-stats {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n margin-left: 16px;\n}\n\n.type-count {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.count-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.type-bar {\n width: 100px;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.type-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.type-indicators {\n display: flex;\n gap: 8px;\n}\n\n.indicator {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n}\n\n.indicator.active {\n color: var(--mj-status-success);\n}\n\n.indicator.warning {\n color: var(--mj-status-warning);\n}\n\n.indicator i {\n font-size: 6px;\n}\n\n/* Activity List */\n.activity-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.activity-item {\n display: flex;\n align-items: center;\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.activity-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.activity-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) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.activity-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-created i {\n color: var(--mj-status-success);\n}\n\n.activity-icon.action-updated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-updated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-accessed {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-accessed i {\n color: var(--mj-status-warning);\n}\n\n.activity-icon.action-rotated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-rotated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-info {\n flex: 1;\n min-width: 0;\n}\n\n.activity-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.activity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.activity-type {\n background: var(--mj-border-default);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n.activity-action {\n font-weight: 500;\n}\n\n.activity-time {\n font-size: 11px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n/* Quick Actions */\n.quick-actions {\n margin-bottom: 24px;\n}\n\n.quick-actions-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 12px;\n}\n\n.quick-actions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n}\n\n.quick-action {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.quick-action:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n transform: translateY(-2px);\n}\n\n.quick-action i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.quick-action span {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\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: 32px;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n/* Security Notice */\n.security-notice {\n display: flex;\n align-items: flex-start;\n padding: 16px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.security-notice i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n margin-right: 12px;\n margin-top: 2px;\n}\n\n.notice-content {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.notice-content strong {\n font-weight: 600;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .content-grid {\n grid-template-columns: 1fr;\n }\n\n .category-panel {\n grid-row: auto;\n }\n\n .category-chart {\n flex-direction: row;\n align-items: center;\n }\n\n .donut-chart-container {\n width: 160px;\n height: 160px;\n }\n\n .category-legend {\n flex: 1;\n }\n}\n\n@media (max-width: 768px) {\n .overview-container {\n padding: 16px;\n }\n\n .overview-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: flex-end;\n }\n\n .health-banner {\n flex-direction: column;\n text-align: center;\n }\n\n .health-score-container {\n margin-right: 0;\n margin-bottom: 16px;\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .category-chart {\n flex-direction: column;\n }\n\n .quick-actions-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n"] }]
|
|
930
931
|
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
931
932
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsOverviewResourceComponent, { className: "CredentialsOverviewResourceComponent", filePath: "src/Credentials/components/credentials-overview-resource.component.ts", lineNumber: 50 }); })();
|
|
932
933
|
//# sourceMappingURL=credentials-overview-resource.component.js.map
|