@memberjunction/ng-dashboards 5.34.1 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -16,308 +16,290 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
import * as i1 from "@memberjunction/ng-ai-test-harness";
|
|
18
18
|
import * as i2 from "@memberjunction/ng-agents";
|
|
19
|
-
import * as i3 from "
|
|
20
|
-
import * as i4 from "@memberjunction/ng-
|
|
21
|
-
import * as i5 from "@memberjunction/ng-
|
|
22
|
-
import * as i6 from "
|
|
23
|
-
import * as i7 from "
|
|
24
|
-
import * as i8 from "../../../shared/pipes/highlight-search.pipe";
|
|
19
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
20
|
+
import * as i4 from "@memberjunction/ng-trees";
|
|
21
|
+
import * as i5 from "@memberjunction/ng-ui-components";
|
|
22
|
+
import * as i6 from "@angular/common";
|
|
23
|
+
import * as i7 from "../../../shared/pipes/highlight-search.pipe";
|
|
25
24
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
26
|
-
function
|
|
27
|
-
i0.ɵɵ
|
|
28
|
-
|
|
29
|
-
function AgentConfigurationComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
-
i0.ɵɵtext(0, " Show Filters ");
|
|
31
|
-
} }
|
|
32
|
-
function AgentConfigurationComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
34
|
-
i0.ɵɵelementStart(0, "as-split-area", 20)(1, "mj-agent-filter-panel", 25);
|
|
35
|
-
i0.ɵɵlistener("filtersChange", function AgentConfigurationComponent_Conditional_25_Template_mj_agent_filter_panel_filtersChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFiltersChange($event)); })("filterChange", function AgentConfigurationComponent_Conditional_25_Template_mj_agent_filter_panel_filterChange_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFilterChange()); })("resetFilters", function AgentConfigurationComponent_Conditional_25_Template_mj_agent_filter_panel_resetFilters_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResetFilters()); })("closePanel", function AgentConfigurationComponent_Conditional_25_Template_mj_agent_filter_panel_closePanel_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFilterPanel()); });
|
|
36
|
-
i0.ɵɵelementEnd()();
|
|
37
|
-
} if (rf & 2) {
|
|
38
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
39
|
-
i0.ɵɵproperty("size", 20)("minSize", 15)("maxSize", 30);
|
|
40
|
-
i0.ɵɵadvance();
|
|
41
|
-
i0.ɵɵproperty("agents", ctx_r1.agents)("filteredAgents", ctx_r1.filteredAgents)("filters", ctx_r1.currentFilters);
|
|
42
|
-
} }
|
|
43
|
-
function AgentConfigurationComponent_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
-
i0.ɵɵelementStart(0, "div", 22);
|
|
45
|
-
i0.ɵɵelement(1, "mj-loading", 26);
|
|
25
|
+
function AgentConfigurationComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
27
|
+
i0.ɵɵelement(1, "mj-loading", 17);
|
|
46
28
|
i0.ɵɵelementEnd();
|
|
47
29
|
} }
|
|
48
|
-
function
|
|
49
|
-
const
|
|
50
|
-
i0.ɵɵelementStart(0, "div",
|
|
51
|
-
i0.ɵɵelement(1, "i",
|
|
30
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
32
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
33
|
+
i0.ɵɵelement(1, "i", 19);
|
|
52
34
|
i0.ɵɵelementStart(2, "h3");
|
|
53
35
|
i0.ɵɵtext(3, "No agents found");
|
|
54
36
|
i0.ɵɵelementEnd();
|
|
55
37
|
i0.ɵɵelementStart(4, "p");
|
|
56
38
|
i0.ɵɵtext(5, "No agents match your current filters. Try adjusting your search criteria or create a new agent.");
|
|
57
39
|
i0.ɵɵelementEnd();
|
|
58
|
-
i0.ɵɵelementStart(6, "button",
|
|
59
|
-
i0.ɵɵlistener("click", function
|
|
60
|
-
i0.ɵɵelement(7, "i",
|
|
40
|
+
i0.ɵɵelementStart(6, "button", 20);
|
|
41
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewAgent()); });
|
|
42
|
+
i0.ɵɵelement(7, "i", 10);
|
|
61
43
|
i0.ɵɵtext(8, " Create New Agent ");
|
|
62
44
|
i0.ɵɵelementEnd()();
|
|
63
45
|
} }
|
|
64
|
-
function
|
|
65
|
-
i0.ɵɵelement(0, "img",
|
|
46
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
47
|
+
i0.ɵɵelement(0, "img", 29);
|
|
66
48
|
} if (rf & 2) {
|
|
67
|
-
const
|
|
68
|
-
i0.ɵɵproperty("src",
|
|
49
|
+
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
50
|
+
i0.ɵɵproperty("src", agent_r4.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r4.Name + " logo");
|
|
69
51
|
} }
|
|
70
|
-
function
|
|
52
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
71
53
|
i0.ɵɵelement(0, "i");
|
|
72
54
|
} if (rf & 2) {
|
|
73
|
-
const
|
|
55
|
+
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
74
56
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
75
|
-
i0.ɵɵclassMap(ctx_r1.getAgentIcon(
|
|
57
|
+
i0.ɵɵclassMap(ctx_r1.getAgentIcon(agent_r4));
|
|
76
58
|
} }
|
|
77
|
-
function
|
|
78
|
-
i0.ɵɵelementStart(0, "span",
|
|
79
|
-
i0.ɵɵelement(1, "i",
|
|
59
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "span", 45);
|
|
61
|
+
i0.ɵɵelement(1, "i", 46);
|
|
80
62
|
i0.ɵɵtext(2);
|
|
81
63
|
i0.ɵɵelementEnd();
|
|
82
64
|
} if (rf & 2) {
|
|
83
|
-
const
|
|
84
|
-
i0.ɵɵclassMap("status-" +
|
|
65
|
+
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
66
|
+
i0.ɵɵclassMap("status-" + agent_r4.Status.toLowerCase());
|
|
85
67
|
i0.ɵɵadvance(2);
|
|
86
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
68
|
+
i0.ɵɵtextInterpolate1(" ", agent_r4.Status, " ");
|
|
87
69
|
} }
|
|
88
|
-
function
|
|
89
|
-
i0.ɵɵelement(0, "p",
|
|
70
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
i0.ɵɵelement(0, "p", 39);
|
|
90
72
|
i0.ɵɵpipe(1, "highlightSearch");
|
|
91
73
|
} if (rf & 2) {
|
|
92
|
-
const
|
|
74
|
+
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
93
75
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
94
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1,
|
|
76
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1, agent_r4.Description, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
95
77
|
} }
|
|
96
|
-
function
|
|
97
|
-
i0.ɵɵelementStart(0, "p",
|
|
78
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
i0.ɵɵelementStart(0, "p", 40);
|
|
98
80
|
i0.ɵɵtext(1, "No description provided");
|
|
99
81
|
i0.ɵɵelementEnd();
|
|
100
82
|
} }
|
|
101
|
-
function
|
|
102
|
-
i0.ɵɵelementStart(0, "div",
|
|
83
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelementStart(0, "div", 48)(1, "span", 49);
|
|
103
85
|
i0.ɵɵtext(2, "Parent");
|
|
104
86
|
i0.ɵɵelementEnd();
|
|
105
|
-
i0.ɵɵelementStart(3, "span",
|
|
87
|
+
i0.ɵɵelementStart(3, "span", 50);
|
|
106
88
|
i0.ɵɵtext(4);
|
|
107
89
|
i0.ɵɵelementEnd()();
|
|
108
90
|
} if (rf & 2) {
|
|
109
|
-
const
|
|
91
|
+
const agent_r4 = i0.ɵɵnextContext(2).$implicit;
|
|
110
92
|
i0.ɵɵadvance(4);
|
|
111
|
-
i0.ɵɵtextInterpolate(
|
|
93
|
+
i0.ɵɵtextInterpolate(agent_r4.Parent);
|
|
112
94
|
} }
|
|
113
|
-
function
|
|
114
|
-
i0.ɵɵelement(0, "i",
|
|
95
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
i0.ɵɵelement(0, "i", 51);
|
|
115
97
|
i0.ɵɵtext(1, " Enabled ");
|
|
116
98
|
} }
|
|
117
|
-
function
|
|
118
|
-
i0.ɵɵelement(0, "i",
|
|
99
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
i0.ɵɵelement(0, "i", 52);
|
|
119
101
|
i0.ɵɵtext(1, " Disabled ");
|
|
120
102
|
} }
|
|
121
|
-
function
|
|
122
|
-
i0.ɵɵelementStart(0, "div",
|
|
123
|
-
i0.ɵɵconditionalCreate(2,
|
|
124
|
-
i0.ɵɵelementStart(3, "div",
|
|
103
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
104
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "div", 47);
|
|
105
|
+
i0.ɵɵconditionalCreate(2, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_2_Template, 5, 1, "div", 48);
|
|
106
|
+
i0.ɵɵelementStart(3, "div", 48)(4, "span", 49);
|
|
125
107
|
i0.ɵɵtext(5, "Context Compression");
|
|
126
108
|
i0.ɵɵelementEnd();
|
|
127
|
-
i0.ɵɵelementStart(6, "span",
|
|
128
|
-
i0.ɵɵconditionalCreate(7,
|
|
109
|
+
i0.ɵɵelementStart(6, "span", 50);
|
|
110
|
+
i0.ɵɵconditionalCreate(7, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_7_Template, 2, 0)(8, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_8_Template, 2, 0);
|
|
129
111
|
i0.ɵɵelementEnd()()()();
|
|
130
112
|
} if (rf & 2) {
|
|
131
|
-
const
|
|
113
|
+
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
132
114
|
i0.ɵɵadvance(2);
|
|
133
|
-
i0.ɵɵconditional(
|
|
115
|
+
i0.ɵɵconditional(agent_r4.Parent ? 2 : -1);
|
|
134
116
|
i0.ɵɵadvance(5);
|
|
135
|
-
i0.ɵɵconditional(
|
|
117
|
+
i0.ɵɵconditional(agent_r4.EnableContextCompression ? 7 : 8);
|
|
136
118
|
} }
|
|
137
|
-
function
|
|
138
|
-
const
|
|
139
|
-
i0.ɵɵelementStart(0, "button",
|
|
140
|
-
i0.ɵɵlistener("click", function
|
|
141
|
-
i0.ɵɵelement(1, "i",
|
|
119
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
121
|
+
i0.ɵɵelementStart(0, "button", 53);
|
|
122
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_20_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const agent_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.showAgentDetails(agent_r4, $event)); });
|
|
123
|
+
i0.ɵɵelement(1, "i", 54);
|
|
142
124
|
i0.ɵɵtext(2, " Details ");
|
|
143
125
|
i0.ɵɵelementEnd();
|
|
144
126
|
} }
|
|
145
|
-
function
|
|
146
|
-
const
|
|
147
|
-
i0.ɵɵelementStart(0, "button",
|
|
148
|
-
i0.ɵɵlistener("click", function
|
|
149
|
-
i0.ɵɵelement(1, "i",
|
|
127
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
128
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
129
|
+
i0.ɵɵelementStart(0, "button", 55);
|
|
130
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_21_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const agent_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.runAgent(agent_r4); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
131
|
+
i0.ɵɵelement(1, "i", 56);
|
|
150
132
|
i0.ɵɵtext(2, " Run ");
|
|
151
133
|
i0.ɵɵelementEnd();
|
|
152
134
|
} }
|
|
153
|
-
function
|
|
154
|
-
const
|
|
155
|
-
i0.ɵɵelementStart(0, "div",
|
|
156
|
-
i0.ɵɵlistener("click", function
|
|
157
|
-
i0.ɵɵelementStart(2, "div",
|
|
158
|
-
i0.ɵɵconditionalCreate(4,
|
|
135
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
137
|
+
i0.ɵɵelementStart(0, "div", 25)(1, "div", 26);
|
|
138
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Template_div_click_1_listener() { const agent_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleAgentExpansion(agent_r4.ID)); });
|
|
139
|
+
i0.ɵɵelementStart(2, "div", 27)(3, "div", 28);
|
|
140
|
+
i0.ɵɵconditionalCreate(4, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_4_Template, 1, 2, "img", 29)(5, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_5_Template, 1, 2, "i", 30);
|
|
159
141
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵelementStart(6, "div",
|
|
161
|
-
i0.ɵɵelement(7, "h4",
|
|
142
|
+
i0.ɵɵelementStart(6, "div", 31);
|
|
143
|
+
i0.ɵɵelement(7, "h4", 32);
|
|
162
144
|
i0.ɵɵpipe(8, "highlightSearch");
|
|
163
|
-
i0.ɵɵelementStart(9, "div",
|
|
164
|
-
i0.ɵɵelement(11, "i",
|
|
145
|
+
i0.ɵɵelementStart(9, "div", 33)(10, "span", 34);
|
|
146
|
+
i0.ɵɵelement(11, "i", 35);
|
|
165
147
|
i0.ɵɵtext(12);
|
|
166
148
|
i0.ɵɵelementEnd();
|
|
167
|
-
i0.ɵɵconditionalCreate(13,
|
|
149
|
+
i0.ɵɵconditionalCreate(13, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_13_Template, 3, 3, "span", 36);
|
|
168
150
|
i0.ɵɵelementEnd()()();
|
|
169
|
-
i0.ɵɵelement(14, "i",
|
|
151
|
+
i0.ɵɵelement(14, "i", 37);
|
|
170
152
|
i0.ɵɵelementEnd();
|
|
171
|
-
i0.ɵɵelementStart(15, "div",
|
|
172
|
-
i0.ɵɵconditionalCreate(16,
|
|
173
|
-
i0.ɵɵconditionalCreate(18,
|
|
153
|
+
i0.ɵɵelementStart(15, "div", 38);
|
|
154
|
+
i0.ɵɵconditionalCreate(16, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_16_Template, 2, 4, "p", 39)(17, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_17_Template, 2, 0, "p", 40);
|
|
155
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_18_Template, 9, 2, "div", 41);
|
|
174
156
|
i0.ɵɵelementEnd();
|
|
175
|
-
i0.ɵɵelementStart(19, "div",
|
|
176
|
-
i0.ɵɵconditionalCreate(20,
|
|
177
|
-
i0.ɵɵconditionalCreate(21,
|
|
157
|
+
i0.ɵɵelementStart(19, "div", 42);
|
|
158
|
+
i0.ɵɵconditionalCreate(20, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_20_Template, 3, 0, "button", 43);
|
|
159
|
+
i0.ɵɵconditionalCreate(21, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Conditional_21_Template, 3, 0, "button", 44);
|
|
178
160
|
i0.ɵɵelementEnd()();
|
|
179
161
|
} if (rf & 2) {
|
|
180
|
-
const
|
|
162
|
+
const agent_r4 = ctx.$implicit;
|
|
181
163
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
182
|
-
i0.ɵɵclassProp("expanded", ctx_r1.expandedAgentId ===
|
|
164
|
+
i0.ɵɵclassProp("expanded", ctx_r1.expandedAgentId === agent_r4.ID);
|
|
183
165
|
i0.ɵɵadvance(3);
|
|
184
|
-
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(
|
|
166
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(agent_r4));
|
|
185
167
|
i0.ɵɵadvance();
|
|
186
|
-
i0.ɵɵconditional(ctx_r1.hasLogoURL(
|
|
168
|
+
i0.ɵɵconditional(ctx_r1.hasLogoURL(agent_r4) ? 4 : 5);
|
|
187
169
|
i0.ɵɵadvance(3);
|
|
188
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(8, 14,
|
|
170
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(8, 14, agent_r4.Name, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
189
171
|
i0.ɵɵadvance(5);
|
|
190
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getAgentTypeName(
|
|
172
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getAgentTypeName(agent_r4), " ");
|
|
191
173
|
i0.ɵɵadvance();
|
|
192
|
-
i0.ɵɵconditional(
|
|
174
|
+
i0.ɵɵconditional(agent_r4.Status ? 13 : -1);
|
|
193
175
|
i0.ɵɵadvance();
|
|
194
|
-
i0.ɵɵclassProp("rotated", ctx_r1.expandedAgentId ===
|
|
176
|
+
i0.ɵɵclassProp("rotated", ctx_r1.expandedAgentId === agent_r4.ID);
|
|
195
177
|
i0.ɵɵadvance(2);
|
|
196
|
-
i0.ɵɵconditional(
|
|
178
|
+
i0.ɵɵconditional(agent_r4.Description ? 16 : 17);
|
|
197
179
|
i0.ɵɵadvance(2);
|
|
198
|
-
i0.ɵɵconditional(ctx_r1.expandedAgentId ===
|
|
180
|
+
i0.ɵɵconditional(ctx_r1.expandedAgentId === agent_r4.ID ? 18 : -1);
|
|
199
181
|
i0.ɵɵadvance(2);
|
|
200
182
|
i0.ɵɵconditional(ctx_r1.UserCanReadAgents ? 20 : -1);
|
|
201
183
|
i0.ɵɵadvance();
|
|
202
|
-
i0.ɵɵconditional(
|
|
184
|
+
i0.ɵɵconditional(agent_r4.Status === "Active" && ctx_r1.UserCanReadAgents ? 21 : -1);
|
|
203
185
|
} }
|
|
204
|
-
function
|
|
205
|
-
i0.ɵɵelementStart(0, "div",
|
|
206
|
-
i0.ɵɵrepeaterCreate(1,
|
|
186
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
187
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
188
|
+
i0.ɵɵrepeaterCreate(1, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_For_2_Template, 22, 17, "div", 24, _forTrack0);
|
|
207
189
|
i0.ɵɵelementEnd();
|
|
208
190
|
} if (rf & 2) {
|
|
209
191
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
210
192
|
i0.ɵɵadvance();
|
|
211
193
|
i0.ɵɵrepeater(ctx_r1.filteredAgents);
|
|
212
194
|
} }
|
|
213
|
-
function
|
|
214
|
-
const
|
|
215
|
-
i0.ɵɵelementStart(0, "div",
|
|
216
|
-
i0.ɵɵlistener("AfterNodeClick", function
|
|
195
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
196
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
197
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "mj-tree", 57);
|
|
198
|
+
i0.ɵɵlistener("AfterNodeClick", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_1_Template_mj_tree_AfterNodeClick_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onTreeNodeClick($event)); })("AfterNodeDoubleClick", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_1_Template_mj_tree_AfterNodeDoubleClick_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onTreeNodeDoubleClick($event)); });
|
|
217
199
|
i0.ɵɵelementEnd()();
|
|
218
200
|
} if (rf & 2) {
|
|
219
201
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
220
202
|
i0.ɵɵadvance();
|
|
221
203
|
i0.ɵɵproperty("BranchConfig", ctx_r1.CategoryBranchConfig)("LeafConfig", ctx_r1.AgentLeafConfig)("SelectionMode", "single")("SelectableTypes", "leaf")("ShowDescriptions", true)("ShowBadges", true)("ShowExpandCollapseAll", true)("EmptyMessage", "No agents found")("EmptyIcon", "fa-solid fa-robot");
|
|
222
204
|
} }
|
|
223
|
-
function
|
|
224
|
-
i0.ɵɵelement(0, "img",
|
|
205
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
i0.ɵɵelement(0, "img", 64);
|
|
225
207
|
} if (rf & 2) {
|
|
226
|
-
const
|
|
227
|
-
i0.ɵɵproperty("src",
|
|
208
|
+
const agent_r9 = i0.ɵɵnextContext().$implicit;
|
|
209
|
+
i0.ɵɵproperty("src", agent_r9.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r9.Name + " logo");
|
|
228
210
|
} }
|
|
229
|
-
function
|
|
211
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
230
212
|
i0.ɵɵelement(0, "i");
|
|
231
213
|
} if (rf & 2) {
|
|
232
|
-
const
|
|
214
|
+
const agent_r9 = i0.ɵɵnextContext().$implicit;
|
|
233
215
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
234
|
-
i0.ɵɵclassMap(ctx_r1.getAgentIcon(
|
|
216
|
+
i0.ɵɵclassMap(ctx_r1.getAgentIcon(agent_r9));
|
|
235
217
|
} }
|
|
236
|
-
function
|
|
237
|
-
i0.ɵɵelement(0, "div",
|
|
218
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
219
|
+
i0.ɵɵelement(0, "div", 65);
|
|
238
220
|
i0.ɵɵpipe(1, "highlightSearch");
|
|
239
221
|
} if (rf & 2) {
|
|
240
|
-
const
|
|
222
|
+
const agent_r9 = i0.ɵɵnextContext().$implicit;
|
|
241
223
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
242
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1,
|
|
224
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1, agent_r9.Description, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
243
225
|
} }
|
|
244
|
-
function
|
|
245
|
-
const
|
|
246
|
-
i0.ɵɵelementStart(0, "button",
|
|
247
|
-
i0.ɵɵlistener("click", function
|
|
248
|
-
i0.ɵɵelement(1, "i",
|
|
226
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
228
|
+
i0.ɵɵelementStart(0, "button", 71);
|
|
229
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const agent_r9 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.showAgentDetails(agent_r9)); });
|
|
230
|
+
i0.ɵɵelement(1, "i", 54);
|
|
249
231
|
i0.ɵɵelementEnd();
|
|
250
232
|
} }
|
|
251
|
-
function
|
|
252
|
-
const
|
|
253
|
-
i0.ɵɵelementStart(0, "button",
|
|
254
|
-
i0.ɵɵlistener("click", function
|
|
255
|
-
i0.ɵɵelement(1, "i",
|
|
233
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
234
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
235
|
+
i0.ɵɵelementStart(0, "button", 72);
|
|
236
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const agent_r9 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.runAgent(agent_r9)); });
|
|
237
|
+
i0.ɵɵelement(1, "i", 56);
|
|
256
238
|
i0.ɵɵelementEnd();
|
|
257
239
|
} }
|
|
258
|
-
function
|
|
259
|
-
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div",
|
|
260
|
-
i0.ɵɵconditionalCreate(4,
|
|
240
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 62)(3, "div", 63);
|
|
242
|
+
i0.ɵɵconditionalCreate(4, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_4_Template, 1, 2, "img", 64)(5, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_5_Template, 1, 2, "i", 30);
|
|
261
243
|
i0.ɵɵelementEnd();
|
|
262
244
|
i0.ɵɵelementStart(6, "div");
|
|
263
|
-
i0.ɵɵelement(7, "div",
|
|
245
|
+
i0.ɵɵelement(7, "div", 32);
|
|
264
246
|
i0.ɵɵpipe(8, "highlightSearch");
|
|
265
|
-
i0.ɵɵconditionalCreate(9,
|
|
247
|
+
i0.ɵɵconditionalCreate(9, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_9_Template, 2, 4, "div", 65);
|
|
266
248
|
i0.ɵɵelementEnd()()();
|
|
267
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
249
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 66);
|
|
268
250
|
i0.ɵɵtext(12);
|
|
269
251
|
i0.ɵɵelementEnd()();
|
|
270
|
-
i0.ɵɵelementStart(13, "td")(14, "span",
|
|
252
|
+
i0.ɵɵelementStart(13, "td")(14, "span", 67);
|
|
271
253
|
i0.ɵɵtext(15);
|
|
272
254
|
i0.ɵɵelementEnd()();
|
|
273
|
-
i0.ɵɵelementStart(16, "td")(17, "div",
|
|
274
|
-
i0.ɵɵconditionalCreate(18,
|
|
275
|
-
i0.ɵɵconditionalCreate(19,
|
|
255
|
+
i0.ɵɵelementStart(16, "td")(17, "div", 68);
|
|
256
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_18_Template, 2, 0, "button", 69);
|
|
257
|
+
i0.ɵɵconditionalCreate(19, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Conditional_19_Template, 2, 0, "button", 70);
|
|
276
258
|
i0.ɵɵelementEnd()()();
|
|
277
259
|
} if (rf & 2) {
|
|
278
|
-
const
|
|
260
|
+
const agent_r9 = ctx.$implicit;
|
|
279
261
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
280
262
|
i0.ɵɵadvance(3);
|
|
281
|
-
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(
|
|
263
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(agent_r9));
|
|
282
264
|
i0.ɵɵadvance();
|
|
283
|
-
i0.ɵɵconditional(ctx_r1.hasLogoURL(
|
|
265
|
+
i0.ɵɵconditional(ctx_r1.hasLogoURL(agent_r9) ? 4 : 5);
|
|
284
266
|
i0.ɵɵadvance(3);
|
|
285
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(8, 11,
|
|
267
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(8, 11, agent_r9.Name, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
286
268
|
i0.ɵɵadvance(2);
|
|
287
|
-
i0.ɵɵconditional(
|
|
269
|
+
i0.ɵɵconditional(agent_r9.Description ? 9 : -1);
|
|
288
270
|
i0.ɵɵadvance(3);
|
|
289
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getAgentTypeName(
|
|
271
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getAgentTypeName(agent_r9), " ");
|
|
290
272
|
i0.ɵɵadvance(2);
|
|
291
|
-
i0.ɵɵclassMap("status-" + (
|
|
273
|
+
i0.ɵɵclassMap("status-" + (agent_r9.Status || "unknown").toLowerCase());
|
|
292
274
|
i0.ɵɵadvance();
|
|
293
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
275
|
+
i0.ɵɵtextInterpolate1(" ", agent_r9.Status || "Unknown", " ");
|
|
294
276
|
i0.ɵɵadvance(3);
|
|
295
277
|
i0.ɵɵconditional(ctx_r1.UserCanReadAgents ? 18 : -1);
|
|
296
278
|
i0.ɵɵadvance();
|
|
297
|
-
i0.ɵɵconditional(
|
|
279
|
+
i0.ɵɵconditional(agent_r9.Status === "Active" && ctx_r1.UserCanReadAgents ? 19 : -1);
|
|
298
280
|
} }
|
|
299
|
-
function
|
|
300
|
-
const
|
|
301
|
-
i0.ɵɵelementStart(0, "div",
|
|
302
|
-
i0.ɵɵlistener("click", function
|
|
303
|
-
i0.ɵɵelementStart(5, "span",
|
|
281
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
283
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "table", 58)(2, "thead")(3, "tr")(4, "th", 59);
|
|
284
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_Template_th_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Name")); });
|
|
285
|
+
i0.ɵɵelementStart(5, "span", 60);
|
|
304
286
|
i0.ɵɵtext(6, " Name ");
|
|
305
|
-
i0.ɵɵelement(7, "i",
|
|
287
|
+
i0.ɵɵelement(7, "i", 61);
|
|
306
288
|
i0.ɵɵelementEnd()();
|
|
307
289
|
i0.ɵɵelementStart(8, "th");
|
|
308
290
|
i0.ɵɵtext(9, "Type");
|
|
309
291
|
i0.ɵɵelementEnd();
|
|
310
|
-
i0.ɵɵelementStart(10, "th",
|
|
311
|
-
i0.ɵɵlistener("click", function
|
|
312
|
-
i0.ɵɵelementStart(11, "span",
|
|
292
|
+
i0.ɵɵelementStart(10, "th", 59);
|
|
293
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_Template_th_click_10_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Status")); });
|
|
294
|
+
i0.ɵɵelementStart(11, "span", 60);
|
|
313
295
|
i0.ɵɵtext(12, " Status ");
|
|
314
|
-
i0.ɵɵelement(13, "i",
|
|
296
|
+
i0.ɵɵelement(13, "i", 61);
|
|
315
297
|
i0.ɵɵelementEnd()();
|
|
316
298
|
i0.ɵɵelementStart(14, "th");
|
|
317
299
|
i0.ɵɵtext(15, "Actions");
|
|
318
300
|
i0.ɵɵelementEnd()()();
|
|
319
301
|
i0.ɵɵelementStart(16, "tbody");
|
|
320
|
-
i0.ɵɵrepeaterCreate(17,
|
|
302
|
+
i0.ɵɵrepeaterCreate(17, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_For_18_Template, 20, 14, "tr", null, _forTrack0);
|
|
321
303
|
i0.ɵɵelementEnd()()();
|
|
322
304
|
} if (rf & 2) {
|
|
323
305
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -328,10 +310,10 @@ function AgentConfigurationComponent_Conditional_29_Conditional_1_Conditional_2_
|
|
|
328
310
|
i0.ɵɵadvance(7);
|
|
329
311
|
i0.ɵɵrepeater(ctx_r1.filteredAgents);
|
|
330
312
|
} }
|
|
331
|
-
function
|
|
332
|
-
i0.ɵɵconditionalCreate(0,
|
|
333
|
-
i0.ɵɵconditionalCreate(1,
|
|
334
|
-
i0.ɵɵconditionalCreate(2,
|
|
313
|
+
function AgentConfigurationComponent_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
314
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_0_Template, 3, 0, "div", 21);
|
|
315
|
+
i0.ɵɵconditionalCreate(1, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_1_Template, 2, 9, "div", 22);
|
|
316
|
+
i0.ɵɵconditionalCreate(2, AgentConfigurationComponent_Conditional_17_Conditional_1_Conditional_2_Template, 19, 8, "div", 23);
|
|
335
317
|
} if (rf & 2) {
|
|
336
318
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
337
319
|
i0.ɵɵconditional(ctx_r1.viewMode === "grid" ? 0 : -1);
|
|
@@ -340,42 +322,42 @@ function AgentConfigurationComponent_Conditional_29_Conditional_1_Template(rf, c
|
|
|
340
322
|
i0.ɵɵadvance();
|
|
341
323
|
i0.ɵɵconditional(ctx_r1.viewMode === "list" ? 2 : -1);
|
|
342
324
|
} }
|
|
343
|
-
function
|
|
344
|
-
i0.ɵɵconditionalCreate(0,
|
|
325
|
+
function AgentConfigurationComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
326
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_17_Conditional_0_Template, 9, 0, "div", 18)(1, AgentConfigurationComponent_Conditional_17_Conditional_1_Template, 3, 3);
|
|
345
327
|
} if (rf & 2) {
|
|
346
328
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
347
329
|
i0.ɵɵconditional(ctx_r1.filteredAgents.length === 0 ? 0 : 1);
|
|
348
330
|
} }
|
|
349
|
-
function
|
|
350
|
-
const
|
|
351
|
-
i0.ɵɵelementStart(0, "div",
|
|
352
|
-
i0.ɵɵlistener("click", function
|
|
331
|
+
function AgentConfigurationComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
332
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
333
|
+
i0.ɵɵelementStart(0, "div", 73);
|
|
334
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_18_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
353
335
|
i0.ɵɵelementEnd();
|
|
354
336
|
} }
|
|
355
|
-
function
|
|
356
|
-
i0.ɵɵelement(0, "img",
|
|
337
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
338
|
+
i0.ɵɵelement(0, "img", 77);
|
|
357
339
|
} if (rf & 2) {
|
|
358
340
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
359
341
|
i0.ɵɵproperty("src", ctx_r1.selectedAgent.LogoURL, i0.ɵɵsanitizeUrl)("alt", ctx_r1.selectedAgent.Name + " logo");
|
|
360
342
|
} }
|
|
361
|
-
function
|
|
343
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
362
344
|
i0.ɵɵelement(0, "i");
|
|
363
345
|
} if (rf & 2) {
|
|
364
346
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
365
347
|
i0.ɵɵclassMap(ctx_r1.getAgentIcon(ctx_r1.selectedAgent));
|
|
366
348
|
} }
|
|
367
|
-
function
|
|
368
|
-
i0.ɵɵelementStart(0, "span",
|
|
369
|
-
i0.ɵɵelement(1, "i",
|
|
349
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
350
|
+
i0.ɵɵelementStart(0, "span", 85);
|
|
351
|
+
i0.ɵɵelement(1, "i", 97);
|
|
370
352
|
i0.ɵɵtext(2, " Exposed as Action ");
|
|
371
353
|
i0.ɵɵelementEnd();
|
|
372
354
|
} }
|
|
373
|
-
function
|
|
374
|
-
i0.ɵɵelementStart(0, "div",
|
|
375
|
-
i0.ɵɵelement(2, "i",
|
|
355
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
356
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "h4", 86);
|
|
357
|
+
i0.ɵɵelement(2, "i", 98);
|
|
376
358
|
i0.ɵɵtext(3, " Description ");
|
|
377
359
|
i0.ɵɵelementEnd();
|
|
378
|
-
i0.ɵɵelementStart(4, "p",
|
|
360
|
+
i0.ɵɵelementStart(4, "p", 99);
|
|
379
361
|
i0.ɵɵtext(5);
|
|
380
362
|
i0.ɵɵelementEnd()();
|
|
381
363
|
} if (rf & 2) {
|
|
@@ -383,11 +365,11 @@ function AgentConfigurationComponent_Conditional_32_Conditional_19_Template(rf,
|
|
|
383
365
|
i0.ɵɵadvance(5);
|
|
384
366
|
i0.ɵɵtextInterpolate(ctx_r1.selectedAgent.Description);
|
|
385
367
|
} }
|
|
386
|
-
function
|
|
387
|
-
i0.ɵɵelementStart(0, "div",
|
|
368
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
369
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "span", 90);
|
|
388
370
|
i0.ɵɵtext(2, "Parent Agent");
|
|
389
371
|
i0.ɵɵelementEnd();
|
|
390
|
-
i0.ɵɵelementStart(3, "span",
|
|
372
|
+
i0.ɵɵelementStart(3, "span", 91);
|
|
391
373
|
i0.ɵɵtext(4);
|
|
392
374
|
i0.ɵɵelementEnd()();
|
|
393
375
|
} if (rf & 2) {
|
|
@@ -395,105 +377,105 @@ function AgentConfigurationComponent_Conditional_32_Conditional_31_Template(rf,
|
|
|
395
377
|
i0.ɵɵadvance(4);
|
|
396
378
|
i0.ɵɵtextInterpolate(ctx_r1.getParentAgentName(ctx_r1.selectedAgent));
|
|
397
379
|
} }
|
|
398
|
-
function
|
|
399
|
-
i0.ɵɵelement(0, "i",
|
|
380
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
381
|
+
i0.ɵɵelement(0, "i", 100);
|
|
400
382
|
i0.ɵɵtext(1, " Enabled ");
|
|
401
383
|
} }
|
|
402
|
-
function
|
|
403
|
-
i0.ɵɵelement(0, "i",
|
|
384
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
+
i0.ɵɵelement(0, "i", 101);
|
|
404
386
|
i0.ɵɵtext(1, " Disabled ");
|
|
405
387
|
} }
|
|
406
|
-
function
|
|
407
|
-
i0.ɵɵelement(0, "i",
|
|
388
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
389
|
+
i0.ɵɵelement(0, "i", 100);
|
|
408
390
|
i0.ɵɵtext(1, " Yes ");
|
|
409
391
|
} }
|
|
410
|
-
function
|
|
411
|
-
i0.ɵɵelement(0, "i",
|
|
392
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
393
|
+
i0.ɵɵelement(0, "i", 101);
|
|
412
394
|
i0.ɵɵtext(1, " No ");
|
|
413
395
|
} }
|
|
414
|
-
function
|
|
415
|
-
const
|
|
416
|
-
i0.ɵɵelementStart(0, "button",
|
|
417
|
-
i0.ɵɵlistener("click", function
|
|
418
|
-
i0.ɵɵelement(1, "i",
|
|
396
|
+
function AgentConfigurationComponent_Conditional_20_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
397
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
398
|
+
i0.ɵɵelementStart(0, "button", 102);
|
|
399
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_20_Conditional_67_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.runAgent(ctx_r1.selectedAgent)); });
|
|
400
|
+
i0.ɵɵelement(1, "i", 56);
|
|
419
401
|
i0.ɵɵtext(2, " Run Agent ");
|
|
420
402
|
i0.ɵɵelementEnd();
|
|
421
403
|
} }
|
|
422
|
-
function
|
|
423
|
-
const
|
|
424
|
-
i0.ɵɵelementStart(0, "div",
|
|
425
|
-
i0.ɵɵconditionalCreate(3,
|
|
404
|
+
function AgentConfigurationComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
405
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
406
|
+
i0.ɵɵelementStart(0, "div", 74)(1, "div", 75)(2, "div", 76);
|
|
407
|
+
i0.ɵɵconditionalCreate(3, AgentConfigurationComponent_Conditional_20_Conditional_3_Template, 1, 2, "img", 77)(4, AgentConfigurationComponent_Conditional_20_Conditional_4_Template, 1, 2, "i", 30);
|
|
426
408
|
i0.ɵɵelementEnd();
|
|
427
|
-
i0.ɵɵelementStart(5, "div",
|
|
409
|
+
i0.ɵɵelementStart(5, "div", 78)(6, "h3");
|
|
428
410
|
i0.ɵɵtext(7);
|
|
429
411
|
i0.ɵɵelementEnd();
|
|
430
|
-
i0.ɵɵelementStart(8, "span",
|
|
412
|
+
i0.ɵɵelementStart(8, "span", 79);
|
|
431
413
|
i0.ɵɵtext(9);
|
|
432
414
|
i0.ɵɵelementEnd()()();
|
|
433
|
-
i0.ɵɵelementStart(10, "button",
|
|
434
|
-
i0.ɵɵlistener("click", function
|
|
435
|
-
i0.ɵɵelement(11, "i",
|
|
415
|
+
i0.ɵɵelementStart(10, "button", 80);
|
|
416
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_20_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
417
|
+
i0.ɵɵelement(11, "i", 81);
|
|
436
418
|
i0.ɵɵelementEnd()();
|
|
437
|
-
i0.ɵɵelementStart(12, "div",
|
|
438
|
-
i0.ɵɵelement(16, "i",
|
|
419
|
+
i0.ɵɵelementStart(12, "div", 82)(13, "div", 83)(14, "div", 84)(15, "span", 67);
|
|
420
|
+
i0.ɵɵelement(16, "i", 46);
|
|
439
421
|
i0.ɵɵtext(17);
|
|
440
422
|
i0.ɵɵelementEnd();
|
|
441
|
-
i0.ɵɵconditionalCreate(18,
|
|
423
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_20_Conditional_18_Template, 3, 0, "span", 85);
|
|
442
424
|
i0.ɵɵelementEnd()();
|
|
443
|
-
i0.ɵɵconditionalCreate(19,
|
|
444
|
-
i0.ɵɵelementStart(20, "div",
|
|
445
|
-
i0.ɵɵelement(22, "i",
|
|
425
|
+
i0.ɵɵconditionalCreate(19, AgentConfigurationComponent_Conditional_20_Conditional_19_Template, 6, 1, "div", 83);
|
|
426
|
+
i0.ɵɵelementStart(20, "div", 83)(21, "h4", 86);
|
|
427
|
+
i0.ɵɵelement(22, "i", 87);
|
|
446
428
|
i0.ɵɵtext(23, " Configuration ");
|
|
447
429
|
i0.ɵɵelementEnd();
|
|
448
|
-
i0.ɵɵelementStart(24, "div",
|
|
430
|
+
i0.ɵɵelementStart(24, "div", 88)(25, "div", 89)(26, "span", 90);
|
|
449
431
|
i0.ɵɵtext(27, "Execution Mode");
|
|
450
432
|
i0.ɵɵelementEnd();
|
|
451
|
-
i0.ɵɵelementStart(28, "span",
|
|
433
|
+
i0.ɵɵelementStart(28, "span", 91);
|
|
452
434
|
i0.ɵɵelement(29, "i");
|
|
453
435
|
i0.ɵɵtext(30);
|
|
454
436
|
i0.ɵɵelementEnd()();
|
|
455
|
-
i0.ɵɵconditionalCreate(31,
|
|
456
|
-
i0.ɵɵelementStart(32, "div",
|
|
437
|
+
i0.ɵɵconditionalCreate(31, AgentConfigurationComponent_Conditional_20_Conditional_31_Template, 5, 1, "div", 89);
|
|
438
|
+
i0.ɵɵelementStart(32, "div", 89)(33, "span", 90);
|
|
457
439
|
i0.ɵɵtext(34, "Context Compression");
|
|
458
440
|
i0.ɵɵelementEnd();
|
|
459
|
-
i0.ɵɵelementStart(35, "span",
|
|
460
|
-
i0.ɵɵconditionalCreate(36,
|
|
441
|
+
i0.ɵɵelementStart(35, "span", 91);
|
|
442
|
+
i0.ɵɵconditionalCreate(36, AgentConfigurationComponent_Conditional_20_Conditional_36_Template, 2, 0)(37, AgentConfigurationComponent_Conditional_20_Conditional_37_Template, 2, 0);
|
|
461
443
|
i0.ɵɵelementEnd()();
|
|
462
|
-
i0.ɵɵelementStart(38, "div",
|
|
444
|
+
i0.ɵɵelementStart(38, "div", 89)(39, "span", 90);
|
|
463
445
|
i0.ɵɵtext(40, "Exposed as Action");
|
|
464
446
|
i0.ɵɵelementEnd();
|
|
465
|
-
i0.ɵɵelementStart(41, "span",
|
|
466
|
-
i0.ɵɵconditionalCreate(42,
|
|
447
|
+
i0.ɵɵelementStart(41, "span", 91);
|
|
448
|
+
i0.ɵɵconditionalCreate(42, AgentConfigurationComponent_Conditional_20_Conditional_42_Template, 2, 0)(43, AgentConfigurationComponent_Conditional_20_Conditional_43_Template, 2, 0);
|
|
467
449
|
i0.ɵɵelementEnd()();
|
|
468
|
-
i0.ɵɵelementStart(44, "div",
|
|
450
|
+
i0.ɵɵelementStart(44, "div", 89)(45, "span", 90);
|
|
469
451
|
i0.ɵɵtext(46, "Model Selection");
|
|
470
452
|
i0.ɵɵelementEnd();
|
|
471
|
-
i0.ɵɵelementStart(47, "span",
|
|
453
|
+
i0.ɵɵelementStart(47, "span", 91);
|
|
472
454
|
i0.ɵɵtext(48);
|
|
473
455
|
i0.ɵɵelementEnd()()()();
|
|
474
|
-
i0.ɵɵelementStart(49, "div",
|
|
475
|
-
i0.ɵɵelement(51, "i",
|
|
456
|
+
i0.ɵɵelementStart(49, "div", 83)(50, "h4", 86);
|
|
457
|
+
i0.ɵɵelement(51, "i", 92);
|
|
476
458
|
i0.ɵɵtext(52, " Timestamps ");
|
|
477
459
|
i0.ɵɵelementEnd();
|
|
478
|
-
i0.ɵɵelementStart(53, "div",
|
|
460
|
+
i0.ɵɵelementStart(53, "div", 88)(54, "div", 89)(55, "span", 90);
|
|
479
461
|
i0.ɵɵtext(56, "Created");
|
|
480
462
|
i0.ɵɵelementEnd();
|
|
481
|
-
i0.ɵɵelementStart(57, "span",
|
|
463
|
+
i0.ɵɵelementStart(57, "span", 91);
|
|
482
464
|
i0.ɵɵtext(58);
|
|
483
465
|
i0.ɵɵpipe(59, "date");
|
|
484
466
|
i0.ɵɵelementEnd()();
|
|
485
|
-
i0.ɵɵelementStart(60, "div",
|
|
467
|
+
i0.ɵɵelementStart(60, "div", 89)(61, "span", 90);
|
|
486
468
|
i0.ɵɵtext(62, "Updated");
|
|
487
469
|
i0.ɵɵelementEnd();
|
|
488
|
-
i0.ɵɵelementStart(63, "span",
|
|
470
|
+
i0.ɵɵelementStart(63, "span", 91);
|
|
489
471
|
i0.ɵɵtext(64);
|
|
490
472
|
i0.ɵɵpipe(65, "date");
|
|
491
473
|
i0.ɵɵelementEnd()()()()();
|
|
492
|
-
i0.ɵɵelementStart(66, "div",
|
|
493
|
-
i0.ɵɵconditionalCreate(67,
|
|
494
|
-
i0.ɵɵelementStart(68, "button",
|
|
495
|
-
i0.ɵɵlistener("click", function
|
|
496
|
-
i0.ɵɵelement(69, "i",
|
|
474
|
+
i0.ɵɵelementStart(66, "div", 93);
|
|
475
|
+
i0.ɵɵconditionalCreate(67, AgentConfigurationComponent_Conditional_20_Conditional_67_Template, 3, 0, "button", 94);
|
|
476
|
+
i0.ɵɵelementStart(68, "button", 95);
|
|
477
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_20_Template_button_click_68_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openAgentFromPanel()); });
|
|
478
|
+
i0.ɵɵelement(69, "i", 96);
|
|
497
479
|
i0.ɵɵtext(70, " Open Full Record ");
|
|
498
480
|
i0.ɵɵelementEnd()();
|
|
499
481
|
} if (rf & 2) {
|
|
@@ -567,6 +549,128 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
567
549
|
exposeAsAction: 'all',
|
|
568
550
|
categoryId: 'all'
|
|
569
551
|
};
|
|
552
|
+
/** Static option arrays for the shared mj-filter-panel. */
|
|
553
|
+
statusOptions = [
|
|
554
|
+
{ text: 'All Statuses', value: 'all' },
|
|
555
|
+
{ text: 'Active', value: 'active' },
|
|
556
|
+
{ text: 'Inactive', value: 'inactive' },
|
|
557
|
+
];
|
|
558
|
+
executionModeOptions = [
|
|
559
|
+
{ text: 'All Execution Modes', value: 'all' },
|
|
560
|
+
{ text: 'Sequential', value: 'Sequential' },
|
|
561
|
+
{ text: 'Parallel', value: 'Parallel' },
|
|
562
|
+
];
|
|
563
|
+
exposeAsActionOptions = [
|
|
564
|
+
{ text: 'All Agents', value: 'all' },
|
|
565
|
+
{ text: 'Exposed as Action', value: 'true' },
|
|
566
|
+
{ text: 'Not Exposed', value: 'false' },
|
|
567
|
+
];
|
|
568
|
+
/** Dynamic agent-type options built from AIEngineBase metadata. */
|
|
569
|
+
get agentTypeOptions() {
|
|
570
|
+
const aiEngine = AIEngineBase.Instance;
|
|
571
|
+
const types = aiEngine?.AgentTypes ?? [];
|
|
572
|
+
return [
|
|
573
|
+
{ text: 'All Types', value: 'all' },
|
|
574
|
+
...types.map(t => ({ text: t.Name, value: t.ID })),
|
|
575
|
+
];
|
|
576
|
+
}
|
|
577
|
+
/** Dynamic parent-agent options built from the loaded agents (top-level only). */
|
|
578
|
+
get parentAgentOptions() {
|
|
579
|
+
return [
|
|
580
|
+
{ text: 'All Agents', value: 'all' },
|
|
581
|
+
{ text: 'No Parent', value: 'none' },
|
|
582
|
+
...this.agents
|
|
583
|
+
.filter(a => !a.ParentID)
|
|
584
|
+
.map(a => ({ text: a.Name || 'Unnamed Agent', value: a.ID })),
|
|
585
|
+
];
|
|
586
|
+
}
|
|
587
|
+
/** View-mode options for the shared <mj-view-toggle>. */
|
|
588
|
+
agentViewOptions = [
|
|
589
|
+
{ key: 'grid', icon: 'fa-solid fa-grip', title: 'Grid View' },
|
|
590
|
+
{ key: 'list', icon: 'fa-solid fa-list', title: 'List View' },
|
|
591
|
+
{ key: 'tree', icon: 'fa-solid fa-folder-tree', title: 'Category Tree View' },
|
|
592
|
+
];
|
|
593
|
+
/** Field config consumed by the centralized <mj-filter-panel>. */
|
|
594
|
+
get agentFilterFields() {
|
|
595
|
+
return [
|
|
596
|
+
{ key: 'agentType', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-robot', options: this.agentTypeOptions },
|
|
597
|
+
{ key: 'parentAgent', type: 'dropdown', label: 'Parent', icon: 'fa-solid fa-sitemap', options: this.parentAgentOptions, filterable: this.parentAgentOptions.length > 10 },
|
|
598
|
+
{ key: 'status', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-toggle-on', options: this.statusOptions },
|
|
599
|
+
{ key: 'executionMode', type: 'dropdown', label: 'Execution Mode', icon: 'fa-solid fa-list-ol', options: this.executionModeOptions },
|
|
600
|
+
{ key: 'exposeAsAction', type: 'dropdown', label: 'Action Exposure', icon: 'fa-solid fa-share', options: this.exposeAsActionOptions },
|
|
601
|
+
];
|
|
602
|
+
}
|
|
603
|
+
/** Current category selection for the tree dropdown (Category is projected into mj-filter-panel as a custom widget). */
|
|
604
|
+
SelectedCategoryKey = null;
|
|
605
|
+
/**
|
|
606
|
+
* Timestamp of last real (non-null) category set. Used to swallow spurious
|
|
607
|
+
* null re-emits from <mj-tree-dropdown> that arrive milliseconds after a
|
|
608
|
+
* real selection — without the guard, the spurious null resets categoryId
|
|
609
|
+
* to 'all' before the user sees the filtered list, making the Category
|
|
610
|
+
* filter appear broken. See onCategoryChange below.
|
|
611
|
+
*/
|
|
612
|
+
_lastCategorySetAt = 0;
|
|
613
|
+
/** Handler for the projected mj-tree-dropdown — extracts the entity ID from the CompositeKey. */
|
|
614
|
+
onCategoryChange(value) {
|
|
615
|
+
// Duck-typed extraction — works whether tree-dropdown emits a real
|
|
616
|
+
// CompositeKey instance or a plain object (it's currently the latter
|
|
617
|
+
// when projected inside <mj-filter-panel>). Single-PK entities: take
|
|
618
|
+
// the first KVP's Value; FieldName varies by entity so positional is
|
|
619
|
+
// safer than name-matching.
|
|
620
|
+
const single = !value || Array.isArray(value) ? null : value;
|
|
621
|
+
// Swallow the spurious null re-emit that <mj-tree-dropdown> fires within
|
|
622
|
+
// a few milliseconds of a real selection (confirmed empirically — the
|
|
623
|
+
// null arrives ~2ms after the real CompositeKey). Without this guard, the
|
|
624
|
+
// null resets categoryId to 'all' and the filter never narrows. A 100ms
|
|
625
|
+
// window is short enough to never interfere with a deliberate user clear.
|
|
626
|
+
const now = Date.now();
|
|
627
|
+
if (single == null && (now - this._lastCategorySetAt) < 100) {
|
|
628
|
+
return;
|
|
629
|
+
}
|
|
630
|
+
const idValue = single?.KeyValuePairs?.[0]?.Value;
|
|
631
|
+
this.currentFilters = {
|
|
632
|
+
...this.currentFilters,
|
|
633
|
+
categoryId: (idValue != null && idValue !== '') ? String(idValue) : 'all'
|
|
634
|
+
};
|
|
635
|
+
if (single != null) {
|
|
636
|
+
this._lastCategorySetAt = now;
|
|
637
|
+
}
|
|
638
|
+
this.SelectedCategoryKey = single;
|
|
639
|
+
this.applyFilters();
|
|
640
|
+
this.saveUserPreferencesDebounced();
|
|
641
|
+
}
|
|
642
|
+
/** Receive the updated values record from <mj-filter-panel> and apply it. */
|
|
643
|
+
onFilterValuesChange(values) {
|
|
644
|
+
// Preserve fields the panel doesn't own (searchTerm comes from toolbar, categoryId from tree-dropdown handler)
|
|
645
|
+
this.currentFilters = {
|
|
646
|
+
...this.currentFilters,
|
|
647
|
+
agentType: values['agentType'] ?? 'all',
|
|
648
|
+
parentAgent: values['parentAgent'] ?? 'all',
|
|
649
|
+
status: values['status'] ?? 'all',
|
|
650
|
+
executionMode: values['executionMode'] ?? 'all',
|
|
651
|
+
exposeAsAction: values['exposeAsAction'] ?? 'all',
|
|
652
|
+
};
|
|
653
|
+
this.applyFilters();
|
|
654
|
+
this.saveUserPreferencesDebounced();
|
|
655
|
+
}
|
|
656
|
+
/** Number of currently-applied filter criteria inside the popover (excludes searchTerm — surfaced separately in the header). */
|
|
657
|
+
get ActiveFilterCount() {
|
|
658
|
+
const f = this.currentFilters;
|
|
659
|
+
let n = 0;
|
|
660
|
+
if (f.agentType && f.agentType !== 'all')
|
|
661
|
+
n++;
|
|
662
|
+
if (f.parentAgent && f.parentAgent !== 'all')
|
|
663
|
+
n++;
|
|
664
|
+
if (f.status && f.status !== 'all')
|
|
665
|
+
n++;
|
|
666
|
+
if (f.executionMode && f.executionMode !== 'all')
|
|
667
|
+
n++;
|
|
668
|
+
if (f.exposeAsAction && f.exposeAsAction !== 'all')
|
|
669
|
+
n++;
|
|
670
|
+
if (f.categoryId && f.categoryId !== 'all')
|
|
671
|
+
n++;
|
|
672
|
+
return n;
|
|
673
|
+
}
|
|
570
674
|
selectedAgentForTest = null;
|
|
571
675
|
// mj-tree configuration for category tree view
|
|
572
676
|
CategoryBranchConfig = {
|
|
@@ -819,6 +923,12 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
819
923
|
onFilterChange() {
|
|
820
924
|
this.applyFilters();
|
|
821
925
|
}
|
|
926
|
+
/** Handler for the inline mj-page-search input in the page-header toolbar. */
|
|
927
|
+
onSearchTermChange(value) {
|
|
928
|
+
this.currentFilters = { ...this.currentFilters, searchTerm: value ?? '' };
|
|
929
|
+
this.applyFilters();
|
|
930
|
+
this.saveUserPreferencesDebounced();
|
|
931
|
+
}
|
|
822
932
|
onResetFilters() {
|
|
823
933
|
this.currentFilters = {
|
|
824
934
|
searchTerm: '',
|
|
@@ -829,6 +939,11 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
829
939
|
exposeAsAction: 'all',
|
|
830
940
|
categoryId: 'all'
|
|
831
941
|
};
|
|
942
|
+
// Clear the tree-dropdown's bound value too — otherwise the dropdown
|
|
943
|
+
// visually still shows the previous category after Reset (the value
|
|
944
|
+
// input drives its internal display state).
|
|
945
|
+
this.SelectedCategoryKey = null;
|
|
946
|
+
this._lastCategorySetAt = 0;
|
|
832
947
|
this.applyFilters();
|
|
833
948
|
this.saveUserPreferencesDebounced();
|
|
834
949
|
}
|
|
@@ -1167,70 +1282,62 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
1167
1282
|
return 'fa-solid fa-robot';
|
|
1168
1283
|
}
|
|
1169
1284
|
static ɵfac = function AgentConfigurationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AgentConfigurationComponent)(i0.ɵɵdirectiveInject(i1.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i2.CreateAgentService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
1170
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentConfigurationComponent, selectors: [["app-agent-configuration"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
1171
|
-
i0.ɵɵelementStart(0, "
|
|
1172
|
-
i0.ɵɵelement(
|
|
1173
|
-
i0.ɵɵtext(5, " Agent Configuration ");
|
|
1174
|
-
i0.ɵɵelementEnd();
|
|
1175
|
-
i0.ɵɵelementStart(6, "button", 5);
|
|
1176
|
-
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_6_listener() { return ctx.toggleFilterPanel(); });
|
|
1177
|
-
i0.ɵɵelement(7, "i", 6);
|
|
1178
|
-
i0.ɵɵconditionalCreate(8, AgentConfigurationComponent_Conditional_8_Template, 1, 0)(9, AgentConfigurationComponent_Conditional_9_Template, 1, 0);
|
|
1285
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentConfigurationComponent, selectors: [["app-agent-configuration"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 21, vars: 19, consts: [["Title", "Agents", "Icon", "fa-solid fa-robot"], ["meta", ""], ["Label", "agents", 3, "Count"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["Label", "Category", "Icon", "fa-solid fa-folder-tree"], ["SelectionMode", "single", "SelectableTypes", "branch", "Placeholder", "All Categories", 3, "ValueChange", "BranchConfig", "Value", "Clearable", "EnableSearch"], [3, "KeyChange", "Options", "ActiveKey"], ["mjButton", "", "variant", "primary", "size", "sm", "title", "Create New Agent", 3, "click"], [1, "fa-solid", "fa-plus"], ["toolbar", ""], ["Placeholder", "Search agents...", 3, "ValueChange", "Value"], [3, "Flex"], [1, "loading-container"], [1, "detail-panel-overlay"], [1, "detail-panel"], ["text", "Loading agents...", "size", "large"], [1, "empty-state"], [1, "fa-solid", "fa-robot"], ["type", "button", 1, "empty-state-btn", 3, "click"], [1, "agents-grid"], [1, "agents-tree"], [1, "agents-list"], [1, "agent-card", 3, "expanded"], [1, "agent-card"], [1, "card-header", 3, "click"], [1, "agent-info"], [1, "agent-icon"], [1, "agent-logo", 3, "src", "alt"], [3, "class"], [1, "agent-details"], [1, "agent-name", 3, "innerHTML"], [1, "agent-meta"], [1, "meta-item", "type-badge"], [1, "fa-solid", "fa-tag"], [1, "meta-item", 3, "class"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-body"], [1, "agent-description", 3, "innerHTML"], [1, "agent-description", "text-muted"], [1, "expanded-content"], [1, "card-actions"], ["type", "button", "title", "View Details", 1, "action-btn"], ["type", "button", "title", "Run Agent", 1, "action-btn", "action-btn-primary"], [1, "meta-item"], [1, "fa-solid", "fa-circle", 2, "font-size", "8px"], [1, "agent-stats"], [1, "stat-item"], [1, "stat-label"], [1, "stat-value"], [1, "fa-solid", "fa-check", 2, "color", "#28a745"], [1, "fa-solid", "fa-times", 2, "color", "#dc3545"], ["type", "button", "title", "View Details", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-eye"], ["type", "button", "title", "Run Agent", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-play"], [3, "AfterNodeClick", "AfterNodeDoubleClick", "BranchConfig", "LeafConfig", "SelectionMode", "SelectableTypes", "ShowDescriptions", "ShowBadges", "ShowExpandCollapseAll", "EmptyMessage", "EmptyIcon"], [1, "agents-table"], [3, "click"], [1, "sort-header"], [1, "fa-solid", "fa-chevron-up", "sort-icon"], [1, "agent-name-cell"], [1, "agent-icon-small"], [1, "agent-logo-small", 3, "src", "alt"], [1, "agent-description-small", 3, "innerHTML"], [1, "type-badge"], [1, "status-badge"], [1, "table-actions"], ["type", "button", "title", "View Details", 1, "action-btn-small"], ["type", "button", "title", "Run Agent", 1, "action-btn-small", "primary"], ["type", "button", "title", "View Details", 1, "action-btn-small", 3, "click"], ["type", "button", "title", "Run Agent", 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-logo", 3, "src", "alt"], [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"], [1, "detail-section-title"], [1, "fa-solid", "fa-cog"], [1, "detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "fa-solid", "fa-clock"], [1, "detail-panel-actions"], ["type", "button", 1, "detail-action-btn", "secondary"], ["type", "button", 1, "detail-action-btn", "primary", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-align-left"], [1, "detail-description"], [1, "fa-solid", "fa-check", 2, "color", "#10b981"], [1, "fa-solid", "fa-times", 2, "color", "#ef4444"], ["type", "button", 1, "detail-action-btn", "secondary", 3, "click"]], template: function AgentConfigurationComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1286
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
|
|
1287
|
+
i0.ɵɵelement(3, "mj-stat-badge", 2);
|
|
1179
1288
|
i0.ɵɵelementEnd();
|
|
1180
|
-
i0.ɵɵelementStart(
|
|
1181
|
-
i0.ɵɵ
|
|
1182
|
-
i0.ɵɵ
|
|
1183
|
-
i0.ɵɵ
|
|
1184
|
-
i0.ɵɵ
|
|
1185
|
-
i0.ɵɵ
|
|
1186
|
-
i0.ɵɵelementEnd();
|
|
1187
|
-
i0.ɵɵelementStart(
|
|
1188
|
-
i0.ɵɵlistener("
|
|
1189
|
-
i0.ɵɵelement(17, "i", 13);
|
|
1289
|
+
i0.ɵɵelementStart(4, "div", 3)(5, "mj-filter-popover", 4);
|
|
1290
|
+
i0.ɵɵlistener("ClearAllRequested", function AgentConfigurationComponent_Template_mj_filter_popover_ClearAllRequested_5_listener() { return ctx.onResetFilters(); });
|
|
1291
|
+
i0.ɵɵelementStart(6, "mj-filter-panel", 5);
|
|
1292
|
+
i0.ɵɵlistener("ValuesChange", function AgentConfigurationComponent_Template_mj_filter_panel_ValuesChange_6_listener($event) { return ctx.onFilterValuesChange($event); })("Reset", function AgentConfigurationComponent_Template_mj_filter_panel_Reset_6_listener() { return ctx.onResetFilters(); });
|
|
1293
|
+
i0.ɵɵelementStart(7, "mj-filter-field", 6)(8, "mj-tree-dropdown", 7);
|
|
1294
|
+
i0.ɵɵlistener("ValueChange", function AgentConfigurationComponent_Template_mj_tree_dropdown_ValueChange_8_listener($event) { return ctx.onCategoryChange($event); });
|
|
1295
|
+
i0.ɵɵelementEnd()()()();
|
|
1296
|
+
i0.ɵɵelementStart(9, "mj-view-toggle", 8);
|
|
1297
|
+
i0.ɵɵlistener("KeyChange", function AgentConfigurationComponent_Template_mj_view_toggle_KeyChange_9_listener($event) { return ctx.setViewMode($event); });
|
|
1190
1298
|
i0.ɵɵelementEnd();
|
|
1191
|
-
i0.ɵɵelementStart(
|
|
1192
|
-
i0.ɵɵlistener("click", function
|
|
1193
|
-
i0.ɵɵelement(
|
|
1299
|
+
i0.ɵɵelementStart(10, "button", 9);
|
|
1300
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_10_listener() { return ctx.createNewAgent(); });
|
|
1301
|
+
i0.ɵɵelement(11, "i", 10);
|
|
1302
|
+
i0.ɵɵtext(12, " New Agent ");
|
|
1194
1303
|
i0.ɵɵelementEnd()();
|
|
1195
|
-
i0.ɵɵelementStart(
|
|
1196
|
-
i0.ɵɵlistener("
|
|
1197
|
-
i0.ɵɵelement(21, "i", 17);
|
|
1198
|
-
i0.ɵɵtext(22, " New Agent ");
|
|
1304
|
+
i0.ɵɵelementStart(13, "div", 11)(14, "mj-page-search", 12);
|
|
1305
|
+
i0.ɵɵlistener("ValueChange", function AgentConfigurationComponent_Template_mj_page_search_ValueChange_14_listener($event) { return ctx.onSearchTermChange($event); });
|
|
1199
1306
|
i0.ɵɵelementEnd()()();
|
|
1200
|
-
i0.ɵɵelementStart(
|
|
1201
|
-
i0.ɵɵconditionalCreate(
|
|
1202
|
-
i0.ɵɵ
|
|
1203
|
-
i0.ɵɵ
|
|
1204
|
-
i0.ɵɵconditionalCreate(
|
|
1205
|
-
i0.ɵɵ
|
|
1206
|
-
i0.ɵɵconditionalCreate(
|
|
1207
|
-
i0.ɵɵelementStart(31, "div", 24);
|
|
1208
|
-
i0.ɵɵconditionalCreate(32, AgentConfigurationComponent_Conditional_32_Template, 71, 26);
|
|
1307
|
+
i0.ɵɵelementStart(15, "mj-page-body", 13);
|
|
1308
|
+
i0.ɵɵconditionalCreate(16, AgentConfigurationComponent_Conditional_16_Template, 2, 0, "div", 14);
|
|
1309
|
+
i0.ɵɵconditionalCreate(17, AgentConfigurationComponent_Conditional_17_Template, 2, 1);
|
|
1310
|
+
i0.ɵɵelementEnd();
|
|
1311
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_18_Template, 1, 0, "div", 15);
|
|
1312
|
+
i0.ɵɵelementStart(19, "div", 16);
|
|
1313
|
+
i0.ɵɵconditionalCreate(20, AgentConfigurationComponent_Conditional_20_Template, 71, 26);
|
|
1209
1314
|
i0.ɵɵelementEnd()();
|
|
1210
1315
|
} if (rf & 2) {
|
|
1211
|
-
i0.ɵɵadvance(8);
|
|
1212
|
-
i0.ɵɵconditional(ctx.filterPanelVisible ? 8 : 9);
|
|
1213
|
-
i0.ɵɵadvance(3);
|
|
1214
|
-
i0.ɵɵtextInterpolate1("", ctx.filteredAgents.length, " agents");
|
|
1215
1316
|
i0.ɵɵadvance(3);
|
|
1216
|
-
i0.ɵɵ
|
|
1317
|
+
i0.ɵɵproperty("Count", ctx.filteredAgents.length);
|
|
1217
1318
|
i0.ɵɵadvance(2);
|
|
1218
|
-
i0.ɵɵ
|
|
1319
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
1320
|
+
i0.ɵɵadvance();
|
|
1321
|
+
i0.ɵɵproperty("Fields", ctx.agentFilterFields)("Values", ctx.currentFilters);
|
|
1219
1322
|
i0.ɵɵadvance(2);
|
|
1220
|
-
i0.ɵɵ
|
|
1221
|
-
i0.ɵɵadvance(
|
|
1222
|
-
i0.ɵɵ
|
|
1223
|
-
i0.ɵɵadvance(
|
|
1224
|
-
i0.ɵɵ
|
|
1323
|
+
i0.ɵɵproperty("BranchConfig", ctx.CategoryBranchConfig)("Value", ctx.SelectedCategoryKey)("Clearable", true)("EnableSearch", true);
|
|
1324
|
+
i0.ɵɵadvance();
|
|
1325
|
+
i0.ɵɵproperty("Options", ctx.agentViewOptions)("ActiveKey", ctx.viewMode);
|
|
1326
|
+
i0.ɵɵadvance(5);
|
|
1327
|
+
i0.ɵɵproperty("Value", ctx.currentFilters.searchTerm);
|
|
1328
|
+
i0.ɵɵadvance();
|
|
1329
|
+
i0.ɵɵproperty("Flex", true);
|
|
1330
|
+
i0.ɵɵadvance();
|
|
1331
|
+
i0.ɵɵconditional(ctx.isLoading ? 16 : -1);
|
|
1225
1332
|
i0.ɵɵadvance();
|
|
1226
|
-
i0.ɵɵconditional(!ctx.isLoading ?
|
|
1333
|
+
i0.ɵɵconditional(!ctx.isLoading ? 17 : -1);
|
|
1227
1334
|
i0.ɵɵadvance();
|
|
1228
|
-
i0.ɵɵconditional(ctx.detailPanelVisible ?
|
|
1335
|
+
i0.ɵɵconditional(ctx.detailPanelVisible ? 18 : -1);
|
|
1229
1336
|
i0.ɵɵadvance();
|
|
1230
1337
|
i0.ɵɵclassProp("visible", ctx.detailPanelVisible);
|
|
1231
1338
|
i0.ɵɵadvance();
|
|
1232
|
-
i0.ɵɵconditional(ctx.selectedAgent ?
|
|
1233
|
-
} }, dependencies: [i3.SplitComponent, i3.SplitAreaComponent, i4.LoadingComponent, i5.TreeComponent, i6.AgentFilterPanelComponent, i7.DatePipe, i8.HighlightSearchPipe], styles: ["\n\n\n\n\n\n\n\n.agent-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.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.item-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-hover);\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.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\n\nas-split[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n\n\n\n.agents-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 28px;\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.agents-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.agent-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.agent-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.agent-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.agent-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n.agent-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: var(--mj-brand-accent);\n}\n\n.agent-card.expanded[_ngcontent-%COMP%]::before {\n opacity: 1;\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-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-hover);\n}\n\n.agent-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.agent-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.agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.agent-icon[_ngcontent-%COMP%] .agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\n}\n\n.agent-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.agent-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-disabled[_ngcontent-%COMP%], \n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-disabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.meta-item.status-inactive[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 6px;\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 border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.meta-item.type-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.meta-item.type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\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-sunken);\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 24px 24px 24px;\n}\n\n.agent-description[_ngcontent-%COMP%] {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.agent-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\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.agent-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\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.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: 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.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.agents-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.agents-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.agents-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.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 16px 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.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.agents-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.sort-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n transition: all 0.2s ease;\n}\n\n.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.agents-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.agents-table[_ngcontent-%COMP%] th.sorted.desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.agents-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.agents-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.agents-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.agents-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.agent-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.agent-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 flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.agent-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.agent-icon-small[_ngcontent-%COMP%] .agent-logo-small[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 10px;\n}\n\n.agent-name-cell[_ngcontent-%COMP%] .agent-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.agent-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\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.3px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 8px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%], \n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.execution-mode[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n}\n\n.execution-mode[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.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.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\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 padding: 16px 20px;\n }\n\n .header-info[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .agents-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .agents-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .agent-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 18px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\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-icon[_ngcontent-%COMP%] .detail-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\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[_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-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%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.detail-code-block[_ngcontent-%COMP%] {\n background: var(--mj-text-primary);\n color: var(--mj-border-default);\n padding: 16px;\n border-radius: 10px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 13px;\n line-height: 1.6;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\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: var(--mj-bg-surface-hover);\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-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n[_nghost-%COMP%] .search-highlight, \n.search-highlight[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n\n\n\n\n\n\n.agents-tree[_ngcontent-%COMP%] {\n padding: 8px 16px;\n height: 100%;\n overflow: auto;\n}"] });
|
|
1339
|
+
i0.ɵɵconditional(ctx.selectedAgent ? 20 : -1);
|
|
1340
|
+
} }, dependencies: [i3.LoadingComponent, i4.TreeComponent, i4.TreeDropdownComponent, i5.MJButtonDirective, i5.MJPageHeaderComponent, i5.MJPageLayoutComponent, i5.MJPageBodyComponent, i5.MJFilterPopoverComponent, i5.MJPageSearchComponent, i5.MJFilterPanelComponent, i5.MJFilterFieldComponent, i5.MJViewToggleComponent, i5.MJStatBadgeComponent, i6.DatePipe, i7.HighlightSearchPipe], styles: ["\n\n\n\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-hover);\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.main-splitter[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\nas-split[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n\n\n\n\n\n\n.agents-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.agent-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.agent-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.agent-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.agent-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n.agent-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: var(--mj-brand-accent);\n}\n\n.agent-card.expanded[_ngcontent-%COMP%]::before {\n opacity: 1;\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-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-hover);\n}\n\n.agent-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.agent-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.agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.agent-icon[_ngcontent-%COMP%] .agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\n}\n\n.agent-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.agent-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-disabled[_ngcontent-%COMP%], \n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-disabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.meta-item.status-inactive[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 6px;\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 border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.meta-item.type-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.meta-item.type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\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-sunken);\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 24px 24px 24px;\n}\n\n.agent-description[_ngcontent-%COMP%] {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.agent-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\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.agent-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\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.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: 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.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.agents-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.agents-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.agents-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.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 16px 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.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.agents-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.sort-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n transition: all 0.2s ease;\n}\n\n.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.agents-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.agents-table[_ngcontent-%COMP%] th.sorted.desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.agents-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.agents-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.agents-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.agents-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.agent-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.agent-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 flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.agent-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.agent-icon-small[_ngcontent-%COMP%] .agent-logo-small[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 10px;\n}\n\n.agent-name-cell[_ngcontent-%COMP%] .agent-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.agent-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\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.3px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 8px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%], \n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.execution-mode[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n}\n\n.execution-mode[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.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.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\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 padding: 16px 20px;\n }\n\n .header-info[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .agents-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .agent-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 18px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\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-icon[_ngcontent-%COMP%] .detail-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\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[_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-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%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.detail-code-block[_ngcontent-%COMP%] {\n background: var(--mj-text-primary);\n color: var(--mj-border-default);\n padding: 16px;\n border-radius: 10px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 13px;\n line-height: 1.6;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\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: var(--mj-bg-surface-hover);\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-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n[_nghost-%COMP%] .search-highlight, \n.search-highlight[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n\n\n\n\n\n\n.agents-tree[_ngcontent-%COMP%] {\n padding: 8px 16px;\n height: 100%;\n overflow: auto;\n}"] });
|
|
1234
1341
|
};
|
|
1235
1342
|
AgentConfigurationComponent = __decorate([
|
|
1236
1343
|
RegisterClass(BaseResourceComponent, 'AIAgentsResource')
|
|
@@ -1238,7 +1345,7 @@ AgentConfigurationComponent = __decorate([
|
|
|
1238
1345
|
export { AgentConfigurationComponent };
|
|
1239
1346
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentConfigurationComponent, [{
|
|
1240
1347
|
type: Component,
|
|
1241
|
-
args: [{ standalone: false, selector: 'app-agent-configuration', template: "<div class=\"agent-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-robot\"></i>\n Agent 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=\"item-count\">{{ filteredAgents.length }} agents</span>\n </div>\n \n <div class=\"header-controls\">\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-grip\"></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 <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'tree'\"\n (click)=\"setViewMode('tree')\"\n title=\"Category Tree View\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </button>\n </div>\n \n <button \n type=\"button\" \n class=\"control-btn primary\"\n (click)=\"createNewAgent()\"\n title=\"Create New Agent\">\n <i class=\"fa-solid fa-plus\"></i>\n New Agent\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-agent-filter-panel\n [agents]=\"agents\"\n [filteredAgents]=\"filteredAgents\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-agent-filter-panel>\n </as-split-area>\n }\n\n <!-- Agents List Panel -->\n <as-split-area>\n <div class=\"agents-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Agents Display -->\n @if (!isLoading) {\n @if (filteredAgents.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h3>No agents found</h3>\n <p>No agents match your current filters. Try adjusting your search criteria or create a new agent.</p>\n <button \n type=\"button\" \n class=\"empty-state-btn\"\n (click)=\"createNewAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Agent\n </button>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"agents-grid\">\n @for (agent of filteredAgents; track agent.ID) {\n <div class=\"agent-card\" [class.expanded]=\"expandedAgentId === agent.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleAgentExpansion(agent.ID)\">\n <div class=\"agent-info\">\n <div class=\"agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"agent-details\">\n <h4 class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></h4>\n <div class=\"agent-meta\">\n <span class=\"meta-item type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ getAgentTypeName(agent) }}\n </span>\n @if (agent.Status) {\n <span class=\"meta-item\" [class]=\"'status-' + agent.Status.toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ agent.Status }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <i class=\"fa-solid fa-chevron-down expand-icon\" \n [class.rotated]=\"expandedAgentId === agent.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (agent.Description) {\n <p class=\"agent-description\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></p>\n } @else {\n <p class=\"agent-description text-muted\">No description provided</p>\n }\n \n <!-- Expandable Content -->\n @if (expandedAgentId === agent.ID) {\n <div class=\"expanded-content\">\n <div class=\"agent-stats\">\n @if (agent.Parent) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parent</span>\n <span class=\"stat-value\">{{ agent.Parent }}</span>\n </div>\n }\n <div class=\"stat-item\">\n <span class=\"stat-label\">Context Compression</span>\n <span class=\"stat-value\">\n @if (agent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #28a745;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #dc3545;\"></i> Disabled\n }\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showAgentDetails(agent, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n }\n\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Tree View (mj-tree component) -->\n @if (viewMode === 'tree') {\n <div class=\"agents-tree\">\n <mj-tree\n [BranchConfig]=\"CategoryBranchConfig\"\n [LeafConfig]=\"AgentLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [ShowDescriptions]=\"true\"\n [ShowBadges]=\"true\"\n [ShowExpandCollapseAll]=\"true\"\n [EmptyMessage]=\"'No agents found'\"\n [EmptyIcon]=\"'fa-solid fa-robot'\"\n (AfterNodeClick)=\"onTreeNodeClick($event)\"\n (AfterNodeDoubleClick)=\"onTreeNodeDoubleClick($event)\">\n </mj-tree>\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"agents-list\">\n <table class=\"agents-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 Name\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Type</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>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (agent of filteredAgents; track agent.ID) {\n <tr>\n <td>\n <div class=\"agent-name-cell\">\n <div class=\"agent-icon-small\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo-small\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div>\n <div class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></div>\n @if (agent.Description) {\n <div class=\"agent-description-small\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"type-badge\">\n {{ getAgentTypeName(agent) }}\n </span>\n </td>\n <td>\n <span class=\"status-badge\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status || 'Unknown' }}\n </span>\n </td>\n <td>\n <div class=\"table-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showAgentDetails(agent)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n }\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent)\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\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 (selectedAgent) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\" [style.background-color]=\"getAgentIconColor(selectedAgent)\">\n @if (hasLogoURL(selectedAgent)) {\n <img [src]=\"selectedAgent.LogoURL\" [alt]=\"selectedAgent.Name + ' logo'\" class=\"detail-logo\">\n } @else {\n <i [class]=\"getAgentIcon(selectedAgent)\"></i>\n }\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedAgent.Name }}</h3>\n <span class=\"detail-subtitle\">{{ getAgentTypeName(selectedAgent) }}</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 and Type Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [class]=\"'status-' + (selectedAgent.Status || 'unknown').toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ selectedAgent.Status || 'Unknown' }}\n </span>\n @if (selectedAgent.ExposeAsAction) {\n <span class=\"feature-badge\">\n <i class=\"fa-solid fa-bolt\"></i>\n Exposed as Action\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedAgent.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\">{{ selectedAgent.Description }}</p>\n </div>\n }\n\n <!-- Configuration Details -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n Configuration\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Execution Mode</span>\n <span class=\"detail-value\">\n <i [class]=\"getExecutionModeIcon(selectedAgent.ExecutionMode)\"></i>\n {{ selectedAgent.ExecutionMode }}\n </span>\n </div>\n @if (getParentAgentName(selectedAgent)) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parent Agent</span>\n <span class=\"detail-value\">{{ getParentAgentName(selectedAgent) }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedAgent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> Disabled\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Exposed as Action</span>\n <span class=\"detail-value\">\n @if (selectedAgent.ExposeAsAction) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> No\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Model Selection</span>\n <span class=\"detail-value\">{{ selectedAgent.ModelSelectionMode }}</span>\n </div>\n </div>\n </div>\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\">{{ selectedAgent.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ selectedAgent.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n @if (selectedAgent.Status === 'Active') {\n <button\n type=\"button\"\n class=\"detail-action-btn secondary\"\n (click)=\"runAgent(selectedAgent)\">\n <i class=\"fa-solid fa-play\"></i>\n Run Agent\n </button>\n }\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openAgentFromPanel()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n\n<!-- AI Agent Test Harness - Now handled by service with minimize support -->", styles: ["/* ============================================\n AI Agents Dashboard - World-Class Design\n Clean white header with brand blue accents\n ============================================ */\n\n/* Container */\n.agent-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/* Dashboard Header - Clean White Style */\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.item-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-hover);\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/* Main Content */\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/* Splitter Styling */\nas-split {\n background: transparent;\n}\n\n/* Filter Panel Styles - used by child component */\n\n/* Agents Content */\n.agents-content {\n height: 100%;\n overflow-y: auto;\n padding: 28px;\n background: var(--mj-bg-surface-card);\n}\n\n/* Grid View */\n.agents-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.agent-card {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.agent-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.agent-card:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.agent-card:hover::before {\n opacity: 1;\n}\n\n.agent-card.expanded {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: var(--mj-brand-accent);\n}\n\n.agent-card.expanded::before {\n opacity: 1;\n}\n\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-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header:hover {\n background-color: var(--mj-bg-surface-hover);\n}\n\n.agent-info {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.agent-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.agent-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.agent-icon .agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\n}\n\n.agent-details {\n flex: 1;\n min-width: 0;\n}\n\n.agent-name {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.agent-meta {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active i {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending {\n color: var(--mj-color-warning-700);\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-pending i {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-disabled,\n.meta-item.status-inactive {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-disabled i,\n.meta-item.status-inactive i {\n color: var(--mj-text-muted);\n}\n\n/* Type Badge - for Agent Type display */\n.type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 6px;\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 border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.type-badge i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n/* Type badge in meta context (grid view) */\n.meta-item.type-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.meta-item.type-badge i {\n color: var(--mj-brand-primary);\n}\n\n.expand-icon {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\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-sunken);\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body {\n padding: 0 24px 24px 24px;\n}\n\n.agent-description {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.agent-description.text-muted {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n/* Expanded Content */\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.agent-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\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.5px;\n}\n\n.stat-value {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary {\n background: var(--mj-brand-primary);\n border-color: 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.action-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* List View */\n.agents-list {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.agents-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.agents-table thead {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.agents-table th {\n padding: 16px 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.agents-table th:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.agents-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.sort-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sort-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n transition: all 0.2s ease;\n}\n\n.agents-table th:hover .sort-icon {\n color: var(--mj-brand-primary);\n}\n\n.agents-table th.sorted .sort-icon {\n color: var(--mj-brand-primary);\n}\n\n.agents-table th.sorted.desc .sort-icon {\n transform: rotate(180deg);\n}\n\n.agents-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.agents-table tbody tr:last-child {\n border-bottom: none;\n}\n\n.agents-table tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.agents-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.agent-name-cell {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.agent-icon-small {\n width: 42px;\n height: 42px;\n border-radius: 10px;\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 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.agent-icon-small i {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.agent-icon-small .agent-logo-small {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 10px;\n}\n\n.agent-name-cell .agent-name {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.agent-description-small {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\n}\n\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.3px;\n}\n\n.status-badge i {\n font-size: 8px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-disabled,\n.status-badge.status-inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.execution-mode {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n}\n\n.execution-mode i {\n color: var(--mj-brand-primary);\n}\n\n.table-actions {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.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/* Empty State */\n.empty-state {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state h3 {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state p {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Loading State */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n padding: 16px 20px;\n }\n\n .header-info {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls {\n justify-content: center;\n }\n\n .agents-content {\n padding: 16px;\n }\n\n .agents-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .agent-stats {\n grid-template-columns: 1fr;\n }\n\n .card-header {\n padding: 18px;\n }\n\n .card-body {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\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-icon .detail-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\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 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-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 i {\n font-size: 13px;\n}\n\n.detail-code-block {\n background: var(--mj-text-primary);\n color: var(--mj-border-default);\n padding: 16px;\n border-radius: 10px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 13px;\n line-height: 1.6;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\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: var(--mj-bg-surface-hover);\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-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* Search Highlight */\n:host ::ng-deep .search-highlight,\n.search-highlight {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n\n/* ============================================\n Tree View - Mac Finder Style\n ============================================ */\n\n.agents-tree {\n padding: 8px 16px;\n height: 100%;\n overflow: auto;\n}\n"] }]
|
|
1348
|
+
args: [{ standalone: false, selector: 'app-agent-configuration', template: "<mj-page-layout>\n <!-- Header -->\n <mj-page-header\n Title=\"Agents\"\n Icon=\"fa-solid fa-robot\">\n <div meta>\n <mj-stat-badge [Count]=\"filteredAgents.length\" Label=\"agents\"></mj-stat-badge>\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"onResetFilters()\">\n <mj-filter-panel\n [Fields]=\"agentFilterFields\"\n [Values]=\"$any(currentFilters)\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"onResetFilters()\">\n <!-- Custom widget: Category uses a tree-dropdown, projected via mj-filter-field -->\n <mj-filter-field Label=\"Category\" Icon=\"fa-solid fa-folder-tree\">\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"SelectedCategoryKey\"\n SelectionMode=\"single\"\n SelectableTypes=\"branch\"\n Placeholder=\"All Categories\"\n [Clearable]=\"true\"\n [EnableSearch]=\"true\"\n (ValueChange)=\"onCategoryChange($event)\">\n </mj-tree-dropdown>\n </mj-filter-field>\n </mj-filter-panel>\n </mj-filter-popover>\n\n <mj-view-toggle\n [Options]=\"agentViewOptions\"\n [ActiveKey]=\"viewMode\"\n (KeyChange)=\"setViewMode($any($event))\">\n </mj-view-toggle>\n\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewAgent()\" title=\"Create New Agent\">\n <i class=\"fa-solid fa-plus\"></i>\n New Agent\n </button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search agents...\"\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 agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Agents Display -->\n @if (!isLoading) {\n @if (filteredAgents.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h3>No agents found</h3>\n <p>No agents match your current filters. Try adjusting your search criteria or create a new agent.</p>\n <button \n type=\"button\" \n class=\"empty-state-btn\"\n (click)=\"createNewAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Agent\n </button>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"agents-grid\">\n @for (agent of filteredAgents; track agent.ID) {\n <div class=\"agent-card\" [class.expanded]=\"expandedAgentId === agent.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleAgentExpansion(agent.ID)\">\n <div class=\"agent-info\">\n <div class=\"agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"agent-details\">\n <h4 class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></h4>\n <div class=\"agent-meta\">\n <span class=\"meta-item type-badge\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ getAgentTypeName(agent) }}\n </span>\n @if (agent.Status) {\n <span class=\"meta-item\" [class]=\"'status-' + agent.Status.toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ agent.Status }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <i class=\"fa-solid fa-chevron-down expand-icon\" \n [class.rotated]=\"expandedAgentId === agent.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (agent.Description) {\n <p class=\"agent-description\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></p>\n } @else {\n <p class=\"agent-description text-muted\">No description provided</p>\n }\n \n <!-- Expandable Content -->\n @if (expandedAgentId === agent.ID) {\n <div class=\"expanded-content\">\n <div class=\"agent-stats\">\n @if (agent.Parent) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parent</span>\n <span class=\"stat-value\">{{ agent.Parent }}</span>\n </div>\n }\n <div class=\"stat-item\">\n <span class=\"stat-label\">Context Compression</span>\n <span class=\"stat-value\">\n @if (agent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #28a745;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #dc3545;\"></i> Disabled\n }\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showAgentDetails(agent, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n }\n\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Tree View (mj-tree component) -->\n @if (viewMode === 'tree') {\n <div class=\"agents-tree\">\n <mj-tree\n [BranchConfig]=\"CategoryBranchConfig\"\n [LeafConfig]=\"AgentLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [ShowDescriptions]=\"true\"\n [ShowBadges]=\"true\"\n [ShowExpandCollapseAll]=\"true\"\n [EmptyMessage]=\"'No agents found'\"\n [EmptyIcon]=\"'fa-solid fa-robot'\"\n (AfterNodeClick)=\"onTreeNodeClick($event)\"\n (AfterNodeDoubleClick)=\"onTreeNodeDoubleClick($event)\">\n </mj-tree>\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"agents-list\">\n <table class=\"agents-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 Name\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Type</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>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (agent of filteredAgents; track agent.ID) {\n <tr>\n <td>\n <div class=\"agent-name-cell\">\n <div class=\"agent-icon-small\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo-small\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div>\n <div class=\"agent-name\" [innerHTML]=\"agent.Name | highlightSearch:currentFilters.searchTerm\"></div>\n @if (agent.Description) {\n <div class=\"agent-description-small\" [innerHTML]=\"agent.Description | highlightSearch:currentFilters.searchTerm\"></div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"type-badge\">\n {{ getAgentTypeName(agent) }}\n </span>\n </td>\n <td>\n <span class=\"status-badge\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status || 'Unknown' }}\n </span>\n </td>\n <td>\n <div class=\"table-actions\">\n @if (UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showAgentDetails(agent)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n }\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent)\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\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 (selectedAgent) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\" [style.background-color]=\"getAgentIconColor(selectedAgent)\">\n @if (hasLogoURL(selectedAgent)) {\n <img [src]=\"selectedAgent.LogoURL\" [alt]=\"selectedAgent.Name + ' logo'\" class=\"detail-logo\">\n } @else {\n <i [class]=\"getAgentIcon(selectedAgent)\"></i>\n }\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedAgent.Name }}</h3>\n <span class=\"detail-subtitle\">{{ getAgentTypeName(selectedAgent) }}</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 and Type Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [class]=\"'status-' + (selectedAgent.Status || 'unknown').toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ selectedAgent.Status || 'Unknown' }}\n </span>\n @if (selectedAgent.ExposeAsAction) {\n <span class=\"feature-badge\">\n <i class=\"fa-solid fa-bolt\"></i>\n Exposed as Action\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedAgent.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\">{{ selectedAgent.Description }}</p>\n </div>\n }\n\n <!-- Configuration Details -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n Configuration\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Execution Mode</span>\n <span class=\"detail-value\">\n <i [class]=\"getExecutionModeIcon(selectedAgent.ExecutionMode)\"></i>\n {{ selectedAgent.ExecutionMode }}\n </span>\n </div>\n @if (getParentAgentName(selectedAgent)) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parent Agent</span>\n <span class=\"detail-value\">{{ getParentAgentName(selectedAgent) }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedAgent.EnableContextCompression) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Enabled\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> Disabled\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Exposed as Action</span>\n <span class=\"detail-value\">\n @if (selectedAgent.ExposeAsAction) {\n <i class=\"fa-solid fa-check\" style=\"color: #10b981;\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #ef4444;\"></i> No\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Model Selection</span>\n <span class=\"detail-value\">{{ selectedAgent.ModelSelectionMode }}</span>\n </div>\n </div>\n </div>\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\">{{ selectedAgent.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ selectedAgent.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n @if (selectedAgent.Status === 'Active') {\n <button\n type=\"button\"\n class=\"detail-action-btn secondary\"\n (click)=\"runAgent(selectedAgent)\">\n <i class=\"fa-solid fa-play\"></i>\n Run Agent\n </button>\n }\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openAgentFromPanel()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</mj-page-layout>\n\n<!-- AI Agent Test Harness - Now handled by service with minimize support -->", styles: ["/* ============================================\n AI Agents Dashboard - World-Class Design\n Clean white header with brand blue accents\n ============================================ */\n\n/* Container is now provided by <mj-page-layout> */\n\n/* Tinted card background on the body \u2014 matches the original .agents-content\n surface treatment so cards/lists sit on a lightly-tinted surface rather\n than the page background. */\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-hover);\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-splitter {\n flex: 1;\n min-height: 0;\n}\n\n/* Splitter Styling */\nas-split {\n background: transparent;\n}\n\n/* Filter Panel Styles - used by child component */\n\n/* Agents Content */\n\n/* Grid View */\n.agents-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.agent-card {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.agent-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.agent-card:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.agent-card:hover::before {\n opacity: 1;\n}\n\n.agent-card.expanded {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: var(--mj-brand-accent);\n}\n\n.agent-card.expanded::before {\n opacity: 1;\n}\n\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-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header:hover {\n background-color: var(--mj-bg-surface-hover);\n}\n\n.agent-info {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.agent-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.agent-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.agent-icon .agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\n}\n\n.agent-details {\n flex: 1;\n min-width: 0;\n}\n\n.agent-name {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.agent-meta {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active i {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending {\n color: var(--mj-color-warning-700);\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-pending i {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-disabled,\n.meta-item.status-inactive {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-disabled i,\n.meta-item.status-inactive i {\n color: var(--mj-text-muted);\n}\n\n/* Type Badge - for Agent Type display */\n.type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 6px;\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 border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.type-badge i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n/* Type badge in meta context (grid view) */\n.meta-item.type-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n.meta-item.type-badge i {\n color: var(--mj-brand-primary);\n}\n\n.expand-icon {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\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-sunken);\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body {\n padding: 0 24px 24px 24px;\n}\n\n.agent-description {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.agent-description.text-muted {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n/* Expanded Content */\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.agent-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\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.5px;\n}\n\n.stat-value {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary {\n background: var(--mj-brand-primary);\n border-color: 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.action-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* List View */\n.agents-list {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.agents-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.agents-table thead {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.agents-table th {\n padding: 16px 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.agents-table th:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.agents-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.sort-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sort-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n transition: all 0.2s ease;\n}\n\n.agents-table th:hover .sort-icon {\n color: var(--mj-brand-primary);\n}\n\n.agents-table th.sorted .sort-icon {\n color: var(--mj-brand-primary);\n}\n\n.agents-table th.sorted.desc .sort-icon {\n transform: rotate(180deg);\n}\n\n.agents-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.agents-table tbody tr:last-child {\n border-bottom: none;\n}\n\n.agents-table tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.agents-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.agent-name-cell {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.agent-icon-small {\n width: 42px;\n height: 42px;\n border-radius: 10px;\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 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.agent-icon-small i {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.agent-icon-small .agent-logo-small {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 10px;\n}\n\n.agent-name-cell .agent-name {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.agent-description-small {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\n}\n\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.3px;\n}\n\n.status-badge i {\n font-size: 8px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-disabled,\n.status-badge.status-inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.execution-mode {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n}\n\n.execution-mode i {\n color: var(--mj-brand-primary);\n}\n\n.table-actions {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.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/* Empty State */\n.empty-state {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state h3 {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state p {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Loading State */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n padding: 16px 20px;\n }\n\n .header-info {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls {\n justify-content: center;\n }\n\n .agents-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .agent-stats {\n grid-template-columns: 1fr;\n }\n\n .card-header {\n padding: 18px;\n }\n\n .card-body {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\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-icon .detail-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 14px;\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 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-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 i {\n font-size: 13px;\n}\n\n.detail-code-block {\n background: var(--mj-text-primary);\n color: var(--mj-border-default);\n padding: 16px;\n border-radius: 10px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 13px;\n line-height: 1.6;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\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: var(--mj-bg-surface-hover);\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-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* Search Highlight */\n:host ::ng-deep .search-highlight,\n.search-highlight {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n\n/* ============================================\n Tree View - Mac Finder Style\n ============================================ */\n\n.agents-tree {\n padding: 8px 16px;\n height: 100%;\n overflow: auto;\n}\n"] }]
|
|
1242
1349
|
}], () => [{ type: i1.AITestHarnessDialogService }, { type: i2.CreateAgentService }, { type: i0.ChangeDetectorRef }], null); })();
|
|
1243
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentConfigurationComponent, { className: "AgentConfigurationComponent", filePath: "src/AI/components/agents/agent-configuration.component.ts", lineNumber:
|
|
1350
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentConfigurationComponent, { className: "AgentConfigurationComponent", filePath: "src/AI/components/agents/agent-configuration.component.ts", lineNumber: 48 }); })();
|
|
1244
1351
|
//# sourceMappingURL=agent-configuration.component.js.map
|