@memberjunction/ng-dashboards 5.34.1 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- 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 +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- 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 +12 -19
- 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 +96 -203
- 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.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- 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.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -12,610 +12,492 @@ import { RunView } from '@memberjunction/core';
|
|
|
12
12
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "@angular/common";
|
|
15
|
-
import * as i2 from "@
|
|
16
|
-
import * as i3 from "@memberjunction/ng-
|
|
17
|
-
import * as i4 from "@memberjunction/ng-
|
|
18
|
-
import * as i5 from "@memberjunction/ng-credentials";
|
|
15
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
16
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
17
|
+
import * as i4 from "@memberjunction/ng-credentials";
|
|
19
18
|
const _c0 = ["editPanel"];
|
|
20
|
-
function
|
|
21
|
-
i0.ɵɵelement(0, "mj-
|
|
22
|
-
} }
|
|
23
|
-
function CredentialsListResourceComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
-
i0.ɵɵelementStart(0, "span", 12);
|
|
25
|
-
i0.ɵɵelement(1, "i", 42);
|
|
26
|
-
i0.ɵɵtext(2);
|
|
27
|
-
i0.ɵɵelementEnd();
|
|
19
|
+
function CredentialsListResourceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelement(0, "mj-stat-badge", 4);
|
|
28
21
|
} if (rf & 2) {
|
|
29
|
-
const
|
|
30
|
-
i0.ɵɵ
|
|
31
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r2.getExpiringSoonCount(), " expiring ");
|
|
22
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
23
|
+
i0.ɵɵproperty("Count", ctx_r1.getExpiringSoonCount());
|
|
32
24
|
} }
|
|
33
|
-
function
|
|
34
|
-
i0.ɵɵ
|
|
35
|
-
i0.ɵɵelement(1, "i", 43);
|
|
36
|
-
i0.ɵɵtext(2);
|
|
37
|
-
i0.ɵɵelementEnd();
|
|
25
|
+
function CredentialsListResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelement(0, "mj-stat-badge", 5);
|
|
38
27
|
} if (rf & 2) {
|
|
39
|
-
const
|
|
40
|
-
i0.ɵɵ
|
|
41
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r2.getExpiredCount(), " expired ");
|
|
42
|
-
} }
|
|
43
|
-
function CredentialsListResourceComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
-
const _r4 = i0.ɵɵgetCurrentView();
|
|
45
|
-
i0.ɵɵelementStart(0, "button", 44);
|
|
46
|
-
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
|
|
47
|
-
i0.ɵɵelement(1, "i", 45);
|
|
48
|
-
i0.ɵɵelementStart(2, "span");
|
|
49
|
-
i0.ɵɵtext(3, "New Credential");
|
|
50
|
-
i0.ɵɵelementEnd()();
|
|
28
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
29
|
+
i0.ɵɵproperty("Count", ctx_r1.getExpiredCount());
|
|
51
30
|
} }
|
|
52
|
-
function
|
|
53
|
-
const
|
|
54
|
-
i0.ɵɵelementStart(0, "button",
|
|
55
|
-
i0.ɵɵlistener("click", function
|
|
56
|
-
i0.ɵɵelement(1, "i",
|
|
31
|
+
function CredentialsListResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
33
|
+
i0.ɵɵelementStart(0, "button", 16);
|
|
34
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
|
|
35
|
+
i0.ɵɵelement(1, "i", 17);
|
|
36
|
+
i0.ɵɵtext(2, " New Credential ");
|
|
57
37
|
i0.ɵɵelementEnd();
|
|
58
38
|
} }
|
|
59
|
-
function
|
|
60
|
-
i0.ɵɵ
|
|
61
|
-
i0.ɵɵtext(1);
|
|
62
|
-
i0.ɵɵelementEnd();
|
|
63
|
-
} if (rf & 2) {
|
|
64
|
-
const type_r6 = ctx.$implicit;
|
|
65
|
-
i0.ɵɵproperty("value", type_r6.ID);
|
|
66
|
-
i0.ɵɵadvance();
|
|
67
|
-
i0.ɵɵtextInterpolate(type_r6.Name);
|
|
39
|
+
function CredentialsListResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelement(0, "mj-loading", 14);
|
|
68
41
|
} }
|
|
69
|
-
function
|
|
70
|
-
const
|
|
71
|
-
i0.ɵɵelementStart(0, "button",
|
|
72
|
-
i0.ɵɵlistener("click", function
|
|
73
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "button", 28);
|
|
45
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.bulkToggleActive(true)); });
|
|
46
|
+
i0.ɵɵelement(1, "i", 29);
|
|
74
47
|
i0.ɵɵtext(2, " Activate ");
|
|
75
48
|
i0.ɵɵelementEnd();
|
|
76
49
|
} }
|
|
77
|
-
function
|
|
78
|
-
const
|
|
79
|
-
i0.ɵɵelementStart(0, "button",
|
|
80
|
-
i0.ɵɵlistener("click", function
|
|
81
|
-
i0.ɵɵelement(1, "i",
|
|
50
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
52
|
+
i0.ɵɵelementStart(0, "button", 28);
|
|
53
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.bulkToggleActive(false)); });
|
|
54
|
+
i0.ɵɵelement(1, "i", 30);
|
|
82
55
|
i0.ɵɵtext(2, " Deactivate ");
|
|
83
56
|
i0.ɵɵelementEnd();
|
|
84
57
|
} }
|
|
85
|
-
function
|
|
86
|
-
const
|
|
87
|
-
i0.ɵɵelementStart(0, "button",
|
|
88
|
-
i0.ɵɵlistener("click", function
|
|
89
|
-
i0.ɵɵelement(1, "i",
|
|
58
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
59
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
60
|
+
i0.ɵɵelementStart(0, "button", 31);
|
|
61
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.bulkDelete()); });
|
|
62
|
+
i0.ɵɵelement(1, "i", 32);
|
|
90
63
|
i0.ɵɵtext(2, " Delete ");
|
|
91
64
|
i0.ɵɵelementEnd();
|
|
92
65
|
} }
|
|
93
|
-
function
|
|
94
|
-
const
|
|
95
|
-
i0.ɵɵelementStart(0, "div",
|
|
66
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
68
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 22)(2, "span", 23);
|
|
96
69
|
i0.ɵɵtext(3);
|
|
97
70
|
i0.ɵɵelementEnd();
|
|
98
|
-
i0.ɵɵelementStart(4, "button",
|
|
99
|
-
i0.ɵɵlistener("click", function
|
|
71
|
+
i0.ɵɵelementStart(4, "button", 24);
|
|
72
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.clearSelection()); });
|
|
100
73
|
i0.ɵɵtext(5, "Clear selection");
|
|
101
74
|
i0.ɵɵelementEnd()();
|
|
102
|
-
i0.ɵɵelementStart(6, "div",
|
|
103
|
-
i0.ɵɵconditionalCreate(7,
|
|
104
|
-
i0.ɵɵconditionalCreate(8,
|
|
105
|
-
i0.ɵɵconditionalCreate(9,
|
|
75
|
+
i0.ɵɵelementStart(6, "div", 25);
|
|
76
|
+
i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template, 3, 0, "button", 26);
|
|
77
|
+
i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template, 3, 0, "button", 26);
|
|
78
|
+
i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template, 3, 0, "button", 27);
|
|
106
79
|
i0.ɵɵelementEnd()();
|
|
107
80
|
} if (rf & 2) {
|
|
108
|
-
const
|
|
81
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
109
82
|
i0.ɵɵadvance(3);
|
|
110
|
-
i0.ɵɵtextInterpolate1("",
|
|
83
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.selectedCredentials.size, " selected");
|
|
111
84
|
i0.ɵɵadvance(4);
|
|
112
|
-
i0.ɵɵconditional(
|
|
85
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 7 : -1);
|
|
113
86
|
i0.ɵɵadvance();
|
|
114
|
-
i0.ɵɵconditional(
|
|
87
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 8 : -1);
|
|
115
88
|
i0.ɵɵadvance();
|
|
116
|
-
i0.ɵɵconditional(
|
|
89
|
+
i0.ɵɵconditional(ctx_r1.UserCanDelete ? 9 : -1);
|
|
117
90
|
} }
|
|
118
|
-
function
|
|
119
|
-
const
|
|
120
|
-
i0.ɵɵelementStart(0, "div",
|
|
121
|
-
i0.ɵɵlistener("change", function
|
|
91
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
93
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "input", 54);
|
|
94
|
+
i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r9); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleSelection(credential_r10)); });
|
|
122
95
|
i0.ɵɵelementEnd()();
|
|
123
96
|
} if (rf & 2) {
|
|
124
|
-
const
|
|
125
|
-
const
|
|
97
|
+
const credential_r10 = i0.ɵɵnextContext().$implicit;
|
|
98
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
126
99
|
i0.ɵɵadvance();
|
|
127
|
-
i0.ɵɵproperty("checked",
|
|
100
|
+
i0.ɵɵproperty("checked", ctx_r1.selectedCredentials.has(credential_r10.ID));
|
|
128
101
|
} }
|
|
129
|
-
function
|
|
130
|
-
const
|
|
131
|
-
i0.ɵɵelementStart(0, "button",
|
|
132
|
-
i0.ɵɵlistener("click", function
|
|
102
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
103
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
104
|
+
i0.ɵɵelementStart(0, "button", 55);
|
|
105
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCredentialActive(credential_r10, $event)); });
|
|
133
106
|
i0.ɵɵelement(1, "i");
|
|
134
107
|
i0.ɵɵelementEnd();
|
|
135
108
|
} if (rf & 2) {
|
|
136
|
-
const
|
|
137
|
-
i0.ɵɵproperty("title",
|
|
109
|
+
const credential_r10 = i0.ɵɵnextContext().$implicit;
|
|
110
|
+
i0.ɵɵproperty("title", credential_r10.IsActive ? "Deactivate" : "Activate");
|
|
138
111
|
i0.ɵɵadvance();
|
|
139
|
-
i0.ɵɵclassMap(
|
|
112
|
+
i0.ɵɵclassMap(credential_r10.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
|
|
140
113
|
} }
|
|
141
|
-
function
|
|
142
|
-
const
|
|
143
|
-
i0.ɵɵelementStart(0, "button",
|
|
144
|
-
i0.ɵɵlistener("click", function
|
|
145
|
-
i0.ɵɵelement(1, "i",
|
|
114
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
116
|
+
i0.ɵɵelementStart(0, "button", 56);
|
|
117
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r12); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r10, $event)); });
|
|
118
|
+
i0.ɵɵelement(1, "i", 57);
|
|
146
119
|
i0.ɵɵelementEnd();
|
|
147
120
|
} }
|
|
148
|
-
function
|
|
149
|
-
const
|
|
150
|
-
i0.ɵɵelementStart(0, "button",
|
|
151
|
-
i0.ɵɵlistener("click", function
|
|
152
|
-
i0.ɵɵelement(1, "i",
|
|
121
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
122
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
123
|
+
i0.ɵɵelementStart(0, "button", 58);
|
|
124
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r13); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.deleteCredential(credential_r10, $event)); });
|
|
125
|
+
i0.ɵɵelement(1, "i", 32);
|
|
153
126
|
i0.ɵɵelementEnd();
|
|
154
127
|
} }
|
|
155
|
-
function
|
|
156
|
-
i0.ɵɵelementStart(0, "p",
|
|
128
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵelementStart(0, "p", 47);
|
|
157
130
|
i0.ɵɵtext(1);
|
|
158
131
|
i0.ɵɵelementEnd();
|
|
159
132
|
} if (rf & 2) {
|
|
160
|
-
const
|
|
133
|
+
const credential_r10 = i0.ɵɵnextContext().$implicit;
|
|
161
134
|
i0.ɵɵadvance();
|
|
162
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
135
|
+
i0.ɵɵtextInterpolate1(" ", credential_r10.Description, " ");
|
|
163
136
|
} }
|
|
164
|
-
function
|
|
165
|
-
i0.ɵɵelementStart(0, "div",
|
|
166
|
-
i0.ɵɵelement(1, "i",
|
|
137
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
138
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
139
|
+
i0.ɵɵelement(1, "i", 59);
|
|
167
140
|
i0.ɵɵelementStart(2, "span");
|
|
168
141
|
i0.ɵɵtext(3, "Default");
|
|
169
142
|
i0.ɵɵelementEnd()();
|
|
170
143
|
} }
|
|
171
|
-
function
|
|
172
|
-
i0.ɵɵelementStart(0, "div",
|
|
173
|
-
i0.ɵɵelement(1, "i",
|
|
144
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
146
|
+
i0.ɵɵelement(1, "i", 60);
|
|
174
147
|
i0.ɵɵelementStart(2, "span");
|
|
175
148
|
i0.ɵɵtext(3);
|
|
176
149
|
i0.ɵɵelementEnd()();
|
|
177
150
|
} if (rf & 2) {
|
|
178
|
-
const
|
|
179
|
-
const
|
|
180
|
-
i0.ɵɵclassProp("warning",
|
|
151
|
+
const credential_r10 = i0.ɵɵnextContext().$implicit;
|
|
152
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
153
|
+
i0.ɵɵclassProp("warning", ctx_r1.isExpiringSoon(credential_r10))("danger", ctx_r1.isExpired(credential_r10));
|
|
181
154
|
i0.ɵɵadvance(3);
|
|
182
|
-
i0.ɵɵtextInterpolate2("",
|
|
155
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.isExpired(credential_r10) ? "Expired" : "Expires", ": ", ctx_r1.formatDate(credential_r10.ExpiresAt));
|
|
183
156
|
} }
|
|
184
|
-
function
|
|
185
|
-
i0.ɵɵelementStart(0, "div",
|
|
186
|
-
i0.ɵɵelement(1, "i",
|
|
157
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
158
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
159
|
+
i0.ɵɵelement(1, "i", 61);
|
|
187
160
|
i0.ɵɵelementStart(2, "span");
|
|
188
161
|
i0.ɵɵtext(3);
|
|
189
162
|
i0.ɵɵelementEnd()();
|
|
190
163
|
} if (rf & 2) {
|
|
191
|
-
const
|
|
192
|
-
const
|
|
164
|
+
const credential_r10 = i0.ɵɵnextContext().$implicit;
|
|
165
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
193
166
|
i0.ɵɵadvance(3);
|
|
194
|
-
i0.ɵɵtextInterpolate1("Last used: ",
|
|
167
|
+
i0.ɵɵtextInterpolate1("Last used: ", ctx_r1.formatDate(credential_r10.LastUsedAt));
|
|
195
168
|
} }
|
|
196
|
-
function
|
|
197
|
-
i0.ɵɵelementStart(0, "div",
|
|
198
|
-
i0.ɵɵelement(1, "i",
|
|
169
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 52);
|
|
171
|
+
i0.ɵɵelement(1, "i", 62);
|
|
199
172
|
i0.ɵɵtext(2);
|
|
200
173
|
i0.ɵɵelementEnd();
|
|
201
174
|
} if (rf & 2) {
|
|
202
|
-
const
|
|
175
|
+
const credential_r10 = i0.ɵɵnextContext().$implicit;
|
|
203
176
|
i0.ɵɵadvance(2);
|
|
204
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
177
|
+
i0.ɵɵtextInterpolate1(" ", credential_r10.Category, " ");
|
|
205
178
|
} }
|
|
206
|
-
function
|
|
207
|
-
const
|
|
208
|
-
i0.ɵɵelementStart(0, "div",
|
|
209
|
-
i0.ɵɵconditionalCreate(1,
|
|
210
|
-
i0.ɵɵelementStart(2, "div",
|
|
179
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
180
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
181
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
182
|
+
i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template, 2, 1, "div", 35);
|
|
183
|
+
i0.ɵɵelementStart(2, "div", 36)(3, "div", 37);
|
|
211
184
|
i0.ɵɵelement(4, "i");
|
|
212
185
|
i0.ɵɵelementEnd();
|
|
213
|
-
i0.ɵɵelementStart(5, "div",
|
|
186
|
+
i0.ɵɵelementStart(5, "div", 38)(6, "div", 39);
|
|
214
187
|
i0.ɵɵtext(7);
|
|
215
188
|
i0.ɵɵelementEnd();
|
|
216
|
-
i0.ɵɵelementStart(8, "div",
|
|
189
|
+
i0.ɵɵelementStart(8, "div", 40);
|
|
217
190
|
i0.ɵɵtext(9);
|
|
218
191
|
i0.ɵɵelementEnd()();
|
|
219
|
-
i0.ɵɵelementStart(10, "div",
|
|
220
|
-
i0.ɵɵconditionalCreate(11,
|
|
221
|
-
i0.ɵɵconditionalCreate(12,
|
|
222
|
-
i0.ɵɵconditionalCreate(13,
|
|
192
|
+
i0.ɵɵelementStart(10, "div", 41);
|
|
193
|
+
i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template, 2, 3, "button", 42);
|
|
194
|
+
i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template, 2, 0, "button", 43);
|
|
195
|
+
i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template, 2, 0, "button", 44);
|
|
223
196
|
i0.ɵɵelementEnd()();
|
|
224
|
-
i0.ɵɵelementStart(14, "div",
|
|
225
|
-
i0.ɵɵlistener("click", function
|
|
226
|
-
i0.ɵɵelementStart(15, "div",
|
|
197
|
+
i0.ɵɵelementStart(14, "div", 45);
|
|
198
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template_div_click_14_listener() { const credential_r10 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r10)); });
|
|
199
|
+
i0.ɵɵelementStart(15, "div", 46);
|
|
227
200
|
i0.ɵɵelement(16, "i");
|
|
228
201
|
i0.ɵɵtext(17);
|
|
229
202
|
i0.ɵɵelementEnd();
|
|
230
|
-
i0.ɵɵconditionalCreate(18,
|
|
231
|
-
i0.ɵɵelementStart(19, "div",
|
|
232
|
-
i0.ɵɵconditionalCreate(20,
|
|
233
|
-
i0.ɵɵconditionalCreate(21,
|
|
234
|
-
i0.ɵɵconditionalCreate(22,
|
|
203
|
+
i0.ɵɵconditionalCreate(18, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_18_Template, 2, 1, "p", 47);
|
|
204
|
+
i0.ɵɵelementStart(19, "div", 48);
|
|
205
|
+
i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_20_Template, 4, 0, "div", 49);
|
|
206
|
+
i0.ɵɵconditionalCreate(21, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_21_Template, 4, 6, "div", 50);
|
|
207
|
+
i0.ɵɵconditionalCreate(22, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_22_Template, 4, 1, "div", 49);
|
|
235
208
|
i0.ɵɵelementEnd()();
|
|
236
|
-
i0.ɵɵelementStart(23, "div",
|
|
237
|
-
i0.ɵɵconditionalCreate(24,
|
|
238
|
-
i0.ɵɵelementStart(25, "div",
|
|
209
|
+
i0.ɵɵelementStart(23, "div", 51);
|
|
210
|
+
i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_24_Template, 3, 1, "div", 52);
|
|
211
|
+
i0.ɵɵelementStart(25, "div", 53);
|
|
239
212
|
i0.ɵɵtext(26);
|
|
240
213
|
i0.ɵɵelementEnd()()();
|
|
241
214
|
} if (rf & 2) {
|
|
242
|
-
const
|
|
243
|
-
const
|
|
244
|
-
i0.ɵɵclassProp("selected",
|
|
215
|
+
const credential_r10 = ctx.$implicit;
|
|
216
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
217
|
+
i0.ɵɵclassProp("selected", ctx_r1.selectedCredentials.has(credential_r10.ID))("expired", ctx_r1.isExpired(credential_r10))("expiring", ctx_r1.isExpiringSoon(credential_r10));
|
|
245
218
|
i0.ɵɵadvance();
|
|
246
|
-
i0.ɵɵconditional(
|
|
219
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate || ctx_r1.UserCanDelete ? 1 : -1);
|
|
247
220
|
i0.ɵɵadvance(2);
|
|
248
|
-
i0.ɵɵproperty("ngClass",
|
|
221
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r10));
|
|
249
222
|
i0.ɵɵadvance();
|
|
250
|
-
i0.ɵɵclassMap(
|
|
223
|
+
i0.ɵɵclassMap(credential_r10.IconClass || "fa-solid fa-key");
|
|
251
224
|
i0.ɵɵadvance(3);
|
|
252
|
-
i0.ɵɵtextInterpolate(
|
|
225
|
+
i0.ɵɵtextInterpolate(credential_r10.Name);
|
|
253
226
|
i0.ɵɵadvance(2);
|
|
254
|
-
i0.ɵɵtextInterpolate(
|
|
227
|
+
i0.ɵɵtextInterpolate(credential_r10.CredentialType || "Unknown Type");
|
|
255
228
|
i0.ɵɵadvance(2);
|
|
256
|
-
i0.ɵɵconditional(
|
|
229
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 11 : -1);
|
|
257
230
|
i0.ɵɵadvance();
|
|
258
|
-
i0.ɵɵconditional(
|
|
231
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 12 : -1);
|
|
259
232
|
i0.ɵɵadvance();
|
|
260
|
-
i0.ɵɵconditional(
|
|
233
|
+
i0.ɵɵconditional(ctx_r1.UserCanDelete ? 13 : -1);
|
|
261
234
|
i0.ɵɵadvance(2);
|
|
262
|
-
i0.ɵɵproperty("ngClass",
|
|
235
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r10));
|
|
263
236
|
i0.ɵɵadvance();
|
|
264
|
-
i0.ɵɵclassMap(
|
|
237
|
+
i0.ɵɵclassMap(ctx_r1.getStatusIcon(credential_r10));
|
|
265
238
|
i0.ɵɵadvance();
|
|
266
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
239
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusLabel(credential_r10), " ");
|
|
267
240
|
i0.ɵɵadvance();
|
|
268
|
-
i0.ɵɵconditional(
|
|
241
|
+
i0.ɵɵconditional(credential_r10.Description ? 18 : -1);
|
|
269
242
|
i0.ɵɵadvance(2);
|
|
270
|
-
i0.ɵɵconditional(
|
|
243
|
+
i0.ɵɵconditional(credential_r10.IsDefault ? 20 : -1);
|
|
271
244
|
i0.ɵɵadvance();
|
|
272
|
-
i0.ɵɵconditional(
|
|
245
|
+
i0.ɵɵconditional(credential_r10.ExpiresAt ? 21 : -1);
|
|
273
246
|
i0.ɵɵadvance();
|
|
274
|
-
i0.ɵɵconditional(
|
|
247
|
+
i0.ɵɵconditional(credential_r10.LastUsedAt ? 22 : -1);
|
|
275
248
|
i0.ɵɵadvance(2);
|
|
276
|
-
i0.ɵɵconditional(
|
|
249
|
+
i0.ɵɵconditional(credential_r10.Category ? 24 : -1);
|
|
277
250
|
i0.ɵɵadvance(2);
|
|
278
|
-
i0.ɵɵtextInterpolate1(" Created ",
|
|
251
|
+
i0.ɵɵtextInterpolate1(" Created ", ctx_r1.formatDate(credential_r10.__mj_CreatedAt), " ");
|
|
279
252
|
} }
|
|
280
|
-
function
|
|
281
|
-
i0.ɵɵelementStart(0, "div",
|
|
282
|
-
i0.ɵɵrepeaterCreate(1,
|
|
253
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
255
|
+
i0.ɵɵrepeaterCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template, 27, 25, "div", 33, i0.ɵɵrepeaterTrackByIdentity);
|
|
283
256
|
i0.ɵɵelementEnd();
|
|
284
257
|
} if (rf & 2) {
|
|
285
|
-
const
|
|
258
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
286
259
|
i0.ɵɵadvance();
|
|
287
|
-
i0.ɵɵrepeater(
|
|
260
|
+
i0.ɵɵrepeater(ctx_r1.filteredCredentials);
|
|
288
261
|
} }
|
|
289
|
-
function
|
|
290
|
-
const
|
|
291
|
-
i0.ɵɵelementStart(0, "th",
|
|
292
|
-
i0.ɵɵlistener("change", function
|
|
262
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
263
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
264
|
+
i0.ɵɵelementStart(0, "th", 64)(1, "input", 54);
|
|
265
|
+
i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleSelectAll()); });
|
|
293
266
|
i0.ɵɵelementEnd()();
|
|
294
267
|
} if (rf & 2) {
|
|
295
|
-
const
|
|
268
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
296
269
|
i0.ɵɵadvance();
|
|
297
|
-
i0.ɵɵproperty("checked",
|
|
270
|
+
i0.ɵɵproperty("checked", ctx_r1.isAllSelected());
|
|
298
271
|
} }
|
|
299
|
-
function
|
|
300
|
-
const
|
|
301
|
-
i0.ɵɵelementStart(0, "td",
|
|
302
|
-
i0.ɵɵlistener("change", function
|
|
272
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
273
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
274
|
+
i0.ɵɵelementStart(0, "td", 64)(1, "input", 54);
|
|
275
|
+
i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r16); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleSelection(credential_r17)); });
|
|
303
276
|
i0.ɵɵelementEnd()();
|
|
304
277
|
} if (rf & 2) {
|
|
305
|
-
const
|
|
306
|
-
const
|
|
278
|
+
const credential_r17 = i0.ɵɵnextContext().$implicit;
|
|
279
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
307
280
|
i0.ɵɵadvance();
|
|
308
|
-
i0.ɵɵproperty("checked",
|
|
281
|
+
i0.ɵɵproperty("checked", ctx_r1.selectedCredentials.has(credential_r17.ID));
|
|
309
282
|
} }
|
|
310
|
-
function
|
|
311
|
-
i0.ɵɵelementStart(0, "span",
|
|
283
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
+
i0.ɵɵelementStart(0, "span", 77);
|
|
312
285
|
i0.ɵɵtext(1);
|
|
313
286
|
i0.ɵɵelementEnd();
|
|
314
287
|
} if (rf & 2) {
|
|
315
|
-
const
|
|
288
|
+
const credential_r17 = i0.ɵɵnextContext().$implicit;
|
|
316
289
|
i0.ɵɵadvance();
|
|
317
|
-
i0.ɵɵtextInterpolate(
|
|
290
|
+
i0.ɵɵtextInterpolate(credential_r17.Description);
|
|
318
291
|
} }
|
|
319
|
-
function
|
|
320
|
-
i0.ɵɵelementStart(0, "span",
|
|
292
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelementStart(0, "span", 78);
|
|
321
294
|
i0.ɵɵtext(1, "Default");
|
|
322
295
|
i0.ɵɵelementEnd();
|
|
323
296
|
} }
|
|
324
|
-
function
|
|
325
|
-
i0.ɵɵelementStart(0, "span",
|
|
297
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
298
|
+
i0.ɵɵelementStart(0, "span", 79);
|
|
326
299
|
i0.ɵɵtext(1);
|
|
327
300
|
i0.ɵɵelementEnd();
|
|
328
301
|
} if (rf & 2) {
|
|
329
|
-
const
|
|
302
|
+
const credential_r17 = i0.ɵɵnextContext().$implicit;
|
|
330
303
|
i0.ɵɵadvance();
|
|
331
|
-
i0.ɵɵtextInterpolate(
|
|
304
|
+
i0.ɵɵtextInterpolate(credential_r17.Category);
|
|
332
305
|
} }
|
|
333
|
-
function
|
|
306
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
334
307
|
i0.ɵɵelementStart(0, "span");
|
|
335
308
|
i0.ɵɵtext(1, "-");
|
|
336
309
|
i0.ɵɵelementEnd();
|
|
337
310
|
} }
|
|
338
|
-
function
|
|
339
|
-
const
|
|
340
|
-
i0.ɵɵelementStart(0, "button",
|
|
341
|
-
i0.ɵɵlistener("click", function
|
|
311
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
312
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
313
|
+
i0.ɵɵelementStart(0, "button", 85);
|
|
314
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r18); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCredentialActive(credential_r17, $event)); });
|
|
342
315
|
i0.ɵɵelement(1, "i");
|
|
343
316
|
i0.ɵɵelementEnd();
|
|
344
317
|
} if (rf & 2) {
|
|
345
|
-
const
|
|
346
|
-
i0.ɵɵproperty("title",
|
|
318
|
+
const credential_r17 = i0.ɵɵnextContext().$implicit;
|
|
319
|
+
i0.ɵɵproperty("title", credential_r17.IsActive ? "Deactivate" : "Activate");
|
|
347
320
|
i0.ɵɵadvance();
|
|
348
|
-
i0.ɵɵclassMap(
|
|
321
|
+
i0.ɵɵclassMap(credential_r17.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
|
|
349
322
|
} }
|
|
350
|
-
function
|
|
351
|
-
const
|
|
352
|
-
i0.ɵɵelementStart(0, "button",
|
|
353
|
-
i0.ɵɵlistener("click", function
|
|
354
|
-
i0.ɵɵelement(1, "i",
|
|
323
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
324
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
325
|
+
i0.ɵɵelementStart(0, "button", 86);
|
|
326
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r19); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r17, $event)); });
|
|
327
|
+
i0.ɵɵelement(1, "i", 57);
|
|
355
328
|
i0.ɵɵelementEnd();
|
|
356
329
|
} }
|
|
357
|
-
function
|
|
358
|
-
const
|
|
359
|
-
i0.ɵɵelementStart(0, "button",
|
|
360
|
-
i0.ɵɵlistener("click", function
|
|
361
|
-
i0.ɵɵelement(1, "i",
|
|
330
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
331
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
332
|
+
i0.ɵɵelementStart(0, "button", 87);
|
|
333
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r20); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.deleteCredential(credential_r17, $event)); });
|
|
334
|
+
i0.ɵɵelement(1, "i", 32);
|
|
362
335
|
i0.ɵɵelementEnd();
|
|
363
336
|
} }
|
|
364
|
-
function
|
|
365
|
-
const
|
|
337
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template(rf, ctx) { if (rf & 1) {
|
|
338
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
366
339
|
i0.ɵɵelementStart(0, "tr");
|
|
367
|
-
i0.ɵɵconditionalCreate(1,
|
|
368
|
-
i0.ɵɵelementStart(2, "td",
|
|
369
|
-
i0.ɵɵlistener("click", function
|
|
370
|
-
i0.ɵɵelementStart(3, "div",
|
|
371
|
-
i0.ɵɵelement(4, "i",
|
|
372
|
-
i0.ɵɵelementStart(5, "div",
|
|
340
|
+
i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template, 2, 1, "td", 64);
|
|
341
|
+
i0.ɵɵelementStart(2, "td", 73);
|
|
342
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template_td_click_2_listener() { const credential_r17 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r17)); });
|
|
343
|
+
i0.ɵɵelementStart(3, "div", 74);
|
|
344
|
+
i0.ɵɵelement(4, "i", 75);
|
|
345
|
+
i0.ɵɵelementStart(5, "div", 76)(6, "span", 39);
|
|
373
346
|
i0.ɵɵtext(7);
|
|
374
347
|
i0.ɵɵelementEnd();
|
|
375
|
-
i0.ɵɵconditionalCreate(8,
|
|
348
|
+
i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template, 2, 1, "span", 77);
|
|
376
349
|
i0.ɵɵelementEnd();
|
|
377
|
-
i0.ɵɵconditionalCreate(9,
|
|
350
|
+
i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template, 2, 0, "span", 78);
|
|
378
351
|
i0.ɵɵelementEnd()();
|
|
379
|
-
i0.ɵɵelementStart(10, "td",
|
|
352
|
+
i0.ɵɵelementStart(10, "td", 66);
|
|
380
353
|
i0.ɵɵtext(11);
|
|
381
354
|
i0.ɵɵelementEnd();
|
|
382
|
-
i0.ɵɵelementStart(12, "td",
|
|
383
|
-
i0.ɵɵconditionalCreate(13,
|
|
384
|
-
i0.ɵɵconditionalCreate(14,
|
|
355
|
+
i0.ɵɵelementStart(12, "td", 67);
|
|
356
|
+
i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template, 2, 1, "span", 79);
|
|
357
|
+
i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_14_Template, 2, 0, "span");
|
|
385
358
|
i0.ɵɵelementEnd();
|
|
386
|
-
i0.ɵɵelementStart(15, "td",
|
|
359
|
+
i0.ɵɵelementStart(15, "td", 68)(16, "span", 80);
|
|
387
360
|
i0.ɵɵtext(17);
|
|
388
361
|
i0.ɵɵelementEnd()();
|
|
389
|
-
i0.ɵɵelementStart(18, "td",
|
|
362
|
+
i0.ɵɵelementStart(18, "td", 69);
|
|
390
363
|
i0.ɵɵtext(19);
|
|
391
364
|
i0.ɵɵelementEnd();
|
|
392
|
-
i0.ɵɵelementStart(20, "td",
|
|
365
|
+
i0.ɵɵelementStart(20, "td", 70);
|
|
393
366
|
i0.ɵɵtext(21);
|
|
394
367
|
i0.ɵɵelementEnd();
|
|
395
|
-
i0.ɵɵelementStart(22, "td",
|
|
396
|
-
i0.ɵɵconditionalCreate(24,
|
|
397
|
-
i0.ɵɵconditionalCreate(25,
|
|
398
|
-
i0.ɵɵconditionalCreate(26,
|
|
368
|
+
i0.ɵɵelementStart(22, "td", 71)(23, "div", 81);
|
|
369
|
+
i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template, 2, 3, "button", 82);
|
|
370
|
+
i0.ɵɵconditionalCreate(25, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template, 2, 0, "button", 83);
|
|
371
|
+
i0.ɵɵconditionalCreate(26, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template, 2, 0, "button", 84);
|
|
399
372
|
i0.ɵɵelementEnd()()();
|
|
400
373
|
} if (rf & 2) {
|
|
401
|
-
const
|
|
402
|
-
const
|
|
403
|
-
i0.ɵɵclassProp("selected",
|
|
374
|
+
const credential_r17 = ctx.$implicit;
|
|
375
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
376
|
+
i0.ɵɵclassProp("selected", ctx_r1.selectedCredentials.has(credential_r17.ID))("expired", ctx_r1.isExpired(credential_r17));
|
|
404
377
|
i0.ɵɵadvance();
|
|
405
|
-
i0.ɵɵconditional(
|
|
378
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate || ctx_r1.UserCanDelete ? 1 : -1);
|
|
406
379
|
i0.ɵɵadvance(3);
|
|
407
|
-
i0.ɵɵclassMap(
|
|
408
|
-
i0.ɵɵproperty("ngClass",
|
|
380
|
+
i0.ɵɵclassMap(credential_r17.IconClass || "fa-solid fa-key");
|
|
381
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r17));
|
|
409
382
|
i0.ɵɵadvance(3);
|
|
410
|
-
i0.ɵɵtextInterpolate(
|
|
383
|
+
i0.ɵɵtextInterpolate(credential_r17.Name);
|
|
411
384
|
i0.ɵɵadvance();
|
|
412
|
-
i0.ɵɵconditional(
|
|
385
|
+
i0.ɵɵconditional(credential_r17.Description ? 8 : -1);
|
|
413
386
|
i0.ɵɵadvance();
|
|
414
|
-
i0.ɵɵconditional(
|
|
387
|
+
i0.ɵɵconditional(credential_r17.IsDefault ? 9 : -1);
|
|
415
388
|
i0.ɵɵadvance(2);
|
|
416
|
-
i0.ɵɵtextInterpolate(
|
|
389
|
+
i0.ɵɵtextInterpolate(credential_r17.CredentialType || "-");
|
|
417
390
|
i0.ɵɵadvance(2);
|
|
418
|
-
i0.ɵɵconditional(
|
|
391
|
+
i0.ɵɵconditional(credential_r17.Category ? 13 : -1);
|
|
419
392
|
i0.ɵɵadvance();
|
|
420
|
-
i0.ɵɵconditional(!
|
|
393
|
+
i0.ɵɵconditional(!credential_r17.Category ? 14 : -1);
|
|
421
394
|
i0.ɵɵadvance(2);
|
|
422
|
-
i0.ɵɵproperty("ngClass",
|
|
395
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r17));
|
|
423
396
|
i0.ɵɵadvance();
|
|
424
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
397
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusLabel(credential_r17), " ");
|
|
425
398
|
i0.ɵɵadvance();
|
|
426
|
-
i0.ɵɵclassProp("warning",
|
|
399
|
+
i0.ɵɵclassProp("warning", ctx_r1.isExpiringSoon(credential_r17))("danger", ctx_r1.isExpired(credential_r17));
|
|
427
400
|
i0.ɵɵadvance();
|
|
428
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
401
|
+
i0.ɵɵtextInterpolate1(" ", credential_r17.ExpiresAt ? ctx_r1.formatDate(credential_r17.ExpiresAt) : "Never", " ");
|
|
429
402
|
i0.ɵɵadvance(2);
|
|
430
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
403
|
+
i0.ɵɵtextInterpolate1(" ", credential_r17.LastUsedAt ? ctx_r1.formatDate(credential_r17.LastUsedAt) : "Never", " ");
|
|
431
404
|
i0.ɵɵadvance(3);
|
|
432
|
-
i0.ɵɵconditional(
|
|
405
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 24 : -1);
|
|
433
406
|
i0.ɵɵadvance();
|
|
434
|
-
i0.ɵɵconditional(
|
|
407
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 25 : -1);
|
|
435
408
|
i0.ɵɵadvance();
|
|
436
|
-
i0.ɵɵconditional(
|
|
409
|
+
i0.ɵɵconditional(ctx_r1.UserCanDelete ? 26 : -1);
|
|
437
410
|
} }
|
|
438
|
-
function
|
|
439
|
-
i0.ɵɵelementStart(0, "div",
|
|
440
|
-
i0.ɵɵconditionalCreate(4,
|
|
441
|
-
i0.ɵɵelementStart(5, "th",
|
|
411
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
412
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "table", 63)(2, "thead")(3, "tr");
|
|
413
|
+
i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template, 2, 1, "th", 64);
|
|
414
|
+
i0.ɵɵelementStart(5, "th", 65);
|
|
442
415
|
i0.ɵɵtext(6, "Name");
|
|
443
416
|
i0.ɵɵelementEnd();
|
|
444
|
-
i0.ɵɵelementStart(7, "th",
|
|
417
|
+
i0.ɵɵelementStart(7, "th", 66);
|
|
445
418
|
i0.ɵɵtext(8, "Type");
|
|
446
419
|
i0.ɵɵelementEnd();
|
|
447
|
-
i0.ɵɵelementStart(9, "th",
|
|
420
|
+
i0.ɵɵelementStart(9, "th", 67);
|
|
448
421
|
i0.ɵɵtext(10, "Category");
|
|
449
422
|
i0.ɵɵelementEnd();
|
|
450
|
-
i0.ɵɵelementStart(11, "th",
|
|
423
|
+
i0.ɵɵelementStart(11, "th", 68);
|
|
451
424
|
i0.ɵɵtext(12, "Status");
|
|
452
425
|
i0.ɵɵelementEnd();
|
|
453
|
-
i0.ɵɵelementStart(13, "th",
|
|
426
|
+
i0.ɵɵelementStart(13, "th", 69);
|
|
454
427
|
i0.ɵɵtext(14, "Expires");
|
|
455
428
|
i0.ɵɵelementEnd();
|
|
456
|
-
i0.ɵɵelementStart(15, "th",
|
|
429
|
+
i0.ɵɵelementStart(15, "th", 70);
|
|
457
430
|
i0.ɵɵtext(16, "Last Used");
|
|
458
431
|
i0.ɵɵelementEnd();
|
|
459
|
-
i0.ɵɵelementStart(17, "th",
|
|
432
|
+
i0.ɵɵelementStart(17, "th", 71);
|
|
460
433
|
i0.ɵɵtext(18, "Actions");
|
|
461
434
|
i0.ɵɵelementEnd()()();
|
|
462
435
|
i0.ɵɵelementStart(19, "tbody");
|
|
463
|
-
i0.ɵɵrepeaterCreate(20,
|
|
436
|
+
i0.ɵɵrepeaterCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template, 27, 25, "tr", 72, i0.ɵɵrepeaterTrackByIdentity);
|
|
464
437
|
i0.ɵɵelementEnd()()();
|
|
465
438
|
} if (rf & 2) {
|
|
466
|
-
const
|
|
439
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
467
440
|
i0.ɵɵadvance(4);
|
|
468
|
-
i0.ɵɵconditional(
|
|
441
|
+
i0.ɵɵconditional(ctx_r1.UserCanUpdate || ctx_r1.UserCanDelete ? 4 : -1);
|
|
469
442
|
i0.ɵɵadvance(16);
|
|
470
|
-
i0.ɵɵrepeater(
|
|
443
|
+
i0.ɵɵrepeater(ctx_r1.filteredCredentials);
|
|
471
444
|
} }
|
|
472
|
-
function
|
|
473
|
-
const
|
|
445
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
446
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
474
447
|
i0.ɵɵelementStart(0, "p");
|
|
475
448
|
i0.ɵɵtext(1, " No credentials match your current filters. ");
|
|
476
|
-
i0.ɵɵelementStart(2, "button",
|
|
477
|
-
i0.ɵɵlistener("click", function
|
|
449
|
+
i0.ɵɵelementStart(2, "button", 24);
|
|
450
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.clearFilters()); });
|
|
478
451
|
i0.ɵɵtext(3, "Clear filters");
|
|
479
452
|
i0.ɵɵelementEnd()();
|
|
480
453
|
} }
|
|
481
|
-
function
|
|
454
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
482
455
|
i0.ɵɵelementStart(0, "p");
|
|
483
456
|
i0.ɵɵtext(1, " Get started by creating your first credential. ");
|
|
484
457
|
i0.ɵɵelementEnd();
|
|
485
458
|
} }
|
|
486
|
-
function
|
|
487
|
-
const
|
|
488
|
-
i0.ɵɵelementStart(0, "button",
|
|
489
|
-
i0.ɵɵlistener("click", function
|
|
490
|
-
i0.ɵɵelement(1, "i",
|
|
459
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
461
|
+
i0.ɵɵelementStart(0, "button", 91);
|
|
462
|
+
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
|
|
463
|
+
i0.ɵɵelement(1, "i", 17);
|
|
491
464
|
i0.ɵɵtext(2, " Create Credential ");
|
|
492
465
|
i0.ɵɵelementEnd();
|
|
493
466
|
} }
|
|
494
|
-
function
|
|
495
|
-
i0.ɵɵelementStart(0, "div",
|
|
496
|
-
i0.ɵɵelement(2, "i",
|
|
467
|
+
function CredentialsListResourceComponent_Conditional_16_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
468
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 88);
|
|
469
|
+
i0.ɵɵelement(2, "i", 89);
|
|
497
470
|
i0.ɵɵelementEnd();
|
|
498
471
|
i0.ɵɵelementStart(3, "h3");
|
|
499
472
|
i0.ɵɵtext(4, "No Credentials Found");
|
|
500
473
|
i0.ɵɵelementEnd();
|
|
501
|
-
i0.ɵɵconditionalCreate(5,
|
|
502
|
-
i0.ɵɵconditionalCreate(6,
|
|
503
|
-
i0.ɵɵconditionalCreate(7,
|
|
474
|
+
i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template, 4, 0, "p");
|
|
475
|
+
i0.ɵɵconditionalCreate(6, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_6_Template, 2, 0, "p");
|
|
476
|
+
i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template, 3, 0, "button", 90);
|
|
504
477
|
i0.ɵɵelementEnd();
|
|
505
478
|
} if (rf & 2) {
|
|
506
|
-
const
|
|
479
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
507
480
|
i0.ɵɵadvance(5);
|
|
508
|
-
i0.ɵɵconditional(
|
|
481
|
+
i0.ɵɵconditional(ctx_r1.searchText || ctx_r1.selectedTypeFilter || ctx_r1.selectedStatusFilter ? 5 : -1);
|
|
509
482
|
i0.ɵɵadvance();
|
|
510
|
-
i0.ɵɵconditional(!
|
|
483
|
+
i0.ɵɵconditional(!ctx_r1.searchText && !ctx_r1.selectedTypeFilter && !ctx_r1.selectedStatusFilter ? 6 : -1);
|
|
511
484
|
i0.ɵɵadvance();
|
|
512
|
-
i0.ɵɵconditional(
|
|
485
|
+
i0.ɵɵconditional(ctx_r1.UserCanCreate && !ctx_r1.searchText && !ctx_r1.selectedTypeFilter && !ctx_r1.selectedStatusFilter ? 7 : -1);
|
|
513
486
|
} }
|
|
514
|
-
function
|
|
515
|
-
|
|
516
|
-
i0.ɵɵ
|
|
517
|
-
i0.ɵɵ
|
|
518
|
-
i0.ɵɵ
|
|
519
|
-
i0.ɵɵelementStart(4, "div", 7)(5, "span", 8);
|
|
520
|
-
i0.ɵɵelement(6, "i", 9);
|
|
521
|
-
i0.ɵɵtext(7);
|
|
522
|
-
i0.ɵɵelementEnd();
|
|
523
|
-
i0.ɵɵelementStart(8, "span", 10);
|
|
524
|
-
i0.ɵɵelement(9, "i", 11);
|
|
525
|
-
i0.ɵɵtext(10);
|
|
526
|
-
i0.ɵɵelementEnd();
|
|
527
|
-
i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_2_Conditional_11_Template, 3, 1, "span", 12);
|
|
528
|
-
i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_2_Conditional_12_Template, 3, 1, "span", 13);
|
|
529
|
-
i0.ɵɵelementEnd()();
|
|
530
|
-
i0.ɵɵelementStart(13, "div", 14);
|
|
531
|
-
i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_2_Conditional_14_Template, 4, 0, "button", 15);
|
|
532
|
-
i0.ɵɵelementEnd()();
|
|
533
|
-
i0.ɵɵelementStart(15, "div", 16)(16, "div", 17)(17, "div", 18);
|
|
534
|
-
i0.ɵɵelement(18, "i", 19);
|
|
535
|
-
i0.ɵɵelementStart(19, "input", 20);
|
|
536
|
-
i0.ɵɵlistener("input", function CredentialsListResourceComponent_Conditional_2_Template_input_input_19_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSearchChange($event.target.value)); });
|
|
537
|
-
i0.ɵɵelementEnd();
|
|
538
|
-
i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_20_Template, 2, 0, "button", 21);
|
|
539
|
-
i0.ɵɵelementEnd();
|
|
540
|
-
i0.ɵɵelementStart(21, "select", 22);
|
|
541
|
-
i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Template_select_change_21_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTypeFilterChange($event.target.value)); });
|
|
542
|
-
i0.ɵɵelementStart(22, "option", 23);
|
|
543
|
-
i0.ɵɵtext(23, "All Types");
|
|
544
|
-
i0.ɵɵelementEnd();
|
|
545
|
-
i0.ɵɵrepeaterCreate(24, CredentialsListResourceComponent_Conditional_2_For_25_Template, 2, 2, "option", 24, i0.ɵɵrepeaterTrackByIdentity);
|
|
546
|
-
i0.ɵɵelementEnd();
|
|
547
|
-
i0.ɵɵelementStart(26, "select", 22);
|
|
548
|
-
i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Template_select_change_26_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onStatusFilterChange($event.target.value)); });
|
|
549
|
-
i0.ɵɵelementStart(27, "option", 23);
|
|
550
|
-
i0.ɵɵtext(28, "All Statuses");
|
|
551
|
-
i0.ɵɵelementEnd();
|
|
552
|
-
i0.ɵɵelementStart(29, "option", 25);
|
|
553
|
-
i0.ɵɵtext(30, "Active");
|
|
554
|
-
i0.ɵɵelementEnd();
|
|
555
|
-
i0.ɵɵelementStart(31, "option", 26);
|
|
556
|
-
i0.ɵɵtext(32, "Inactive");
|
|
557
|
-
i0.ɵɵelementEnd();
|
|
558
|
-
i0.ɵɵelementStart(33, "option", 27);
|
|
559
|
-
i0.ɵɵtext(34, "Expiring Soon");
|
|
560
|
-
i0.ɵɵelementEnd();
|
|
561
|
-
i0.ɵɵelementStart(35, "option", 28);
|
|
562
|
-
i0.ɵɵtext(36, "Expired");
|
|
563
|
-
i0.ɵɵelementEnd()()();
|
|
564
|
-
i0.ɵɵelementStart(37, "div", 29)(38, "div", 30);
|
|
565
|
-
i0.ɵɵtext(39);
|
|
566
|
-
i0.ɵɵelementEnd();
|
|
567
|
-
i0.ɵɵelementStart(40, "div", 31)(41, "button", 32);
|
|
568
|
-
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("grid")); });
|
|
569
|
-
i0.ɵɵelement(42, "i", 33);
|
|
570
|
-
i0.ɵɵelementEnd();
|
|
571
|
-
i0.ɵɵelementStart(43, "button", 34);
|
|
572
|
-
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_43_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("list")); });
|
|
573
|
-
i0.ɵɵelement(44, "i", 35);
|
|
574
|
-
i0.ɵɵelementEnd()();
|
|
575
|
-
i0.ɵɵelementStart(45, "button", 36);
|
|
576
|
-
i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.refresh()); });
|
|
577
|
-
i0.ɵɵelement(46, "i", 37);
|
|
578
|
-
i0.ɵɵelementEnd()()();
|
|
579
|
-
i0.ɵɵconditionalCreate(47, CredentialsListResourceComponent_Conditional_2_Conditional_47_Template, 10, 4, "div", 38);
|
|
580
|
-
i0.ɵɵconditionalCreate(48, CredentialsListResourceComponent_Conditional_2_Conditional_48_Template, 3, 0, "div", 39);
|
|
581
|
-
i0.ɵɵconditionalCreate(49, CredentialsListResourceComponent_Conditional_2_Conditional_49_Template, 22, 1, "div", 40);
|
|
582
|
-
i0.ɵɵconditionalCreate(50, CredentialsListResourceComponent_Conditional_2_Conditional_50_Template, 8, 3, "div", 41);
|
|
487
|
+
function CredentialsListResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
488
|
+
i0.ɵɵconditionalCreate(0, CredentialsListResourceComponent_Conditional_16_Conditional_0_Template, 10, 4, "div", 18);
|
|
489
|
+
i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_Template, 3, 0, "div", 19);
|
|
490
|
+
i0.ɵɵconditionalCreate(2, CredentialsListResourceComponent_Conditional_16_Conditional_2_Template, 22, 1, "div", 20);
|
|
491
|
+
i0.ɵɵconditionalCreate(3, CredentialsListResourceComponent_Conditional_16_Conditional_3_Template, 8, 3, "div", 21);
|
|
583
492
|
} if (rf & 2) {
|
|
584
|
-
const
|
|
585
|
-
i0.ɵɵ
|
|
586
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r2.credentials.length, " total ");
|
|
587
|
-
i0.ɵɵadvance(3);
|
|
588
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r2.getActiveCount(), " active ");
|
|
589
|
-
i0.ɵɵadvance();
|
|
590
|
-
i0.ɵɵconditional(ctx_r2.getExpiringSoonCount() > 0 ? 11 : -1);
|
|
493
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
494
|
+
i0.ɵɵconditional(ctx_r1.selectedCredentials.size > 0 ? 0 : -1);
|
|
591
495
|
i0.ɵɵadvance();
|
|
592
|
-
i0.ɵɵconditional(
|
|
593
|
-
i0.ɵɵadvance(2);
|
|
594
|
-
i0.ɵɵconditional(ctx_r2.UserCanCreate ? 14 : -1);
|
|
595
|
-
i0.ɵɵadvance(5);
|
|
596
|
-
i0.ɵɵproperty("value", ctx_r2.searchText);
|
|
496
|
+
i0.ɵɵconditional(ctx_r1.viewMode === "grid" && ctx_r1.filteredCredentials.length > 0 ? 1 : -1);
|
|
597
497
|
i0.ɵɵadvance();
|
|
598
|
-
i0.ɵɵconditional(
|
|
498
|
+
i0.ɵɵconditional(ctx_r1.viewMode === "list" && ctx_r1.filteredCredentials.length > 0 ? 2 : -1);
|
|
599
499
|
i0.ɵɵadvance();
|
|
600
|
-
i0.ɵɵ
|
|
601
|
-
i0.ɵɵadvance(3);
|
|
602
|
-
i0.ɵɵrepeater(ctx_r2.types);
|
|
603
|
-
i0.ɵɵadvance(2);
|
|
604
|
-
i0.ɵɵproperty("value", ctx_r2.selectedStatusFilter);
|
|
605
|
-
i0.ɵɵadvance(13);
|
|
606
|
-
i0.ɵɵtextInterpolate2(" ", ctx_r2.filteredCredentials.length, " of ", ctx_r2.credentials.length, " ");
|
|
607
|
-
i0.ɵɵadvance(2);
|
|
608
|
-
i0.ɵɵclassProp("active", ctx_r2.viewMode === "grid");
|
|
609
|
-
i0.ɵɵadvance(2);
|
|
610
|
-
i0.ɵɵclassProp("active", ctx_r2.viewMode === "list");
|
|
611
|
-
i0.ɵɵadvance(4);
|
|
612
|
-
i0.ɵɵconditional(ctx_r2.selectedCredentials.size > 0 ? 47 : -1);
|
|
613
|
-
i0.ɵɵadvance();
|
|
614
|
-
i0.ɵɵconditional(ctx_r2.viewMode === "grid" && ctx_r2.filteredCredentials.length > 0 ? 48 : -1);
|
|
615
|
-
i0.ɵɵadvance();
|
|
616
|
-
i0.ɵɵconditional(ctx_r2.viewMode === "list" && ctx_r2.filteredCredentials.length > 0 ? 49 : -1);
|
|
617
|
-
i0.ɵɵadvance();
|
|
618
|
-
i0.ɵɵconditional(ctx_r2.filteredCredentials.length === 0 ? 50 : -1);
|
|
500
|
+
i0.ɵɵconditional(ctx_r1.filteredCredentials.length === 0 ? 3 : -1);
|
|
619
501
|
} }
|
|
620
502
|
let CredentialsListResourceComponent = class CredentialsListResourceComponent extends BaseResourceComponent {
|
|
621
503
|
cdr;
|
|
@@ -637,6 +519,67 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
|
|
|
637
519
|
_permissionCache = new Map();
|
|
638
520
|
destroy$ = new Subject();
|
|
639
521
|
editPanel;
|
|
522
|
+
viewOptions = [
|
|
523
|
+
{ key: 'grid', icon: 'fa-solid fa-grip', title: 'Grid view' },
|
|
524
|
+
{ key: 'list', icon: 'fa-solid fa-list', title: 'List view' }
|
|
525
|
+
];
|
|
526
|
+
get FilterFields() {
|
|
527
|
+
const typeOptions = [
|
|
528
|
+
{ text: 'All Types', value: '' },
|
|
529
|
+
...this.types.map(t => ({ text: t.Name, value: t.ID }))
|
|
530
|
+
];
|
|
531
|
+
return [
|
|
532
|
+
{
|
|
533
|
+
key: 'typeFilter',
|
|
534
|
+
type: 'dropdown',
|
|
535
|
+
label: 'Type',
|
|
536
|
+
icon: 'fa-solid fa-shapes',
|
|
537
|
+
placeholder: 'All Types',
|
|
538
|
+
filterable: true,
|
|
539
|
+
options: typeOptions
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
key: 'statusFilter',
|
|
543
|
+
type: 'dropdown',
|
|
544
|
+
label: 'Status',
|
|
545
|
+
icon: 'fa-solid fa-circle-info',
|
|
546
|
+
placeholder: 'All Statuses',
|
|
547
|
+
options: [
|
|
548
|
+
{ text: 'All Statuses', value: '' },
|
|
549
|
+
{ text: 'Active', value: 'active' },
|
|
550
|
+
{ text: 'Inactive', value: 'inactive' },
|
|
551
|
+
{ text: 'Expiring Soon', value: 'expiring' },
|
|
552
|
+
{ text: 'Expired', value: 'expired' }
|
|
553
|
+
]
|
|
554
|
+
}
|
|
555
|
+
];
|
|
556
|
+
}
|
|
557
|
+
get FilterValues() {
|
|
558
|
+
return { typeFilter: this.selectedTypeFilter, statusFilter: this.selectedStatusFilter };
|
|
559
|
+
}
|
|
560
|
+
get ActiveFilterCount() {
|
|
561
|
+
let n = 0;
|
|
562
|
+
if (this.selectedTypeFilter)
|
|
563
|
+
n++;
|
|
564
|
+
if (this.selectedStatusFilter)
|
|
565
|
+
n++;
|
|
566
|
+
return n;
|
|
567
|
+
}
|
|
568
|
+
onFilterValuesChange(v) {
|
|
569
|
+
const next = (v ?? {});
|
|
570
|
+
if ((next.typeFilter ?? '') !== this.selectedTypeFilter) {
|
|
571
|
+
this.onTypeFilterChange(next.typeFilter ?? '');
|
|
572
|
+
}
|
|
573
|
+
if ((next.statusFilter ?? '') !== this.selectedStatusFilter) {
|
|
574
|
+
this.onStatusFilterChange(next.statusFilter ?? '');
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
resetFilters() {
|
|
578
|
+
if (this.selectedTypeFilter)
|
|
579
|
+
this.onTypeFilterChange('');
|
|
580
|
+
if (this.selectedStatusFilter)
|
|
581
|
+
this.onStatusFilterChange('');
|
|
582
|
+
}
|
|
640
583
|
constructor(cdr) {
|
|
641
584
|
super();
|
|
642
585
|
this.cdr = cdr;
|
|
@@ -1220,22 +1163,61 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
|
|
|
1220
1163
|
} if (rf & 2) {
|
|
1221
1164
|
let _t;
|
|
1222
1165
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.editPanel = _t.first);
|
|
1223
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
1166
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 16, consts: [["editPanel", ""], ["Title", "Credentials", "Icon", "fa-solid fa-key"], ["meta", ""], ["Label", "credentials", 3, "Count", "Total"], ["Icon", "fa-solid fa-clock", "Label", "expiring", "Variant", "warning", 3, "Count"], ["Icon", "fa-solid fa-exclamation-circle", "Label", "expired", "Variant", "error", 3, "Count"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "KeyChange", "Options", "ActiveKey"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search credentials...", 3, "ValueChange", "Value"], ["text", "Loading credentials..."], [3, "saved", "deleted", "credentialTypes"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "bulk-actions"], [1, "credentials-grid"], [1, "credentials-table-container"], [1, "empty-state"], [1, "bulk-info"], [1, "bulk-count"], [1, "btn-link", 3, "click"], [1, "bulk-buttons"], [1, "btn-bulk"], [1, "btn-bulk", "danger"], [1, "btn-bulk", 3, "click"], [1, "fa-solid", "fa-toggle-on"], [1, "fa-solid", "fa-toggle-off"], [1, "btn-bulk", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "credential-card", 3, "selected", "expired", "expiring"], [1, "credential-card"], [1, "card-select"], [1, "card-header"], [1, "card-icon", 3, "ngClass"], [1, "card-title"], [1, "credential-name"], [1, "credential-type"], [1, "card-actions"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "card-body", 3, "click"], [1, "status-badge", 3, "ngClass"], [1, "credential-description"], [1, "credential-meta"], [1, "meta-item"], [1, "meta-item", 3, "warning", "danger"], [1, "card-footer"], [1, "category-tag"], [1, "created-info"], ["type", "checkbox", 3, "change", "checked"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click", "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-folder"], [1, "credentials-table"], [1, "col-select"], [1, "col-name"], [1, "col-type"], [1, "col-category"], [1, "col-status"], [1, "col-expires"], [1, "col-used"], [1, "col-actions"], [3, "selected", "expired"], [1, "col-name", 3, "click"], [1, "name-cell"], [3, "ngClass"], [1, "name-info"], [1, "credential-desc"], [1, "default-badge"], [1, "category-pill"], [1, "status-pill", 3, "ngClass"], [1, "table-actions"], [1, "table-action-btn", 3, "title"], ["title", "Edit", 1, "table-action-btn"], ["title", "Delete", 1, "table-action-btn", "danger"], [1, "table-action-btn", 3, "click", "title"], ["title", "Edit", 1, "table-action-btn", 3, "click"], ["title", "Delete", 1, "table-action-btn", "danger", 3, "click"], [1, "empty-icon"], [1, "fa-solid", "fa-key"], [1, "btn-primary"], [1, "btn-primary", 3, "click"]], template: function CredentialsListResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1224
1167
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
1225
|
-
i0.ɵɵelementStart(0, "
|
|
1226
|
-
i0.ɵɵ
|
|
1227
|
-
i0.ɵɵconditionalCreate(
|
|
1228
|
-
i0.ɵɵ
|
|
1229
|
-
i0.ɵɵ
|
|
1168
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2);
|
|
1169
|
+
i0.ɵɵelement(3, "mj-stat-badge", 3);
|
|
1170
|
+
i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_4_Template, 1, 1, "mj-stat-badge", 4);
|
|
1171
|
+
i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_5_Template, 1, 1, "mj-stat-badge", 5);
|
|
1172
|
+
i0.ɵɵelementEnd();
|
|
1173
|
+
i0.ɵɵelementStart(6, "div", 6)(7, "mj-filter-popover", 7);
|
|
1174
|
+
i0.ɵɵlistener("ClearAllRequested", function CredentialsListResourceComponent_Template_mj_filter_popover_ClearAllRequested_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetFilters()); });
|
|
1175
|
+
i0.ɵɵelementStart(8, "mj-filter-panel", 8);
|
|
1176
|
+
i0.ɵɵlistener("ValuesChange", function CredentialsListResourceComponent_Template_mj_filter_panel_ValuesChange_8_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFilterValuesChange($event)); })("Reset", function CredentialsListResourceComponent_Template_mj_filter_panel_Reset_8_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetFilters()); });
|
|
1230
1177
|
i0.ɵɵelementEnd()();
|
|
1178
|
+
i0.ɵɵelementStart(9, "mj-view-toggle", 9);
|
|
1179
|
+
i0.ɵɵlistener("KeyChange", function CredentialsListResourceComponent_Template_mj_view_toggle_KeyChange_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setViewMode($event)); });
|
|
1180
|
+
i0.ɵɵelementEnd();
|
|
1181
|
+
i0.ɵɵelementStart(10, "mj-refresh-button", 10);
|
|
1182
|
+
i0.ɵɵlistener("Clicked", function CredentialsListResourceComponent_Template_mj_refresh_button_Clicked_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
|
|
1183
|
+
i0.ɵɵelementEnd();
|
|
1184
|
+
i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_11_Template, 3, 0, "button", 11);
|
|
1185
|
+
i0.ɵɵelementEnd();
|
|
1186
|
+
i0.ɵɵelementStart(12, "div", 12)(13, "mj-page-search", 13);
|
|
1187
|
+
i0.ɵɵlistener("ValueChange", function CredentialsListResourceComponent_Template_mj_page_search_ValueChange_13_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
|
|
1188
|
+
i0.ɵɵelementEnd()()();
|
|
1189
|
+
i0.ɵɵelementStart(14, "mj-page-body");
|
|
1190
|
+
i0.ɵɵconditionalCreate(15, CredentialsListResourceComponent_Conditional_15_Template, 1, 0, "mj-loading", 14);
|
|
1191
|
+
i0.ɵɵconditionalCreate(16, CredentialsListResourceComponent_Conditional_16_Template, 4, 4);
|
|
1192
|
+
i0.ɵɵelementStart(17, "mj-credential-edit-panel", 15, 0);
|
|
1193
|
+
i0.ɵɵlistener("saved", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_saved_17_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialSaved($event)); })("deleted", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_deleted_17_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialDeleted($event)); });
|
|
1194
|
+
i0.ɵɵelementEnd()()();
|
|
1231
1195
|
} if (rf & 2) {
|
|
1196
|
+
i0.ɵɵadvance(3);
|
|
1197
|
+
i0.ɵɵproperty("Count", ctx.filteredCredentials.length)("Total", ctx.credentials.length);
|
|
1198
|
+
i0.ɵɵadvance();
|
|
1199
|
+
i0.ɵɵconditional(ctx.getExpiringSoonCount() > 0 ? 4 : -1);
|
|
1200
|
+
i0.ɵɵadvance();
|
|
1201
|
+
i0.ɵɵconditional(ctx.getExpiredCount() > 0 ? 5 : -1);
|
|
1202
|
+
i0.ɵɵadvance(2);
|
|
1203
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
1204
|
+
i0.ɵɵadvance();
|
|
1205
|
+
i0.ɵɵproperty("Fields", ctx.FilterFields)("Values", ctx.FilterValues);
|
|
1206
|
+
i0.ɵɵadvance();
|
|
1207
|
+
i0.ɵɵproperty("Options", ctx.viewOptions)("ActiveKey", ctx.viewMode);
|
|
1208
|
+
i0.ɵɵadvance();
|
|
1209
|
+
i0.ɵɵproperty("Loading", ctx.isLoading);
|
|
1232
1210
|
i0.ɵɵadvance();
|
|
1233
|
-
i0.ɵɵconditional(ctx.
|
|
1211
|
+
i0.ɵɵconditional(ctx.UserCanCreate ? 11 : -1);
|
|
1212
|
+
i0.ɵɵadvance(2);
|
|
1213
|
+
i0.ɵɵproperty("Value", ctx.searchText);
|
|
1214
|
+
i0.ɵɵadvance(2);
|
|
1215
|
+
i0.ɵɵconditional(ctx.isLoading ? 15 : -1);
|
|
1234
1216
|
i0.ɵɵadvance();
|
|
1235
|
-
i0.ɵɵconditional(!ctx.isLoading ?
|
|
1217
|
+
i0.ɵɵconditional(!ctx.isLoading ? 16 : -1);
|
|
1236
1218
|
i0.ɵɵadvance();
|
|
1237
1219
|
i0.ɵɵproperty("credentialTypes", ctx.types);
|
|
1238
|
-
} }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.MJButtonDirective, i4.LoadingComponent, i5.CredentialEditPanelComponent], styles: [".list-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.stat-item.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.stat-item.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.stat-item.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--mj-bg-surface);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin-right: 8px;\n}\n\n.search-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-border-default);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 10px;\n}\n\n.search-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-text-secondary);\n color: var(--mj-text-inverse);\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n font-size: 14px;\n color: var(--mj-text-primary);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.results-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n\n\n.bulk-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n\n\n.credentials-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.created-info[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.credentials-table-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n.col-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name[_ngcontent-%COMP%] {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell[_ngcontent-%COMP%] i.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell[_ngcontent-%COMP%] i.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info[_ngcontent-%COMP%] .credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info[_ngcontent-%COMP%] .credential-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type[_ngcontent-%COMP%], \n.col-category[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.category-pill[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires[_ngcontent-%COMP%], \n.col-used[_ngcontent-%COMP%] {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions[_ngcontent-%COMP%] {\n width: 120px;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover .table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.table-action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 12px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .header-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .search-container[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n\n .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .credentials-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n \n\n .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .bulk-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .credentials-table[_ngcontent-%COMP%] {\n min-width: 800px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 48px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin: 0;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n padding: 10px;\n }\n\n .view-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .results-info[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .credential-card[_ngcontent-%COMP%] {\n border-radius: 10px;\n }\n\n .card-select[_ngcontent-%COMP%] {\n top: 10px;\n left: 10px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .credential-type[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .category-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}"], changeDetection: 0 });
|
|
1220
|
+
} }, dependencies: [i1.NgClass, i2.MJButtonDirective, i2.MJPageHeaderComponent, i2.MJPageLayoutComponent, i2.MJPageBodyComponent, i2.MJPageSearchComponent, i2.MJFilterPopoverComponent, i2.MJFilterPanelComponent, i2.MJViewToggleComponent, i2.MJStatBadgeComponent, i2.MJRefreshButtonComponent, i3.LoadingComponent, i4.CredentialEditPanelComponent], styles: ["\n\n.bulk-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n\n\n.credentials-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.created-info[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.credentials-table-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n.col-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name[_ngcontent-%COMP%] {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell[_ngcontent-%COMP%] i.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell[_ngcontent-%COMP%] i.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info[_ngcontent-%COMP%] .credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info[_ngcontent-%COMP%] .credential-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type[_ngcontent-%COMP%], \n.col-category[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.category-pill[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires[_ngcontent-%COMP%], \n.col-used[_ngcontent-%COMP%] {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions[_ngcontent-%COMP%] {\n width: 120px;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover .table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.table-action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 12px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .header-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .search-container[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n\n .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .credentials-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n \n\n .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .bulk-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .credentials-table[_ngcontent-%COMP%] {\n min-width: 800px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 48px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin: 0;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n padding: 10px;\n }\n\n .view-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .results-info[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .credential-card[_ngcontent-%COMP%] {\n border-radius: 10px;\n }\n\n .card-select[_ngcontent-%COMP%] {\n top: 10px;\n left: 10px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .credential-type[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .category-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}"], changeDetection: 0 });
|
|
1239
1221
|
};
|
|
1240
1222
|
CredentialsListResourceComponent = __decorate([
|
|
1241
1223
|
RegisterClass(BaseResourceComponent, 'CredentialsListResource')
|
|
@@ -1243,10 +1225,10 @@ CredentialsListResourceComponent = __decorate([
|
|
|
1243
1225
|
export { CredentialsListResourceComponent };
|
|
1244
1226
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsListResourceComponent, [{
|
|
1245
1227
|
type: Component,
|
|
1246
|
-
args: [{ standalone: false, selector: 'mj-credentials-list-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"list-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header with Stats -->\n <div class=\"list-header\">\n <div class=\"header-info\">\n <h2 class=\"list-title\">Credentials</h2>\n <div class=\"header-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-key\"></i>\n {{credentials.length}} total\n </span>\n <span class=\"stat-item active\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{getActiveCount()}} active\n </span>\n @if (getExpiringSoonCount() > 0) {\n <span class=\"stat-item warning\">\n <i class=\"fa-solid fa-clock\"></i>\n {{getExpiringSoonCount()}} expiring\n </span>\n }\n @if (getExpiredCount() > 0) {\n <span class=\"stat-item danger\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{getExpiredCount()}} expired\n </span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (UserCanCreate) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n }\n </div>\n </div>\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search credentials...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Types</option>\n @for (type of types; track type) {\n <option [value]=\"type.ID\">{{type.Name}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatusFilter\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"expiring\">Expiring Soon</option>\n <option value=\"expired\">Expired</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredCredentials.length}} of {{credentials.length}}\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\">\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n</div>\n", styles: [".list-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n/* Header */\n.list-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n.header-stats {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.stat-item i {\n font-size: 12px;\n}\n\n.stat-item.active {\n color: var(--mj-status-success);\n}\n\n.stat-item.warning {\n color: var(--mj-status-warning);\n}\n\n.stat-item.danger {\n color: var(--mj-status-error);\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.btn-primary i {\n font-size: 13px;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--mj-bg-surface);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container {\n display: flex;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container i {\n color: var(--mj-text-secondary);\n margin-right: 8px;\n}\n\n.search-container input {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-border-default);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 10px;\n}\n\n.search-clear:hover {\n background: var(--mj-text-secondary);\n color: var(--mj-text-inverse);\n}\n\n.filter-select {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n font-size: 14px;\n color: var(--mj-text-primary);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.results-info {\n font-size: 13px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.view-toggle {\n display: flex;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn:hover {\n color: var(--mj-brand-primary);\n}\n\n.view-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n/* Bulk Actions Bar */\n.bulk-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n/* Credentials Grid */\n.credentials-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon i {\n font-size: 18px;\n}\n\n.card-title {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card:hover .card-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n}\n\n.card-body {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge i {\n font-size: 10px;\n}\n\n.status-badge.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning i {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger i {\n color: var(--mj-status-error);\n}\n\n.card-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag i {\n font-size: 10px;\n}\n\n.created-info {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n/* Table View */\n.credentials-table-container {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table thead {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table td {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table tbody tr {\n transition: background 0.2s ease;\n}\n\n.credentials-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table tbody tr.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table tbody tr.expired {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select {\n width: 40px;\n}\n\n.col-select input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell i {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell i.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell i.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell i.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell i.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info .credential-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info .credential-desc {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type,\n.col-category {\n white-space: nowrap;\n}\n\n.category-pill {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status {\n white-space: nowrap;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires,\n.col-used {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions {\n width: 120px;\n}\n\n.table-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table tbody tr:hover .table-actions {\n opacity: 1;\n}\n\n.table-action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger:hover {\n background: var(--mj-status-error);\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: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\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: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state .btn-link {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state .btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state .btn-primary {\n margin-top: 0;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .list-container {\n padding: 16px;\n }\n\n .list-header {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title {\n font-size: 20px;\n }\n\n .header-stats {\n gap: 12px;\n }\n\n .stat-item {\n font-size: 12px;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .header-actions .btn-primary {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left {\n flex-direction: column;\n }\n\n .search-container {\n min-width: 100%;\n }\n\n .filter-select {\n width: 100%;\n }\n\n .toolbar-right {\n justify-content: space-between;\n }\n\n .credentials-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n /* Make card actions always visible on mobile */\n .card-actions {\n opacity: 1;\n }\n\n .card-header {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon {\n width: 38px;\n height: 38px;\n }\n\n .card-icon i {\n font-size: 16px;\n }\n\n .bulk-actions {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container {\n overflow-x: auto;\n }\n\n .credentials-table {\n min-width: 800px;\n }\n\n .empty-state {\n padding: 48px 20px;\n }\n\n .empty-icon {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon i {\n font-size: 28px;\n }\n\n .empty-state h3 {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container {\n padding: 12px;\n }\n\n .list-title {\n font-size: 18px;\n }\n\n .header-stats {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary span {\n display: none;\n }\n\n .btn-primary i {\n margin: 0;\n }\n\n .toolbar {\n padding: 10px;\n }\n\n .view-toggle {\n display: none;\n }\n\n .results-info {\n font-size: 12px;\n }\n\n .credential-card {\n border-radius: 10px;\n }\n\n .card-select {\n top: 10px;\n left: 10px;\n }\n\n .card-header {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name {\n font-size: 14px;\n }\n\n .credential-type {\n font-size: 11px;\n }\n\n .action-btn {\n width: 28px;\n height: 28px;\n }\n\n .status-badge {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta {\n gap: 8px;\n }\n\n .meta-item {\n font-size: 11px;\n }\n\n .category-tag {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info {\n font-size: 10px;\n }\n\n .empty-state {\n padding: 32px 16px;\n }\n\n .empty-icon {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon i {\n font-size: 24px;\n }\n\n .empty-state h3 {\n font-size: 16px;\n }\n\n .empty-state p {\n font-size: 13px;\n }\n}\n"] }]
|
|
1228
|
+
args: [{ standalone: false, selector: 'mj-credentials-list-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Credentials\"\n Icon=\"fa-solid fa-key\">\n <div meta>\n <mj-stat-badge\n [Count]=\"filteredCredentials.length\"\n [Total]=\"credentials.length\"\n Label=\"credentials\">\n </mj-stat-badge>\n @if (getExpiringSoonCount() > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-clock\"\n [Count]=\"getExpiringSoonCount()\"\n Label=\"expiring\"\n Variant=\"warning\">\n </mj-stat-badge>\n }\n @if (getExpiredCount() > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-exclamation-circle\"\n [Count]=\"getExpiredCount()\"\n Label=\"expired\"\n Variant=\"error\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-view-toggle\n [Options]=\"viewOptions\"\n [ActiveKey]=\"viewMode\"\n (KeyChange)=\"setViewMode($any($event))\">\n </mj-view-toggle>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\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 <div toolbar>\n <mj-page-search\n Placeholder=\"Search credentials...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\">\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Bulk Actions Bar */\n.bulk-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n/* Credentials Grid */\n.credentials-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon i {\n font-size: 18px;\n}\n\n.card-title {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card:hover .card-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n}\n\n.card-body {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge i {\n font-size: 10px;\n}\n\n.status-badge.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning i {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger i {\n color: var(--mj-status-error);\n}\n\n.card-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag i {\n font-size: 10px;\n}\n\n.created-info {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n/* Table View */\n.credentials-table-container {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table thead {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table td {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table tbody tr {\n transition: background 0.2s ease;\n}\n\n.credentials-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table tbody tr.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table tbody tr.expired {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select {\n width: 40px;\n}\n\n.col-select input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell i {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell i.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell i.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell i.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell i.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info .credential-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info .credential-desc {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type,\n.col-category {\n white-space: nowrap;\n}\n\n.category-pill {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status {\n white-space: nowrap;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires,\n.col-used {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions {\n width: 120px;\n}\n\n.table-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table tbody tr:hover .table-actions {\n opacity: 1;\n}\n\n.table-action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger:hover {\n background: var(--mj-status-error);\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: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\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: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state .btn-link {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state .btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state .btn-primary {\n margin-top: 0;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .list-container {\n padding: 16px;\n }\n\n .list-header {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title {\n font-size: 20px;\n }\n\n .header-stats {\n gap: 12px;\n }\n\n .stat-item {\n font-size: 12px;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .header-actions .btn-primary {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left {\n flex-direction: column;\n }\n\n .search-container {\n min-width: 100%;\n }\n\n .filter-select {\n width: 100%;\n }\n\n .toolbar-right {\n justify-content: space-between;\n }\n\n .credentials-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n /* Make card actions always visible on mobile */\n .card-actions {\n opacity: 1;\n }\n\n .card-header {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon {\n width: 38px;\n height: 38px;\n }\n\n .card-icon i {\n font-size: 16px;\n }\n\n .bulk-actions {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container {\n overflow-x: auto;\n }\n\n .credentials-table {\n min-width: 800px;\n }\n\n .empty-state {\n padding: 48px 20px;\n }\n\n .empty-icon {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon i {\n font-size: 28px;\n }\n\n .empty-state h3 {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container {\n padding: 12px;\n }\n\n .list-title {\n font-size: 18px;\n }\n\n .header-stats {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary span {\n display: none;\n }\n\n .btn-primary i {\n margin: 0;\n }\n\n .toolbar {\n padding: 10px;\n }\n\n .view-toggle {\n display: none;\n }\n\n .results-info {\n font-size: 12px;\n }\n\n .credential-card {\n border-radius: 10px;\n }\n\n .card-select {\n top: 10px;\n left: 10px;\n }\n\n .card-header {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name {\n font-size: 14px;\n }\n\n .credential-type {\n font-size: 11px;\n }\n\n .action-btn {\n width: 28px;\n height: 28px;\n }\n\n .status-badge {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta {\n gap: 8px;\n }\n\n .meta-item {\n font-size: 11px;\n }\n\n .category-tag {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info {\n font-size: 10px;\n }\n\n .empty-state {\n padding: 32px 16px;\n }\n\n .empty-icon {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon i {\n font-size: 24px;\n }\n\n .empty-state h3 {\n font-size: 16px;\n }\n\n .empty-state p {\n font-size: 13px;\n }\n}\n"] }]
|
|
1247
1229
|
}], () => [{ type: i0.ChangeDetectorRef }], { editPanel: [{
|
|
1248
1230
|
type: ViewChild,
|
|
1249
1231
|
args: ['editPanel']
|
|
1250
1232
|
}] }); })();
|
|
1251
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsListResourceComponent, { className: "CredentialsListResourceComponent", filePath: "src/Credentials/components/credentials-list-resource.component.ts", lineNumber:
|
|
1233
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsListResourceComponent, { className: "CredentialsListResourceComponent", filePath: "src/Credentials/components/credentials-list-resource.component.ts", lineNumber: 21 }); })();
|
|
1252
1234
|
//# sourceMappingURL=credentials-list-resource.component.js.map
|