@memberjunction/ng-dashboards 3.3.0 → 4.0.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/ai-dashboard.component.d.ts +62 -0
- package/dist/AI/ai-dashboard.component.d.ts.map +1 -0
- package/dist/AI/ai-dashboard.component.js +338 -0
- package/dist/AI/ai-dashboard.component.js.map +1 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts +36 -5
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +287 -141
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +149 -211
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.js +6 -7
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +33 -37
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management-v2.component.d.ts +96 -0
- package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -0
- package/dist/AI/components/models/model-management-v2.component.js +981 -0
- package/dist/AI/components/models/model-management-v2.component.js.map +1 -0
- package/dist/AI/components/models/model-management.component.d.ts +26 -6
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +216 -103
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +97 -0
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -0
- package/dist/AI/components/prompts/prompt-management-v2.component.js +811 -0
- package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts +26 -6
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +164 -57
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +26 -27
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +52 -42
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +5 -5
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +242 -239
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +4 -5
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +237 -217
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +1 -3
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +268 -249
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -3
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +136 -133
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +6 -6
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +335 -358
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +151 -155
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +237 -234
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/actions-management-dashboard.component.d.ts +52 -0
- package/dist/Actions/actions-management-dashboard.component.d.ts.map +1 -0
- package/dist/Actions/actions-management-dashboard.component.js +308 -0
- package/dist/Actions/actions-management-dashboard.component.js.map +1 -0
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +15 -14
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +3 -6
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +17 -19
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -6
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +0 -4
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +3 -9
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +0 -4
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +3 -9
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +13 -16
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +3 -3
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts +22 -0
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +139 -0
- package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-card.component.d.ts +39 -0
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-card.component.js +411 -0
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +58 -0
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-explorer.component.js +523 -0
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-list-item.component.d.ts +24 -0
- package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-list-item.component.js +210 -0
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +63 -0
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-toolbar.component.js +484 -0
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts +57 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.js +455 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -0
- package/dist/Actions/components/explorer/index.d.ts +9 -0
- package/dist/Actions/components/explorer/index.d.ts.map +1 -0
- package/dist/Actions/components/explorer/index.js +10 -0
- package/dist/Actions/components/explorer/index.js.map +1 -0
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +49 -0
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/new-action-panel.component.js +359 -0
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -0
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +37 -0
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/new-category-panel.component.js +282 -0
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -0
- package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +3 -9
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +0 -4
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +3 -9
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/Actions/index.d.ts +2 -6
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +4 -7
- package/dist/Actions/index.js.map +1 -1
- package/dist/Actions/services/action-explorer-state.service.d.ts +104 -0
- package/dist/Actions/services/action-explorer-state.service.d.ts.map +1 -0
- package/dist/Actions/services/action-explorer-state.service.js +352 -0
- package/dist/Actions/services/action-explorer-state.service.js.map +1 -0
- package/dist/Communication/communication-dashboard.component.d.ts +2 -7
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +143 -107
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +10 -8
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +270 -134
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts +38 -7
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +469 -186
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +16 -9
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +262 -139
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts +4 -6
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +168 -159
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +39 -0
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-templates-resource.component.js +388 -0
- package/dist/Communication/communication-templates-resource.component.js.map +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +69 -271
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +705 -1808
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +68 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +400 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts +44 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.js +638 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts +35 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +380 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +24 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +221 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts +28 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +263 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts +34 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +307 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts +29 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +159 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts +20 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +192 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -0
- package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +57 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +343 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +15 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +144 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -0
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +203 -0
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -0
- package/dist/ComponentStudio/services/component-studio-state.service.js +651 -0
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -0
- package/dist/ComponentStudio/services/component-version.service.d.ts +120 -0
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -0
- package/dist/ComponentStudio/services/component-version.service.js +394 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.js +1 -1
- package/dist/Credentials/components/credential-edit-panel.component.js +1 -1
- package/dist/Credentials/components/credential-type-edit-panel.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +1 -2
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +1 -2
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +252 -241
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +1 -2
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +31 -44
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.js +2 -1
- package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +2 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +245 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +1143 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +0 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +49 -54
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/index.d.ts +2 -2
- package/dist/DataExplorer/index.d.ts.map +1 -1
- package/dist/DataExplorer/index.js +2 -2
- package/dist/DataExplorer/index.js.map +1 -1
- package/dist/EntityAdmin/components/entity-details.component.d.ts +50 -0
- package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/entity-details.component.js +680 -0
- package/dist/EntityAdmin/components/entity-details.component.js.map +1 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +31 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.js +160 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -0
- package/dist/EntityAdmin/components/erd-composite.component.d.ts +73 -0
- package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/erd-composite.component.js +271 -0
- package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -0
- package/dist/EntityAdmin/components/erd-diagram.component.d.ts +47 -0
- package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/erd-diagram.component.js +618 -0
- package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.d.ts +0 -5
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +0 -9
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +0 -4
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +141 -139
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +761 -685
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +340 -316
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -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 +530 -482
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +508 -455
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +0 -1
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +0 -11
- package/dist/Lists/index.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +68 -0
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-connection-dialog.component.js +523 -0
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +73 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.js +533 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -0
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +76 -0
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-server-dialog.component.js +546 -0
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +267 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +1300 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -0
- package/dist/MCP/index.d.ts +11 -0
- package/dist/MCP/index.d.ts.map +1 -0
- package/dist/MCP/index.js +15 -0
- package/dist/MCP/index.js.map +1 -0
- package/dist/MCP/mcp-dashboard.component.d.ts +467 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -0
- package/dist/MCP/mcp-dashboard.component.js +2765 -0
- package/dist/MCP/mcp-dashboard.component.js.map +1 -0
- package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
- package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
- package/dist/MCP/mcp-filter-panel.component.js +288 -0
- package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
- package/dist/MCP/mcp-resource.component.d.ts +26 -0
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -0
- package/dist/MCP/mcp-resource.component.js +54 -0
- package/dist/MCP/mcp-resource.component.js.map +1 -0
- package/dist/MCP/mcp.module.d.ts +24 -0
- package/dist/MCP/mcp.module.d.ts.map +1 -0
- package/dist/MCP/mcp.module.js +113 -0
- package/dist/MCP/mcp.module.js.map +1 -0
- package/dist/MCP/services/mcp-tools.service.d.ts +115 -0
- package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -0
- package/dist/MCP/services/mcp-tools.service.js +221 -0
- package/dist/MCP/services/mcp-tools.service.js.map +1 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/index.d.ts +5 -8
- package/dist/Scheduling/components/index.d.ts.map +1 -1
- package/dist/Scheduling/components/index.js +6 -9
- package/dist/Scheduling/components/index.js.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.d.ts +45 -0
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -0
- package/dist/Scheduling/components/job-slideout.component.js +459 -0
- package/dist/Scheduling/components/job-slideout.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +15 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +45 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +71 -0
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-activity.component.js +714 -0
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js +1 -1
- package/dist/Scheduling/components/scheduling-health.component.js +1 -1
- package/dist/Scheduling/components/scheduling-history-resource.component.js +1 -1
- package/dist/Scheduling/components/scheduling-history.component.js +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +3 -8
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +5 -15
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +52 -34
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +452 -262
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js +1 -1
- package/dist/Scheduling/components/scheduling-monitoring.component.js +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +15 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +45 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +43 -0
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-overview.component.js +600 -0
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js +1 -1
- package/dist/Scheduling/components/scheduling-types.component.js +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +22 -33
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +173 -175
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +49 -6
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +218 -149
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/index.d.ts +7 -8
- package/dist/Testing/components/index.d.ts.map +1 -1
- package/dist/Testing/components/index.js +8 -9
- package/dist/Testing/components/index.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +0 -4
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +3 -9
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +52 -37
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +1024 -570
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +47 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +57 -0
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-dashboard-tab.component.js +649 -0
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -0
- package/dist/Testing/components/testing-execution-resource.component.js +1 -1
- package/dist/Testing/components/testing-execution.component.js +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-explorer-resource.component.js +47 -0
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts +193 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-explorer.component.js +2219 -0
- package/dist/Testing/components/testing-explorer.component.js.map +1 -0
- package/dist/Testing/components/testing-feedback-resource.component.js +1 -1
- package/dist/Testing/components/testing-feedback.component.js +1 -1
- package/dist/Testing/components/testing-overview-resource.component.js +1 -1
- package/dist/Testing/components/testing-overview.component.js +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-review-resource.component.js +47 -0
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-review.component.d.ts +60 -0
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-review.component.js +985 -0
- package/dist/Testing/components/testing-review.component.js.map +1 -0
- package/dist/Testing/components/testing-runs-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-runs-resource.component.js +47 -0
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-runs.component.d.ts +82 -0
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-runs.component.js +1067 -0
- package/dist/Testing/components/testing-runs.component.js.map +1 -0
- package/dist/Testing/components/testing-version-comparison.component.js +1 -1
- package/dist/Testing/components/testing-version-resource.component.js +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
- package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +12 -16
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +51 -72
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.js +521 -0
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/index.d.ts +5 -0
- package/dist/VersionHistory/components/index.d.ts.map +1 -0
- package/dist/VersionHistory/components/index.js +5 -0
- package/dist/VersionHistory/components/index.js.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.js +968 -0
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.js +472 -0
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
- package/dist/VersionHistory/index.d.ts +2 -0
- package/dist/VersionHistory/index.d.ts.map +1 -0
- package/dist/VersionHistory/index.js +2 -0
- package/dist/VersionHistory/index.js.map +1 -0
- package/dist/generic/base-dashboard.d.ts +65 -0
- package/dist/generic/base-dashboard.d.ts.map +1 -0
- package/dist/generic/base-dashboard.js +74 -0
- package/dist/generic/base-dashboard.js.map +1 -0
- package/dist/module.d.ts +127 -104
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +221 -95
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +22 -19
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +28 -119
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts +17 -0
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -0
- package/dist/shared/pipes/highlight-search.pipe.js +41 -0
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -0
- package/dist/shared/pipes/index.d.ts +2 -0
- package/dist/shared/pipes/index.d.ts.map +1 -0
- package/dist/shared/pipes/index.js +2 -0
- package/dist/shared/pipes/index.js.map +1 -0
- package/dist/shared/shared-pipes.module.d.ts +11 -0
- package/dist/shared/shared-pipes.module.d.ts.map +1 -0
- package/dist/shared/shared-pipes.module.js +24 -0
- package/dist/shared/shared-pipes.module.js.map +1 -0
- package/package.json +65 -56
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { RunView } from '@memberjunction/core';
|
|
3
|
+
import { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/common";
|
|
5
6
|
import * as i2 from "@angular/forms";
|
|
6
7
|
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
7
|
-
function
|
|
8
|
+
function APIKeyListComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
8
9
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
9
10
|
i0.ɵɵelementStart(0, "button", 22);
|
|
10
|
-
i0.ɵɵlistener("click", function
|
|
11
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
|
|
11
12
|
i0.ɵɵelement(1, "i", 23);
|
|
12
13
|
i0.ɵɵelementEnd();
|
|
13
14
|
} }
|
|
14
|
-
function
|
|
15
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
15
|
+
function APIKeyListComponent_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelement(0, "mj-loading", 19);
|
|
16
17
|
} }
|
|
17
|
-
function
|
|
18
|
-
i0.ɵɵelementStart(0, "span",
|
|
18
|
+
function APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelementStart(0, "span", 57);
|
|
19
20
|
i0.ɵɵelement(1, "i");
|
|
20
|
-
i0.ɵɵelementStart(2, "span",
|
|
21
|
+
i0.ɵɵelementStart(2, "span", 58);
|
|
21
22
|
i0.ɵɵtext(3);
|
|
22
23
|
i0.ɵɵelementEnd()();
|
|
23
24
|
} if (rf & 2) {
|
|
@@ -29,17 +30,14 @@ function APIKeyListComponent_div_46_div_22_div_16_ng_container_2_span_1_Template
|
|
|
29
30
|
i0.ɵɵadvance(2);
|
|
30
31
|
i0.ɵɵtextInterpolate(cat_r6.count);
|
|
31
32
|
} }
|
|
32
|
-
function
|
|
33
|
-
i0.ɵɵ
|
|
34
|
-
i0.ɵɵtemplate(1, APIKeyListComponent_div_46_div_22_div_16_ng_container_2_span_1_Template, 4, 8, "span", 60);
|
|
35
|
-
i0.ɵɵelementContainerEnd();
|
|
33
|
+
function APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵconditionalCreate(0, APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Conditional_0_Template, 4, 8, "span", 56);
|
|
36
35
|
} if (rf & 2) {
|
|
37
|
-
const
|
|
38
|
-
i0.ɵɵ
|
|
39
|
-
i0.ɵɵproperty("ngIf", i_r7 < 3);
|
|
36
|
+
const ɵ$index_154_r7 = ctx.$index;
|
|
37
|
+
i0.ɵɵconditional(ɵ$index_154_r7 < 3 ? 0 : -1);
|
|
40
38
|
} }
|
|
41
|
-
function
|
|
42
|
-
i0.ɵɵelementStart(0, "span",
|
|
39
|
+
function APIKeyListComponent_Conditional_46_For_23_Conditional_16_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
43
41
|
i0.ɵɵtext(1);
|
|
44
42
|
i0.ɵɵelementEnd();
|
|
45
43
|
} if (rf & 2) {
|
|
@@ -48,58 +46,60 @@ function APIKeyListComponent_div_46_div_22_div_16_span_3_Template(rf, ctx) { if
|
|
|
48
46
|
i0.ɵɵadvance();
|
|
49
47
|
i0.ɵɵtextInterpolate1(" +", ctx_r1.getScopeInfo(key_r5).categories.length - 3, " ");
|
|
50
48
|
} }
|
|
51
|
-
function
|
|
52
|
-
i0.ɵɵelementStart(0, "div",
|
|
53
|
-
i0.ɵɵ
|
|
49
|
+
function APIKeyListComponent_Conditional_46_For_23_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "div", 53);
|
|
51
|
+
i0.ɵɵrepeaterCreate(2, APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Template, 1, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
|
|
52
|
+
i0.ɵɵconditionalCreate(4, APIKeyListComponent_Conditional_46_For_23_Conditional_16_Conditional_4_Template, 2, 1, "span", 54);
|
|
54
53
|
i0.ɵɵelementEnd();
|
|
55
|
-
i0.ɵɵelementStart(
|
|
56
|
-
i0.ɵɵtext(
|
|
54
|
+
i0.ɵɵelementStart(5, "span", 55);
|
|
55
|
+
i0.ɵɵtext(6);
|
|
57
56
|
i0.ɵɵelementEnd()();
|
|
58
57
|
} if (rf & 2) {
|
|
59
58
|
const key_r5 = i0.ɵɵnextContext().$implicit;
|
|
60
59
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
61
60
|
i0.ɵɵadvance(2);
|
|
62
|
-
i0.ɵɵ
|
|
63
|
-
i0.ɵɵadvance();
|
|
64
|
-
i0.ɵɵ
|
|
61
|
+
i0.ɵɵrepeater(ctx_r1.getScopeInfo(key_r5).categories);
|
|
62
|
+
i0.ɵɵadvance(2);
|
|
63
|
+
i0.ɵɵconditional(ctx_r1.getScopeInfo(key_r5).categories.length > 3 ? 4 : -1);
|
|
65
64
|
i0.ɵɵadvance(2);
|
|
66
65
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.getScopeInfo(key_r5).count, " total ");
|
|
67
66
|
} }
|
|
68
|
-
function
|
|
69
|
-
i0.ɵɵelementStart(0, "span",
|
|
70
|
-
i0.ɵɵelement(1, "i",
|
|
67
|
+
function APIKeyListComponent_Conditional_46_For_23_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
69
|
+
i0.ɵɵelement(1, "i", 59);
|
|
71
70
|
i0.ɵɵtext(2, " None ");
|
|
72
71
|
i0.ɵɵelementEnd();
|
|
73
72
|
} }
|
|
74
|
-
function
|
|
73
|
+
function APIKeyListComponent_Conditional_46_For_23_Template(rf, ctx) { if (rf & 1) {
|
|
75
74
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
76
|
-
i0.ɵɵelementStart(0, "div",
|
|
77
|
-
i0.ɵɵlistener("click", function
|
|
78
|
-
i0.ɵɵelementStart(1, "div",
|
|
79
|
-
i0.ɵɵelement(3, "i",
|
|
75
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
76
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_For_23_Template_div_click_0_listener() { const key_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectKey(key_r5)); });
|
|
77
|
+
i0.ɵɵelementStart(1, "div", 35)(2, "div", 36);
|
|
78
|
+
i0.ɵɵelement(3, "i", 37);
|
|
80
79
|
i0.ɵɵelementEnd();
|
|
81
|
-
i0.ɵɵelementStart(4, "div",
|
|
80
|
+
i0.ɵɵelementStart(4, "div", 38)(5, "span", 39);
|
|
82
81
|
i0.ɵɵtext(6);
|
|
83
82
|
i0.ɵɵelementEnd();
|
|
84
|
-
i0.ɵɵelementStart(7, "code",
|
|
83
|
+
i0.ɵɵelementStart(7, "code", 40);
|
|
85
84
|
i0.ɵɵtext(8);
|
|
86
85
|
i0.ɵɵelementEnd()()();
|
|
87
|
-
i0.ɵɵelementStart(9, "div",
|
|
86
|
+
i0.ɵɵelementStart(9, "div", 41)(10, "span", 42);
|
|
88
87
|
i0.ɵɵtext(11);
|
|
89
88
|
i0.ɵɵelementEnd()();
|
|
90
|
-
i0.ɵɵelementStart(12, "div",
|
|
89
|
+
i0.ɵɵelementStart(12, "div", 43)(13, "span", 44);
|
|
91
90
|
i0.ɵɵtext(14);
|
|
92
91
|
i0.ɵɵelementEnd()();
|
|
93
|
-
i0.ɵɵelementStart(15, "div",
|
|
94
|
-
i0.ɵɵ
|
|
92
|
+
i0.ɵɵelementStart(15, "div", 28);
|
|
93
|
+
i0.ɵɵconditionalCreate(16, APIKeyListComponent_Conditional_46_For_23_Conditional_16_Template, 7, 2, "div", 45);
|
|
94
|
+
i0.ɵɵconditionalCreate(17, APIKeyListComponent_Conditional_46_For_23_Conditional_17_Template, 3, 0, "span", 46);
|
|
95
95
|
i0.ɵɵelementEnd();
|
|
96
|
-
i0.ɵɵelementStart(18, "div",
|
|
96
|
+
i0.ɵɵelementStart(18, "div", 47)(19, "span", 48);
|
|
97
97
|
i0.ɵɵtext(20);
|
|
98
98
|
i0.ɵɵelementEnd()();
|
|
99
|
-
i0.ɵɵelementStart(21, "div",
|
|
99
|
+
i0.ɵɵelementStart(21, "div", 49)(22, "span", 50);
|
|
100
100
|
i0.ɵɵtext(23);
|
|
101
101
|
i0.ɵɵelementEnd()();
|
|
102
|
-
i0.ɵɵelementStart(24, "div",
|
|
102
|
+
i0.ɵɵelementStart(24, "div", 51)(25, "span", 52);
|
|
103
103
|
i0.ɵɵtext(26);
|
|
104
104
|
i0.ɵɵelementEnd()()();
|
|
105
105
|
} if (rf & 2) {
|
|
@@ -110,7 +110,7 @@ function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
|
|
|
110
110
|
i0.ɵɵadvance(4);
|
|
111
111
|
i0.ɵɵtextInterpolate(key_r5.Label);
|
|
112
112
|
i0.ɵɵadvance(2);
|
|
113
|
-
i0.ɵɵtextInterpolate1("...", key_r5.Hash.slice(-12)
|
|
113
|
+
i0.ɵɵtextInterpolate1("...", key_r5.Hash.slice(-12));
|
|
114
114
|
i0.ɵɵadvance(3);
|
|
115
115
|
i0.ɵɵtextInterpolate(key_r5.User);
|
|
116
116
|
i0.ɵɵadvance(2);
|
|
@@ -118,9 +118,9 @@ function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
|
|
|
118
118
|
i0.ɵɵadvance();
|
|
119
119
|
i0.ɵɵtextInterpolate1(" ", key_r5.Status, " ");
|
|
120
120
|
i0.ɵɵadvance(2);
|
|
121
|
-
i0.ɵɵ
|
|
121
|
+
i0.ɵɵconditional(ctx_r1.getScopeInfo(key_r5).count > 0 ? 16 : -1);
|
|
122
122
|
i0.ɵɵadvance();
|
|
123
|
-
i0.ɵɵ
|
|
123
|
+
i0.ɵɵconditional(ctx_r1.getScopeInfo(key_r5).count === 0 ? 17 : -1);
|
|
124
124
|
i0.ɵɵadvance(2);
|
|
125
125
|
i0.ɵɵproperty("ngClass", ctx_r1.getExpirationClass(key_r5));
|
|
126
126
|
i0.ɵɵadvance();
|
|
@@ -132,7 +132,7 @@ function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
|
|
|
132
132
|
i0.ɵɵadvance(3);
|
|
133
133
|
i0.ɵɵtextInterpolate(ctx_r1.formatDate(key_r5.__mj_CreatedAt));
|
|
134
134
|
} }
|
|
135
|
-
function
|
|
135
|
+
function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
136
136
|
i0.ɵɵelementStart(0, "span");
|
|
137
137
|
i0.ɵɵtext(1);
|
|
138
138
|
i0.ɵɵelementEnd();
|
|
@@ -141,7 +141,7 @@ function APIKeyListComponent_div_46_div_23_span_2_Template(rf, ctx) { if (rf & 1
|
|
|
141
141
|
i0.ɵɵadvance();
|
|
142
142
|
i0.ɵɵtextInterpolate1("No keys matching \"", ctx_r1.SearchText, "\"");
|
|
143
143
|
} }
|
|
144
|
-
function
|
|
144
|
+
function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
145
145
|
i0.ɵɵelementStart(0, "span");
|
|
146
146
|
i0.ɵɵtext(1);
|
|
147
147
|
i0.ɵɵelementEnd();
|
|
@@ -150,71 +150,75 @@ function APIKeyListComponent_div_46_div_23_span_3_Template(rf, ctx) { if (rf & 1
|
|
|
150
150
|
i0.ɵɵadvance();
|
|
151
151
|
i0.ɵɵtextInterpolate1("No ", ctx_r1.Filter, " keys found");
|
|
152
152
|
} }
|
|
153
|
-
function
|
|
153
|
+
function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
154
154
|
i0.ɵɵelementStart(0, "span");
|
|
155
155
|
i0.ɵɵtext(1, "No API keys created yet");
|
|
156
156
|
i0.ɵɵelementEnd();
|
|
157
157
|
} }
|
|
158
|
-
function
|
|
158
|
+
function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
159
159
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
160
|
-
i0.ɵɵelementStart(0, "button",
|
|
161
|
-
i0.ɵɵlistener("click", function
|
|
160
|
+
i0.ɵɵelementStart(0, "button", 61);
|
|
161
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.requestCreate()); });
|
|
162
162
|
i0.ɵɵelement(1, "i", 10);
|
|
163
163
|
i0.ɵɵtext(2, " Generate Your First Key ");
|
|
164
164
|
i0.ɵɵelementEnd();
|
|
165
165
|
} }
|
|
166
|
-
function
|
|
167
|
-
i0.ɵɵelementStart(0, "div",
|
|
168
|
-
i0.ɵɵelement(1, "i",
|
|
169
|
-
i0.ɵɵ
|
|
166
|
+
function APIKeyListComponent_Conditional_46_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
168
|
+
i0.ɵɵelement(1, "i", 37);
|
|
169
|
+
i0.ɵɵconditionalCreate(2, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_2_Template, 2, 1, "span");
|
|
170
|
+
i0.ɵɵconditionalCreate(3, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_3_Template, 2, 1, "span");
|
|
171
|
+
i0.ɵɵconditionalCreate(4, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_4_Template, 2, 0, "span");
|
|
172
|
+
i0.ɵɵconditionalCreate(5, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_5_Template, 3, 0, "button", 60);
|
|
170
173
|
i0.ɵɵelementEnd();
|
|
171
174
|
} if (rf & 2) {
|
|
172
175
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
173
176
|
i0.ɵɵadvance(2);
|
|
174
|
-
i0.ɵɵ
|
|
177
|
+
i0.ɵɵconditional(ctx_r1.SearchText ? 2 : -1);
|
|
175
178
|
i0.ɵɵadvance();
|
|
176
|
-
i0.ɵɵ
|
|
179
|
+
i0.ɵɵconditional(!ctx_r1.SearchText && ctx_r1.Filter !== "all" ? 3 : -1);
|
|
177
180
|
i0.ɵɵadvance();
|
|
178
|
-
i0.ɵɵ
|
|
181
|
+
i0.ɵɵconditional(!ctx_r1.SearchText && ctx_r1.Filter === "all" ? 4 : -1);
|
|
179
182
|
i0.ɵɵadvance();
|
|
180
|
-
i0.ɵɵ
|
|
183
|
+
i0.ɵɵconditional(ctx_r1.Filter === "all" && !ctx_r1.SearchText ? 5 : -1);
|
|
181
184
|
} }
|
|
182
|
-
function
|
|
185
|
+
function APIKeyListComponent_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
183
186
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
184
|
-
i0.ɵɵelementStart(0, "div",
|
|
185
|
-
i0.ɵɵlistener("click", function
|
|
187
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 24)(2, "div", 25);
|
|
188
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("Label")); });
|
|
186
189
|
i0.ɵɵtext(3, " Key ");
|
|
187
190
|
i0.ɵɵelement(4, "i");
|
|
188
191
|
i0.ɵɵelementEnd();
|
|
189
|
-
i0.ɵɵelementStart(5, "div",
|
|
190
|
-
i0.ɵɵlistener("click", function
|
|
192
|
+
i0.ɵɵelementStart(5, "div", 26);
|
|
193
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("User")); });
|
|
191
194
|
i0.ɵɵtext(6, " Owner ");
|
|
192
195
|
i0.ɵɵelement(7, "i");
|
|
193
196
|
i0.ɵɵelementEnd();
|
|
194
|
-
i0.ɵɵelementStart(8, "div",
|
|
195
|
-
i0.ɵɵlistener("click", function
|
|
197
|
+
i0.ɵɵelementStart(8, "div", 27);
|
|
198
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_8_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("Status")); });
|
|
196
199
|
i0.ɵɵtext(9, " Status ");
|
|
197
200
|
i0.ɵɵelement(10, "i");
|
|
198
201
|
i0.ɵɵelementEnd();
|
|
199
|
-
i0.ɵɵelementStart(11, "div",
|
|
202
|
+
i0.ɵɵelementStart(11, "div", 28);
|
|
200
203
|
i0.ɵɵtext(12, " Scopes ");
|
|
201
204
|
i0.ɵɵelementEnd();
|
|
202
|
-
i0.ɵɵelementStart(13, "div",
|
|
203
|
-
i0.ɵɵlistener("click", function
|
|
205
|
+
i0.ɵɵelementStart(13, "div", 29);
|
|
206
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_13_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("ExpiresAt")); });
|
|
204
207
|
i0.ɵɵtext(14, " Expires ");
|
|
205
208
|
i0.ɵɵelement(15, "i");
|
|
206
209
|
i0.ɵɵelementEnd();
|
|
207
|
-
i0.ɵɵelementStart(16, "div",
|
|
208
|
-
i0.ɵɵlistener("click", function
|
|
210
|
+
i0.ɵɵelementStart(16, "div", 30);
|
|
211
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("LastUsedAt")); });
|
|
209
212
|
i0.ɵɵtext(17, " Last Used ");
|
|
210
213
|
i0.ɵɵelement(18, "i");
|
|
211
214
|
i0.ɵɵelementEnd();
|
|
212
|
-
i0.ɵɵelementStart(19, "div",
|
|
213
|
-
i0.ɵɵlistener("click", function
|
|
215
|
+
i0.ɵɵelementStart(19, "div", 31);
|
|
216
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("__mj_CreatedAt")); });
|
|
214
217
|
i0.ɵɵtext(20, " Created ");
|
|
215
218
|
i0.ɵɵelement(21, "i");
|
|
216
219
|
i0.ɵɵelementEnd()();
|
|
217
|
-
i0.ɵɵ
|
|
220
|
+
i0.ɵɵrepeaterCreate(22, APIKeyListComponent_Conditional_46_For_23_Template, 27, 18, "div", 32, i0.ɵɵrepeaterTrackByIdentity);
|
|
221
|
+
i0.ɵɵconditionalCreate(24, APIKeyListComponent_Conditional_46_Conditional_24_Template, 6, 4, "div", 33);
|
|
218
222
|
i0.ɵɵelementEnd();
|
|
219
223
|
} if (rf & 2) {
|
|
220
224
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -231,14 +235,14 @@ function APIKeyListComponent_div_46_Template(rf, ctx) { if (rf & 1) {
|
|
|
231
235
|
i0.ɵɵadvance(3);
|
|
232
236
|
i0.ɵɵclassMap(ctx_r1.getSortIcon("__mj_CreatedAt"));
|
|
233
237
|
i0.ɵɵadvance();
|
|
234
|
-
i0.ɵɵ
|
|
235
|
-
i0.ɵɵadvance();
|
|
236
|
-
i0.ɵɵ
|
|
238
|
+
i0.ɵɵrepeater(ctx_r1.getPaginatedKeys());
|
|
239
|
+
i0.ɵɵadvance(2);
|
|
240
|
+
i0.ɵɵconditional(ctx_r1.FilteredKeys.length === 0 ? 24 : -1);
|
|
237
241
|
} }
|
|
238
|
-
function
|
|
242
|
+
function APIKeyListComponent_Conditional_47_For_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
239
243
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
240
|
-
i0.ɵɵelementStart(0, "button",
|
|
241
|
-
i0.ɵɵlistener("click", function
|
|
244
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
245
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_47_For_7_Conditional_0_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const page_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goToPage(page_r11)); });
|
|
242
246
|
i0.ɵɵtext(1);
|
|
243
247
|
i0.ɵɵelementEnd();
|
|
244
248
|
} if (rf & 2) {
|
|
@@ -248,35 +252,33 @@ function APIKeyListComponent_div_47_ng_container_6_button_1_Template(rf, ctx) {
|
|
|
248
252
|
i0.ɵɵadvance();
|
|
249
253
|
i0.ɵɵtextInterpolate1(" ", page_r11, " ");
|
|
250
254
|
} }
|
|
251
|
-
function
|
|
252
|
-
i0.ɵɵelementStart(0, "span",
|
|
255
|
+
function APIKeyListComponent_Conditional_47_For_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
253
257
|
i0.ɵɵtext(1, "...");
|
|
254
258
|
i0.ɵɵelementEnd();
|
|
255
259
|
} }
|
|
256
|
-
function
|
|
257
|
-
i0.ɵɵ
|
|
258
|
-
i0.ɵɵ
|
|
259
|
-
i0.ɵɵelementContainerEnd();
|
|
260
|
+
function APIKeyListComponent_Conditional_47_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
261
|
+
i0.ɵɵconditionalCreate(0, APIKeyListComponent_Conditional_47_For_7_Conditional_0_Template, 2, 3, "button", 67);
|
|
262
|
+
i0.ɵɵconditionalCreate(1, APIKeyListComponent_Conditional_47_For_7_Conditional_1_Template, 2, 0, "span", 68);
|
|
260
263
|
} if (rf & 2) {
|
|
261
264
|
const page_r11 = ctx.$implicit;
|
|
265
|
+
i0.ɵɵconditional(page_r11 > 0 ? 0 : -1);
|
|
262
266
|
i0.ɵɵadvance();
|
|
263
|
-
i0.ɵɵ
|
|
264
|
-
i0.ɵɵadvance();
|
|
265
|
-
i0.ɵɵproperty("ngIf", page_r11 === -1);
|
|
267
|
+
i0.ɵɵconditional(page_r11 === -1 ? 1 : -1);
|
|
266
268
|
} }
|
|
267
|
-
function
|
|
269
|
+
function APIKeyListComponent_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
268
270
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
269
|
-
i0.ɵɵelementStart(0, "div",
|
|
271
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 62);
|
|
270
272
|
i0.ɵɵtext(2);
|
|
271
273
|
i0.ɵɵelementEnd();
|
|
272
|
-
i0.ɵɵelementStart(3, "div",
|
|
273
|
-
i0.ɵɵlistener("click", function
|
|
274
|
-
i0.ɵɵelement(5, "i",
|
|
274
|
+
i0.ɵɵelementStart(3, "div", 63)(4, "button", 64);
|
|
275
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_47_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToPage(ctx_r1.CurrentPage - 1)); });
|
|
276
|
+
i0.ɵɵelement(5, "i", 65);
|
|
275
277
|
i0.ɵɵelementEnd();
|
|
276
|
-
i0.ɵɵ
|
|
277
|
-
i0.ɵɵelementStart(
|
|
278
|
-
i0.ɵɵlistener("click", function
|
|
279
|
-
i0.ɵɵelement(
|
|
278
|
+
i0.ɵɵrepeaterCreate(6, APIKeyListComponent_Conditional_47_For_7_Template, 2, 2, null, null, i0.ɵɵrepeaterTrackByIdentity);
|
|
279
|
+
i0.ɵɵelementStart(8, "button", 64);
|
|
280
|
+
i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_47_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToPage(ctx_r1.CurrentPage + 1)); });
|
|
281
|
+
i0.ɵɵelement(9, "i", 66);
|
|
280
282
|
i0.ɵɵelementEnd()()();
|
|
281
283
|
} if (rf & 2) {
|
|
282
284
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -285,14 +287,10 @@ function APIKeyListComponent_div_47_Template(rf, ctx) { if (rf & 1) {
|
|
|
285
287
|
i0.ɵɵadvance(2);
|
|
286
288
|
i0.ɵɵproperty("disabled", ctx_r1.CurrentPage === 1);
|
|
287
289
|
i0.ɵɵadvance(2);
|
|
288
|
-
i0.ɵɵ
|
|
289
|
-
i0.ɵɵadvance();
|
|
290
|
+
i0.ɵɵrepeater(ctx_r1.getPageNumbers());
|
|
291
|
+
i0.ɵɵadvance(2);
|
|
290
292
|
i0.ɵɵproperty("disabled", ctx_r1.CurrentPage === ctx_r1.getTotalPages());
|
|
291
293
|
} }
|
|
292
|
-
/** Tree shaking prevention function */
|
|
293
|
-
export function LoadAPIKeyList() {
|
|
294
|
-
// This function prevents tree shaking
|
|
295
|
-
}
|
|
296
294
|
/**
|
|
297
295
|
* List view component for displaying and filtering API keys
|
|
298
296
|
*/
|
|
@@ -326,18 +324,13 @@ export class APIKeyListComponent {
|
|
|
326
324
|
// Scope counts per key
|
|
327
325
|
KeyScopeMap = new Map();
|
|
328
326
|
AllScopes = [];
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
'Admin': { icon: 'fa-solid fa-shield-halved', color: '#f59e0b' },
|
|
334
|
-
'Actions': { icon: 'fa-solid fa-bolt', color: '#8b5cf6' },
|
|
335
|
-
'Queries': { icon: 'fa-solid fa-magnifying-glass', color: '#3b82f6' },
|
|
336
|
-
'Views': { icon: 'fa-solid fa-eye', color: '#06b6d4' },
|
|
337
|
-
'Reports': { icon: 'fa-solid fa-chart-bar', color: '#ef4444' },
|
|
338
|
-
'Communication': { icon: 'fa-solid fa-envelope', color: '#ec4899' },
|
|
339
|
-
'Other': { icon: 'fa-solid fa-ellipsis', color: '#6b7280' }
|
|
327
|
+
// Default UI config for categories without explicit configuration
|
|
328
|
+
defaultUIConfig = {
|
|
329
|
+
icon: 'fa-solid fa-ellipsis',
|
|
330
|
+
color: '#6b7280'
|
|
340
331
|
};
|
|
332
|
+
// Dynamic category UI config built from root scopes
|
|
333
|
+
categoryUIConfigs = new Map();
|
|
341
334
|
async ngOnInit() {
|
|
342
335
|
await this.loadKeys();
|
|
343
336
|
}
|
|
@@ -353,17 +346,14 @@ export class APIKeyListComponent {
|
|
|
353
346
|
this.IsLoading = true;
|
|
354
347
|
try {
|
|
355
348
|
const rv = new RunView();
|
|
356
|
-
|
|
357
|
-
|
|
349
|
+
const base = APIKeysEngineBase.Instance;
|
|
350
|
+
// Load keys and key-scope assignments (scopes from cache)
|
|
351
|
+
const [keysResult, keyScopesResult] = await rv.RunViews([
|
|
358
352
|
{
|
|
359
353
|
EntityName: 'MJ: API Keys',
|
|
360
354
|
OrderBy: '__mj_CreatedAt DESC',
|
|
361
355
|
ResultType: 'entity_object'
|
|
362
356
|
},
|
|
363
|
-
{
|
|
364
|
-
EntityName: 'MJ: API Scopes',
|
|
365
|
-
ResultType: 'entity_object'
|
|
366
|
-
},
|
|
367
357
|
{
|
|
368
358
|
EntityName: 'MJ: API Key Scopes',
|
|
369
359
|
ResultType: 'entity_object'
|
|
@@ -371,7 +361,18 @@ export class APIKeyListComponent {
|
|
|
371
361
|
]);
|
|
372
362
|
if (keysResult.Success) {
|
|
373
363
|
this.AllKeys = keysResult.Results;
|
|
374
|
-
this.AllScopes =
|
|
364
|
+
this.AllScopes = base.Scopes;
|
|
365
|
+
// Build category UI config from root scopes
|
|
366
|
+
this.categoryUIConfigs.clear();
|
|
367
|
+
for (const scope of this.AllScopes) {
|
|
368
|
+
if (!scope.ParentID) {
|
|
369
|
+
const uiConfig = parseAPIScopeUIConfig(scope);
|
|
370
|
+
this.categoryUIConfigs.set(scope.Category, {
|
|
371
|
+
icon: uiConfig.icon || this.defaultUIConfig.icon,
|
|
372
|
+
color: uiConfig.color || this.defaultUIConfig.color
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}
|
|
375
376
|
// Build scope lookup map
|
|
376
377
|
const scopeMap = new Map();
|
|
377
378
|
for (const scope of this.AllScopes) {
|
|
@@ -397,7 +398,7 @@ export class APIKeyListComponent {
|
|
|
397
398
|
for (const [keyId, data] of keyToScopes.entries()) {
|
|
398
399
|
const categories = Array.from(data.categories.entries())
|
|
399
400
|
.map(([category, count]) => {
|
|
400
|
-
const config = this.
|
|
401
|
+
const config = this.categoryUIConfigs.get(category) || this.defaultUIConfig;
|
|
401
402
|
return {
|
|
402
403
|
category,
|
|
403
404
|
count,
|
|
@@ -698,7 +699,7 @@ export class APIKeyListComponent {
|
|
|
698
699
|
}
|
|
699
700
|
}
|
|
700
701
|
static ɵfac = function APIKeyListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIKeyListComponent)(); };
|
|
701
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyListComponent, selectors: [["mj-api-key-list"]], inputs: { Filter: "Filter" }, outputs: { KeySelected: "KeySelected", CreateRequested: "CreateRequested" }, features: [i0.ɵɵNgOnChangesFeature], decls: 48, vars: 29, consts: [[1, "list-container"], [1, "list-header"], [1, "header-left"], [1, "count-badge"], [1, "header-right"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search keys...", 3, "ngModelChange", "ngModel"], [
|
|
702
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyListComponent, selectors: [["mj-api-key-list"]], inputs: { Filter: "Filter" }, outputs: { KeySelected: "KeySelected", CreateRequested: "CreateRequested" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 48, vars: 29, consts: [[1, "list-container"], [1, "list-header"], [1, "header-left"], [1, "count-badge"], [1, "header-right"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search keys...", 3, "ngModelChange", "ngModel"], [1, "clear-search"], [1, "create-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "filter-tabs"], [1, "filter-tab", 3, "click"], [1, "tab-count"], [1, "fa-solid", "fa-check-circle", "status-active"], [1, "fa-solid", "fa-clock", "status-warning"], [1, "fa-solid", "fa-circle-exclamation", "status-danger"], [1, "fa-solid", "fa-question-circle", "status-info"], [1, "fa-solid", "fa-ban", "status-revoked"], ["text", "Loading API keys..."], [1, "key-grid"], [1, "pagination"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "grid-header"], [1, "col-key", "sortable", 3, "click"], [1, "col-owner", "sortable", 3, "click"], [1, "col-status", "sortable", 3, "click"], [1, "col-scopes"], [1, "col-expires", "sortable", 3, "click"], [1, "col-used", "sortable", 3, "click"], [1, "col-created", "sortable", 3, "click"], [1, "grid-row"], [1, "empty-state"], [1, "grid-row", 3, "click"], [1, "col-key"], [1, "key-icon"], [1, "fa-solid", "fa-key"], [1, "key-details"], [1, "key-label"], [1, "key-hash"], [1, "col-owner"], [1, "owner-name"], [1, "col-status"], [1, "status-badge"], [1, "scopes-display"], [1, "no-scopes"], [1, "col-expires"], [1, "expires-value", 3, "ngClass"], [1, "col-used"], [1, "used-value"], [1, "col-created"], [1, "created-value"], [1, "scope-badges"], [1, "scope-more"], [1, "scopes-total"], [1, "scope-badge", 3, "backgroundColor", "color", "title"], [1, "scope-badge", 3, "title"], [1, "badge-count"], [1, "fa-solid", "fa-shield-xmark"], [1, "create-empty-btn"], [1, "create-empty-btn", 3, "click"], [1, "page-info"], [1, "page-buttons"], [1, "page-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-left"], [1, "fa-solid", "fa-chevron-right"], [1, "page-btn", 3, "active"], [1, "page-ellipsis"], [1, "page-btn", 3, "click"]], template: function APIKeyListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
702
703
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3");
|
|
703
704
|
i0.ɵɵtext(4, "API Keys");
|
|
704
705
|
i0.ɵɵelementEnd();
|
|
@@ -711,7 +712,7 @@ export class APIKeyListComponent {
|
|
|
711
712
|
i0.ɵɵtwoWayListener("ngModelChange", function APIKeyListComponent_Template_input_ngModelChange_10_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.SearchText, $event) || (ctx.SearchText = $event); return $event; });
|
|
712
713
|
i0.ɵɵlistener("ngModelChange", function APIKeyListComponent_Template_input_ngModelChange_10_listener() { return ctx.onSearch(); });
|
|
713
714
|
i0.ɵɵelementEnd();
|
|
714
|
-
i0.ɵɵ
|
|
715
|
+
i0.ɵɵconditionalCreate(11, APIKeyListComponent_Conditional_11_Template, 2, 0, "button", 8);
|
|
715
716
|
i0.ɵɵelementEnd();
|
|
716
717
|
i0.ɵɵelementStart(12, "button", 9);
|
|
717
718
|
i0.ɵɵlistener("click", function APIKeyListComponent_Template_button_click_12_listener() { return ctx.requestCreate(); });
|
|
@@ -759,15 +760,17 @@ export class APIKeyListComponent {
|
|
|
759
760
|
i0.ɵɵelementStart(43, "span", 13);
|
|
760
761
|
i0.ɵɵtext(44);
|
|
761
762
|
i0.ɵɵelementEnd()()();
|
|
762
|
-
i0.ɵɵ
|
|
763
|
+
i0.ɵɵconditionalCreate(45, APIKeyListComponent_Conditional_45_Template, 1, 0, "mj-loading", 19);
|
|
764
|
+
i0.ɵɵconditionalCreate(46, APIKeyListComponent_Conditional_46_Template, 25, 13, "div", 20);
|
|
765
|
+
i0.ɵɵconditionalCreate(47, APIKeyListComponent_Conditional_47_Template, 10, 5, "div", 21);
|
|
763
766
|
i0.ɵɵelementEnd();
|
|
764
767
|
} if (rf & 2) {
|
|
765
768
|
i0.ɵɵadvance(6);
|
|
766
|
-
i0.ɵɵtextInterpolate2("", ctx.FilteredKeys.length, " of ", ctx.AllKeys.length
|
|
769
|
+
i0.ɵɵtextInterpolate2("", ctx.FilteredKeys.length, " of ", ctx.AllKeys.length);
|
|
767
770
|
i0.ɵɵadvance(4);
|
|
768
771
|
i0.ɵɵtwoWayProperty("ngModel", ctx.SearchText);
|
|
769
772
|
i0.ɵɵadvance();
|
|
770
|
-
i0.ɵɵ
|
|
773
|
+
i0.ɵɵconditional(ctx.SearchText ? 11 : -1);
|
|
771
774
|
i0.ɵɵadvance(5);
|
|
772
775
|
i0.ɵɵclassProp("active", ctx.Filter === "all");
|
|
773
776
|
i0.ɵɵadvance(3);
|
|
@@ -793,16 +796,16 @@ export class APIKeyListComponent {
|
|
|
793
796
|
i0.ɵɵadvance(4);
|
|
794
797
|
i0.ɵɵtextInterpolate(ctx.Stats.revoked);
|
|
795
798
|
i0.ɵɵadvance();
|
|
796
|
-
i0.ɵɵ
|
|
799
|
+
i0.ɵɵconditional(ctx.IsLoading ? 45 : -1);
|
|
797
800
|
i0.ɵɵadvance();
|
|
798
|
-
i0.ɵɵ
|
|
801
|
+
i0.ɵɵconditional(!ctx.IsLoading ? 46 : -1);
|
|
799
802
|
i0.ɵɵadvance();
|
|
800
|
-
i0.ɵɵ
|
|
801
|
-
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent], styles: [".list-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge[_ngcontent-%COMP%] {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search[_ngcontent-%COMP%]:hover {\n background: #d1d5db;\n}\n\n.clear-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n\n\n.create-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.filter-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active[_ngcontent-%COMP%] {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active[_ngcontent-%COMP%] { color: #10b981; }\n.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n.status-danger[_ngcontent-%COMP%] { color: #ef4444; }\n.status-info[_ngcontent-%COMP%] { color: #6b7280; }\n.status-revoked[_ngcontent-%COMP%] { color: #6b7280; }\n\n\n\n.key-grid[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable[_ngcontent-%COMP%]:hover {\n color: #374151;\n}\n\n.sortable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.5;\n}\n\n\n\n.grid-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row[_ngcontent-%COMP%]:hover {\n background: #fefce8;\n}\n\n.grid-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-key[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: white;\n}\n\n.key-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash[_ngcontent-%COMP%] {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n\n\n.owner-name[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #374151;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n\n\n.col-scopes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.scope-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.badge-count[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.scope-more[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.expires-value[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.expires-value.never[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.expires-value.ok[_ngcontent-%COMP%] {\n color: #059669;\n}\n\n.expires-value.warning[_ngcontent-%COMP%] {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n\n\n.used-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-style: italic;\n}\n\n\n\n.created-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.pagination[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn[_ngcontent-%COMP%] {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis[_ngcontent-%COMP%] {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n\n\n@media (max-width: 1200px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used[_ngcontent-%COMP%], \n .col-created[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 180px;\n }\n\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires[_ngcontent-%COMP%], \n .col-scopes[_ngcontent-%COMP%] {\n display: none;\n }\n\n .filter-tabs[_ngcontent-%COMP%] {\n padding: 0 16px;\n }\n}"] });
|
|
803
|
+
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredKeys.length > ctx.PageSize ? 47 : -1);
|
|
804
|
+
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent], styles: [".list-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge[_ngcontent-%COMP%] {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search[_ngcontent-%COMP%]:hover {\n background: #d1d5db;\n}\n\n.clear-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n\n\n.create-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.filter-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active[_ngcontent-%COMP%] {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active[_ngcontent-%COMP%] { color: #10b981; }\n.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n.status-danger[_ngcontent-%COMP%] { color: #ef4444; }\n.status-info[_ngcontent-%COMP%] { color: #6b7280; }\n.status-revoked[_ngcontent-%COMP%] { color: #6b7280; }\n\n\n\n.key-grid[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable[_ngcontent-%COMP%]:hover {\n color: #374151;\n}\n\n.sortable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.5;\n}\n\n\n\n.grid-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row[_ngcontent-%COMP%]:hover {\n background: #fefce8;\n}\n\n.grid-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-key[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: white;\n}\n\n.key-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash[_ngcontent-%COMP%] {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n\n\n.owner-name[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #374151;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n\n\n.col-scopes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.scope-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.badge-count[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.scope-more[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.expires-value[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.expires-value.never[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.expires-value.ok[_ngcontent-%COMP%] {\n color: #059669;\n}\n\n.expires-value.warning[_ngcontent-%COMP%] {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n\n\n.used-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-style: italic;\n}\n\n\n\n.created-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.pagination[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn[_ngcontent-%COMP%] {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis[_ngcontent-%COMP%] {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n\n\n@media (max-width: 1200px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used[_ngcontent-%COMP%], \n .col-created[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 180px;\n }\n\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires[_ngcontent-%COMP%], \n .col-scopes[_ngcontent-%COMP%] {\n display: none;\n }\n\n .filter-tabs[_ngcontent-%COMP%] {\n padding: 0 16px;\n }\n}"] });
|
|
802
805
|
}
|
|
803
806
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(APIKeyListComponent, [{
|
|
804
807
|
type: Component,
|
|
805
|
-
args: [{ selector: 'mj-api-key-list', template: "<div class=\"list-container\">\n <!-- Header -->\n <div class=\"list-header\">\n <div class=\"header-left\">\n <h3>API Keys</h3>\n <span class=\"count-badge\">{{FilteredKeys.length}} of {{AllKeys.length}}</span>\n </div>\n <div class=\"header-right\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\" [(ngModel)]=\"SearchText\"\n (ngModelChange)=\"onSearch()\"\n placeholder=\"Search keys...\" />\n <button class=\"clear-search\" *ngIf=\"SearchText\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <button class=\"create-btn\" (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Key\n </button>\n </div>\n </div>\n\n <!-- Filter Tabs -->\n <div class=\"filter-tabs\">\n <button class=\"filter-tab\" [class.active]=\"Filter === 'all'\"\n (click)=\"setFilter('all')\">\n All\n <span class=\"tab-count\">{{Stats.total}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'active'\"\n (click)=\"setFilter('active')\">\n <i class=\"fa-solid fa-check-circle status-active\"></i>\n Active\n <span class=\"tab-count\">{{Stats.active}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expiring'\"\n [class.has-warning]=\"Stats.expiring > 0\"\n (click)=\"setFilter('expiring')\">\n <i class=\"fa-solid fa-clock status-warning\"></i>\n Expiring Soon\n <span class=\"tab-count\">{{Stats.expiring}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expired'\"\n [class.has-danger]=\"Stats.expired > 0\"\n (click)=\"setFilter('expired')\">\n <i class=\"fa-solid fa-circle-exclamation status-danger\"></i>\n Expired\n <span class=\"tab-count\">{{Stats.expired}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'never-used'\"\n (click)=\"setFilter('never-used')\">\n <i class=\"fa-solid fa-question-circle status-info\"></i>\n Never Used\n <span class=\"tab-count\">{{Stats.neverUsed}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'revoked'\"\n (click)=\"setFilter('revoked')\">\n <i class=\"fa-solid fa-ban status-revoked\"></i>\n Revoked\n <span class=\"tab-count\">{{Stats.revoked}}</span>\n </button>\n </div>\n\n <!-- Loading -->\n <mj-loading *ngIf=\"IsLoading\" text=\"Loading API keys...\"></mj-loading>\n\n <!-- Grid -->\n <div class=\"key-grid\" *ngIf=\"!IsLoading\">\n <!-- Header Row -->\n <div class=\"grid-header\">\n <div class=\"col-key sortable\" (click)=\"toggleSort('Label')\">\n Key\n <i [class]=\"getSortIcon('Label')\"></i>\n </div>\n <div class=\"col-owner sortable\" (click)=\"toggleSort('User')\">\n Owner\n <i [class]=\"getSortIcon('User')\"></i>\n </div>\n <div class=\"col-status sortable\" (click)=\"toggleSort('Status')\">\n Status\n <i [class]=\"getSortIcon('Status')\"></i>\n </div>\n <div class=\"col-scopes\">\n Scopes\n </div>\n <div class=\"col-expires sortable\" (click)=\"toggleSort('ExpiresAt')\">\n Expires\n <i [class]=\"getSortIcon('ExpiresAt')\"></i>\n </div>\n <div class=\"col-used sortable\" (click)=\"toggleSort('LastUsedAt')\">\n Last Used\n <i [class]=\"getSortIcon('LastUsedAt')\"></i>\n </div>\n <div class=\"col-created sortable\" (click)=\"toggleSort('__mj_CreatedAt')\">\n Created\n <i [class]=\"getSortIcon('__mj_CreatedAt')\"></i>\n </div>\n </div>\n\n <!-- Key Rows -->\n <div class=\"grid-row\" *ngFor=\"let key of getPaginatedKeys()\"\n (click)=\"selectKey(key)\">\n <div class=\"col-key\">\n <div class=\"key-icon\" [class.active]=\"key.Status === 'Active'\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"key-details\">\n <span class=\"key-label\">{{key.Label}}</span>\n <code class=\"key-hash\">...{{key.Hash.slice(-12)}}</code>\n </div>\n </div>\n <div class=\"col-owner\">\n <span class=\"owner-name\">{{key.User}}</span>\n </div>\n <div class=\"col-status\">\n <span class=\"status-badge\" [class.active]=\"key.Status === 'Active'\"\n [class.revoked]=\"key.Status === 'Revoked'\">\n {{key.Status}}\n </span>\n </div>\n <div class=\"col-scopes\">\n <div class=\"scopes-display\" *ngIf=\"getScopeInfo(key).count > 0\">\n <div class=\"scope-badges\">\n <ng-container *ngFor=\"let cat of getScopeInfo(key).categories; let i = index\">\n <span class=\"scope-badge\" *ngIf=\"i < 3\"\n [style.backgroundColor]=\"cat.color + '15'\"\n [style.color]=\"cat.color\"\n [title]=\"cat.category + ': ' + cat.count + ' scope(s)'\">\n <i [class]=\"cat.icon\"></i>\n <span class=\"badge-count\">{{cat.count}}</span>\n </span>\n </ng-container>\n <span class=\"scope-more\" *ngIf=\"getScopeInfo(key).categories.length > 3\">\n +{{getScopeInfo(key).categories.length - 3}}\n </span>\n </div>\n <span class=\"scopes-total\">\n {{getScopeInfo(key).count}} total\n </span>\n </div>\n <span class=\"no-scopes\" *ngIf=\"getScopeInfo(key).count === 0\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n None\n </span>\n </div>\n <div class=\"col-expires\">\n <span class=\"expires-value\" [ngClass]=\"getExpirationClass(key)\">\n {{formatExpiration(key.ExpiresAt)}}\n </span>\n </div>\n <div class=\"col-used\">\n <span class=\"used-value\" [class.never]=\"!key.LastUsedAt\">\n {{formatDate(key.LastUsedAt)}}\n </span>\n </div>\n <div class=\"col-created\">\n <span class=\"created-value\">{{formatDate(key.__mj_CreatedAt)}}</span>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"FilteredKeys.length === 0\">\n <i class=\"fa-solid fa-key\"></i>\n <span *ngIf=\"SearchText\">No keys matching \"{{SearchText}}\"</span>\n <span *ngIf=\"!SearchText && Filter !== 'all'\">No {{Filter}} keys found</span>\n <span *ngIf=\"!SearchText && Filter === 'all'\">No API keys created yet</span>\n <button class=\"create-empty-btn\" *ngIf=\"Filter === 'all' && !SearchText\"\n (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Your First Key\n </button>\n </div>\n </div>\n\n <!-- Pagination -->\n <div class=\"pagination\" *ngIf=\"!IsLoading && FilteredKeys.length > PageSize\">\n <div class=\"page-info\">\n Showing {{(CurrentPage - 1) * PageSize + 1}} - {{Math.min(CurrentPage * PageSize, FilteredKeys.length)}}\n of {{FilteredKeys.length}}\n </div>\n <div class=\"page-buttons\">\n <button class=\"page-btn\" [disabled]=\"CurrentPage === 1\"\n (click)=\"goToPage(CurrentPage - 1)\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n <ng-container *ngFor=\"let page of getPageNumbers()\">\n <button class=\"page-btn\" *ngIf=\"page > 0\"\n [class.active]=\"page === CurrentPage\"\n (click)=\"goToPage(page)\">\n {{page}}\n </button>\n <span class=\"page-ellipsis\" *ngIf=\"page === -1\">...</span>\n </ng-container>\n <button class=\"page-btn\" [disabled]=\"CurrentPage === getTotalPages()\"\n (click)=\"goToPage(CurrentPage + 1)\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".list-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n/* Header */\n.list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left h3 {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n/* Search Box */\n.search-box {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box i {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box input {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box input:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search:hover {\n background: #d1d5db;\n}\n\n.clear-search i {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n/* Create Button */\n.create-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Filter Tabs */\n.filter-tabs {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning .tab-count {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger .tab-count {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active { color: #10b981; }\n.status-warning { color: #f59e0b; }\n.status-danger { color: #ef4444; }\n.status-info { color: #6b7280; }\n.status-revoked { color: #6b7280; }\n\n/* Key Grid */\n.key-grid {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable:hover {\n color: #374151;\n}\n\n.sortable i {\n font-size: 10px;\n opacity: 0.5;\n}\n\n/* Grid Rows */\n.grid-row {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row:hover {\n background: #fefce8;\n}\n\n.grid-row:last-child {\n border-bottom: none;\n}\n\n/* Key Column */\n.col-key {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon i {\n font-size: 16px;\n color: white;\n}\n\n.key-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n/* Owner Column */\n.owner-name {\n font-size: 14px;\n color: #374151;\n}\n\n/* Status Column */\n.status-badge {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n/* Scopes Column */\n.col-scopes {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge:hover {\n transform: scale(1.05);\n}\n\n.scope-badge i {\n font-size: 10px;\n}\n\n.badge-count {\n font-weight: 700;\n}\n\n.scope-more {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes i {\n font-size: 11px;\n}\n\n/* Expires Column */\n.expires-value {\n font-size: 13px;\n}\n\n.expires-value.never {\n color: #6b7280;\n}\n\n.expires-value.ok {\n color: #059669;\n}\n\n.expires-value.warning {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired {\n color: #dc2626;\n font-weight: 600;\n}\n\n/* Used Column */\n.used-value {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never {\n color: #9ca3af;\n font-style: italic;\n}\n\n/* Created Column */\n.created-value {\n font-size: 13px;\n color: #6b7280;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state span {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Pagination */\n.pagination {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used,\n .col-created {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box input {\n width: 180px;\n }\n\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires,\n .col-scopes {\n display: none;\n }\n\n .filter-tabs {\n padding: 0 16px;\n }\n}\n"] }]
|
|
808
|
+
args: [{ standalone: false, selector: 'mj-api-key-list', template: "<div class=\"list-container\">\n <!-- Header -->\n <div class=\"list-header\">\n <div class=\"header-left\">\n <h3>API Keys</h3>\n <span class=\"count-badge\">{{FilteredKeys.length}} of {{AllKeys.length}}</span>\n </div>\n <div class=\"header-right\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\" [(ngModel)]=\"SearchText\"\n (ngModelChange)=\"onSearch()\"\n placeholder=\"Search keys...\" />\n @if (SearchText) {\n <button class=\"clear-search\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <button class=\"create-btn\" (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Key\n </button>\n </div>\n </div>\n\n <!-- Filter Tabs -->\n <div class=\"filter-tabs\">\n <button class=\"filter-tab\" [class.active]=\"Filter === 'all'\"\n (click)=\"setFilter('all')\">\n All\n <span class=\"tab-count\">{{Stats.total}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'active'\"\n (click)=\"setFilter('active')\">\n <i class=\"fa-solid fa-check-circle status-active\"></i>\n Active\n <span class=\"tab-count\">{{Stats.active}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expiring'\"\n [class.has-warning]=\"Stats.expiring > 0\"\n (click)=\"setFilter('expiring')\">\n <i class=\"fa-solid fa-clock status-warning\"></i>\n Expiring Soon\n <span class=\"tab-count\">{{Stats.expiring}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expired'\"\n [class.has-danger]=\"Stats.expired > 0\"\n (click)=\"setFilter('expired')\">\n <i class=\"fa-solid fa-circle-exclamation status-danger\"></i>\n Expired\n <span class=\"tab-count\">{{Stats.expired}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'never-used'\"\n (click)=\"setFilter('never-used')\">\n <i class=\"fa-solid fa-question-circle status-info\"></i>\n Never Used\n <span class=\"tab-count\">{{Stats.neverUsed}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'revoked'\"\n (click)=\"setFilter('revoked')\">\n <i class=\"fa-solid fa-ban status-revoked\"></i>\n Revoked\n <span class=\"tab-count\">{{Stats.revoked}}</span>\n </button>\n </div>\n\n <!-- Loading -->\n @if (IsLoading) {\n <mj-loading text=\"Loading API keys...\"></mj-loading>\n }\n\n <!-- Grid -->\n @if (!IsLoading) {\n <div class=\"key-grid\">\n <!-- Header Row -->\n <div class=\"grid-header\">\n <div class=\"col-key sortable\" (click)=\"toggleSort('Label')\">\n Key\n <i [class]=\"getSortIcon('Label')\"></i>\n </div>\n <div class=\"col-owner sortable\" (click)=\"toggleSort('User')\">\n Owner\n <i [class]=\"getSortIcon('User')\"></i>\n </div>\n <div class=\"col-status sortable\" (click)=\"toggleSort('Status')\">\n Status\n <i [class]=\"getSortIcon('Status')\"></i>\n </div>\n <div class=\"col-scopes\">\n Scopes\n </div>\n <div class=\"col-expires sortable\" (click)=\"toggleSort('ExpiresAt')\">\n Expires\n <i [class]=\"getSortIcon('ExpiresAt')\"></i>\n </div>\n <div class=\"col-used sortable\" (click)=\"toggleSort('LastUsedAt')\">\n Last Used\n <i [class]=\"getSortIcon('LastUsedAt')\"></i>\n </div>\n <div class=\"col-created sortable\" (click)=\"toggleSort('__mj_CreatedAt')\">\n Created\n <i [class]=\"getSortIcon('__mj_CreatedAt')\"></i>\n </div>\n </div>\n <!-- Key Rows -->\n @for (key of getPaginatedKeys(); track key) {\n <div class=\"grid-row\"\n (click)=\"selectKey(key)\">\n <div class=\"col-key\">\n <div class=\"key-icon\" [class.active]=\"key.Status === 'Active'\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"key-details\">\n <span class=\"key-label\">{{key.Label}}</span>\n <code class=\"key-hash\">...{{key.Hash.slice(-12)}}</code>\n </div>\n </div>\n <div class=\"col-owner\">\n <span class=\"owner-name\">{{key.User}}</span>\n </div>\n <div class=\"col-status\">\n <span class=\"status-badge\" [class.active]=\"key.Status === 'Active'\"\n [class.revoked]=\"key.Status === 'Revoked'\">\n {{key.Status}}\n </span>\n </div>\n <div class=\"col-scopes\">\n @if (getScopeInfo(key).count > 0) {\n <div class=\"scopes-display\">\n <div class=\"scope-badges\">\n @for (cat of getScopeInfo(key).categories; track cat; let i = $index) {\n @if (i < 3) {\n <span class=\"scope-badge\"\n [style.backgroundColor]=\"cat.color + '15'\"\n [style.color]=\"cat.color\"\n [title]=\"cat.category + ': ' + cat.count + ' scope(s)'\">\n <i [class]=\"cat.icon\"></i>\n <span class=\"badge-count\">{{cat.count}}</span>\n </span>\n }\n }\n @if (getScopeInfo(key).categories.length > 3) {\n <span class=\"scope-more\">\n +{{getScopeInfo(key).categories.length - 3}}\n </span>\n }\n </div>\n <span class=\"scopes-total\">\n {{getScopeInfo(key).count}} total\n </span>\n </div>\n }\n @if (getScopeInfo(key).count === 0) {\n <span class=\"no-scopes\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n None\n </span>\n }\n </div>\n <div class=\"col-expires\">\n <span class=\"expires-value\" [ngClass]=\"getExpirationClass(key)\">\n {{formatExpiration(key.ExpiresAt)}}\n </span>\n </div>\n <div class=\"col-used\">\n <span class=\"used-value\" [class.never]=\"!key.LastUsedAt\">\n {{formatDate(key.LastUsedAt)}}\n </span>\n </div>\n <div class=\"col-created\">\n <span class=\"created-value\">{{formatDate(key.__mj_CreatedAt)}}</span>\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (FilteredKeys.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-key\"></i>\n @if (SearchText) {\n <span>No keys matching \"{{SearchText}}\"</span>\n }\n @if (!SearchText && Filter !== 'all') {\n <span>No {{Filter}} keys found</span>\n }\n @if (!SearchText && Filter === 'all') {\n <span>No API keys created yet</span>\n }\n @if (Filter === 'all' && !SearchText) {\n <button class=\"create-empty-btn\"\n (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Your First Key\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Pagination -->\n @if (!IsLoading && FilteredKeys.length > PageSize) {\n <div class=\"pagination\">\n <div class=\"page-info\">\n Showing {{(CurrentPage - 1) * PageSize + 1}} - {{Math.min(CurrentPage * PageSize, FilteredKeys.length)}}\n of {{FilteredKeys.length}}\n </div>\n <div class=\"page-buttons\">\n <button class=\"page-btn\" [disabled]=\"CurrentPage === 1\"\n (click)=\"goToPage(CurrentPage - 1)\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n @for (page of getPageNumbers(); track page) {\n @if (page > 0) {\n <button class=\"page-btn\"\n [class.active]=\"page === CurrentPage\"\n (click)=\"goToPage(page)\">\n {{page}}\n </button>\n }\n @if (page === -1) {\n <span class=\"page-ellipsis\">...</span>\n }\n }\n <button class=\"page-btn\" [disabled]=\"CurrentPage === getTotalPages()\"\n (click)=\"goToPage(CurrentPage + 1)\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".list-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n/* Header */\n.list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left h3 {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n/* Search Box */\n.search-box {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box i {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box input {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box input:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search:hover {\n background: #d1d5db;\n}\n\n.clear-search i {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n/* Create Button */\n.create-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Filter Tabs */\n.filter-tabs {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning .tab-count {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger .tab-count {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active { color: #10b981; }\n.status-warning { color: #f59e0b; }\n.status-danger { color: #ef4444; }\n.status-info { color: #6b7280; }\n.status-revoked { color: #6b7280; }\n\n/* Key Grid */\n.key-grid {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable:hover {\n color: #374151;\n}\n\n.sortable i {\n font-size: 10px;\n opacity: 0.5;\n}\n\n/* Grid Rows */\n.grid-row {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row:hover {\n background: #fefce8;\n}\n\n.grid-row:last-child {\n border-bottom: none;\n}\n\n/* Key Column */\n.col-key {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon i {\n font-size: 16px;\n color: white;\n}\n\n.key-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n/* Owner Column */\n.owner-name {\n font-size: 14px;\n color: #374151;\n}\n\n/* Status Column */\n.status-badge {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n/* Scopes Column */\n.col-scopes {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge:hover {\n transform: scale(1.05);\n}\n\n.scope-badge i {\n font-size: 10px;\n}\n\n.badge-count {\n font-weight: 700;\n}\n\n.scope-more {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes i {\n font-size: 11px;\n}\n\n/* Expires Column */\n.expires-value {\n font-size: 13px;\n}\n\n.expires-value.never {\n color: #6b7280;\n}\n\n.expires-value.ok {\n color: #059669;\n}\n\n.expires-value.warning {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired {\n color: #dc2626;\n font-weight: 600;\n}\n\n/* Used Column */\n.used-value {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never {\n color: #9ca3af;\n font-style: italic;\n}\n\n/* Created Column */\n.created-value {\n font-size: 13px;\n color: #6b7280;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state span {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Pagination */\n.pagination {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used,\n .col-created {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box input {\n width: 180px;\n }\n\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires,\n .col-scopes {\n display: none;\n }\n\n .filter-tabs {\n padding: 0 16px;\n }\n}\n"] }]
|
|
806
809
|
}], null, { Filter: [{
|
|
807
810
|
type: Input
|
|
808
811
|
}], KeySelected: [{
|
|
@@ -810,5 +813,5 @@ export class APIKeyListComponent {
|
|
|
810
813
|
}], CreateRequested: [{
|
|
811
814
|
type: Output
|
|
812
815
|
}] }); })();
|
|
813
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyListComponent, { className: "APIKeyListComponent", filePath: "src/
|
|
816
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyListComponent, { className: "APIKeyListComponent", filePath: "src/apikeys/api-key-list.component.ts", lineNumber: 32 }); })();
|
|
814
817
|
//# sourceMappingURL=api-key-list.component.js.map
|