@memberjunction/ng-dashboards 5.34.1 → 5.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +202 -158
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +191 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +19 -79
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +19 -79
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +19 -79
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +307 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +654 -648
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +230 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +679 -786
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +114 -99
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +51 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -6
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +37 -7
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +46 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +40 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +42 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -11,45 +11,27 @@ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
|
11
11
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@angular/common";
|
|
14
|
-
import * as i2 from "
|
|
15
|
-
import * as i3 from "@memberjunction/ng-
|
|
16
|
-
import * as i4 from "./system-config-filter-panel.component";
|
|
14
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
15
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
17
16
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
18
|
-
function
|
|
19
|
-
i0.ɵɵ
|
|
20
|
-
|
|
21
|
-
function SystemConfigurationComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
-
i0.ɵɵtext(0, " Show Filters ");
|
|
23
|
-
} }
|
|
24
|
-
function SystemConfigurationComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵelementStart(0, "as-split-area", 18)(1, "mj-system-config-filter-panel", 24);
|
|
27
|
-
i0.ɵɵlistener("filtersChange", function SystemConfigurationComponent_Conditional_23_Template_mj_system_config_filter_panel_filtersChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFiltersChange($event)); })("filterChange", function SystemConfigurationComponent_Conditional_23_Template_mj_system_config_filter_panel_filterChange_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFilterChange()); })("resetFilters", function SystemConfigurationComponent_Conditional_23_Template_mj_system_config_filter_panel_resetFilters_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResetFilters()); })("closePanel", function SystemConfigurationComponent_Conditional_23_Template_mj_system_config_filter_panel_closePanel_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFilterPanel()); });
|
|
28
|
-
i0.ɵɵelementEnd()();
|
|
29
|
-
} if (rf & 2) {
|
|
30
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
31
|
-
i0.ɵɵproperty("size", 20)("minSize", 15)("maxSize", 30);
|
|
32
|
-
i0.ɵɵadvance();
|
|
33
|
-
i0.ɵɵproperty("configurations", ctx_r1.configurations)("filteredConfigurations", ctx_r1.filteredConfigurations)("filters", ctx_r1.currentFilters);
|
|
34
|
-
} }
|
|
35
|
-
function SystemConfigurationComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
-
i0.ɵɵelementStart(0, "div", 20);
|
|
37
|
-
i0.ɵɵelement(1, "mj-loading", 25);
|
|
17
|
+
function SystemConfigurationComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
19
|
+
i0.ɵɵelement(1, "mj-loading", 15);
|
|
38
20
|
i0.ɵɵelementEnd();
|
|
39
21
|
} }
|
|
40
|
-
function
|
|
41
|
-
i0.ɵɵelementStart(0, "div",
|
|
42
|
-
i0.ɵɵelement(2, "i",
|
|
22
|
+
function SystemConfigurationComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "p", 16);
|
|
24
|
+
i0.ɵɵelement(2, "i", 17);
|
|
43
25
|
i0.ɵɵtext(3);
|
|
44
26
|
i0.ɵɵelementEnd()();
|
|
45
27
|
} if (rf & 2) {
|
|
46
|
-
const
|
|
28
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
47
29
|
i0.ɵɵadvance(3);
|
|
48
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
30
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.error, " ");
|
|
49
31
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "div",
|
|
52
|
-
i0.ɵɵelement(1, "i",
|
|
32
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
34
|
+
i0.ɵɵelement(1, "i", 19);
|
|
53
35
|
i0.ɵɵelementStart(2, "h3");
|
|
54
36
|
i0.ɵɵtext(3, "No configurations found");
|
|
55
37
|
i0.ɵɵelementEnd();
|
|
@@ -57,262 +39,262 @@ function SystemConfigurationComponent_Conditional_28_Conditional_0_Template(rf,
|
|
|
57
39
|
i0.ɵɵtext(5, "No AI configurations match your current filters. Try adjusting your search criteria or create a new configuration.");
|
|
58
40
|
i0.ɵɵelementEnd()();
|
|
59
41
|
} }
|
|
60
|
-
function
|
|
61
|
-
i0.ɵɵelementStart(0, "span",
|
|
62
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
44
|
+
i0.ɵɵelement(1, "i", 42);
|
|
63
45
|
i0.ɵɵtext(2, " Default ");
|
|
64
46
|
i0.ɵɵelementEnd();
|
|
65
47
|
} }
|
|
66
|
-
function
|
|
67
|
-
i0.ɵɵelementStart(0, "p",
|
|
48
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
i0.ɵɵelementStart(0, "p", 34);
|
|
68
50
|
i0.ɵɵtext(1);
|
|
69
51
|
i0.ɵɵelementEnd();
|
|
70
52
|
} if (rf & 2) {
|
|
71
|
-
const
|
|
53
|
+
const config_r3 = i0.ɵɵnextContext().$implicit;
|
|
72
54
|
i0.ɵɵadvance();
|
|
73
|
-
i0.ɵɵtextInterpolate(
|
|
55
|
+
i0.ɵɵtextInterpolate(config_r3.Description);
|
|
74
56
|
} }
|
|
75
|
-
function
|
|
76
|
-
i0.ɵɵelementStart(0, "p",
|
|
57
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelementStart(0, "p", 35);
|
|
77
59
|
i0.ɵɵtext(1, "No description provided");
|
|
78
60
|
i0.ɵɵelementEnd();
|
|
79
61
|
} }
|
|
80
|
-
function
|
|
81
|
-
const
|
|
82
|
-
i0.ɵɵelementStart(0, "div",
|
|
83
|
-
i0.ɵɵlistener("click", function
|
|
84
|
-
i0.ɵɵelementStart(1, "div",
|
|
85
|
-
i0.ɵɵelement(3, "i",
|
|
62
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
64
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
65
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_22_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r4); const config_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.onOpenPrompt(config_r3.DefaultPromptForContextCompressionID); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
66
|
+
i0.ɵɵelementStart(1, "div", 55)(2, "div", 56);
|
|
67
|
+
i0.ɵɵelement(3, "i", 57);
|
|
86
68
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵelementStart(4, "div",
|
|
69
|
+
i0.ɵɵelementStart(4, "div", 58)(5, "span", 59);
|
|
88
70
|
i0.ɵɵtext(6, "Context Compression");
|
|
89
71
|
i0.ɵɵelementEnd();
|
|
90
|
-
i0.ɵɵelementStart(7, "span",
|
|
72
|
+
i0.ɵɵelementStart(7, "span", 60);
|
|
91
73
|
i0.ɵɵtext(8);
|
|
92
74
|
i0.ɵɵelementEnd()()();
|
|
93
|
-
i0.ɵɵelement(9, "i",
|
|
75
|
+
i0.ɵɵelement(9, "i", 61);
|
|
94
76
|
i0.ɵɵelementEnd();
|
|
95
77
|
} if (rf & 2) {
|
|
96
|
-
const
|
|
78
|
+
const config_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
97
79
|
i0.ɵɵadvance(8);
|
|
98
|
-
i0.ɵɵtextInterpolate(
|
|
80
|
+
i0.ɵɵtextInterpolate(config_r3.compressionPrompt.Name);
|
|
99
81
|
} }
|
|
100
|
-
function
|
|
101
|
-
i0.ɵɵelementStart(0, "div",
|
|
82
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
83
|
+
i0.ɵɵelementStart(0, "div", 52);
|
|
102
84
|
i0.ɵɵtext(1, "No compression prompt configured");
|
|
103
85
|
i0.ɵɵelementEnd();
|
|
104
86
|
} }
|
|
105
|
-
function
|
|
106
|
-
const
|
|
107
|
-
i0.ɵɵelementStart(0, "div",
|
|
108
|
-
i0.ɵɵlistener("click", function
|
|
109
|
-
i0.ɵɵelementStart(1, "div",
|
|
110
|
-
i0.ɵɵelement(3, "i",
|
|
87
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
89
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
90
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_24_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const config_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.onOpenPrompt(config_r3.DefaultPromptForContextSummarizationID); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
91
|
+
i0.ɵɵelementStart(1, "div", 55)(2, "div", 56);
|
|
92
|
+
i0.ɵɵelement(3, "i", 62);
|
|
111
93
|
i0.ɵɵelementEnd();
|
|
112
|
-
i0.ɵɵelementStart(4, "div",
|
|
94
|
+
i0.ɵɵelementStart(4, "div", 58)(5, "span", 59);
|
|
113
95
|
i0.ɵɵtext(6, "Context Summarization");
|
|
114
96
|
i0.ɵɵelementEnd();
|
|
115
|
-
i0.ɵɵelementStart(7, "span",
|
|
97
|
+
i0.ɵɵelementStart(7, "span", 60);
|
|
116
98
|
i0.ɵɵtext(8);
|
|
117
99
|
i0.ɵɵelementEnd()()();
|
|
118
|
-
i0.ɵɵelement(9, "i",
|
|
100
|
+
i0.ɵɵelement(9, "i", 61);
|
|
119
101
|
i0.ɵɵelementEnd();
|
|
120
102
|
} if (rf & 2) {
|
|
121
|
-
const
|
|
103
|
+
const config_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
122
104
|
i0.ɵɵadvance(8);
|
|
123
|
-
i0.ɵɵtextInterpolate(
|
|
105
|
+
i0.ɵɵtextInterpolate(config_r3.summarizationPrompt.Name);
|
|
124
106
|
} }
|
|
125
|
-
function
|
|
126
|
-
i0.ɵɵelementStart(0, "div",
|
|
107
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
108
|
+
i0.ɵɵelementStart(0, "div", 52);
|
|
127
109
|
i0.ɵɵtext(1, "No summarization prompt configured");
|
|
128
110
|
i0.ɵɵelementEnd();
|
|
129
111
|
} }
|
|
130
|
-
function
|
|
131
|
-
const
|
|
132
|
-
i0.ɵɵelementStart(0, "div",
|
|
133
|
-
i0.ɵɵlistener("click", function
|
|
134
|
-
i0.ɵɵelementStart(1, "div",
|
|
112
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
113
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
114
|
+
i0.ɵɵelementStart(0, "div", 66);
|
|
115
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_26_For_6_Template_div_click_0_listener($event) { const param_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(7); ctx_r0.onOpenParam(param_r7); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
116
|
+
i0.ɵɵelementStart(1, "div", 67)(2, "div", 68);
|
|
135
117
|
i0.ɵɵelement(3, "i");
|
|
136
118
|
i0.ɵɵelementEnd();
|
|
137
|
-
i0.ɵɵelementStart(4, "div",
|
|
119
|
+
i0.ɵɵelementStart(4, "div", 69)(5, "span", 70);
|
|
138
120
|
i0.ɵɵtext(6);
|
|
139
121
|
i0.ɵɵelementEnd();
|
|
140
|
-
i0.ɵɵelementStart(7, "span",
|
|
122
|
+
i0.ɵɵelementStart(7, "span", 71);
|
|
141
123
|
i0.ɵɵtext(8);
|
|
142
124
|
i0.ɵɵelementEnd()()();
|
|
143
|
-
i0.ɵɵelementStart(9, "span",
|
|
125
|
+
i0.ɵɵelementStart(9, "span", 72);
|
|
144
126
|
i0.ɵɵtext(10);
|
|
145
127
|
i0.ɵɵelementEnd()();
|
|
146
128
|
} if (rf & 2) {
|
|
147
|
-
const
|
|
148
|
-
const
|
|
129
|
+
const param_r7 = ctx.$implicit;
|
|
130
|
+
const ctx_r0 = i0.ɵɵnextContext(7);
|
|
149
131
|
i0.ɵɵadvance(3);
|
|
150
|
-
i0.ɵɵclassMap(
|
|
132
|
+
i0.ɵɵclassMap(ctx_r0.getParamTypeIcon(param_r7.Type));
|
|
151
133
|
i0.ɵɵadvance(3);
|
|
152
|
-
i0.ɵɵtextInterpolate(
|
|
134
|
+
i0.ɵɵtextInterpolate(param_r7.Name);
|
|
153
135
|
i0.ɵɵadvance(2);
|
|
154
|
-
i0.ɵɵtextInterpolate(
|
|
136
|
+
i0.ɵɵtextInterpolate(param_r7.Type);
|
|
155
137
|
i0.ɵɵadvance(2);
|
|
156
|
-
i0.ɵɵtextInterpolate(
|
|
138
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatParamValue(param_r7));
|
|
157
139
|
} }
|
|
158
|
-
function
|
|
159
|
-
i0.ɵɵelementStart(0, "div",
|
|
160
|
-
i0.ɵɵelement(2, "i",
|
|
140
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelementStart(0, "div", 53)(1, "h5", 48);
|
|
142
|
+
i0.ɵɵelement(2, "i", 63);
|
|
161
143
|
i0.ɵɵtext(3, " Configuration Parameters ");
|
|
162
144
|
i0.ɵɵelementEnd();
|
|
163
|
-
i0.ɵɵelementStart(4, "div",
|
|
164
|
-
i0.ɵɵrepeaterCreate(5,
|
|
145
|
+
i0.ɵɵelementStart(4, "div", 64);
|
|
146
|
+
i0.ɵɵrepeaterCreate(5, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_26_For_6_Template, 11, 5, "div", 65, _forTrack0);
|
|
165
147
|
i0.ɵɵelementEnd()();
|
|
166
148
|
} if (rf & 2) {
|
|
167
|
-
const
|
|
149
|
+
const config_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
168
150
|
i0.ɵɵadvance(5);
|
|
169
|
-
i0.ɵɵrepeater(
|
|
151
|
+
i0.ɵɵrepeater(config_r3.params);
|
|
170
152
|
} }
|
|
171
|
-
function
|
|
172
|
-
i0.ɵɵelementStart(0, "div",
|
|
173
|
-
i0.ɵɵelement(2, "i",
|
|
153
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
154
|
+
i0.ɵɵelementStart(0, "div", 53)(1, "h5", 48);
|
|
155
|
+
i0.ɵɵelement(2, "i", 63);
|
|
174
156
|
i0.ɵɵtext(3, " Configuration Parameters ");
|
|
175
157
|
i0.ɵɵelementEnd();
|
|
176
|
-
i0.ɵɵelementStart(4, "div",
|
|
158
|
+
i0.ɵɵelementStart(4, "div", 73);
|
|
177
159
|
i0.ɵɵtext(5, "No parameters configured");
|
|
178
160
|
i0.ɵɵelementEnd()();
|
|
179
161
|
} }
|
|
180
|
-
function
|
|
181
|
-
i0.ɵɵelementStart(0, "div",
|
|
162
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
163
|
+
i0.ɵɵelementStart(0, "div", 36)(1, "div", 43)(2, "div", 44)(3, "span", 45);
|
|
182
164
|
i0.ɵɵtext(4, "Parameters");
|
|
183
165
|
i0.ɵɵelementEnd();
|
|
184
|
-
i0.ɵɵelementStart(5, "span",
|
|
166
|
+
i0.ɵɵelementStart(5, "span", 46);
|
|
185
167
|
i0.ɵɵtext(6);
|
|
186
168
|
i0.ɵɵelementEnd()();
|
|
187
|
-
i0.ɵɵelementStart(7, "div",
|
|
169
|
+
i0.ɵɵelementStart(7, "div", 44)(8, "span", 45);
|
|
188
170
|
i0.ɵɵtext(9, "Created");
|
|
189
171
|
i0.ɵɵelementEnd();
|
|
190
|
-
i0.ɵɵelementStart(10, "span",
|
|
172
|
+
i0.ɵɵelementStart(10, "span", 46);
|
|
191
173
|
i0.ɵɵtext(11);
|
|
192
174
|
i0.ɵɵelementEnd()();
|
|
193
|
-
i0.ɵɵelementStart(12, "div",
|
|
175
|
+
i0.ɵɵelementStart(12, "div", 44)(13, "span", 45);
|
|
194
176
|
i0.ɵɵtext(14, "Updated");
|
|
195
177
|
i0.ɵɵelementEnd();
|
|
196
|
-
i0.ɵɵelementStart(15, "span",
|
|
178
|
+
i0.ɵɵelementStart(15, "span", 46);
|
|
197
179
|
i0.ɵɵtext(16);
|
|
198
180
|
i0.ɵɵelementEnd()()();
|
|
199
|
-
i0.ɵɵelementStart(17, "div",
|
|
200
|
-
i0.ɵɵelement(19, "i",
|
|
181
|
+
i0.ɵɵelementStart(17, "div", 47)(18, "h5", 48);
|
|
182
|
+
i0.ɵɵelement(19, "i", 49);
|
|
201
183
|
i0.ɵɵtext(20, " Linked Prompts ");
|
|
202
184
|
i0.ɵɵelementEnd();
|
|
203
|
-
i0.ɵɵelementStart(21, "div",
|
|
204
|
-
i0.ɵɵconditionalCreate(22,
|
|
205
|
-
i0.ɵɵconditionalCreate(24,
|
|
185
|
+
i0.ɵɵelementStart(21, "div", 50);
|
|
186
|
+
i0.ɵɵconditionalCreate(22, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_22_Template, 10, 1, "div", 51)(23, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_23_Template, 2, 0, "div", 52);
|
|
187
|
+
i0.ɵɵconditionalCreate(24, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_24_Template, 10, 1, "div", 51)(25, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_25_Template, 2, 0, "div", 52);
|
|
206
188
|
i0.ɵɵelementEnd()();
|
|
207
|
-
i0.ɵɵconditionalCreate(26,
|
|
189
|
+
i0.ɵɵconditionalCreate(26, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_26_Template, 7, 0, "div", 53)(27, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_27_Template, 6, 0, "div", 53);
|
|
208
190
|
i0.ɵɵelementEnd();
|
|
209
191
|
} if (rf & 2) {
|
|
210
|
-
const
|
|
211
|
-
const
|
|
192
|
+
const config_r3 = i0.ɵɵnextContext().$implicit;
|
|
193
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
212
194
|
i0.ɵɵadvance(6);
|
|
213
|
-
i0.ɵɵtextInterpolate((
|
|
195
|
+
i0.ɵɵtextInterpolate((config_r3.params == null ? null : config_r3.params.length) || 0);
|
|
214
196
|
i0.ɵɵadvance(5);
|
|
215
|
-
i0.ɵɵtextInterpolate(
|
|
197
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(config_r3.__mj_CreatedAt));
|
|
216
198
|
i0.ɵɵadvance(5);
|
|
217
|
-
i0.ɵɵtextInterpolate(
|
|
199
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(config_r3.__mj_UpdatedAt));
|
|
218
200
|
i0.ɵɵadvance(6);
|
|
219
|
-
i0.ɵɵconditional(
|
|
201
|
+
i0.ɵɵconditional(config_r3.compressionPrompt ? 22 : 23);
|
|
220
202
|
i0.ɵɵadvance(2);
|
|
221
|
-
i0.ɵɵconditional(
|
|
203
|
+
i0.ɵɵconditional(config_r3.summarizationPrompt ? 24 : 25);
|
|
222
204
|
i0.ɵɵadvance(2);
|
|
223
|
-
i0.ɵɵconditional(
|
|
205
|
+
i0.ɵɵconditional(config_r3.params && config_r3.params.length > 0 ? 26 : 27);
|
|
224
206
|
} }
|
|
225
|
-
function
|
|
226
|
-
const
|
|
227
|
-
i0.ɵɵelementStart(0, "div",
|
|
228
|
-
i0.ɵɵlistener("click", function
|
|
229
|
-
i0.ɵɵelementStart(2, "div",
|
|
230
|
-
i0.ɵɵelement(4, "i",
|
|
207
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
208
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
209
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "div", 24);
|
|
210
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Template_div_click_1_listener() { const config_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleExpanded(config_r3)); });
|
|
211
|
+
i0.ɵɵelementStart(2, "div", 25)(3, "div", 26);
|
|
212
|
+
i0.ɵɵelement(4, "i", 19);
|
|
231
213
|
i0.ɵɵelementEnd();
|
|
232
|
-
i0.ɵɵelementStart(5, "div",
|
|
214
|
+
i0.ɵɵelementStart(5, "div", 27)(6, "h4", 28);
|
|
233
215
|
i0.ɵɵtext(7);
|
|
234
216
|
i0.ɵɵelementEnd();
|
|
235
|
-
i0.ɵɵelementStart(8, "div",
|
|
236
|
-
i0.ɵɵconditionalCreate(9,
|
|
237
|
-
i0.ɵɵelementStart(10, "span",
|
|
217
|
+
i0.ɵɵelementStart(8, "div", 29);
|
|
218
|
+
i0.ɵɵconditionalCreate(9, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_9_Template, 3, 0, "span", 30);
|
|
219
|
+
i0.ɵɵelementStart(10, "span", 31);
|
|
238
220
|
i0.ɵɵelement(11, "i");
|
|
239
221
|
i0.ɵɵtext(12);
|
|
240
222
|
i0.ɵɵelementEnd()()()();
|
|
241
|
-
i0.ɵɵelement(13, "i",
|
|
223
|
+
i0.ɵɵelement(13, "i", 32);
|
|
242
224
|
i0.ɵɵelementEnd();
|
|
243
|
-
i0.ɵɵelementStart(14, "div",
|
|
244
|
-
i0.ɵɵconditionalCreate(15,
|
|
245
|
-
i0.ɵɵconditionalCreate(17,
|
|
225
|
+
i0.ɵɵelementStart(14, "div", 33);
|
|
226
|
+
i0.ɵɵconditionalCreate(15, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_15_Template, 2, 1, "p", 34)(16, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_16_Template, 2, 0, "p", 35);
|
|
227
|
+
i0.ɵɵconditionalCreate(17, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Conditional_17_Template, 28, 6, "div", 36);
|
|
246
228
|
i0.ɵɵelementEnd();
|
|
247
|
-
i0.ɵɵelementStart(18, "div",
|
|
248
|
-
i0.ɵɵlistener("click", function
|
|
249
|
-
i0.ɵɵelementStart(19, "button",
|
|
250
|
-
i0.ɵɵlistener("click", function
|
|
251
|
-
i0.ɵɵelement(20, "i",
|
|
229
|
+
i0.ɵɵelementStart(18, "div", 37);
|
|
230
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Template_div_click_18_listener($event) { i0.ɵɵrestoreView(_r2); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
231
|
+
i0.ɵɵelementStart(19, "button", 38);
|
|
232
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Template_button_click_19_listener($event) { const config_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.showConfigDetails(config_r3, $event)); });
|
|
233
|
+
i0.ɵɵelement(20, "i", 39);
|
|
252
234
|
i0.ɵɵtext(21, " Details ");
|
|
253
235
|
i0.ɵɵelementEnd();
|
|
254
|
-
i0.ɵɵelementStart(22, "button",
|
|
255
|
-
i0.ɵɵlistener("click", function
|
|
256
|
-
i0.ɵɵelement(23, "i",
|
|
236
|
+
i0.ɵɵelementStart(22, "button", 40);
|
|
237
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Template_button_click_22_listener() { const config_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.onOpenConfiguration(config_r3)); });
|
|
238
|
+
i0.ɵɵelement(23, "i", 41);
|
|
257
239
|
i0.ɵɵtext(24, " Configure ");
|
|
258
240
|
i0.ɵɵelementEnd()()();
|
|
259
241
|
} if (rf & 2) {
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
i0.ɵɵclassProp("expanded",
|
|
242
|
+
const config_r3 = ctx.$implicit;
|
|
243
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
244
|
+
i0.ɵɵclassProp("expanded", config_r3.isExpanded);
|
|
263
245
|
i0.ɵɵadvance(7);
|
|
264
|
-
i0.ɵɵtextInterpolate(
|
|
246
|
+
i0.ɵɵtextInterpolate(config_r3.Name);
|
|
265
247
|
i0.ɵɵadvance(2);
|
|
266
|
-
i0.ɵɵconditional(
|
|
248
|
+
i0.ɵɵconditional(config_r3.IsDefault ? 9 : -1);
|
|
267
249
|
i0.ɵɵadvance();
|
|
268
|
-
i0.ɵɵproperty("ngClass",
|
|
250
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getStatusClass(config_r3.Status));
|
|
269
251
|
i0.ɵɵadvance();
|
|
270
|
-
i0.ɵɵclassMap(
|
|
252
|
+
i0.ɵɵclassMap(ctx_r0.getStatusIcon(config_r3.Status));
|
|
271
253
|
i0.ɵɵadvance();
|
|
272
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
254
|
+
i0.ɵɵtextInterpolate1(" ", config_r3.Status, " ");
|
|
273
255
|
i0.ɵɵadvance();
|
|
274
|
-
i0.ɵɵclassProp("rotated",
|
|
256
|
+
i0.ɵɵclassProp("rotated", config_r3.isExpanded);
|
|
275
257
|
i0.ɵɵadvance(2);
|
|
276
|
-
i0.ɵɵconditional(
|
|
258
|
+
i0.ɵɵconditional(config_r3.Description ? 15 : 16);
|
|
277
259
|
i0.ɵɵadvance(2);
|
|
278
|
-
i0.ɵɵconditional(
|
|
260
|
+
i0.ɵɵconditional(config_r3.isExpanded ? 17 : -1);
|
|
279
261
|
} }
|
|
280
|
-
function
|
|
281
|
-
i0.ɵɵelementStart(0, "div",
|
|
282
|
-
i0.ɵɵrepeaterCreate(1,
|
|
262
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
263
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
264
|
+
i0.ɵɵrepeaterCreate(1, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_For_2_Template, 25, 12, "div", 22, _forTrack0);
|
|
283
265
|
i0.ɵɵelementEnd();
|
|
284
266
|
} if (rf & 2) {
|
|
285
|
-
const
|
|
267
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
286
268
|
i0.ɵɵadvance();
|
|
287
|
-
i0.ɵɵrepeater(
|
|
269
|
+
i0.ɵɵrepeater(ctx_r0.filteredConfigurations);
|
|
288
270
|
} }
|
|
289
|
-
function
|
|
290
|
-
i0.ɵɵelementStart(0, "span",
|
|
291
|
-
i0.ɵɵelement(1, "i",
|
|
271
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
272
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
273
|
+
i0.ɵɵelement(1, "i", 42);
|
|
292
274
|
i0.ɵɵtext(2, " Default ");
|
|
293
275
|
i0.ɵɵelementEnd();
|
|
294
276
|
} }
|
|
295
|
-
function
|
|
296
|
-
i0.ɵɵelementStart(0, "div",
|
|
277
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
278
|
+
i0.ɵɵelementStart(0, "div", 82);
|
|
297
279
|
i0.ɵɵtext(1);
|
|
298
280
|
i0.ɵɵelementEnd();
|
|
299
281
|
} if (rf & 2) {
|
|
300
|
-
const
|
|
282
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
301
283
|
i0.ɵɵadvance();
|
|
302
|
-
i0.ɵɵtextInterpolate(
|
|
284
|
+
i0.ɵɵtextInterpolate(config_r10.Description);
|
|
303
285
|
} }
|
|
304
|
-
function
|
|
305
|
-
const
|
|
306
|
-
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div",
|
|
307
|
-
i0.ɵɵelement(4, "i",
|
|
286
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
287
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
288
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 78)(3, "div", 79);
|
|
289
|
+
i0.ɵɵelement(4, "i", 19);
|
|
308
290
|
i0.ɵɵelementEnd();
|
|
309
|
-
i0.ɵɵelementStart(5, "div")(6, "div",
|
|
291
|
+
i0.ɵɵelementStart(5, "div")(6, "div", 80);
|
|
310
292
|
i0.ɵɵtext(7);
|
|
311
|
-
i0.ɵɵconditionalCreate(8,
|
|
293
|
+
i0.ɵɵconditionalCreate(8, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Conditional_8_Template, 3, 0, "span", 81);
|
|
312
294
|
i0.ɵɵelementEnd();
|
|
313
|
-
i0.ɵɵconditionalCreate(9,
|
|
295
|
+
i0.ɵɵconditionalCreate(9, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Conditional_9_Template, 2, 1, "div", 82);
|
|
314
296
|
i0.ɵɵelementEnd()()();
|
|
315
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
297
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 31);
|
|
316
298
|
i0.ɵɵelement(12, "i");
|
|
317
299
|
i0.ɵɵtext(13);
|
|
318
300
|
i0.ɵɵelementEnd()();
|
|
@@ -322,291 +304,291 @@ function SystemConfigurationComponent_Conditional_28_Conditional_1_Conditional_1
|
|
|
322
304
|
i0.ɵɵelementStart(16, "td");
|
|
323
305
|
i0.ɵɵtext(17);
|
|
324
306
|
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵelementStart(18, "td")(19, "div",
|
|
326
|
-
i0.ɵɵlistener("click", function
|
|
327
|
-
i0.ɵɵelement(21, "i",
|
|
307
|
+
i0.ɵɵelementStart(18, "td")(19, "div", 83)(20, "button", 84);
|
|
308
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Template_button_click_20_listener() { const config_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.showConfigDetails(config_r10)); });
|
|
309
|
+
i0.ɵɵelement(21, "i", 39);
|
|
328
310
|
i0.ɵɵelementEnd();
|
|
329
|
-
i0.ɵɵelementStart(22, "button",
|
|
330
|
-
i0.ɵɵlistener("click", function
|
|
331
|
-
i0.ɵɵelement(23, "i",
|
|
311
|
+
i0.ɵɵelementStart(22, "button", 85);
|
|
312
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Template_button_click_22_listener() { const config_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.onOpenConfiguration(config_r10)); });
|
|
313
|
+
i0.ɵɵelement(23, "i", 41);
|
|
332
314
|
i0.ɵɵelementEnd()()()();
|
|
333
315
|
} if (rf & 2) {
|
|
334
|
-
const
|
|
335
|
-
const
|
|
316
|
+
const config_r10 = ctx.$implicit;
|
|
317
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
336
318
|
i0.ɵɵadvance(7);
|
|
337
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
319
|
+
i0.ɵɵtextInterpolate1(" ", config_r10.Name, " ");
|
|
338
320
|
i0.ɵɵadvance();
|
|
339
|
-
i0.ɵɵconditional(
|
|
321
|
+
i0.ɵɵconditional(config_r10.IsDefault ? 8 : -1);
|
|
340
322
|
i0.ɵɵadvance();
|
|
341
|
-
i0.ɵɵconditional(
|
|
323
|
+
i0.ɵɵconditional(config_r10.Description ? 9 : -1);
|
|
342
324
|
i0.ɵɵadvance(2);
|
|
343
|
-
i0.ɵɵproperty("ngClass",
|
|
325
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getStatusClass(config_r10.Status));
|
|
344
326
|
i0.ɵɵadvance();
|
|
345
|
-
i0.ɵɵclassMap(
|
|
327
|
+
i0.ɵɵclassMap(ctx_r0.getStatusIcon(config_r10.Status));
|
|
346
328
|
i0.ɵɵadvance();
|
|
347
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
329
|
+
i0.ɵɵtextInterpolate1(" ", config_r10.Status, " ");
|
|
348
330
|
i0.ɵɵadvance(2);
|
|
349
|
-
i0.ɵɵtextInterpolate((
|
|
331
|
+
i0.ɵɵtextInterpolate((config_r10.params == null ? null : config_r10.params.length) || 0);
|
|
350
332
|
i0.ɵɵadvance(2);
|
|
351
|
-
i0.ɵɵtextInterpolate(
|
|
333
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(config_r10.__mj_UpdatedAt));
|
|
352
334
|
} }
|
|
353
|
-
function
|
|
354
|
-
const
|
|
355
|
-
i0.ɵɵelementStart(0, "div",
|
|
356
|
-
i0.ɵɵlistener("click", function
|
|
357
|
-
i0.ɵɵelementStart(5, "span",
|
|
335
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
336
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
337
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "table", 74)(2, "thead")(3, "tr")(4, "th", 75);
|
|
338
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_Template_th_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.sortBy("Name")); });
|
|
339
|
+
i0.ɵɵelementStart(5, "span", 76);
|
|
358
340
|
i0.ɵɵtext(6, " Configuration ");
|
|
359
|
-
i0.ɵɵelement(7, "i",
|
|
341
|
+
i0.ɵɵelement(7, "i", 77);
|
|
360
342
|
i0.ɵɵelementEnd()();
|
|
361
|
-
i0.ɵɵelementStart(8, "th",
|
|
362
|
-
i0.ɵɵlistener("click", function
|
|
363
|
-
i0.ɵɵelementStart(9, "span",
|
|
343
|
+
i0.ɵɵelementStart(8, "th", 75);
|
|
344
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_Template_th_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.sortBy("Status")); });
|
|
345
|
+
i0.ɵɵelementStart(9, "span", 76);
|
|
364
346
|
i0.ɵɵtext(10, " Status ");
|
|
365
|
-
i0.ɵɵelement(11, "i",
|
|
347
|
+
i0.ɵɵelement(11, "i", 77);
|
|
366
348
|
i0.ɵɵelementEnd()();
|
|
367
|
-
i0.ɵɵelementStart(12, "th",
|
|
368
|
-
i0.ɵɵlistener("click", function
|
|
369
|
-
i0.ɵɵelementStart(13, "span",
|
|
349
|
+
i0.ɵɵelementStart(12, "th", 75);
|
|
350
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_Template_th_click_12_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.sortBy("Parameters")); });
|
|
351
|
+
i0.ɵɵelementStart(13, "span", 76);
|
|
370
352
|
i0.ɵɵtext(14, " Parameters ");
|
|
371
|
-
i0.ɵɵelement(15, "i",
|
|
353
|
+
i0.ɵɵelement(15, "i", 77);
|
|
372
354
|
i0.ɵɵelementEnd()();
|
|
373
|
-
i0.ɵɵelementStart(16, "th",
|
|
374
|
-
i0.ɵɵlistener("click", function
|
|
375
|
-
i0.ɵɵelementStart(17, "span",
|
|
355
|
+
i0.ɵɵelementStart(16, "th", 75);
|
|
356
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_Template_th_click_16_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.sortBy("Updated")); });
|
|
357
|
+
i0.ɵɵelementStart(17, "span", 76);
|
|
376
358
|
i0.ɵɵtext(18, " Updated ");
|
|
377
|
-
i0.ɵɵelement(19, "i",
|
|
359
|
+
i0.ɵɵelement(19, "i", 77);
|
|
378
360
|
i0.ɵɵelementEnd()();
|
|
379
361
|
i0.ɵɵelementStart(20, "th");
|
|
380
362
|
i0.ɵɵtext(21, "Actions");
|
|
381
363
|
i0.ɵɵelementEnd()()();
|
|
382
364
|
i0.ɵɵelementStart(22, "tbody");
|
|
383
|
-
i0.ɵɵrepeaterCreate(23,
|
|
365
|
+
i0.ɵɵrepeaterCreate(23, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_For_24_Template, 24, 9, "tr", null, _forTrack0);
|
|
384
366
|
i0.ɵɵelementEnd()()();
|
|
385
367
|
} if (rf & 2) {
|
|
386
|
-
const
|
|
368
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
387
369
|
i0.ɵɵadvance(4);
|
|
388
|
-
i0.ɵɵclassProp("sorted",
|
|
370
|
+
i0.ɵɵclassProp("sorted", ctx_r0.sortColumn === "Name")("desc", ctx_r0.sortColumn === "Name" && ctx_r0.sortDirection === "desc");
|
|
389
371
|
i0.ɵɵadvance(4);
|
|
390
|
-
i0.ɵɵclassProp("sorted",
|
|
372
|
+
i0.ɵɵclassProp("sorted", ctx_r0.sortColumn === "Status")("desc", ctx_r0.sortColumn === "Status" && ctx_r0.sortDirection === "desc");
|
|
391
373
|
i0.ɵɵadvance(4);
|
|
392
|
-
i0.ɵɵclassProp("sorted",
|
|
374
|
+
i0.ɵɵclassProp("sorted", ctx_r0.sortColumn === "Parameters")("desc", ctx_r0.sortColumn === "Parameters" && ctx_r0.sortDirection === "desc");
|
|
393
375
|
i0.ɵɵadvance(4);
|
|
394
|
-
i0.ɵɵclassProp("sorted",
|
|
376
|
+
i0.ɵɵclassProp("sorted", ctx_r0.sortColumn === "Updated")("desc", ctx_r0.sortColumn === "Updated" && ctx_r0.sortDirection === "desc");
|
|
395
377
|
i0.ɵɵadvance(7);
|
|
396
|
-
i0.ɵɵrepeater(
|
|
378
|
+
i0.ɵɵrepeater(ctx_r0.filteredConfigurations);
|
|
397
379
|
} }
|
|
398
|
-
function
|
|
399
|
-
i0.ɵɵconditionalCreate(0,
|
|
400
|
-
i0.ɵɵconditionalCreate(1,
|
|
380
|
+
function SystemConfigurationComponent_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
381
|
+
i0.ɵɵconditionalCreate(0, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_0_Template, 3, 0, "div", 20);
|
|
382
|
+
i0.ɵɵconditionalCreate(1, SystemConfigurationComponent_Conditional_14_Conditional_1_Conditional_1_Template, 25, 16, "div", 21);
|
|
401
383
|
} if (rf & 2) {
|
|
402
|
-
const
|
|
403
|
-
i0.ɵɵconditional(
|
|
384
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
385
|
+
i0.ɵɵconditional(ctx_r0.viewMode === "grid" ? 0 : -1);
|
|
404
386
|
i0.ɵɵadvance();
|
|
405
|
-
i0.ɵɵconditional(
|
|
387
|
+
i0.ɵɵconditional(ctx_r0.viewMode === "list" ? 1 : -1);
|
|
406
388
|
} }
|
|
407
|
-
function
|
|
408
|
-
i0.ɵɵconditionalCreate(0,
|
|
389
|
+
function SystemConfigurationComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
390
|
+
i0.ɵɵconditionalCreate(0, SystemConfigurationComponent_Conditional_14_Conditional_0_Template, 6, 0, "div", 18)(1, SystemConfigurationComponent_Conditional_14_Conditional_1_Template, 2, 2);
|
|
409
391
|
} if (rf & 2) {
|
|
410
|
-
const
|
|
411
|
-
i0.ɵɵconditional(
|
|
392
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
393
|
+
i0.ɵɵconditional(ctx_r0.filteredConfigurations.length === 0 ? 0 : 1);
|
|
412
394
|
} }
|
|
413
|
-
function
|
|
414
|
-
const
|
|
415
|
-
i0.ɵɵelementStart(0, "div",
|
|
416
|
-
i0.ɵɵlistener("click", function
|
|
395
|
+
function SystemConfigurationComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
396
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
397
|
+
i0.ɵɵelementStart(0, "div", 86);
|
|
398
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_15_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeDetailPanel()); });
|
|
417
399
|
i0.ɵɵelementEnd();
|
|
418
400
|
} }
|
|
419
|
-
function
|
|
420
|
-
i0.ɵɵelementStart(0, "span",
|
|
421
|
-
i0.ɵɵelement(1, "i",
|
|
401
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
402
|
+
i0.ɵɵelementStart(0, "span", 97);
|
|
403
|
+
i0.ɵɵelement(1, "i", 42);
|
|
422
404
|
i0.ɵɵtext(2, " Default Configuration ");
|
|
423
405
|
i0.ɵɵelementEnd();
|
|
424
406
|
} }
|
|
425
|
-
function
|
|
426
|
-
i0.ɵɵelementStart(0, "div",
|
|
427
|
-
i0.ɵɵelement(2, "i",
|
|
407
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
408
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "h4", 98);
|
|
409
|
+
i0.ɵɵelement(2, "i", 109);
|
|
428
410
|
i0.ɵɵtext(3, " Description ");
|
|
429
411
|
i0.ɵɵelementEnd();
|
|
430
|
-
i0.ɵɵelementStart(4, "p",
|
|
412
|
+
i0.ɵɵelementStart(4, "p", 110);
|
|
431
413
|
i0.ɵɵtext(5);
|
|
432
414
|
i0.ɵɵelementEnd()();
|
|
433
415
|
} if (rf & 2) {
|
|
434
|
-
const
|
|
416
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
435
417
|
i0.ɵɵadvance(5);
|
|
436
|
-
i0.ɵɵtextInterpolate(
|
|
418
|
+
i0.ɵɵtextInterpolate(ctx_r0.selectedConfig.Description);
|
|
437
419
|
} }
|
|
438
|
-
function
|
|
420
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
439
421
|
i0.ɵɵtext(0);
|
|
440
422
|
} if (rf & 2) {
|
|
441
|
-
const
|
|
442
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
423
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
424
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedConfig.compressionPrompt.Name, " ");
|
|
443
425
|
} }
|
|
444
|
-
function
|
|
445
|
-
i0.ɵɵelementStart(0, "span",
|
|
426
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
427
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
446
428
|
i0.ɵɵtext(1, "Not configured");
|
|
447
429
|
i0.ɵɵelementEnd();
|
|
448
430
|
} }
|
|
449
|
-
function
|
|
431
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
450
432
|
i0.ɵɵtext(0);
|
|
451
433
|
} if (rf & 2) {
|
|
452
|
-
const
|
|
453
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
434
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
435
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedConfig.summarizationPrompt.Name, " ");
|
|
454
436
|
} }
|
|
455
|
-
function
|
|
456
|
-
i0.ɵɵelementStart(0, "span",
|
|
437
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
438
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
457
439
|
i0.ɵɵtext(1, "Not configured");
|
|
458
440
|
i0.ɵɵelementEnd();
|
|
459
441
|
} }
|
|
460
|
-
function
|
|
461
|
-
i0.ɵɵelementStart(0, "div",
|
|
442
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_51_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
443
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "div", 67);
|
|
462
444
|
i0.ɵɵelement(2, "i");
|
|
463
|
-
i0.ɵɵelementStart(3, "span",
|
|
445
|
+
i0.ɵɵelementStart(3, "span", 70);
|
|
464
446
|
i0.ɵɵtext(4);
|
|
465
447
|
i0.ɵɵelementEnd()();
|
|
466
|
-
i0.ɵɵelementStart(5, "span",
|
|
448
|
+
i0.ɵɵelementStart(5, "span", 72);
|
|
467
449
|
i0.ɵɵtext(6);
|
|
468
450
|
i0.ɵɵelementEnd()();
|
|
469
451
|
} if (rf & 2) {
|
|
470
|
-
const
|
|
471
|
-
const
|
|
452
|
+
const param_r13 = ctx.$implicit;
|
|
453
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
472
454
|
i0.ɵɵadvance(2);
|
|
473
|
-
i0.ɵɵclassMap(
|
|
455
|
+
i0.ɵɵclassMap(ctx_r0.getParamTypeIcon(param_r13.Type));
|
|
474
456
|
i0.ɵɵadvance(2);
|
|
475
|
-
i0.ɵɵtextInterpolate(
|
|
457
|
+
i0.ɵɵtextInterpolate(param_r13.Name);
|
|
476
458
|
i0.ɵɵadvance(2);
|
|
477
|
-
i0.ɵɵtextInterpolate(
|
|
459
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatParamValue(param_r13));
|
|
478
460
|
} }
|
|
479
|
-
function
|
|
480
|
-
i0.ɵɵelementStart(0, "div",
|
|
461
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_51_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
462
|
+
i0.ɵɵelementStart(0, "div", 113);
|
|
481
463
|
i0.ɵɵtext(1);
|
|
482
464
|
i0.ɵɵelementEnd();
|
|
483
465
|
} if (rf & 2) {
|
|
484
|
-
const
|
|
466
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
485
467
|
i0.ɵɵadvance();
|
|
486
|
-
i0.ɵɵtextInterpolate1(" +",
|
|
468
|
+
i0.ɵɵtextInterpolate1(" +", ctx_r0.selectedConfig.params.length - 5, " more parameters ");
|
|
487
469
|
} }
|
|
488
|
-
function
|
|
489
|
-
i0.ɵɵelementStart(0, "div",
|
|
490
|
-
i0.ɵɵelement(2, "i",
|
|
470
|
+
function SystemConfigurationComponent_Conditional_17_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
471
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "h4", 98);
|
|
472
|
+
i0.ɵɵelement(2, "i", 63);
|
|
491
473
|
i0.ɵɵtext(3);
|
|
492
474
|
i0.ɵɵelementEnd();
|
|
493
|
-
i0.ɵɵelementStart(4, "div",
|
|
494
|
-
i0.ɵɵrepeaterCreate(5,
|
|
495
|
-
i0.ɵɵconditionalCreate(7,
|
|
475
|
+
i0.ɵɵelementStart(4, "div", 111);
|
|
476
|
+
i0.ɵɵrepeaterCreate(5, SystemConfigurationComponent_Conditional_17_Conditional_51_For_6_Template, 7, 4, "div", 112, _forTrack0);
|
|
477
|
+
i0.ɵɵconditionalCreate(7, SystemConfigurationComponent_Conditional_17_Conditional_51_Conditional_7_Template, 2, 1, "div", 113);
|
|
496
478
|
i0.ɵɵelementEnd()();
|
|
497
479
|
} if (rf & 2) {
|
|
498
|
-
const
|
|
480
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
499
481
|
i0.ɵɵadvance(3);
|
|
500
|
-
i0.ɵɵtextInterpolate1(" Parameters (",
|
|
482
|
+
i0.ɵɵtextInterpolate1(" Parameters (", ctx_r0.selectedConfig.params.length, ") ");
|
|
501
483
|
i0.ɵɵadvance(2);
|
|
502
|
-
i0.ɵɵrepeater(
|
|
484
|
+
i0.ɵɵrepeater(ctx_r0.selectedConfig.params.slice(0, 5));
|
|
503
485
|
i0.ɵɵadvance(2);
|
|
504
|
-
i0.ɵɵconditional(
|
|
486
|
+
i0.ɵɵconditional(ctx_r0.selectedConfig.params.length > 5 ? 7 : -1);
|
|
505
487
|
} }
|
|
506
|
-
function
|
|
507
|
-
const
|
|
508
|
-
i0.ɵɵelementStart(0, "div",
|
|
509
|
-
i0.ɵɵelement(3, "i",
|
|
488
|
+
function SystemConfigurationComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
489
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
490
|
+
i0.ɵɵelementStart(0, "div", 87)(1, "div", 88)(2, "div", 89);
|
|
491
|
+
i0.ɵɵelement(3, "i", 19);
|
|
510
492
|
i0.ɵɵelementEnd();
|
|
511
|
-
i0.ɵɵelementStart(4, "div",
|
|
493
|
+
i0.ɵɵelementStart(4, "div", 90)(5, "h3");
|
|
512
494
|
i0.ɵɵtext(6);
|
|
513
495
|
i0.ɵɵelementEnd();
|
|
514
|
-
i0.ɵɵelementStart(7, "span",
|
|
496
|
+
i0.ɵɵelementStart(7, "span", 91);
|
|
515
497
|
i0.ɵɵtext(8, "AI Configuration");
|
|
516
498
|
i0.ɵɵelementEnd()()();
|
|
517
|
-
i0.ɵɵelementStart(9, "button",
|
|
518
|
-
i0.ɵɵlistener("click", function
|
|
519
|
-
i0.ɵɵelement(10, "i",
|
|
499
|
+
i0.ɵɵelementStart(9, "button", 92);
|
|
500
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_17_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeDetailPanel()); });
|
|
501
|
+
i0.ɵɵelement(10, "i", 93);
|
|
520
502
|
i0.ɵɵelementEnd()();
|
|
521
|
-
i0.ɵɵelementStart(11, "div",
|
|
503
|
+
i0.ɵɵelementStart(11, "div", 94)(12, "div", 95)(13, "div", 96)(14, "span", 31);
|
|
522
504
|
i0.ɵɵelement(15, "i");
|
|
523
505
|
i0.ɵɵtext(16);
|
|
524
506
|
i0.ɵɵelementEnd();
|
|
525
|
-
i0.ɵɵconditionalCreate(17,
|
|
507
|
+
i0.ɵɵconditionalCreate(17, SystemConfigurationComponent_Conditional_17_Conditional_17_Template, 3, 0, "span", 97);
|
|
526
508
|
i0.ɵɵelementEnd()();
|
|
527
|
-
i0.ɵɵconditionalCreate(18,
|
|
528
|
-
i0.ɵɵelementStart(19, "div",
|
|
529
|
-
i0.ɵɵelement(21, "i",
|
|
509
|
+
i0.ɵɵconditionalCreate(18, SystemConfigurationComponent_Conditional_17_Conditional_18_Template, 6, 1, "div", 95);
|
|
510
|
+
i0.ɵɵelementStart(19, "div", 95)(20, "h4", 98);
|
|
511
|
+
i0.ɵɵelement(21, "i", 99);
|
|
530
512
|
i0.ɵɵtext(22, " Overview ");
|
|
531
513
|
i0.ɵɵelementEnd();
|
|
532
|
-
i0.ɵɵelementStart(23, "div",
|
|
514
|
+
i0.ɵɵelementStart(23, "div", 100)(24, "div", 101)(25, "span", 102);
|
|
533
515
|
i0.ɵɵtext(26, "Parameters");
|
|
534
516
|
i0.ɵɵelementEnd();
|
|
535
|
-
i0.ɵɵelementStart(27, "span",
|
|
517
|
+
i0.ɵɵelementStart(27, "span", 103);
|
|
536
518
|
i0.ɵɵtext(28);
|
|
537
519
|
i0.ɵɵelementEnd()();
|
|
538
|
-
i0.ɵɵelementStart(29, "div",
|
|
520
|
+
i0.ɵɵelementStart(29, "div", 101)(30, "span", 102);
|
|
539
521
|
i0.ɵɵtext(31, "Status");
|
|
540
522
|
i0.ɵɵelementEnd();
|
|
541
|
-
i0.ɵɵelementStart(32, "span",
|
|
523
|
+
i0.ɵɵelementStart(32, "span", 103);
|
|
542
524
|
i0.ɵɵtext(33);
|
|
543
525
|
i0.ɵɵelementEnd()()()();
|
|
544
|
-
i0.ɵɵelementStart(34, "div",
|
|
545
|
-
i0.ɵɵelement(36, "i",
|
|
526
|
+
i0.ɵɵelementStart(34, "div", 95)(35, "h4", 98);
|
|
527
|
+
i0.ɵɵelement(36, "i", 49);
|
|
546
528
|
i0.ɵɵtext(37, " Linked Prompts ");
|
|
547
529
|
i0.ɵɵelementEnd();
|
|
548
|
-
i0.ɵɵelementStart(38, "div",
|
|
530
|
+
i0.ɵɵelementStart(38, "div", 104)(39, "div", 101)(40, "span", 102);
|
|
549
531
|
i0.ɵɵtext(41, "Context Compression");
|
|
550
532
|
i0.ɵɵelementEnd();
|
|
551
|
-
i0.ɵɵelementStart(42, "span",
|
|
552
|
-
i0.ɵɵconditionalCreate(43,
|
|
533
|
+
i0.ɵɵelementStart(42, "span", 103);
|
|
534
|
+
i0.ɵɵconditionalCreate(43, SystemConfigurationComponent_Conditional_17_Conditional_43_Template, 1, 1)(44, SystemConfigurationComponent_Conditional_17_Conditional_44_Template, 2, 0, "span", 105);
|
|
553
535
|
i0.ɵɵelementEnd()();
|
|
554
|
-
i0.ɵɵelementStart(45, "div",
|
|
536
|
+
i0.ɵɵelementStart(45, "div", 101)(46, "span", 102);
|
|
555
537
|
i0.ɵɵtext(47, "Context Summarization");
|
|
556
538
|
i0.ɵɵelementEnd();
|
|
557
|
-
i0.ɵɵelementStart(48, "span",
|
|
558
|
-
i0.ɵɵconditionalCreate(49,
|
|
539
|
+
i0.ɵɵelementStart(48, "span", 103);
|
|
540
|
+
i0.ɵɵconditionalCreate(49, SystemConfigurationComponent_Conditional_17_Conditional_49_Template, 1, 1)(50, SystemConfigurationComponent_Conditional_17_Conditional_50_Template, 2, 0, "span", 105);
|
|
559
541
|
i0.ɵɵelementEnd()()()();
|
|
560
|
-
i0.ɵɵconditionalCreate(51,
|
|
561
|
-
i0.ɵɵelementStart(52, "div",
|
|
562
|
-
i0.ɵɵelement(54, "i",
|
|
542
|
+
i0.ɵɵconditionalCreate(51, SystemConfigurationComponent_Conditional_17_Conditional_51_Template, 8, 2, "div", 95);
|
|
543
|
+
i0.ɵɵelementStart(52, "div", 95)(53, "h4", 98);
|
|
544
|
+
i0.ɵɵelement(54, "i", 106);
|
|
563
545
|
i0.ɵɵtext(55, " Timestamps ");
|
|
564
546
|
i0.ɵɵelementEnd();
|
|
565
|
-
i0.ɵɵelementStart(56, "div",
|
|
547
|
+
i0.ɵɵelementStart(56, "div", 100)(57, "div", 101)(58, "span", 102);
|
|
566
548
|
i0.ɵɵtext(59, "Created");
|
|
567
549
|
i0.ɵɵelementEnd();
|
|
568
|
-
i0.ɵɵelementStart(60, "span",
|
|
550
|
+
i0.ɵɵelementStart(60, "span", 103);
|
|
569
551
|
i0.ɵɵtext(61);
|
|
570
552
|
i0.ɵɵelementEnd()();
|
|
571
|
-
i0.ɵɵelementStart(62, "div",
|
|
553
|
+
i0.ɵɵelementStart(62, "div", 101)(63, "span", 102);
|
|
572
554
|
i0.ɵɵtext(64, "Updated");
|
|
573
555
|
i0.ɵɵelementEnd();
|
|
574
|
-
i0.ɵɵelementStart(65, "span",
|
|
556
|
+
i0.ɵɵelementStart(65, "span", 103);
|
|
575
557
|
i0.ɵɵtext(66);
|
|
576
558
|
i0.ɵɵelementEnd()()()()();
|
|
577
|
-
i0.ɵɵelementStart(67, "div",
|
|
578
|
-
i0.ɵɵlistener("click", function
|
|
579
|
-
i0.ɵɵelement(69, "i",
|
|
559
|
+
i0.ɵɵelementStart(67, "div", 107)(68, "button", 108);
|
|
560
|
+
i0.ɵɵlistener("click", function SystemConfigurationComponent_Conditional_17_Template_button_click_68_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openConfigFromPanel()); });
|
|
561
|
+
i0.ɵɵelement(69, "i", 41);
|
|
580
562
|
i0.ɵɵtext(70, " Open Full Record ");
|
|
581
563
|
i0.ɵɵelementEnd()();
|
|
582
564
|
} if (rf & 2) {
|
|
583
|
-
const
|
|
565
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
584
566
|
i0.ɵɵadvance(6);
|
|
585
|
-
i0.ɵɵtextInterpolate(
|
|
567
|
+
i0.ɵɵtextInterpolate(ctx_r0.selectedConfig.Name);
|
|
586
568
|
i0.ɵɵadvance(8);
|
|
587
|
-
i0.ɵɵproperty("ngClass",
|
|
569
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getStatusClass(ctx_r0.selectedConfig.Status));
|
|
588
570
|
i0.ɵɵadvance();
|
|
589
|
-
i0.ɵɵclassMap(
|
|
571
|
+
i0.ɵɵclassMap(ctx_r0.getStatusIcon(ctx_r0.selectedConfig.Status));
|
|
590
572
|
i0.ɵɵadvance();
|
|
591
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
573
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.selectedConfig.Status, " ");
|
|
592
574
|
i0.ɵɵadvance();
|
|
593
|
-
i0.ɵɵconditional(
|
|
575
|
+
i0.ɵɵconditional(ctx_r0.selectedConfig.IsDefault ? 17 : -1);
|
|
594
576
|
i0.ɵɵadvance();
|
|
595
|
-
i0.ɵɵconditional(
|
|
577
|
+
i0.ɵɵconditional(ctx_r0.selectedConfig.Description ? 18 : -1);
|
|
596
578
|
i0.ɵɵadvance(10);
|
|
597
|
-
i0.ɵɵtextInterpolate((
|
|
579
|
+
i0.ɵɵtextInterpolate((ctx_r0.selectedConfig.params == null ? null : ctx_r0.selectedConfig.params.length) || 0);
|
|
598
580
|
i0.ɵɵadvance(5);
|
|
599
|
-
i0.ɵɵtextInterpolate(
|
|
581
|
+
i0.ɵɵtextInterpolate(ctx_r0.selectedConfig.Status);
|
|
600
582
|
i0.ɵɵadvance(10);
|
|
601
|
-
i0.ɵɵconditional(
|
|
583
|
+
i0.ɵɵconditional(ctx_r0.selectedConfig.compressionPrompt ? 43 : 44);
|
|
602
584
|
i0.ɵɵadvance(6);
|
|
603
|
-
i0.ɵɵconditional(
|
|
585
|
+
i0.ɵɵconditional(ctx_r0.selectedConfig.summarizationPrompt ? 49 : 50);
|
|
604
586
|
i0.ɵɵadvance(2);
|
|
605
|
-
i0.ɵɵconditional(
|
|
587
|
+
i0.ɵɵconditional(ctx_r0.selectedConfig.params && ctx_r0.selectedConfig.params.length > 0 ? 51 : -1);
|
|
606
588
|
i0.ɵɵadvance(10);
|
|
607
|
-
i0.ɵɵtextInterpolate(
|
|
589
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(ctx_r0.selectedConfig.__mj_CreatedAt));
|
|
608
590
|
i0.ɵɵadvance(5);
|
|
609
|
-
i0.ɵɵtextInterpolate(
|
|
591
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(ctx_r0.selectedConfig.__mj_UpdatedAt));
|
|
610
592
|
} }
|
|
611
593
|
/**
|
|
612
594
|
* AI Configuration Resource - displays AI system configuration management
|
|
@@ -713,6 +695,75 @@ let SystemConfigurationComponent = class SystemConfigurationComponent extends Ba
|
|
|
713
695
|
};
|
|
714
696
|
this.applyFilters();
|
|
715
697
|
}
|
|
698
|
+
/** View-mode options for the shared <mj-view-toggle>. */
|
|
699
|
+
configViewOptions = [
|
|
700
|
+
{ key: 'grid', icon: 'fa-solid fa-grip', title: 'Grid View' },
|
|
701
|
+
{ key: 'list', icon: 'fa-solid fa-list', title: 'List View' },
|
|
702
|
+
];
|
|
703
|
+
/** Reset only the popover filters — leave searchTerm (toolbar) untouched. */
|
|
704
|
+
resetPopoverFilters() {
|
|
705
|
+
this.currentFilters = { ...this.currentFilters, status: 'all', isDefault: 'all' };
|
|
706
|
+
this.applyFilters();
|
|
707
|
+
}
|
|
708
|
+
/** Number of active filter criteria inside the popover (excludes searchTerm — surfaced separately). */
|
|
709
|
+
get ActiveFilterCount() {
|
|
710
|
+
let n = 0;
|
|
711
|
+
if (this.currentFilters.status && this.currentFilters.status !== 'all')
|
|
712
|
+
n++;
|
|
713
|
+
if (this.currentFilters.isDefault && this.currentFilters.isDefault !== 'all')
|
|
714
|
+
n++;
|
|
715
|
+
return n;
|
|
716
|
+
}
|
|
717
|
+
/** Values record consumed by the centralized <mj-filter-panel>. */
|
|
718
|
+
get configFilterValues() {
|
|
719
|
+
return {
|
|
720
|
+
status: this.currentFilters.status,
|
|
721
|
+
isDefault: this.currentFilters.isDefault,
|
|
722
|
+
};
|
|
723
|
+
}
|
|
724
|
+
/** Field config consumed by the centralized <mj-filter-panel>. */
|
|
725
|
+
get configFilterFields() {
|
|
726
|
+
return [
|
|
727
|
+
{
|
|
728
|
+
key: 'status',
|
|
729
|
+
type: 'dropdown',
|
|
730
|
+
label: 'Status',
|
|
731
|
+
icon: 'fa-solid fa-toggle-on',
|
|
732
|
+
options: [
|
|
733
|
+
{ text: 'All Statuses', value: 'all' },
|
|
734
|
+
{ text: 'Active', value: 'Active' },
|
|
735
|
+
{ text: 'Inactive', value: 'Inactive' },
|
|
736
|
+
{ text: 'Deprecated', value: 'Deprecated' },
|
|
737
|
+
{ text: 'Preview', value: 'Preview' },
|
|
738
|
+
],
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
key: 'isDefault',
|
|
742
|
+
type: 'dropdown',
|
|
743
|
+
label: 'Default',
|
|
744
|
+
icon: 'fa-solid fa-star',
|
|
745
|
+
options: [
|
|
746
|
+
{ text: 'All Configurations', value: 'all' },
|
|
747
|
+
{ text: 'Default Only', value: 'true' },
|
|
748
|
+
{ text: 'Non-Default Only', value: 'false' },
|
|
749
|
+
],
|
|
750
|
+
},
|
|
751
|
+
];
|
|
752
|
+
}
|
|
753
|
+
/** Receive the updated values record from <mj-filter-panel> and apply it. */
|
|
754
|
+
onFilterValuesChange(values) {
|
|
755
|
+
this.currentFilters = {
|
|
756
|
+
...this.currentFilters,
|
|
757
|
+
status: values['status'] ?? 'all',
|
|
758
|
+
isDefault: values['isDefault'] ?? 'all',
|
|
759
|
+
};
|
|
760
|
+
this.applyFilters();
|
|
761
|
+
}
|
|
762
|
+
/** Update searchTerm from the toolbar search input. */
|
|
763
|
+
onSearchTermChange(value) {
|
|
764
|
+
this.currentFilters = { ...this.currentFilters, searchTerm: value ?? '' };
|
|
765
|
+
this.applyFilters();
|
|
766
|
+
}
|
|
716
767
|
applyFilters() {
|
|
717
768
|
let filtered = [...this.configurations];
|
|
718
769
|
// Apply search filter
|
|
@@ -897,71 +948,61 @@ let SystemConfigurationComponent = class SystemConfigurationComponent extends Ba
|
|
|
897
948
|
return 'fa-solid fa-sliders';
|
|
898
949
|
}
|
|
899
950
|
static ɵfac = function SystemConfigurationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SystemConfigurationComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
900
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SystemConfigurationComponent, selectors: [["app-system-configuration"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
901
|
-
i0.ɵɵelementStart(0, "
|
|
902
|
-
i0.ɵɵelement(
|
|
903
|
-
i0.ɵɵtext(5, " AI Configuration ");
|
|
904
|
-
i0.ɵɵelementEnd();
|
|
905
|
-
i0.ɵɵelementStart(6, "button", 5);
|
|
906
|
-
i0.ɵɵlistener("click", function SystemConfigurationComponent_Template_button_click_6_listener() { return ctx.toggleFilterPanel(); });
|
|
907
|
-
i0.ɵɵelement(7, "i", 6);
|
|
908
|
-
i0.ɵɵconditionalCreate(8, SystemConfigurationComponent_Conditional_8_Template, 1, 0)(9, SystemConfigurationComponent_Conditional_9_Template, 1, 0);
|
|
951
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SystemConfigurationComponent, selectors: [["app-system-configuration"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 18, consts: [["Title", "Configuration", "Icon", "fa-solid fa-cogs"], ["meta", ""], ["Label", "configurations", 3, "Count", "Total"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "KeyChange", "Options", "ActiveKey"], [3, "Clicked", "Loading"], ["toolbar", ""], ["Placeholder", "Search configurations...", 3, "ValueChange", "Value"], [3, "Flex"], [1, "loading-container"], [1, "error-container"], [1, "detail-panel-overlay"], [1, "detail-panel"], ["text", "Loading AI configurations...", "size", "large"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "empty-state"], [1, "fa-solid", "fa-sliders"], [1, "configurations-grid"], [1, "configurations-list"], [1, "config-card", 3, "expanded"], [1, "config-card"], [1, "card-header", 3, "click"], [1, "config-info"], [1, "config-icon"], [1, "config-details"], [1, "config-name"], [1, "config-meta"], [1, "default-badge"], [1, "status-badge", 3, "ngClass"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-body"], [1, "config-description"], [1, "config-description", "text-muted"], [1, "expanded-content"], [1, "card-actions", 3, "click"], ["type", "button", "title", "View Details", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-eye"], ["type", "button", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-edit"], [1, "fa-solid", "fa-star"], [1, "config-stats"], [1, "stat-item"], [1, "stat-label"], [1, "stat-value"], [1, "prompts-section"], [1, "section-title"], [1, "fa-solid", "fa-message-lines"], [1, "prompt-links"], [1, "prompt-link"], [1, "no-prompt"], [1, "params-section"], [1, "prompt-link", 3, "click"], [1, "prompt-link-info"], [1, "prompt-link-icon"], [1, "fa-solid", "fa-compress"], [1, "prompt-link-details"], [1, "prompt-link-label"], [1, "prompt-link-name"], [1, "fa-solid", "fa-arrow-right", "prompt-link-arrow"], [1, "fa-solid", "fa-file-lines"], [1, "fa-solid", "fa-gear"], [1, "params-grid"], [1, "param-item"], [1, "param-item", 3, "click"], [1, "param-info"], [1, "param-type-icon"], [1, "param-details"], [1, "param-name"], [1, "param-type"], [1, "param-value"], [1, "no-params"], [1, "configurations-table"], [3, "click"], [1, "sort-header"], [1, "fa-solid", "fa-chevron-up", "sort-icon"], [1, "config-name-cell"], [1, "config-icon-small"], [1, "config-name-text"], [1, "default-badge", 2, "margin-left", "8px"], [1, "config-description-small"], [1, "table-actions"], ["type", "button", "title", "View Details", 1, "action-btn-small", 3, "click"], ["type", "button", 1, "action-btn-small", "primary", 3, "click"], [1, "detail-panel-overlay", 3, "click"], [1, "detail-panel-header"], [1, "detail-panel-title"], [1, "detail-icon"], [1, "detail-title-info"], [1, "detail-subtitle"], [1, "detail-panel-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-panel-content"], [1, "detail-section"], [1, "detail-badges"], [1, "feature-badge", "default"], [1, "detail-section-title"], [1, "fa-solid", "fa-chart-bar"], [1, "detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "detail-grid", "single-column"], [1, "muted"], [1, "fa-solid", "fa-clock"], [1, "detail-panel-actions"], ["type", "button", 1, "detail-action-btn", "primary", 3, "click"], [1, "fa-solid", "fa-align-left"], [1, "detail-description"], [1, "detail-params-list"], [1, "detail-param-item"], [1, "params-more"]], template: function SystemConfigurationComponent_Template(rf, ctx) { if (rf & 1) {
|
|
952
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
|
|
953
|
+
i0.ɵɵelement(3, "mj-stat-badge", 2);
|
|
909
954
|
i0.ɵɵelementEnd();
|
|
910
|
-
i0.ɵɵelementStart(
|
|
911
|
-
i0.ɵɵ
|
|
955
|
+
i0.ɵɵelementStart(4, "div", 3)(5, "mj-filter-popover", 4);
|
|
956
|
+
i0.ɵɵlistener("ClearAllRequested", function SystemConfigurationComponent_Template_mj_filter_popover_ClearAllRequested_5_listener() { return ctx.resetPopoverFilters(); });
|
|
957
|
+
i0.ɵɵelementStart(6, "mj-filter-panel", 5);
|
|
958
|
+
i0.ɵɵlistener("ValuesChange", function SystemConfigurationComponent_Template_mj_filter_panel_ValuesChange_6_listener($event) { return ctx.onFilterValuesChange($event); })("Reset", function SystemConfigurationComponent_Template_mj_filter_panel_Reset_6_listener() { return ctx.resetPopoverFilters(); });
|
|
912
959
|
i0.ɵɵelementEnd()();
|
|
913
|
-
i0.ɵɵelementStart(
|
|
914
|
-
i0.ɵɵlistener("
|
|
915
|
-
i0.ɵɵelement(15, "i", 11);
|
|
960
|
+
i0.ɵɵelementStart(7, "mj-view-toggle", 6);
|
|
961
|
+
i0.ɵɵlistener("KeyChange", function SystemConfigurationComponent_Template_mj_view_toggle_KeyChange_7_listener($event) { return ctx.setViewMode($event); });
|
|
916
962
|
i0.ɵɵelementEnd();
|
|
917
|
-
i0.ɵɵelementStart(
|
|
918
|
-
i0.ɵɵlistener("
|
|
919
|
-
i0.ɵɵelement(17, "i", 13);
|
|
963
|
+
i0.ɵɵelementStart(8, "mj-refresh-button", 7);
|
|
964
|
+
i0.ɵɵlistener("Clicked", function SystemConfigurationComponent_Template_mj_refresh_button_Clicked_8_listener() { return ctx.loadData(); });
|
|
920
965
|
i0.ɵɵelementEnd()();
|
|
921
|
-
i0.ɵɵelementStart(
|
|
922
|
-
i0.ɵɵlistener("
|
|
923
|
-
i0.ɵɵelement(19, "i", 15);
|
|
924
|
-
i0.ɵɵtext(20, " Refresh ");
|
|
966
|
+
i0.ɵɵelementStart(9, "div", 8)(10, "mj-page-search", 9);
|
|
967
|
+
i0.ɵɵlistener("ValueChange", function SystemConfigurationComponent_Template_mj_page_search_ValueChange_10_listener($event) { return ctx.onSearchTermChange($event); });
|
|
925
968
|
i0.ɵɵelementEnd()()();
|
|
926
|
-
i0.ɵɵelementStart(
|
|
927
|
-
i0.ɵɵconditionalCreate(
|
|
928
|
-
i0.ɵɵ
|
|
929
|
-
i0.ɵɵconditionalCreate(
|
|
930
|
-
i0.ɵɵ
|
|
931
|
-
i0.ɵɵconditionalCreate(
|
|
932
|
-
i0.ɵɵ
|
|
933
|
-
i0.ɵɵconditionalCreate(
|
|
934
|
-
i0.ɵɵelementStart(30, "div", 23);
|
|
935
|
-
i0.ɵɵconditionalCreate(31, SystemConfigurationComponent_Conditional_31_Template, 71, 14);
|
|
969
|
+
i0.ɵɵelementStart(11, "mj-page-body", 10);
|
|
970
|
+
i0.ɵɵconditionalCreate(12, SystemConfigurationComponent_Conditional_12_Template, 2, 0, "div", 11);
|
|
971
|
+
i0.ɵɵconditionalCreate(13, SystemConfigurationComponent_Conditional_13_Template, 4, 1, "div", 12);
|
|
972
|
+
i0.ɵɵconditionalCreate(14, SystemConfigurationComponent_Conditional_14_Template, 2, 1);
|
|
973
|
+
i0.ɵɵelementEnd();
|
|
974
|
+
i0.ɵɵconditionalCreate(15, SystemConfigurationComponent_Conditional_15_Template, 1, 0, "div", 13);
|
|
975
|
+
i0.ɵɵelementStart(16, "div", 14);
|
|
976
|
+
i0.ɵɵconditionalCreate(17, SystemConfigurationComponent_Conditional_17_Template, 71, 14);
|
|
936
977
|
i0.ɵɵelementEnd()();
|
|
937
978
|
} if (rf & 2) {
|
|
938
|
-
i0.ɵɵadvance(8);
|
|
939
|
-
i0.ɵɵconditional(ctx.filterPanelVisible ? 8 : 9);
|
|
940
979
|
i0.ɵɵadvance(3);
|
|
941
|
-
i0.ɵɵ
|
|
942
|
-
i0.ɵɵadvance(3);
|
|
943
|
-
i0.ɵɵclassProp("active", ctx.viewMode === "grid");
|
|
980
|
+
i0.ɵɵproperty("Count", ctx.filteredConfigurations.length)("Total", ctx.configurations.length);
|
|
944
981
|
i0.ɵɵadvance(2);
|
|
945
|
-
i0.ɵɵ
|
|
982
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
983
|
+
i0.ɵɵadvance();
|
|
984
|
+
i0.ɵɵproperty("Fields", ctx.configFilterFields)("Values", ctx.configFilterValues);
|
|
985
|
+
i0.ɵɵadvance();
|
|
986
|
+
i0.ɵɵproperty("Options", ctx.configViewOptions)("ActiveKey", ctx.viewMode);
|
|
987
|
+
i0.ɵɵadvance();
|
|
988
|
+
i0.ɵɵproperty("Loading", ctx.isLoading);
|
|
946
989
|
i0.ɵɵadvance(2);
|
|
947
|
-
i0.ɵɵproperty("
|
|
990
|
+
i0.ɵɵproperty("Value", ctx.currentFilters.searchTerm);
|
|
948
991
|
i0.ɵɵadvance();
|
|
949
|
-
i0.ɵɵ
|
|
950
|
-
i0.ɵɵadvance(
|
|
951
|
-
i0.ɵɵconditional(ctx.
|
|
952
|
-
i0.ɵɵadvance(3);
|
|
953
|
-
i0.ɵɵconditional(ctx.isLoading ? 26 : -1);
|
|
992
|
+
i0.ɵɵproperty("Flex", true);
|
|
993
|
+
i0.ɵɵadvance();
|
|
994
|
+
i0.ɵɵconditional(ctx.isLoading ? 12 : -1);
|
|
954
995
|
i0.ɵɵadvance();
|
|
955
|
-
i0.ɵɵconditional(ctx.error && !ctx.isLoading ?
|
|
996
|
+
i0.ɵɵconditional(ctx.error && !ctx.isLoading ? 13 : -1);
|
|
956
997
|
i0.ɵɵadvance();
|
|
957
|
-
i0.ɵɵconditional(!ctx.isLoading && !ctx.error ?
|
|
998
|
+
i0.ɵɵconditional(!ctx.isLoading && !ctx.error ? 14 : -1);
|
|
958
999
|
i0.ɵɵadvance();
|
|
959
|
-
i0.ɵɵconditional(ctx.detailPanelVisible ?
|
|
1000
|
+
i0.ɵɵconditional(ctx.detailPanelVisible ? 15 : -1);
|
|
960
1001
|
i0.ɵɵadvance();
|
|
961
1002
|
i0.ɵɵclassProp("visible", ctx.detailPanelVisible);
|
|
962
1003
|
i0.ɵɵadvance();
|
|
963
|
-
i0.ɵɵconditional(ctx.selectedConfig ?
|
|
964
|
-
} }, dependencies: [i1.NgClass, i2.SplitComponent, i2.SplitAreaComponent, i3.LoadingComponent, i4.SystemConfigFilterPanelComponent], styles: ["\n\n\n\n\n\n\n.system-configuration-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n}\n\n\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n padding: 16px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n position: relative;\n z-index: 10;\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 22px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.config-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 20px;\n border: 1px solid var(--mj-border-default);\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px 14px;\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 15px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.main-splitter[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n.configurations-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 24px;\n background: transparent;\n}\n\n\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n min-height: 400px;\n}\n\n\n\n\n\n.error-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 12px;\n color: var(--mj-status-error);\n font-size: 15px;\n font-weight: 500;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 80px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 72px;\n color: var(--mj-border-strong);\n margin-bottom: 24px;\n display: block;\n opacity: 0.8;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 22px;\n font-weight: 600;\n margin: 0 0 12px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 28px;\n color: var(--mj-text-muted);\n}\n\n\n\n\n\n.configurations-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));\n gap: 24px;\n}\n\n\n\n\n\n.config-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.config-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.config-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.config-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n.config-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 12px 40px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-card.expanded[_ngcontent-%COMP%]::before {\n opacity: 1;\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n padding: 24px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid var(--mj-border-default);\n transition: background 0.2s ease;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.config-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.config-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.config-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.config-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.config-name[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: -0.02em;\n}\n\n.config-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n align-items: center;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n transition: all 0.2s ease;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-preview[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, black);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 35%, var(--mj-bg-surface));\n}\n\n\n\n.default-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-accent);\n}\n\n.default-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s ease;\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 24px 20px 24px;\n}\n\n.config-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.config-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: _ngcontent-%COMP%_slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n.config-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n\n\n.prompts-section[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n.section-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.prompt-links[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.prompt-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.prompt-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n transform: translateX(4px);\n}\n\n.prompt-link-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.prompt-link-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.prompt-link-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 2px;\n}\n\n.prompt-link-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-link-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.prompt-link[_ngcontent-%COMP%]:hover .prompt-link-arrow[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n transform: translateX(4px);\n}\n\n.no-prompt[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.param-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.param-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.param-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.param-type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.param-type-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.param-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.param-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.param-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.no-params[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n text-align: center;\n}\n\n\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.action-btn-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 80%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 60%, black);\n}\n\n.action-btn-warning[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-warning);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n.action-btn-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n}\n\n.action-btn-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n\n\n\n\n.configurations-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.configurations-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.configurations-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 14px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child {\n cursor: default;\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.configurations-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.configurations-table[_ngcontent-%COMP%] th.sorted.desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.configurations-table[_ngcontent-%COMP%] .sort-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.configurations-table[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n.configurations-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.configurations-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 0.2s ease;\n}\n\n.configurations-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.configurations-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.configurations-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.config-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.config-icon-small[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.config-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 16px;\n}\n\n.config-name-text[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n\n\n\n\n@media (max-width: 1024px) {\n .configurations-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .dashboard-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n\n .header-info[_ngcontent-%COMP%] {\n justify-content: space-between;\n flex-wrap: wrap;\n }\n\n .header-controls[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .configurations-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .config-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 20px;\n }\n\n .config-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n }\n\n .config-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\nas-split[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n\n\n\n.detail-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.25s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible[_ngcontent-%COMP%] {\n right: 0;\n}\n\n\n\n.detail-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge.default[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.feature-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-grid.single-column[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n font-weight: 500;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.detail-params-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-param-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-value[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface);\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.params-more[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 600;\n text-align: center;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n\n\n.detail-panel-actions[_ngcontent-%COMP%] {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn[_ngcontent-%COMP%] {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n@media (max-width: 520px) {\n .detail-panel[_ngcontent-%COMP%] {\n width: 100%;\n right: -100%;\n }\n\n .detail-panel.visible[_ngcontent-%COMP%] {\n right: 0;\n }\n\n .detail-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] });
|
|
1004
|
+
i0.ɵɵconditional(ctx.selectedConfig ? 17 : -1);
|
|
1005
|
+
} }, dependencies: [i1.NgClass, i2.LoadingComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJFilterPopoverComponent, i3.MJPageSearchComponent, i3.MJFilterPanelComponent, i3.MJViewToggleComponent, i3.MJStatBadgeComponent, i3.MJRefreshButtonComponent], styles: ["\n\n\n\n\n\n\n\n\n\n[_nghost-%COMP%] mj-page-body[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n\n\n\n.control-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n\n\n\n\n.main-splitter[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n min-height: 400px;\n}\n\n\n\n\n\n.error-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 12px;\n color: var(--mj-status-error);\n font-size: 15px;\n font-weight: 500;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 80px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 72px;\n color: var(--mj-border-strong);\n margin-bottom: 24px;\n display: block;\n opacity: 0.8;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 22px;\n font-weight: 600;\n margin: 0 0 12px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 28px;\n color: var(--mj-text-muted);\n}\n\n\n\n\n\n.configurations-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));\n gap: 24px;\n}\n\n\n\n\n\n.config-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.config-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.config-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.config-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n.config-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 12px 40px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-card.expanded[_ngcontent-%COMP%]::before {\n opacity: 1;\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n padding: 24px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid var(--mj-border-default);\n transition: background 0.2s ease;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.config-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.config-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.config-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.config-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.config-name[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: -0.02em;\n}\n\n.config-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n align-items: center;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n transition: all 0.2s ease;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-preview[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, black);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 35%, var(--mj-bg-surface));\n}\n\n\n\n.default-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-accent);\n}\n\n.default-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s ease;\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 24px 20px 24px;\n}\n\n.config-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.config-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: _ngcontent-%COMP%_slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n.config-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n\n\n.prompts-section[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n.section-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.prompt-links[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.prompt-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.prompt-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n transform: translateX(4px);\n}\n\n.prompt-link-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.prompt-link-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.prompt-link-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 2px;\n}\n\n.prompt-link-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-link-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.prompt-link[_ngcontent-%COMP%]:hover .prompt-link-arrow[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n transform: translateX(4px);\n}\n\n.no-prompt[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.param-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.param-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.param-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.param-type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.param-type-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.param-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.param-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.param-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.no-params[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n text-align: center;\n}\n\n\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.action-btn-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 80%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 60%, black);\n}\n\n.action-btn-warning[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-warning);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n.action-btn-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n}\n\n.action-btn-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n\n\n\n\n.configurations-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.configurations-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.configurations-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 14px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child {\n cursor: default;\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.configurations-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.configurations-table[_ngcontent-%COMP%] th.sorted.desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.configurations-table[_ngcontent-%COMP%] .sort-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.configurations-table[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.configurations-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n.configurations-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.configurations-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 0.2s ease;\n}\n\n.configurations-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.configurations-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.configurations-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.config-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.config-icon-small[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.config-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 16px;\n}\n\n.config-name-text[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n\n\n\n\n@media (max-width: 1024px) {\n .configurations-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .dashboard-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n\n .header-info[_ngcontent-%COMP%] {\n justify-content: space-between;\n flex-wrap: wrap;\n }\n\n .header-controls[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .configurations-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .config-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 20px;\n }\n\n .config-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n }\n\n .config-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\nas-split[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n\n\n\n.detail-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.25s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible[_ngcontent-%COMP%] {\n right: 0;\n}\n\n\n\n.detail-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge.default[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.feature-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-grid.single-column[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n font-weight: 500;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.detail-params-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-param-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.detail-param-item[_ngcontent-%COMP%] .param-value[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface);\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.params-more[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 600;\n text-align: center;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n\n\n.detail-panel-actions[_ngcontent-%COMP%] {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn[_ngcontent-%COMP%] {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n@media (max-width: 520px) {\n .detail-panel[_ngcontent-%COMP%] {\n width: 100%;\n right: -100%;\n }\n\n .detail-panel.visible[_ngcontent-%COMP%] {\n right: 0;\n }\n\n .detail-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] });
|
|
965
1006
|
};
|
|
966
1007
|
SystemConfigurationComponent = __decorate([
|
|
967
1008
|
RegisterClass(BaseResourceComponent, 'AIConfigResource')
|
|
@@ -969,7 +1010,7 @@ SystemConfigurationComponent = __decorate([
|
|
|
969
1010
|
export { SystemConfigurationComponent };
|
|
970
1011
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SystemConfigurationComponent, [{
|
|
971
1012
|
type: Component,
|
|
972
|
-
args: [{ standalone: false, selector: 'app-system-configuration', template: "<div class=\"system-configuration-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n AI Configuration\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"config-count\">\n {{ filteredConfigurations.length }} of {{ configurations.length }} configurations\n </span>\n </div>\n\n <div class=\"header-controls\">\n <!-- View Toggle -->\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"control-btn\"\n (click)=\"loadData()\"\n [disabled]=\"isLoading\"\n title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <as-split direction=\"horizontal\" class=\"main-splitter\">\n\n <!-- Filter Panel (Left) -->\n @if (filterPanelVisible) {\n <as-split-area [size]=\"20\" [minSize]=\"15\" [maxSize]=\"30\">\n <mj-system-config-filter-panel\n [configurations]=\"configurations\"\n [filteredConfigurations]=\"filteredConfigurations\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-system-config-filter-panel>\n </as-split-area>\n }\n\n <!-- Configurations List Panel -->\n <as-split-area>\n <div class=\"configurations-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading AI configurations...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !isLoading) {\n <div class=\"error-container\">\n <p class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </p>\n </div>\n }\n\n <!-- Configurations Content -->\n @if (!isLoading && !error) {\n @if (filteredConfigurations.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders\"></i>\n <h3>No configurations found</h3>\n <p>No AI configurations match your current filters. Try adjusting your search criteria or create a new configuration.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"configurations-grid\">\n @for (config of filteredConfigurations; track config.ID) {\n <div class=\"config-card\" [class.expanded]=\"config.isExpanded\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleExpanded(config)\">\n <div class=\"config-info\">\n <div class=\"config-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"config-details\">\n <h4 class=\"config-name\">{{ config.Name }}</h4>\n <div class=\"config-meta\">\n @if (config.IsDefault) {\n <span class=\"default-badge\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"config.isExpanded\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (config.Description) {\n <p class=\"config-description\">{{ config.Description }}</p>\n } @else {\n <p class=\"config-description text-muted\">No description provided</p>\n }\n\n <!-- Expanded Content -->\n @if (config.isExpanded) {\n <div class=\"expanded-content\">\n <!-- Stats Grid -->\n <div class=\"config-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parameters</span>\n <span class=\"stat-value\">{{ config.params?.length || 0 }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Created</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Updated</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"prompts-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h5>\n <div class=\"prompt-links\">\n @if (config.compressionPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextCompressionID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-compress\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Compression</span>\n <span class=\"prompt-link-name\">{{ config.compressionPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No compression prompt configured</div>\n }\n\n @if (config.summarizationPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextSummarizationID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-file-lines\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Summarization</span>\n <span class=\"prompt-link-name\">{{ config.summarizationPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No summarization prompt configured</div>\n }\n </div>\n </div>\n\n <!-- Configuration Parameters -->\n @if (config.params && config.params.length > 0) {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"params-grid\">\n @for (param of config.params; track param.ID) {\n <div class=\"param-item\" (click)=\"onOpenParam(param); $event.stopPropagation()\">\n <div class=\"param-info\">\n <div class=\"param-type-icon\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n </div>\n <div class=\"param-details\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n </div>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"no-params\">No parameters configured</div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showConfigDetails(config, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n Configure\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"configurations-list\">\n <table class=\"configurations-table\">\n <thead>\n <tr>\n <th (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Configuration\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Parameters')\"\n [class.sorted]=\"sortColumn === 'Parameters'\"\n [class.desc]=\"sortColumn === 'Parameters' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Parameters\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Updated')\"\n [class.sorted]=\"sortColumn === 'Updated'\"\n [class.desc]=\"sortColumn === 'Updated' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Updated\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (config of filteredConfigurations; track config.ID) {\n <tr>\n <td>\n <div class=\"config-name-cell\">\n <div class=\"config-icon-small\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div>\n <div class=\"config-name-text\">\n {{ config.Name }}\n @if (config.IsDefault) {\n <span class=\"default-badge\" style=\"margin-left: 8px;\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n </div>\n @if (config.Description) {\n <div class=\"config-description-small\">{{ config.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </td>\n <td>{{ config.params?.length || 0 }}</td>\n <td>{{ formatDate(config.__mj_UpdatedAt) }}</td>\n <td>\n <div class=\"table-actions\">\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showConfigDetails(config)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedConfig) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedConfig.Name }}</h3>\n <span class=\"detail-subtitle\">AI Configuration</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(selectedConfig.Status)\">\n <i [class]=\"getStatusIcon(selectedConfig.Status)\"></i>\n {{ selectedConfig.Status }}\n </span>\n @if (selectedConfig.IsDefault) {\n <span class=\"feature-badge default\">\n <i class=\"fa-solid fa-star\"></i>\n Default Configuration\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedConfig.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedConfig.Description }}</p>\n </div>\n }\n\n <!-- Configuration Stats -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n Overview\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parameters</span>\n <span class=\"detail-value\">{{ selectedConfig.params?.length || 0 }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\">{{ selectedConfig.Status }}</span>\n </div>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h4>\n <div class=\"detail-grid single-column\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedConfig.compressionPrompt) {\n {{ selectedConfig.compressionPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Summarization</span>\n <span class=\"detail-value\">\n @if (selectedConfig.summarizationPrompt) {\n {{ selectedConfig.summarizationPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n </div>\n </div>\n\n <!-- Parameters Preview -->\n @if (selectedConfig.params && selectedConfig.params.length > 0) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Parameters ({{ selectedConfig.params.length }})\n </h4>\n <div class=\"detail-params-list\">\n @for (param of selectedConfig.params.slice(0, 5); track param.ID) {\n <div class=\"detail-param-item\">\n <div class=\"param-info\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n <span class=\"param-name\">{{ param.Name }}</span>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n @if (selectedConfig.params.length > 5) {\n <div class=\"params-more\">\n +{{ selectedConfig.params.length - 5 }} more parameters\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openConfigFromPanel()\">\n <i class=\"fa-solid fa-edit\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n", styles: ["/* AI Configuration Dashboard - World-Class Design */\n\n/* ============================================================================\n CONTAINER & LAYOUT\n ============================================================================ */\n.system-configuration-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n}\n\n/* ============================================================================\n HEADER\n ============================================================================ */\n.dashboard-header {\n background: var(--mj-bg-surface);\n padding: 16px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n position: relative;\n z-index: 10;\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.dashboard-title i {\n color: var(--mj-brand-primary);\n font-size: 22px;\n}\n\n.filter-toggle-btn {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.filter-toggle-btn:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.filter-toggle-btn i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.config-count {\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 20px;\n border: 1px solid var(--mj-border-default);\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 8px 14px;\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 15px;\n}\n\n.view-btn:hover {\n color: var(--mj-text-secondary);\n}\n\n.view-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn i {\n font-size: 14px;\n}\n\n.control-btn.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.control-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n/* ============================================================================\n MAIN CONTENT AREA\n ============================================================================ */\n.main-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.main-splitter {\n flex: 1;\n min-height: 0;\n}\n\n.configurations-content {\n height: 100%;\n overflow-y: auto;\n padding: 24px;\n background: transparent;\n}\n\n/* ============================================================================\n LOADING STATE\n ============================================================================ */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n min-height: 400px;\n}\n\n/* ============================================================================\n ERROR STATE\n ============================================================================ */\n.error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.error-message {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 12px;\n color: var(--mj-status-error);\n font-size: 15px;\n font-weight: 500;\n}\n\n.error-message i {\n font-size: 20px;\n}\n\n/* ============================================================================\n EMPTY STATE\n ============================================================================ */\n.empty-state {\n text-align: center;\n padding: 80px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 72px;\n color: var(--mj-border-strong);\n margin-bottom: 24px;\n display: block;\n opacity: 0.8;\n}\n\n.empty-state h3 {\n color: var(--mj-text-secondary);\n font-size: 22px;\n font-weight: 600;\n margin: 0 0 12px 0;\n}\n\n.empty-state p {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 28px;\n color: var(--mj-text-muted);\n}\n\n/* ============================================================================\n CONFIGURATION GRID\n ============================================================================ */\n.configurations-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));\n gap: 24px;\n}\n\n/* ============================================================================\n CONFIGURATION CARD\n ============================================================================ */\n.config-card {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.config-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.config-card:hover {\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.config-card:hover::before {\n opacity: 1;\n}\n\n.config-card.expanded {\n box-shadow: 0 12px 40px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-card.expanded::before {\n opacity: 1;\n}\n\n/* Card Header */\n.card-header {\n padding: 24px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid var(--mj-border-default);\n transition: background 0.2s ease;\n}\n\n.card-header:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.config-info {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.config-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.config-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.config-details {\n flex: 1;\n min-width: 0;\n}\n\n.config-name {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: -0.02em;\n}\n\n.config-meta {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n align-items: center;\n}\n\n/* Status Badge */\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n transition: all 0.2s ease;\n}\n\n.status-badge i {\n font-size: 11px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-preview {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, black);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-inactive {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 35%, var(--mj-bg-surface));\n}\n\n/* Default Badge */\n.default-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-accent);\n}\n\n.default-badge i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n/* Expand Icon */\n.expand-icon {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s ease;\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 0 24px 20px 24px;\n}\n\n.config-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.config-description.text-muted {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n/* ============================================================================\n EXPANDED CONTENT\n ============================================================================ */\n.expanded-content {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Stats Grid */\n.config-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.stat-value {\n font-size: 14px;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n/* Prompts Section */\n.prompts-section {\n margin-top: 20px;\n}\n\n.section-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.prompt-links {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.prompt-link {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.prompt-link:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n transform: translateX(4px);\n}\n\n.prompt-link-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.prompt-link-icon i {\n font-size: 14px;\n}\n\n.prompt-link-details {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 2px;\n}\n\n.prompt-link-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-link-arrow {\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.prompt-link:hover .prompt-link-arrow {\n color: var(--mj-brand-primary);\n transform: translateX(4px);\n}\n\n.no-prompt {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n}\n\n/* Parameters Section */\n.params-section {\n margin-top: 20px;\n}\n\n.params-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.param-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.param-item:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.param-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.param-type-icon {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.param-type-icon i {\n font-size: 13px;\n}\n\n.param-details {\n flex: 1;\n min-width: 0;\n}\n\n.param-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.param-type {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.param-value {\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.no-params {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n text-align: center;\n}\n\n/* ============================================================================\n CARD ACTIONS\n ============================================================================ */\n.card-actions {\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n.action-btn-primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.action-btn-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 80%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 60%, black);\n}\n\n.action-btn-warning:hover {\n background: var(--mj-status-warning);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n.action-btn-danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n}\n\n.action-btn-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n/* ============================================================================\n LIST VIEW\n ============================================================================ */\n.configurations-list {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.configurations-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.configurations-table thead {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.configurations-table th {\n padding: 14px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.configurations-table th:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.configurations-table th:last-child {\n cursor: default;\n}\n\n.configurations-table th:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.configurations-table th.sorted {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.configurations-table th.sorted.desc .sort-icon {\n transform: rotate(180deg);\n}\n\n.configurations-table .sort-header {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.configurations-table .sort-icon {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.configurations-table th:hover .sort-icon {\n opacity: 0.5;\n}\n\n.configurations-table th.sorted .sort-icon {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.configurations-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 0.2s ease;\n}\n\n.configurations-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.configurations-table tbody tr:last-child {\n border-bottom: none;\n}\n\n.configurations-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.config-name-cell {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.config-icon-small {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.config-icon-small i {\n color: var(--mj-text-inverse);\n font-size: 16px;\n}\n\n.config-name-text {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-description-small {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.table-actions {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.action-btn-small:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n}\n\n.action-btn-small.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-small.primary:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n/* ============================================================================\n RESPONSIVE DESIGN\n ============================================================================ */\n@media (max-width: 1024px) {\n .configurations-grid {\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n\n .header-info {\n justify-content: space-between;\n flex-wrap: wrap;\n }\n\n .header-controls {\n justify-content: space-between;\n }\n\n .configurations-grid {\n grid-template-columns: 1fr;\n }\n\n .config-stats {\n grid-template-columns: 1fr;\n }\n\n .card-header {\n padding: 20px;\n }\n\n .config-icon {\n width: 48px;\n height: 48px;\n }\n\n .config-icon i {\n font-size: 20px;\n }\n\n .card-actions {\n flex-wrap: wrap;\n }\n}\n\n/* ============================================================================\n SPLITTER CUSTOMIZATION\n ============================================================================ */\nas-split {\n background: transparent;\n}\n\n/* ============================================================================\n DETAIL PANEL - SLIDE-IN OVERLAY\n ============================================================================ */\n\n.detail-panel-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: fadeIn 0.25s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible {\n right: 0;\n}\n\n/* Detail Panel Header */\n.detail-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info h3 {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n/* Detail Panel Content */\n.detail-panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section {\n margin-bottom: 28px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge.default {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.feature-badge i {\n font-size: 11px;\n}\n\n.detail-section-title {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-grid.single-column {\n grid-template-columns: 1fr;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value .muted {\n color: var(--mj-text-disabled);\n font-style: italic;\n font-weight: 500;\n}\n\n.detail-value i {\n font-size: 13px;\n}\n\n/* Detail Params List */\n.detail-params-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-param-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-param-item .param-info {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.detail-param-item .param-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-param-item .param-name {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.detail-param-item .param-value {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface);\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.params-more {\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 600;\n text-align: center;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n/* Detail Panel Actions */\n.detail-panel-actions {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail Panel Responsive */\n@media (max-width: 520px) {\n .detail-panel {\n width: 100%;\n right: -100%;\n }\n\n .detail-panel.visible {\n right: 0;\n }\n\n .detail-grid {\n grid-template-columns: 1fr;\n }\n}\n"] }]
|
|
1013
|
+
args: [{ standalone: false, selector: 'app-system-configuration', template: "<mj-page-layout>\n <!-- Header -->\n <mj-page-header\n Title=\"Configuration\"\n Icon=\"fa-solid fa-cogs\">\n <div meta>\n <mj-stat-badge\n [Count]=\"filteredConfigurations.length\"\n [Total]=\"configurations.length\"\n Label=\"configurations\">\n </mj-stat-badge>\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetPopoverFilters()\">\n <mj-filter-panel\n [Fields]=\"configFilterFields\"\n [Values]=\"configFilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetPopoverFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n\n <mj-view-toggle\n [Options]=\"configViewOptions\"\n [ActiveKey]=\"viewMode\"\n (KeyChange)=\"setViewMode($any($event))\">\n </mj-view-toggle>\n\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"loadData()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search configurations...\"\n [Value]=\"currentFilters.searchTerm\"\n (ValueChange)=\"onSearchTermChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <!-- Main Content (no sidebar \u2014 filters live in the popover above) -->\n <mj-page-body [Flex]=\"true\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading AI configurations...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !isLoading) {\n <div class=\"error-container\">\n <p class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </p>\n </div>\n }\n\n <!-- Configurations Content -->\n @if (!isLoading && !error) {\n @if (filteredConfigurations.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders\"></i>\n <h3>No configurations found</h3>\n <p>No AI configurations match your current filters. Try adjusting your search criteria or create a new configuration.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"configurations-grid\">\n @for (config of filteredConfigurations; track config.ID) {\n <div class=\"config-card\" [class.expanded]=\"config.isExpanded\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleExpanded(config)\">\n <div class=\"config-info\">\n <div class=\"config-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"config-details\">\n <h4 class=\"config-name\">{{ config.Name }}</h4>\n <div class=\"config-meta\">\n @if (config.IsDefault) {\n <span class=\"default-badge\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"config.isExpanded\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (config.Description) {\n <p class=\"config-description\">{{ config.Description }}</p>\n } @else {\n <p class=\"config-description text-muted\">No description provided</p>\n }\n\n <!-- Expanded Content -->\n @if (config.isExpanded) {\n <div class=\"expanded-content\">\n <!-- Stats Grid -->\n <div class=\"config-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parameters</span>\n <span class=\"stat-value\">{{ config.params?.length || 0 }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Created</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Updated</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"prompts-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h5>\n <div class=\"prompt-links\">\n @if (config.compressionPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextCompressionID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-compress\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Compression</span>\n <span class=\"prompt-link-name\">{{ config.compressionPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No compression prompt configured</div>\n }\n\n @if (config.summarizationPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextSummarizationID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-file-lines\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Summarization</span>\n <span class=\"prompt-link-name\">{{ config.summarizationPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No summarization prompt configured</div>\n }\n </div>\n </div>\n\n <!-- Configuration Parameters -->\n @if (config.params && config.params.length > 0) {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"params-grid\">\n @for (param of config.params; track param.ID) {\n <div class=\"param-item\" (click)=\"onOpenParam(param); $event.stopPropagation()\">\n <div class=\"param-info\">\n <div class=\"param-type-icon\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n </div>\n <div class=\"param-details\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n </div>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"no-params\">No parameters configured</div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showConfigDetails(config, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n Configure\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"configurations-list\">\n <table class=\"configurations-table\">\n <thead>\n <tr>\n <th (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Configuration\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Parameters')\"\n [class.sorted]=\"sortColumn === 'Parameters'\"\n [class.desc]=\"sortColumn === 'Parameters' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Parameters\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Updated')\"\n [class.sorted]=\"sortColumn === 'Updated'\"\n [class.desc]=\"sortColumn === 'Updated' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Updated\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (config of filteredConfigurations; track config.ID) {\n <tr>\n <td>\n <div class=\"config-name-cell\">\n <div class=\"config-icon-small\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div>\n <div class=\"config-name-text\">\n {{ config.Name }}\n @if (config.IsDefault) {\n <span class=\"default-badge\" style=\"margin-left: 8px;\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n </div>\n @if (config.Description) {\n <div class=\"config-description-small\">{{ config.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </td>\n <td>{{ config.params?.length || 0 }}</td>\n <td>{{ formatDate(config.__mj_UpdatedAt) }}</td>\n <td>\n <div class=\"table-actions\">\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showConfigDetails(config)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </mj-page-body>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedConfig) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedConfig.Name }}</h3>\n <span class=\"detail-subtitle\">AI Configuration</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(selectedConfig.Status)\">\n <i [class]=\"getStatusIcon(selectedConfig.Status)\"></i>\n {{ selectedConfig.Status }}\n </span>\n @if (selectedConfig.IsDefault) {\n <span class=\"feature-badge default\">\n <i class=\"fa-solid fa-star\"></i>\n Default Configuration\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedConfig.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedConfig.Description }}</p>\n </div>\n }\n\n <!-- Configuration Stats -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n Overview\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parameters</span>\n <span class=\"detail-value\">{{ selectedConfig.params?.length || 0 }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\">{{ selectedConfig.Status }}</span>\n </div>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h4>\n <div class=\"detail-grid single-column\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedConfig.compressionPrompt) {\n {{ selectedConfig.compressionPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Summarization</span>\n <span class=\"detail-value\">\n @if (selectedConfig.summarizationPrompt) {\n {{ selectedConfig.summarizationPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n </div>\n </div>\n\n <!-- Parameters Preview -->\n @if (selectedConfig.params && selectedConfig.params.length > 0) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Parameters ({{ selectedConfig.params.length }})\n </h4>\n <div class=\"detail-params-list\">\n @for (param of selectedConfig.params.slice(0, 5); track param.ID) {\n <div class=\"detail-param-item\">\n <div class=\"param-info\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n <span class=\"param-name\">{{ param.Name }}</span>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n @if (selectedConfig.params.length > 5) {\n <div class=\"params-more\">\n +{{ selectedConfig.params.length - 5 }} more parameters\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openConfigFromPanel()\">\n <i class=\"fa-solid fa-edit\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</mj-page-layout>\n", styles: ["/* AI Configuration Dashboard - World-Class Design */\n\n/* Container is now provided by <mj-page-layout> */\n\n/* Tinted card background on the body \u2014 matches Agents / Prompts / Models for\n AI-section visual consistency (the original .configurations-content was\n transparent; this is a deliberate harmonization). */\n:host mj-page-body {\n background: var(--mj-bg-surface-card);\n}\n\n/* View toggle now provided by <mj-view-toggle>. */\n\n.control-btn {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn i {\n font-size: 14px;\n}\n\n.control-btn.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.control-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n/* ============================================================================\n MAIN CONTENT AREA\n ============================================================================ */\n.main-splitter {\n flex: 1;\n min-height: 0;\n}\n\n/* ============================================================================\n LOADING STATE\n ============================================================================ */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n min-height: 400px;\n}\n\n/* ============================================================================\n ERROR STATE\n ============================================================================ */\n.error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.error-message {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 12px;\n color: var(--mj-status-error);\n font-size: 15px;\n font-weight: 500;\n}\n\n.error-message i {\n font-size: 20px;\n}\n\n/* ============================================================================\n EMPTY STATE\n ============================================================================ */\n.empty-state {\n text-align: center;\n padding: 80px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 72px;\n color: var(--mj-border-strong);\n margin-bottom: 24px;\n display: block;\n opacity: 0.8;\n}\n\n.empty-state h3 {\n color: var(--mj-text-secondary);\n font-size: 22px;\n font-weight: 600;\n margin: 0 0 12px 0;\n}\n\n.empty-state p {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 28px;\n color: var(--mj-text-muted);\n}\n\n/* ============================================================================\n CONFIGURATION GRID\n ============================================================================ */\n.configurations-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));\n gap: 24px;\n}\n\n/* ============================================================================\n CONFIGURATION CARD\n ============================================================================ */\n.config-card {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.config-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.config-card:hover {\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.config-card:hover::before {\n opacity: 1;\n}\n\n.config-card.expanded {\n box-shadow: 0 12px 40px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-card.expanded::before {\n opacity: 1;\n}\n\n/* Card Header */\n.card-header {\n padding: 24px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid var(--mj-border-default);\n transition: background 0.2s ease;\n}\n\n.card-header:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.config-info {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.config-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.config-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.config-details {\n flex: 1;\n min-width: 0;\n}\n\n.config-name {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: -0.02em;\n}\n\n.config-meta {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n align-items: center;\n}\n\n/* Status Badge */\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n transition: all 0.2s ease;\n}\n\n.status-badge i {\n font-size: 11px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-preview {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-status-warning) 70%, black);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n}\n\n.status-badge.status-inactive {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 35%, var(--mj-bg-surface));\n}\n\n/* Default Badge */\n.default-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-accent);\n}\n\n.default-badge i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n/* Expand Icon */\n.expand-icon {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s ease;\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 0 24px 20px 24px;\n}\n\n.config-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.config-description.text-muted {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n/* ============================================================================\n EXPANDED CONTENT\n ============================================================================ */\n.expanded-content {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Stats Grid */\n.config-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.stat-value {\n font-size: 14px;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n/* Prompts Section */\n.prompts-section {\n margin-top: 20px;\n}\n\n.section-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.prompt-links {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.prompt-link {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.prompt-link:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n transform: translateX(4px);\n}\n\n.prompt-link-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.prompt-link-icon i {\n font-size: 14px;\n}\n\n.prompt-link-details {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-link-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 2px;\n}\n\n.prompt-link-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-link-arrow {\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.prompt-link:hover .prompt-link-arrow {\n color: var(--mj-brand-primary);\n transform: translateX(4px);\n}\n\n.no-prompt {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n}\n\n/* Parameters Section */\n.params-section {\n margin-top: 20px;\n}\n\n.params-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.param-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.param-item:hover {\n background: var(--mj-bg-surface-card);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.param-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.param-type-icon {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.param-type-icon i {\n font-size: 13px;\n}\n\n.param-details {\n flex: 1;\n min-width: 0;\n}\n\n.param-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.param-type {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.param-value {\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.no-params {\n font-size: 13px;\n color: var(--mj-text-disabled);\n font-style: italic;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px dashed var(--mj-border-default);\n text-align: center;\n}\n\n/* ============================================================================\n CARD ACTIONS\n ============================================================================ */\n.card-actions {\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n.action-btn-primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.action-btn-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 80%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n color: color-mix(in srgb, var(--mj-status-warning) 60%, black);\n}\n\n.action-btn-warning:hover {\n background: var(--mj-status-warning);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n.action-btn-danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n}\n\n.action-btn-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n}\n\n/* ============================================================================\n LIST VIEW\n ============================================================================ */\n.configurations-list {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.configurations-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.configurations-table thead {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.configurations-table th {\n padding: 14px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.configurations-table th:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.configurations-table th:last-child {\n cursor: default;\n}\n\n.configurations-table th:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.configurations-table th.sorted {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.configurations-table th.sorted.desc .sort-icon {\n transform: rotate(180deg);\n}\n\n.configurations-table .sort-header {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.configurations-table .sort-icon {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.configurations-table th:hover .sort-icon {\n opacity: 0.5;\n}\n\n.configurations-table th.sorted .sort-icon {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.configurations-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 0.2s ease;\n}\n\n.configurations-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.configurations-table tbody tr:last-child {\n border-bottom: none;\n}\n\n.configurations-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.config-name-cell {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.config-icon-small {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.config-icon-small i {\n color: var(--mj-text-inverse);\n font-size: 16px;\n}\n\n.config-name-text {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-description-small {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.table-actions {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.action-btn-small:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n}\n\n.action-btn-small.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-text-inverse);\n}\n\n.action-btn-small.primary:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n/* ============================================================================\n RESPONSIVE DESIGN\n ============================================================================ */\n@media (max-width: 1024px) {\n .configurations-grid {\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n\n .header-info {\n justify-content: space-between;\n flex-wrap: wrap;\n }\n\n .header-controls {\n justify-content: space-between;\n }\n\n .configurations-grid {\n grid-template-columns: 1fr;\n }\n\n .config-stats {\n grid-template-columns: 1fr;\n }\n\n .card-header {\n padding: 20px;\n }\n\n .config-icon {\n width: 48px;\n height: 48px;\n }\n\n .config-icon i {\n font-size: 20px;\n }\n\n .card-actions {\n flex-wrap: wrap;\n }\n}\n\n/* ============================================================================\n SPLITTER CUSTOMIZATION\n ============================================================================ */\nas-split {\n background: transparent;\n}\n\n/* ============================================================================\n DETAIL PANEL - SLIDE-IN OVERLAY\n ============================================================================ */\n\n.detail-panel-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: fadeIn 0.25s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible {\n right: 0;\n}\n\n/* Detail Panel Header */\n.detail-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info h3 {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n/* Detail Panel Content */\n.detail-panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section {\n margin-bottom: 28px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge.default {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.feature-badge i {\n font-size: 11px;\n}\n\n.detail-section-title {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-grid.single-column {\n grid-template-columns: 1fr;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value .muted {\n color: var(--mj-text-disabled);\n font-style: italic;\n font-weight: 500;\n}\n\n.detail-value i {\n font-size: 13px;\n}\n\n/* Detail Params List */\n.detail-params-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-param-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-param-item .param-info {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.detail-param-item .param-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-param-item .param-name {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.detail-param-item .param-value {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Monaco, 'Consolas', monospace;\n background: var(--mj-bg-surface);\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.params-more {\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 600;\n text-align: center;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n/* Detail Panel Actions */\n.detail-panel-actions {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail Panel Responsive */\n@media (max-width: 520px) {\n .detail-panel {\n width: 100%;\n right: -100%;\n }\n\n .detail-panel.visible {\n right: 0;\n }\n\n .detail-grid {\n grid-template-columns: 1fr;\n }\n}\n"] }]
|
|
973
1014
|
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
974
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SystemConfigurationComponent, { className: "SystemConfigurationComponent", filePath: "src/AI/components/system/system-configuration.component.ts", lineNumber:
|
|
1015
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SystemConfigurationComponent, { className: "SystemConfigurationComponent", filePath: "src/AI/components/system/system-configuration.component.ts", lineNumber: 33 }); })();
|
|
975
1016
|
//# sourceMappingURL=system-configuration.component.js.map
|