@memberjunction/ng-dashboards 5.11.0 → 5.12.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 +34 -2
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +586 -223
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +2 -2
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +8 -0
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +85 -52
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts +1 -0
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.js +27 -5
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.d.ts +5 -0
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.js +23 -8
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +2 -2
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +2 -2
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +83 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -0
- package/dist/AI/components/requests/agent-requests-resource.component.js +547 -0
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -0
- package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
- package/dist/AI/components/system/system-configuration.component.js +2 -2
- package/dist/AI/components/widgets/kpi-card.component.js +7 -7
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.js +6 -6
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +2 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +3 -3
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +3 -3
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +3 -3
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +1 -1
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +2 -2
- package/dist/APIKeys/api-usage-panel.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/execution-monitoring.component.js +2 -2
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +2 -2
- package/dist/Actions/components/explorer/action-card.component.js +2 -2
- package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
- package/dist/Actions/components/explorer/action-list-item.component.js +2 -2
- package/dist/Actions/components/explorer/action-toolbar.component.js +2 -2
- package/dist/Actions/components/explorer/action-tree-panel.component.js +2 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js +2 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +2 -2
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +3 -3
- 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 +5 -5
- 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 +3 -3
- 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 +3 -3
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +2 -2
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +2 -2
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/browser/component-browser.component.js +2 -2
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +2 -2
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +2 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +2 -2
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +2 -2
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +2 -2
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +2 -2
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +9 -9
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +11 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +2 -2
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +12 -11
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +9 -9
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +2 -2
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +2 -2
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +2 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +2 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.js +4 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +2 -2
- package/dist/Integration/components/activity/activity.component.d.ts +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +5 -5
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts +31 -2
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +753 -412
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -3
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts +0 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +3 -6
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +3 -3
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts +20 -0
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +97 -5
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/components/visual-editor/visual-editor.component.js +2 -2
- package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +5 -1
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
- package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +2 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +7 -3
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +27 -2
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +107 -4
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +2 -2
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +2 -2
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +2 -2
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +3 -3
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
- package/dist/MCP/components/mcp-log-detail-panel.component.js +2 -2
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +2 -2
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2 -2
- package/dist/MCP/mcp-filter-panel.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js +7 -7
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/index.d.ts +0 -1
- package/dist/Scheduling/components/index.d.ts.map +1 -1
- package/dist/Scheduling/components/index.js +0 -1
- package/dist/Scheduling/components/index.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +2 -2
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +6 -9
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +118 -110
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +3 -3
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +2 -2
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +4 -4
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +2 -2
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +5 -5
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +2 -2
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +2 -2
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.js +4 -4
- package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +2 -2
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +2 -2
- package/dist/VersionHistory/components/diff-resource.component.js +2 -2
- package/dist/VersionHistory/components/graph-resource.component.js +2 -2
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +3 -3
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/__tests__/integration-data-service.test.js +1 -0
- package/dist/__tests__/integration-data-service.test.js.map +1 -1
- package/dist/module.d.ts +52 -49
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +25 -6
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +42 -40
- package/dist/Scheduling/components/job-slideout.component.d.ts +0 -45
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +0 -1
- package/dist/Scheduling/components/job-slideout.component.js +0 -459
- package/dist/Scheduling/components/job-slideout.component.js.map +0 -1
|
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { Component } from '@angular/core';
|
|
8
8
|
import { Subject } from 'rxjs';
|
|
9
9
|
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
10
|
-
import { Metadata, CompositeKey } from '@memberjunction/core';
|
|
10
|
+
import { Metadata, CompositeKey, RunView } from '@memberjunction/core';
|
|
11
11
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
12
12
|
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
13
13
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
@@ -17,55 +17,58 @@ 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
19
|
import * as i3 from "@memberjunction/ng-shared";
|
|
20
|
-
import * as i4 from "@
|
|
21
|
-
import * as i5 from "@
|
|
22
|
-
import * as i6 from "
|
|
23
|
-
import * as i7 from "
|
|
20
|
+
import * as i4 from "@angular/common";
|
|
21
|
+
import * as i5 from "@progress/kendo-angular-layout";
|
|
22
|
+
import * as i6 from "@memberjunction/ng-shared-generic";
|
|
23
|
+
import * as i7 from "./agent-filter-panel.component";
|
|
24
24
|
import * as i8 from "../../../shared/pipes/highlight-search.pipe";
|
|
25
|
+
const _c0 = a0 => ({ $implicit: a0, depth: 0 });
|
|
26
|
+
const _c1 = (a0, a1) => ({ $implicit: a0, depth: a1 });
|
|
25
27
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
28
|
+
const _forTrack1 = ($index, $item) => $item.Category.ID;
|
|
26
29
|
function AgentConfigurationComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
27
30
|
i0.ɵɵtext(0, " Hide Filters ");
|
|
28
31
|
} }
|
|
29
32
|
function AgentConfigurationComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
30
33
|
i0.ɵɵtext(0, " Show Filters ");
|
|
31
34
|
} }
|
|
32
|
-
function
|
|
33
|
-
i0.ɵɵelementStart(0, "div",
|
|
34
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
35
|
+
function AgentConfigurationComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
37
|
+
i0.ɵɵelement(1, "mj-loading", 28);
|
|
35
38
|
i0.ɵɵelementEnd();
|
|
36
39
|
} }
|
|
37
|
-
function
|
|
40
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
38
41
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
39
|
-
i0.ɵɵelementStart(0, "div",
|
|
40
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
i0.ɵɵelementStart(0, "div", 29);
|
|
43
|
+
i0.ɵɵelement(1, "i", 5);
|
|
41
44
|
i0.ɵɵelementStart(2, "h3");
|
|
42
45
|
i0.ɵɵtext(3, "No agents found");
|
|
43
46
|
i0.ɵɵelementEnd();
|
|
44
47
|
i0.ɵɵelementStart(4, "p");
|
|
45
48
|
i0.ɵɵtext(5, "No agents match your current filters. Try adjusting your search criteria or create a new agent.");
|
|
46
49
|
i0.ɵɵelementEnd();
|
|
47
|
-
i0.ɵɵelementStart(6, "button",
|
|
48
|
-
i0.ɵɵlistener("click", function
|
|
49
|
-
i0.ɵɵelement(7, "i",
|
|
50
|
+
i0.ɵɵelementStart(6, "button", 30);
|
|
51
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewAgent()); });
|
|
52
|
+
i0.ɵɵelement(7, "i", 18);
|
|
50
53
|
i0.ɵɵtext(8, " Create New Agent ");
|
|
51
54
|
i0.ɵɵelementEnd()();
|
|
52
55
|
} }
|
|
53
|
-
function
|
|
54
|
-
i0.ɵɵelement(0, "img",
|
|
56
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
i0.ɵɵelement(0, "img", 39);
|
|
55
58
|
} if (rf & 2) {
|
|
56
59
|
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
57
60
|
i0.ɵɵproperty("src", agent_r4.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r4.Name + " logo");
|
|
58
61
|
} }
|
|
59
|
-
function
|
|
62
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
60
63
|
i0.ɵɵelement(0, "i");
|
|
61
64
|
} if (rf & 2) {
|
|
62
65
|
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
63
66
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
64
67
|
i0.ɵɵclassMap(ctx_r1.getAgentIcon(agent_r4));
|
|
65
68
|
} }
|
|
66
|
-
function
|
|
67
|
-
i0.ɵɵelementStart(0, "span",
|
|
68
|
-
i0.ɵɵelement(1, "i",
|
|
69
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
+
i0.ɵɵelementStart(0, "span", 55);
|
|
71
|
+
i0.ɵɵelement(1, "i", 56);
|
|
69
72
|
i0.ɵɵtext(2);
|
|
70
73
|
i0.ɵɵelementEnd();
|
|
71
74
|
} if (rf & 2) {
|
|
@@ -74,24 +77,24 @@ function AgentConfigurationComponent_Conditional_28_Conditional_1_Conditional_0_
|
|
|
74
77
|
i0.ɵɵadvance(2);
|
|
75
78
|
i0.ɵɵtextInterpolate1(" ", agent_r4.Status, " ");
|
|
76
79
|
} }
|
|
77
|
-
function
|
|
78
|
-
i0.ɵɵelement(0, "p",
|
|
80
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
i0.ɵɵelement(0, "p", 49);
|
|
79
82
|
i0.ɵɵpipe(1, "highlightSearch");
|
|
80
83
|
} if (rf & 2) {
|
|
81
84
|
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
82
85
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
83
86
|
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1, agent_r4.Description, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
84
87
|
} }
|
|
85
|
-
function
|
|
86
|
-
i0.ɵɵelementStart(0, "p",
|
|
88
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "p", 50);
|
|
87
90
|
i0.ɵɵtext(1, "No description provided");
|
|
88
91
|
i0.ɵɵelementEnd();
|
|
89
92
|
} }
|
|
90
|
-
function
|
|
91
|
-
i0.ɵɵelementStart(0, "div",
|
|
93
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "span", 59);
|
|
92
95
|
i0.ɵɵtext(2, "Parent");
|
|
93
96
|
i0.ɵɵelementEnd();
|
|
94
|
-
i0.ɵɵelementStart(3, "span",
|
|
97
|
+
i0.ɵɵelementStart(3, "span", 60);
|
|
95
98
|
i0.ɵɵtext(4);
|
|
96
99
|
i0.ɵɵelementEnd()();
|
|
97
100
|
} if (rf & 2) {
|
|
@@ -99,22 +102,22 @@ function AgentConfigurationComponent_Conditional_28_Conditional_1_Conditional_0_
|
|
|
99
102
|
i0.ɵɵadvance(4);
|
|
100
103
|
i0.ɵɵtextInterpolate(agent_r4.Parent);
|
|
101
104
|
} }
|
|
102
|
-
function
|
|
103
|
-
i0.ɵɵelement(0, "i",
|
|
105
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
+
i0.ɵɵelement(0, "i", 61);
|
|
104
107
|
i0.ɵɵtext(1, " Enabled ");
|
|
105
108
|
} }
|
|
106
|
-
function
|
|
107
|
-
i0.ɵɵelement(0, "i",
|
|
109
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
+
i0.ɵɵelement(0, "i", 62);
|
|
108
111
|
i0.ɵɵtext(1, " Disabled ");
|
|
109
112
|
} }
|
|
110
|
-
function
|
|
111
|
-
i0.ɵɵelementStart(0, "div",
|
|
112
|
-
i0.ɵɵconditionalCreate(2,
|
|
113
|
-
i0.ɵɵelementStart(3, "div",
|
|
113
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "div", 57);
|
|
115
|
+
i0.ɵɵconditionalCreate(2, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_2_Template, 5, 1, "div", 58);
|
|
116
|
+
i0.ɵɵelementStart(3, "div", 58)(4, "span", 59);
|
|
114
117
|
i0.ɵɵtext(5, "Context Compression");
|
|
115
118
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵelementStart(6, "span",
|
|
117
|
-
i0.ɵɵconditionalCreate(7,
|
|
119
|
+
i0.ɵɵelementStart(6, "span", 60);
|
|
120
|
+
i0.ɵɵconditionalCreate(7, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_7_Template, 2, 0)(8, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Conditional_8_Template, 2, 0);
|
|
118
121
|
i0.ɵɵelementEnd()()()();
|
|
119
122
|
} if (rf & 2) {
|
|
120
123
|
const agent_r4 = i0.ɵɵnextContext().$implicit;
|
|
@@ -123,47 +126,47 @@ function AgentConfigurationComponent_Conditional_28_Conditional_1_Conditional_0_
|
|
|
123
126
|
i0.ɵɵadvance(5);
|
|
124
127
|
i0.ɵɵconditional(agent_r4.EnableContextCompression ? 7 : 8);
|
|
125
128
|
} }
|
|
126
|
-
function
|
|
129
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
127
130
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
128
|
-
i0.ɵɵelementStart(0, "button",
|
|
129
|
-
i0.ɵɵlistener("click", function
|
|
130
|
-
i0.ɵɵelement(1, "i",
|
|
131
|
+
i0.ɵɵelementStart(0, "button", 63);
|
|
132
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_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)); });
|
|
133
|
+
i0.ɵɵelement(1, "i", 64);
|
|
131
134
|
i0.ɵɵtext(2, " Details ");
|
|
132
135
|
i0.ɵɵelementEnd();
|
|
133
136
|
} }
|
|
134
|
-
function
|
|
137
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
135
138
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
136
|
-
i0.ɵɵelementStart(0, "button",
|
|
137
|
-
i0.ɵɵlistener("click", function
|
|
138
|
-
i0.ɵɵelement(1, "i",
|
|
139
|
+
i0.ɵɵelementStart(0, "button", 65);
|
|
140
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_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()); });
|
|
141
|
+
i0.ɵɵelement(1, "i", 66);
|
|
139
142
|
i0.ɵɵtext(2, " Run ");
|
|
140
143
|
i0.ɵɵelementEnd();
|
|
141
144
|
} }
|
|
142
|
-
function
|
|
145
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
143
146
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
144
|
-
i0.ɵɵelementStart(0, "div",
|
|
145
|
-
i0.ɵɵlistener("click", function
|
|
146
|
-
i0.ɵɵelementStart(2, "div",
|
|
147
|
-
i0.ɵɵconditionalCreate(4,
|
|
147
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
148
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_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)); });
|
|
149
|
+
i0.ɵɵelementStart(2, "div", 37)(3, "div", 38);
|
|
150
|
+
i0.ɵɵconditionalCreate(4, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_4_Template, 1, 2, "img", 39)(5, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_5_Template, 1, 2, "i", 40);
|
|
148
151
|
i0.ɵɵelementEnd();
|
|
149
|
-
i0.ɵɵelementStart(6, "div",
|
|
150
|
-
i0.ɵɵelement(7, "h4",
|
|
152
|
+
i0.ɵɵelementStart(6, "div", 41);
|
|
153
|
+
i0.ɵɵelement(7, "h4", 42);
|
|
151
154
|
i0.ɵɵpipe(8, "highlightSearch");
|
|
152
|
-
i0.ɵɵelementStart(9, "div",
|
|
153
|
-
i0.ɵɵelement(11, "i",
|
|
155
|
+
i0.ɵɵelementStart(9, "div", 43)(10, "span", 44);
|
|
156
|
+
i0.ɵɵelement(11, "i", 45);
|
|
154
157
|
i0.ɵɵtext(12);
|
|
155
158
|
i0.ɵɵelementEnd();
|
|
156
|
-
i0.ɵɵconditionalCreate(13,
|
|
159
|
+
i0.ɵɵconditionalCreate(13, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_13_Template, 3, 3, "span", 46);
|
|
157
160
|
i0.ɵɵelementEnd()()();
|
|
158
|
-
i0.ɵɵelement(14, "i",
|
|
161
|
+
i0.ɵɵelement(14, "i", 47);
|
|
159
162
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵelementStart(15, "div",
|
|
161
|
-
i0.ɵɵconditionalCreate(16,
|
|
162
|
-
i0.ɵɵconditionalCreate(18,
|
|
163
|
+
i0.ɵɵelementStart(15, "div", 48);
|
|
164
|
+
i0.ɵɵconditionalCreate(16, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_16_Template, 2, 4, "p", 49)(17, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_17_Template, 2, 0, "p", 50);
|
|
165
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_18_Template, 9, 2, "div", 51);
|
|
163
166
|
i0.ɵɵelementEnd();
|
|
164
|
-
i0.ɵɵelementStart(19, "div",
|
|
165
|
-
i0.ɵɵconditionalCreate(20,
|
|
166
|
-
i0.ɵɵconditionalCreate(21,
|
|
167
|
+
i0.ɵɵelementStart(19, "div", 52);
|
|
168
|
+
i0.ɵɵconditionalCreate(20, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_20_Template, 3, 0, "button", 53);
|
|
169
|
+
i0.ɵɵconditionalCreate(21, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Conditional_21_Template, 3, 0, "button", 54);
|
|
167
170
|
i0.ɵɵelementEnd()();
|
|
168
171
|
} if (rf & 2) {
|
|
169
172
|
const agent_r4 = ctx.$implicit;
|
|
@@ -190,113 +193,348 @@ function AgentConfigurationComponent_Conditional_28_Conditional_1_Conditional_0_
|
|
|
190
193
|
i0.ɵɵadvance();
|
|
191
194
|
i0.ɵɵconditional(agent_r4.Status === "Active" && ctx_r1.UserCanReadAgents ? 21 : -1);
|
|
192
195
|
} }
|
|
193
|
-
function
|
|
194
|
-
i0.ɵɵelementStart(0, "div",
|
|
195
|
-
i0.ɵɵrepeaterCreate(1,
|
|
196
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
197
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
198
|
+
i0.ɵɵrepeaterCreate(1, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_For_2_Template, 22, 17, "div", 34, _forTrack0);
|
|
196
199
|
i0.ɵɵelementEnd();
|
|
197
200
|
} if (rf & 2) {
|
|
198
201
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
199
202
|
i0.ɵɵadvance();
|
|
200
203
|
i0.ɵɵrepeater(ctx_r1.filteredAgents);
|
|
201
204
|
} }
|
|
202
|
-
function
|
|
203
|
-
i0.ɵɵ
|
|
205
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_For_2_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
i0.ɵɵelementContainer(0);
|
|
207
|
+
} }
|
|
208
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
i0.ɵɵtemplate(0, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_For_2_Conditional_0_ng_container_0_Template, 1, 0, "ng-container", 68);
|
|
204
210
|
} if (rf & 2) {
|
|
205
|
-
const
|
|
206
|
-
i0.ɵɵ
|
|
211
|
+
const node_r7 = i0.ɵɵnextContext().$implicit;
|
|
212
|
+
i0.ɵɵnextContext(2);
|
|
213
|
+
const categoryNodeTpl_r8 = i0.ɵɵreference(3);
|
|
214
|
+
i0.ɵɵproperty("ngTemplateOutlet", categoryNodeTpl_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, node_r7));
|
|
215
|
+
} }
|
|
216
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
217
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_For_2_Conditional_0_Template, 1, 4, "ng-container");
|
|
218
|
+
} if (rf & 2) {
|
|
219
|
+
const node_r7 = ctx.$implicit;
|
|
220
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
221
|
+
i0.ɵɵconditional(ctx_r1.hasVisibleContent(node_r7) ? 0 : -1);
|
|
207
222
|
} }
|
|
208
|
-
function
|
|
223
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
224
|
+
i0.ɵɵelement(0, "img", 77);
|
|
225
|
+
} if (rf & 2) {
|
|
226
|
+
const agent_r10 = i0.ɵɵnextContext().$implicit;
|
|
227
|
+
i0.ɵɵproperty("src", agent_r10.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r10.Name + " logo");
|
|
228
|
+
} }
|
|
229
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
209
230
|
i0.ɵɵelement(0, "i");
|
|
210
231
|
} if (rf & 2) {
|
|
211
|
-
const
|
|
232
|
+
const agent_r10 = i0.ɵɵnextContext().$implicit;
|
|
233
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
234
|
+
i0.ɵɵclassMap(ctx_r1.getAgentIcon(agent_r10));
|
|
235
|
+
} }
|
|
236
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
238
|
+
i0.ɵɵelementStart(0, "button", 83);
|
|
239
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); const agent_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); ctx_r1.runAgent(agent_r10); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
240
|
+
i0.ɵɵelement(1, "i", 66);
|
|
241
|
+
i0.ɵɵelementEnd();
|
|
242
|
+
} }
|
|
243
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
244
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
245
|
+
i0.ɵɵelementStart(0, "div", 75);
|
|
246
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Template_div_click_0_listener() { const agent_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.showAgentDetails(agent_r10)); });
|
|
247
|
+
i0.ɵɵelementStart(1, "div", 76);
|
|
248
|
+
i0.ɵɵconditionalCreate(2, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_2_Template, 1, 2, "img", 77)(3, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_3_Template, 1, 2, "i", 40);
|
|
249
|
+
i0.ɵɵelementEnd();
|
|
250
|
+
i0.ɵɵelementStart(4, "div", 78)(5, "span", 79);
|
|
251
|
+
i0.ɵɵtext(6);
|
|
252
|
+
i0.ɵɵelementEnd();
|
|
253
|
+
i0.ɵɵelementStart(7, "span", 80);
|
|
254
|
+
i0.ɵɵtext(8);
|
|
255
|
+
i0.ɵɵelementEnd()();
|
|
256
|
+
i0.ɵɵelementStart(9, "span", 81);
|
|
257
|
+
i0.ɵɵtext(10);
|
|
258
|
+
i0.ɵɵelementEnd();
|
|
259
|
+
i0.ɵɵconditionalCreate(11, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Conditional_11_Template, 2, 0, "button", 82);
|
|
260
|
+
i0.ɵɵelementEnd();
|
|
261
|
+
} if (rf & 2) {
|
|
262
|
+
const agent_r10 = ctx.$implicit;
|
|
263
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
264
|
+
i0.ɵɵadvance();
|
|
265
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(agent_r10));
|
|
266
|
+
i0.ɵɵadvance();
|
|
267
|
+
i0.ɵɵconditional(ctx_r1.hasLogoURL(agent_r10) ? 2 : 3);
|
|
268
|
+
i0.ɵɵadvance(4);
|
|
269
|
+
i0.ɵɵtextInterpolate(agent_r10.Name);
|
|
270
|
+
i0.ɵɵadvance(2);
|
|
271
|
+
i0.ɵɵtextInterpolate(ctx_r1.getAgentTypeName(agent_r10));
|
|
272
|
+
i0.ɵɵadvance();
|
|
273
|
+
i0.ɵɵclassMap("status-" + (agent_r10.Status || "unknown").toLowerCase());
|
|
274
|
+
i0.ɵɵadvance();
|
|
275
|
+
i0.ɵɵtextInterpolate1(" ", agent_r10.Status, " ");
|
|
276
|
+
i0.ɵɵadvance();
|
|
277
|
+
i0.ɵɵconditional(agent_r10.Status === "Active" && ctx_r1.UserCanReadAgents ? 11 : -1);
|
|
278
|
+
} }
|
|
279
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "div", 69);
|
|
281
|
+
i0.ɵɵelement(2, "i", 70);
|
|
282
|
+
i0.ɵɵelementStart(3, "span", 71);
|
|
283
|
+
i0.ɵɵtext(4, "Uncategorized");
|
|
284
|
+
i0.ɵɵelementEnd();
|
|
285
|
+
i0.ɵɵelementStart(5, "span", 72);
|
|
286
|
+
i0.ɵɵtext(6);
|
|
287
|
+
i0.ɵɵelementEnd()();
|
|
288
|
+
i0.ɵɵelementStart(7, "div", 73);
|
|
289
|
+
i0.ɵɵrepeaterCreate(8, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_For_9_Template, 12, 9, "div", 74, _forTrack0);
|
|
290
|
+
i0.ɵɵelementEnd()();
|
|
291
|
+
} if (rf & 2) {
|
|
212
292
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
213
|
-
i0.ɵɵ
|
|
293
|
+
i0.ɵɵadvance(6);
|
|
294
|
+
i0.ɵɵtextInterpolate(ctx_r1.uncategorizedAgents.length);
|
|
295
|
+
i0.ɵɵadvance(2);
|
|
296
|
+
i0.ɵɵrepeater(ctx_r1.uncategorizedAgents);
|
|
297
|
+
} }
|
|
298
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
300
|
+
i0.ɵɵrepeaterCreate(1, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_For_2_Template, 1, 1, null, null, _forTrack1);
|
|
301
|
+
i0.ɵɵconditionalCreate(3, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Conditional_3_Template, 10, 1, "div", 67);
|
|
302
|
+
i0.ɵɵelementEnd();
|
|
303
|
+
} if (rf & 2) {
|
|
304
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
305
|
+
i0.ɵɵadvance();
|
|
306
|
+
i0.ɵɵrepeater(ctx_r1.categoryTree);
|
|
307
|
+
i0.ɵɵadvance(2);
|
|
308
|
+
i0.ɵɵconditional(ctx_r1.uncategorizedAgents.length > 0 ? 3 : -1);
|
|
214
309
|
} }
|
|
215
|
-
function
|
|
216
|
-
i0.ɵɵelement(0, "
|
|
310
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
i0.ɵɵelement(0, "img", 77);
|
|
312
|
+
} if (rf & 2) {
|
|
313
|
+
const agent_r15 = i0.ɵɵnextContext().$implicit;
|
|
314
|
+
i0.ɵɵproperty("src", agent_r15.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r15.Name + " logo");
|
|
315
|
+
} }
|
|
316
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
317
|
+
i0.ɵɵelement(0, "i");
|
|
318
|
+
} if (rf & 2) {
|
|
319
|
+
const agent_r15 = i0.ɵɵnextContext().$implicit;
|
|
320
|
+
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
321
|
+
i0.ɵɵclassMap(ctx_r1.getAgentIcon(agent_r15));
|
|
322
|
+
} }
|
|
323
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
324
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
325
|
+
i0.ɵɵelementStart(0, "button", 83);
|
|
326
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const agent_r15 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(6); ctx_r1.runAgent(agent_r15); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
327
|
+
i0.ɵɵelement(1, "i", 66);
|
|
328
|
+
i0.ɵɵelementEnd();
|
|
329
|
+
} }
|
|
330
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
331
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
332
|
+
i0.ɵɵelementStart(0, "div", 75);
|
|
333
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Template_div_click_0_listener() { const agent_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.showAgentDetails(agent_r15)); });
|
|
334
|
+
i0.ɵɵelementStart(1, "div", 76);
|
|
335
|
+
i0.ɵɵconditionalCreate(2, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_2_Template, 1, 2, "img", 77)(3, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_3_Template, 1, 2, "i", 40);
|
|
336
|
+
i0.ɵɵelementEnd();
|
|
337
|
+
i0.ɵɵelementStart(4, "div", 78)(5, "span", 79);
|
|
338
|
+
i0.ɵɵtext(6);
|
|
339
|
+
i0.ɵɵelementEnd();
|
|
340
|
+
i0.ɵɵelementStart(7, "span", 80);
|
|
341
|
+
i0.ɵɵtext(8);
|
|
342
|
+
i0.ɵɵelementEnd()();
|
|
343
|
+
i0.ɵɵelementStart(9, "span", 81);
|
|
344
|
+
i0.ɵɵtext(10);
|
|
345
|
+
i0.ɵɵelementEnd();
|
|
346
|
+
i0.ɵɵconditionalCreate(11, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Conditional_11_Template, 2, 0, "button", 82);
|
|
347
|
+
i0.ɵɵelementEnd();
|
|
348
|
+
} if (rf & 2) {
|
|
349
|
+
const agent_r15 = ctx.$implicit;
|
|
350
|
+
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
351
|
+
i0.ɵɵadvance();
|
|
352
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(agent_r15));
|
|
353
|
+
i0.ɵɵadvance();
|
|
354
|
+
i0.ɵɵconditional(ctx_r1.hasLogoURL(agent_r15) ? 2 : 3);
|
|
355
|
+
i0.ɵɵadvance(4);
|
|
356
|
+
i0.ɵɵtextInterpolate(agent_r15.Name);
|
|
357
|
+
i0.ɵɵadvance(2);
|
|
358
|
+
i0.ɵɵtextInterpolate(ctx_r1.getAgentTypeName(agent_r15));
|
|
359
|
+
i0.ɵɵadvance();
|
|
360
|
+
i0.ɵɵclassMap("status-" + (agent_r15.Status || "unknown").toLowerCase());
|
|
361
|
+
i0.ɵɵadvance();
|
|
362
|
+
i0.ɵɵtextInterpolate1(" ", agent_r15.Status, " ");
|
|
363
|
+
i0.ɵɵadvance();
|
|
364
|
+
i0.ɵɵconditional(agent_r15.Status === "Active" && ctx_r1.UserCanReadAgents ? 11 : -1);
|
|
365
|
+
} }
|
|
366
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
367
|
+
i0.ɵɵelementStart(0, "div", 73);
|
|
368
|
+
i0.ɵɵrepeaterCreate(1, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_For_2_Template, 12, 9, "div", 74, _forTrack0);
|
|
369
|
+
i0.ɵɵelementEnd();
|
|
370
|
+
} if (rf & 2) {
|
|
371
|
+
const ctx_r16 = i0.ɵɵnextContext(2);
|
|
372
|
+
const node_r13 = ctx_r16.$implicit;
|
|
373
|
+
const depth_r18 = ctx_r16.depth;
|
|
374
|
+
i0.ɵɵstyleProp("padding-left", (depth_r18 + 1) * 24, "px");
|
|
375
|
+
i0.ɵɵadvance();
|
|
376
|
+
i0.ɵɵrepeater(node_r13.Agents);
|
|
377
|
+
} }
|
|
378
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_For_2_Conditional_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
379
|
+
i0.ɵɵelementContainer(0);
|
|
380
|
+
} }
|
|
381
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
382
|
+
i0.ɵɵelementStart(0, "div");
|
|
383
|
+
i0.ɵɵtemplate(1, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_For_2_Conditional_0_ng_container_1_Template, 1, 0, "ng-container", 68);
|
|
384
|
+
i0.ɵɵelementEnd();
|
|
385
|
+
} if (rf & 2) {
|
|
386
|
+
const child_r19 = i0.ɵɵnextContext().$implicit;
|
|
387
|
+
const depth_r18 = i0.ɵɵnextContext(2).depth;
|
|
388
|
+
i0.ɵɵnextContext();
|
|
389
|
+
const categoryNodeTpl_r8 = i0.ɵɵreference(3);
|
|
390
|
+
i0.ɵɵstyleProp("padding-left", (depth_r18 + 1) * 24, "px");
|
|
391
|
+
i0.ɵɵadvance();
|
|
392
|
+
i0.ɵɵproperty("ngTemplateOutlet", categoryNodeTpl_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction2(4, _c1, child_r19, depth_r18 + 1));
|
|
393
|
+
} }
|
|
394
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
395
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_For_2_Conditional_0_Template, 2, 7, "div", 88);
|
|
396
|
+
} if (rf & 2) {
|
|
397
|
+
const child_r19 = ctx.$implicit;
|
|
398
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
399
|
+
i0.ɵɵconditional(ctx_r1.hasVisibleContent(child_r19) ? 0 : -1);
|
|
400
|
+
} }
|
|
401
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
402
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Conditional_0_Template, 3, 2, "div", 87);
|
|
403
|
+
i0.ɵɵrepeaterCreate(1, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_For_2_Template, 1, 1, null, null, _forTrack1);
|
|
404
|
+
} if (rf & 2) {
|
|
405
|
+
const node_r13 = i0.ɵɵnextContext().$implicit;
|
|
406
|
+
i0.ɵɵconditional(node_r13.Agents.length > 0 ? 0 : -1);
|
|
407
|
+
i0.ɵɵadvance();
|
|
408
|
+
i0.ɵɵrepeater(node_r13.Children);
|
|
409
|
+
} }
|
|
410
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
411
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
412
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "div", 84);
|
|
413
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Template_div_click_1_listener() { const node_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCategoryNode(node_r13)); });
|
|
414
|
+
i0.ɵɵelement(2, "i", 85)(3, "i", 86);
|
|
415
|
+
i0.ɵɵelementStart(4, "span", 71);
|
|
416
|
+
i0.ɵɵtext(5);
|
|
417
|
+
i0.ɵɵelementEnd();
|
|
418
|
+
i0.ɵɵelementStart(6, "span", 72);
|
|
419
|
+
i0.ɵɵtext(7);
|
|
420
|
+
i0.ɵɵelementEnd()();
|
|
421
|
+
i0.ɵɵconditionalCreate(8, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Conditional_8_Template, 3, 1);
|
|
422
|
+
i0.ɵɵelementEnd();
|
|
423
|
+
} if (rf & 2) {
|
|
424
|
+
const node_r13 = ctx.$implicit;
|
|
425
|
+
const depth_r18 = ctx.depth;
|
|
426
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
427
|
+
i0.ɵɵadvance();
|
|
428
|
+
i0.ɵɵclassMap("depth-" + depth_r18);
|
|
429
|
+
i0.ɵɵadvance();
|
|
430
|
+
i0.ɵɵclassProp("fa-chevron-right", !node_r13.Expanded)("fa-chevron-down", node_r13.Expanded);
|
|
431
|
+
i0.ɵɵadvance();
|
|
432
|
+
i0.ɵɵclassProp("fa-folder", !node_r13.Expanded)("fa-folder-open", node_r13.Expanded);
|
|
433
|
+
i0.ɵɵadvance(2);
|
|
434
|
+
i0.ɵɵtextInterpolate(node_r13.Category.Name);
|
|
435
|
+
i0.ɵɵadvance(2);
|
|
436
|
+
i0.ɵɵtextInterpolate(ctx_r1.getAgentCount(node_r13));
|
|
437
|
+
i0.ɵɵadvance();
|
|
438
|
+
i0.ɵɵconditional(node_r13.Expanded ? 8 : -1);
|
|
439
|
+
} }
|
|
440
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
441
|
+
i0.ɵɵelement(0, "img", 95);
|
|
442
|
+
} if (rf & 2) {
|
|
443
|
+
const agent_r21 = i0.ɵɵnextContext().$implicit;
|
|
444
|
+
i0.ɵɵproperty("src", agent_r21.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r21.Name + " logo");
|
|
445
|
+
} }
|
|
446
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
447
|
+
i0.ɵɵelement(0, "i");
|
|
448
|
+
} if (rf & 2) {
|
|
449
|
+
const agent_r21 = i0.ɵɵnextContext().$implicit;
|
|
450
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
451
|
+
i0.ɵɵclassMap(ctx_r1.getAgentIcon(agent_r21));
|
|
452
|
+
} }
|
|
453
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
454
|
+
i0.ɵɵelement(0, "div", 96);
|
|
217
455
|
i0.ɵɵpipe(1, "highlightSearch");
|
|
218
456
|
} if (rf & 2) {
|
|
219
|
-
const
|
|
457
|
+
const agent_r21 = i0.ɵɵnextContext().$implicit;
|
|
220
458
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
221
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1,
|
|
459
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1, agent_r21.Description, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
222
460
|
} }
|
|
223
|
-
function
|
|
224
|
-
const
|
|
225
|
-
i0.ɵɵelementStart(0, "button",
|
|
226
|
-
i0.ɵɵlistener("click", function
|
|
227
|
-
i0.ɵɵelement(1, "i",
|
|
461
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
462
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
463
|
+
i0.ɵɵelementStart(0, "button", 101);
|
|
464
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const agent_r21 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.showAgentDetails(agent_r21)); });
|
|
465
|
+
i0.ɵɵelement(1, "i", 64);
|
|
228
466
|
i0.ɵɵelementEnd();
|
|
229
467
|
} }
|
|
230
|
-
function
|
|
231
|
-
const
|
|
232
|
-
i0.ɵɵelementStart(0, "button",
|
|
233
|
-
i0.ɵɵlistener("click", function
|
|
234
|
-
i0.ɵɵelement(1, "i",
|
|
468
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
469
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
470
|
+
i0.ɵɵelementStart(0, "button", 83);
|
|
471
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const agent_r21 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.runAgent(agent_r21)); });
|
|
472
|
+
i0.ɵɵelement(1, "i", 66);
|
|
235
473
|
i0.ɵɵelementEnd();
|
|
236
474
|
} }
|
|
237
|
-
function
|
|
238
|
-
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div",
|
|
239
|
-
i0.ɵɵconditionalCreate(4,
|
|
475
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
476
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 93)(3, "div", 94);
|
|
477
|
+
i0.ɵɵconditionalCreate(4, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_4_Template, 1, 2, "img", 95)(5, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_5_Template, 1, 2, "i", 40);
|
|
240
478
|
i0.ɵɵelementEnd();
|
|
241
479
|
i0.ɵɵelementStart(6, "div");
|
|
242
|
-
i0.ɵɵelement(7, "div",
|
|
480
|
+
i0.ɵɵelement(7, "div", 42);
|
|
243
481
|
i0.ɵɵpipe(8, "highlightSearch");
|
|
244
|
-
i0.ɵɵconditionalCreate(9,
|
|
482
|
+
i0.ɵɵconditionalCreate(9, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_9_Template, 2, 4, "div", 96);
|
|
245
483
|
i0.ɵɵelementEnd()()();
|
|
246
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
484
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 97);
|
|
247
485
|
i0.ɵɵtext(12);
|
|
248
486
|
i0.ɵɵelementEnd()();
|
|
249
|
-
i0.ɵɵelementStart(13, "td")(14, "span",
|
|
487
|
+
i0.ɵɵelementStart(13, "td")(14, "span", 98);
|
|
250
488
|
i0.ɵɵtext(15);
|
|
251
489
|
i0.ɵɵelementEnd()();
|
|
252
|
-
i0.ɵɵelementStart(16, "td")(17, "div",
|
|
253
|
-
i0.ɵɵconditionalCreate(18,
|
|
254
|
-
i0.ɵɵconditionalCreate(19,
|
|
490
|
+
i0.ɵɵelementStart(16, "td")(17, "div", 99);
|
|
491
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_18_Template, 2, 0, "button", 100);
|
|
492
|
+
i0.ɵɵconditionalCreate(19, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Conditional_19_Template, 2, 0, "button", 82);
|
|
255
493
|
i0.ɵɵelementEnd()()();
|
|
256
494
|
} if (rf & 2) {
|
|
257
|
-
const
|
|
495
|
+
const agent_r21 = ctx.$implicit;
|
|
258
496
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
259
497
|
i0.ɵɵadvance(3);
|
|
260
|
-
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(
|
|
498
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.getAgentIconColor(agent_r21));
|
|
261
499
|
i0.ɵɵadvance();
|
|
262
|
-
i0.ɵɵconditional(ctx_r1.hasLogoURL(
|
|
500
|
+
i0.ɵɵconditional(ctx_r1.hasLogoURL(agent_r21) ? 4 : 5);
|
|
263
501
|
i0.ɵɵadvance(3);
|
|
264
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(8, 11,
|
|
502
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(8, 11, agent_r21.Name, ctx_r1.currentFilters.searchTerm), i0.ɵɵsanitizeHtml);
|
|
265
503
|
i0.ɵɵadvance(2);
|
|
266
|
-
i0.ɵɵconditional(
|
|
504
|
+
i0.ɵɵconditional(agent_r21.Description ? 9 : -1);
|
|
267
505
|
i0.ɵɵadvance(3);
|
|
268
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.getAgentTypeName(
|
|
506
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getAgentTypeName(agent_r21), " ");
|
|
269
507
|
i0.ɵɵadvance(2);
|
|
270
|
-
i0.ɵɵclassMap("status-" + (
|
|
508
|
+
i0.ɵɵclassMap("status-" + (agent_r21.Status || "unknown").toLowerCase());
|
|
271
509
|
i0.ɵɵadvance();
|
|
272
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
510
|
+
i0.ɵɵtextInterpolate1(" ", agent_r21.Status || "Unknown", " ");
|
|
273
511
|
i0.ɵɵadvance(3);
|
|
274
512
|
i0.ɵɵconditional(ctx_r1.UserCanReadAgents ? 18 : -1);
|
|
275
513
|
i0.ɵɵadvance();
|
|
276
|
-
i0.ɵɵconditional(
|
|
514
|
+
i0.ɵɵconditional(agent_r21.Status === "Active" && ctx_r1.UserCanReadAgents ? 19 : -1);
|
|
277
515
|
} }
|
|
278
|
-
function
|
|
279
|
-
const
|
|
280
|
-
i0.ɵɵelementStart(0, "div",
|
|
281
|
-
i0.ɵɵlistener("click", function
|
|
282
|
-
i0.ɵɵelementStart(5, "span",
|
|
516
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
517
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
518
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "table", 89)(2, "thead")(3, "tr")(4, "th", 90);
|
|
519
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_Template_th_click_4_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Name")); });
|
|
520
|
+
i0.ɵɵelementStart(5, "span", 91);
|
|
283
521
|
i0.ɵɵtext(6, " Name ");
|
|
284
|
-
i0.ɵɵelement(7, "i",
|
|
522
|
+
i0.ɵɵelement(7, "i", 92);
|
|
285
523
|
i0.ɵɵelementEnd()();
|
|
286
524
|
i0.ɵɵelementStart(8, "th");
|
|
287
525
|
i0.ɵɵtext(9, "Type");
|
|
288
526
|
i0.ɵɵelementEnd();
|
|
289
|
-
i0.ɵɵelementStart(10, "th",
|
|
290
|
-
i0.ɵɵlistener("click", function
|
|
291
|
-
i0.ɵɵelementStart(11, "span",
|
|
527
|
+
i0.ɵɵelementStart(10, "th", 90);
|
|
528
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_Template_th_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Status")); });
|
|
529
|
+
i0.ɵɵelementStart(11, "span", 91);
|
|
292
530
|
i0.ɵɵtext(12, " Status ");
|
|
293
|
-
i0.ɵɵelement(13, "i",
|
|
531
|
+
i0.ɵɵelement(13, "i", 92);
|
|
294
532
|
i0.ɵɵelementEnd()();
|
|
295
533
|
i0.ɵɵelementStart(14, "th");
|
|
296
534
|
i0.ɵɵtext(15, "Actions");
|
|
297
535
|
i0.ɵɵelementEnd()()();
|
|
298
536
|
i0.ɵɵelementStart(16, "tbody");
|
|
299
|
-
i0.ɵɵrepeaterCreate(17,
|
|
537
|
+
i0.ɵɵrepeaterCreate(17, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_For_18_Template, 20, 14, "tr", null, _forTrack0);
|
|
300
538
|
i0.ɵɵelementEnd()()();
|
|
301
539
|
} if (rf & 2) {
|
|
302
540
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -307,51 +545,55 @@ function AgentConfigurationComponent_Conditional_28_Conditional_1_Conditional_1_
|
|
|
307
545
|
i0.ɵɵadvance(7);
|
|
308
546
|
i0.ɵɵrepeater(ctx_r1.filteredAgents);
|
|
309
547
|
} }
|
|
310
|
-
function
|
|
311
|
-
i0.ɵɵconditionalCreate(0,
|
|
312
|
-
i0.ɵɵconditionalCreate(1,
|
|
548
|
+
function AgentConfigurationComponent_Conditional_30_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
549
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_0_Template, 3, 0, "div", 31);
|
|
550
|
+
i0.ɵɵconditionalCreate(1, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_1_Template, 4, 1, "div", 32);
|
|
551
|
+
i0.ɵɵtemplate(2, AgentConfigurationComponent_Conditional_30_Conditional_1_ng_template_2_Template, 9, 13, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
552
|
+
i0.ɵɵconditionalCreate(4, AgentConfigurationComponent_Conditional_30_Conditional_1_Conditional_4_Template, 19, 8, "div", 33);
|
|
313
553
|
} if (rf & 2) {
|
|
314
554
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
315
555
|
i0.ɵɵconditional(ctx_r1.viewMode === "grid" ? 0 : -1);
|
|
316
556
|
i0.ɵɵadvance();
|
|
317
|
-
i0.ɵɵconditional(ctx_r1.viewMode === "
|
|
557
|
+
i0.ɵɵconditional(ctx_r1.viewMode === "tree" ? 1 : -1);
|
|
558
|
+
i0.ɵɵadvance(3);
|
|
559
|
+
i0.ɵɵconditional(ctx_r1.viewMode === "list" ? 4 : -1);
|
|
318
560
|
} }
|
|
319
|
-
function
|
|
320
|
-
i0.ɵɵconditionalCreate(0,
|
|
561
|
+
function AgentConfigurationComponent_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
562
|
+
i0.ɵɵconditionalCreate(0, AgentConfigurationComponent_Conditional_30_Conditional_0_Template, 9, 0, "div", 29)(1, AgentConfigurationComponent_Conditional_30_Conditional_1_Template, 5, 3);
|
|
321
563
|
} if (rf & 2) {
|
|
322
564
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
323
565
|
i0.ɵɵconditional(ctx_r1.filteredAgents.length === 0 ? 0 : 1);
|
|
324
566
|
} }
|
|
325
|
-
function
|
|
326
|
-
const
|
|
327
|
-
i0.ɵɵelementStart(0, "div",
|
|
328
|
-
i0.ɵɵlistener("click", function
|
|
567
|
+
function AgentConfigurationComponent_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
568
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
569
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
570
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_31_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
329
571
|
i0.ɵɵelementEnd();
|
|
330
572
|
} }
|
|
331
|
-
function
|
|
332
|
-
i0.ɵɵelement(0, "img",
|
|
573
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
574
|
+
i0.ɵɵelement(0, "img", 106);
|
|
333
575
|
} if (rf & 2) {
|
|
334
576
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
335
577
|
i0.ɵɵproperty("src", ctx_r1.selectedAgent.LogoURL, i0.ɵɵsanitizeUrl)("alt", ctx_r1.selectedAgent.Name + " logo");
|
|
336
578
|
} }
|
|
337
|
-
function
|
|
579
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
338
580
|
i0.ɵɵelement(0, "i");
|
|
339
581
|
} if (rf & 2) {
|
|
340
582
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
341
583
|
i0.ɵɵclassMap(ctx_r1.getAgentIcon(ctx_r1.selectedAgent));
|
|
342
584
|
} }
|
|
343
|
-
function
|
|
344
|
-
i0.ɵɵelementStart(0, "span",
|
|
345
|
-
i0.ɵɵelement(1, "i",
|
|
585
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
586
|
+
i0.ɵɵelementStart(0, "span", 114);
|
|
587
|
+
i0.ɵɵelement(1, "i", 126);
|
|
346
588
|
i0.ɵɵtext(2, " Exposed as Action ");
|
|
347
589
|
i0.ɵɵelementEnd();
|
|
348
590
|
} }
|
|
349
|
-
function
|
|
350
|
-
i0.ɵɵelementStart(0, "div",
|
|
351
|
-
i0.ɵɵelement(2, "i",
|
|
591
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
592
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "h4", 115);
|
|
593
|
+
i0.ɵɵelement(2, "i", 127);
|
|
352
594
|
i0.ɵɵtext(3, " Description ");
|
|
353
595
|
i0.ɵɵelementEnd();
|
|
354
|
-
i0.ɵɵelementStart(4, "p",
|
|
596
|
+
i0.ɵɵelementStart(4, "p", 128);
|
|
355
597
|
i0.ɵɵtext(5);
|
|
356
598
|
i0.ɵɵelementEnd()();
|
|
357
599
|
} if (rf & 2) {
|
|
@@ -359,11 +601,11 @@ function AgentConfigurationComponent_Conditional_31_Conditional_19_Template(rf,
|
|
|
359
601
|
i0.ɵɵadvance(5);
|
|
360
602
|
i0.ɵɵtextInterpolate(ctx_r1.selectedAgent.Description);
|
|
361
603
|
} }
|
|
362
|
-
function
|
|
363
|
-
i0.ɵɵelementStart(0, "div",
|
|
604
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
605
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "span", 119);
|
|
364
606
|
i0.ɵɵtext(2, "Parent Agent");
|
|
365
607
|
i0.ɵɵelementEnd();
|
|
366
|
-
i0.ɵɵelementStart(3, "span",
|
|
608
|
+
i0.ɵɵelementStart(3, "span", 120);
|
|
367
609
|
i0.ɵɵtext(4);
|
|
368
610
|
i0.ɵɵelementEnd()();
|
|
369
611
|
} if (rf & 2) {
|
|
@@ -371,105 +613,105 @@ function AgentConfigurationComponent_Conditional_31_Conditional_31_Template(rf,
|
|
|
371
613
|
i0.ɵɵadvance(4);
|
|
372
614
|
i0.ɵɵtextInterpolate(ctx_r1.getParentAgentName(ctx_r1.selectedAgent));
|
|
373
615
|
} }
|
|
374
|
-
function
|
|
375
|
-
i0.ɵɵelement(0, "i",
|
|
616
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
617
|
+
i0.ɵɵelement(0, "i", 129);
|
|
376
618
|
i0.ɵɵtext(1, " Enabled ");
|
|
377
619
|
} }
|
|
378
|
-
function
|
|
379
|
-
i0.ɵɵelement(0, "i",
|
|
620
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
621
|
+
i0.ɵɵelement(0, "i", 130);
|
|
380
622
|
i0.ɵɵtext(1, " Disabled ");
|
|
381
623
|
} }
|
|
382
|
-
function
|
|
383
|
-
i0.ɵɵelement(0, "i",
|
|
624
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
625
|
+
i0.ɵɵelement(0, "i", 129);
|
|
384
626
|
i0.ɵɵtext(1, " Yes ");
|
|
385
627
|
} }
|
|
386
|
-
function
|
|
387
|
-
i0.ɵɵelement(0, "i",
|
|
628
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
629
|
+
i0.ɵɵelement(0, "i", 130);
|
|
388
630
|
i0.ɵɵtext(1, " No ");
|
|
389
631
|
} }
|
|
390
|
-
function
|
|
391
|
-
const
|
|
392
|
-
i0.ɵɵelementStart(0, "button",
|
|
393
|
-
i0.ɵɵlistener("click", function
|
|
394
|
-
i0.ɵɵelement(1, "i",
|
|
632
|
+
function AgentConfigurationComponent_Conditional_33_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
633
|
+
const _r26 = i0.ɵɵgetCurrentView();
|
|
634
|
+
i0.ɵɵelementStart(0, "button", 131);
|
|
635
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_33_Conditional_67_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.runAgent(ctx_r1.selectedAgent)); });
|
|
636
|
+
i0.ɵɵelement(1, "i", 66);
|
|
395
637
|
i0.ɵɵtext(2, " Run Agent ");
|
|
396
638
|
i0.ɵɵelementEnd();
|
|
397
639
|
} }
|
|
398
|
-
function
|
|
399
|
-
const
|
|
400
|
-
i0.ɵɵelementStart(0, "div",
|
|
401
|
-
i0.ɵɵconditionalCreate(3,
|
|
640
|
+
function AgentConfigurationComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
641
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
|
642
|
+
i0.ɵɵelementStart(0, "div", 103)(1, "div", 104)(2, "div", 105);
|
|
643
|
+
i0.ɵɵconditionalCreate(3, AgentConfigurationComponent_Conditional_33_Conditional_3_Template, 1, 2, "img", 106)(4, AgentConfigurationComponent_Conditional_33_Conditional_4_Template, 1, 2, "i", 40);
|
|
402
644
|
i0.ɵɵelementEnd();
|
|
403
|
-
i0.ɵɵelementStart(5, "div",
|
|
645
|
+
i0.ɵɵelementStart(5, "div", 107)(6, "h3");
|
|
404
646
|
i0.ɵɵtext(7);
|
|
405
647
|
i0.ɵɵelementEnd();
|
|
406
|
-
i0.ɵɵelementStart(8, "span",
|
|
648
|
+
i0.ɵɵelementStart(8, "span", 108);
|
|
407
649
|
i0.ɵɵtext(9);
|
|
408
650
|
i0.ɵɵelementEnd()()();
|
|
409
|
-
i0.ɵɵelementStart(10, "button",
|
|
410
|
-
i0.ɵɵlistener("click", function
|
|
411
|
-
i0.ɵɵelement(11, "i",
|
|
651
|
+
i0.ɵɵelementStart(10, "button", 109);
|
|
652
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_33_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
653
|
+
i0.ɵɵelement(11, "i", 110);
|
|
412
654
|
i0.ɵɵelementEnd()();
|
|
413
|
-
i0.ɵɵelementStart(12, "div",
|
|
414
|
-
i0.ɵɵelement(16, "i",
|
|
655
|
+
i0.ɵɵelementStart(12, "div", 111)(13, "div", 112)(14, "div", 113)(15, "span", 98);
|
|
656
|
+
i0.ɵɵelement(16, "i", 56);
|
|
415
657
|
i0.ɵɵtext(17);
|
|
416
658
|
i0.ɵɵelementEnd();
|
|
417
|
-
i0.ɵɵconditionalCreate(18,
|
|
659
|
+
i0.ɵɵconditionalCreate(18, AgentConfigurationComponent_Conditional_33_Conditional_18_Template, 3, 0, "span", 114);
|
|
418
660
|
i0.ɵɵelementEnd()();
|
|
419
|
-
i0.ɵɵconditionalCreate(19,
|
|
420
|
-
i0.ɵɵelementStart(20, "div",
|
|
421
|
-
i0.ɵɵelement(22, "i",
|
|
661
|
+
i0.ɵɵconditionalCreate(19, AgentConfigurationComponent_Conditional_33_Conditional_19_Template, 6, 1, "div", 112);
|
|
662
|
+
i0.ɵɵelementStart(20, "div", 112)(21, "h4", 115);
|
|
663
|
+
i0.ɵɵelement(22, "i", 116);
|
|
422
664
|
i0.ɵɵtext(23, " Configuration ");
|
|
423
665
|
i0.ɵɵelementEnd();
|
|
424
|
-
i0.ɵɵelementStart(24, "div",
|
|
666
|
+
i0.ɵɵelementStart(24, "div", 117)(25, "div", 118)(26, "span", 119);
|
|
425
667
|
i0.ɵɵtext(27, "Execution Mode");
|
|
426
668
|
i0.ɵɵelementEnd();
|
|
427
|
-
i0.ɵɵelementStart(28, "span",
|
|
669
|
+
i0.ɵɵelementStart(28, "span", 120);
|
|
428
670
|
i0.ɵɵelement(29, "i");
|
|
429
671
|
i0.ɵɵtext(30);
|
|
430
672
|
i0.ɵɵelementEnd()();
|
|
431
|
-
i0.ɵɵconditionalCreate(31,
|
|
432
|
-
i0.ɵɵelementStart(32, "div",
|
|
673
|
+
i0.ɵɵconditionalCreate(31, AgentConfigurationComponent_Conditional_33_Conditional_31_Template, 5, 1, "div", 118);
|
|
674
|
+
i0.ɵɵelementStart(32, "div", 118)(33, "span", 119);
|
|
433
675
|
i0.ɵɵtext(34, "Context Compression");
|
|
434
676
|
i0.ɵɵelementEnd();
|
|
435
|
-
i0.ɵɵelementStart(35, "span",
|
|
436
|
-
i0.ɵɵconditionalCreate(36,
|
|
677
|
+
i0.ɵɵelementStart(35, "span", 120);
|
|
678
|
+
i0.ɵɵconditionalCreate(36, AgentConfigurationComponent_Conditional_33_Conditional_36_Template, 2, 0)(37, AgentConfigurationComponent_Conditional_33_Conditional_37_Template, 2, 0);
|
|
437
679
|
i0.ɵɵelementEnd()();
|
|
438
|
-
i0.ɵɵelementStart(38, "div",
|
|
680
|
+
i0.ɵɵelementStart(38, "div", 118)(39, "span", 119);
|
|
439
681
|
i0.ɵɵtext(40, "Exposed as Action");
|
|
440
682
|
i0.ɵɵelementEnd();
|
|
441
|
-
i0.ɵɵelementStart(41, "span",
|
|
442
|
-
i0.ɵɵconditionalCreate(42,
|
|
683
|
+
i0.ɵɵelementStart(41, "span", 120);
|
|
684
|
+
i0.ɵɵconditionalCreate(42, AgentConfigurationComponent_Conditional_33_Conditional_42_Template, 2, 0)(43, AgentConfigurationComponent_Conditional_33_Conditional_43_Template, 2, 0);
|
|
443
685
|
i0.ɵɵelementEnd()();
|
|
444
|
-
i0.ɵɵelementStart(44, "div",
|
|
686
|
+
i0.ɵɵelementStart(44, "div", 118)(45, "span", 119);
|
|
445
687
|
i0.ɵɵtext(46, "Model Selection");
|
|
446
688
|
i0.ɵɵelementEnd();
|
|
447
|
-
i0.ɵɵelementStart(47, "span",
|
|
689
|
+
i0.ɵɵelementStart(47, "span", 120);
|
|
448
690
|
i0.ɵɵtext(48);
|
|
449
691
|
i0.ɵɵelementEnd()()()();
|
|
450
|
-
i0.ɵɵelementStart(49, "div",
|
|
451
|
-
i0.ɵɵelement(51, "i",
|
|
692
|
+
i0.ɵɵelementStart(49, "div", 112)(50, "h4", 115);
|
|
693
|
+
i0.ɵɵelement(51, "i", 121);
|
|
452
694
|
i0.ɵɵtext(52, " Timestamps ");
|
|
453
695
|
i0.ɵɵelementEnd();
|
|
454
|
-
i0.ɵɵelementStart(53, "div",
|
|
696
|
+
i0.ɵɵelementStart(53, "div", 117)(54, "div", 118)(55, "span", 119);
|
|
455
697
|
i0.ɵɵtext(56, "Created");
|
|
456
698
|
i0.ɵɵelementEnd();
|
|
457
|
-
i0.ɵɵelementStart(57, "span",
|
|
699
|
+
i0.ɵɵelementStart(57, "span", 120);
|
|
458
700
|
i0.ɵɵtext(58);
|
|
459
701
|
i0.ɵɵpipe(59, "date");
|
|
460
702
|
i0.ɵɵelementEnd()();
|
|
461
|
-
i0.ɵɵelementStart(60, "div",
|
|
703
|
+
i0.ɵɵelementStart(60, "div", 118)(61, "span", 119);
|
|
462
704
|
i0.ɵɵtext(62, "Updated");
|
|
463
705
|
i0.ɵɵelementEnd();
|
|
464
|
-
i0.ɵɵelementStart(63, "span",
|
|
706
|
+
i0.ɵɵelementStart(63, "span", 120);
|
|
465
707
|
i0.ɵɵtext(64);
|
|
466
708
|
i0.ɵɵpipe(65, "date");
|
|
467
709
|
i0.ɵɵelementEnd()()()()();
|
|
468
|
-
i0.ɵɵelementStart(66, "div",
|
|
469
|
-
i0.ɵɵconditionalCreate(67,
|
|
470
|
-
i0.ɵɵelementStart(68, "button",
|
|
471
|
-
i0.ɵɵlistener("click", function
|
|
472
|
-
i0.ɵɵelement(69, "i",
|
|
710
|
+
i0.ɵɵelementStart(66, "div", 122);
|
|
711
|
+
i0.ɵɵconditionalCreate(67, AgentConfigurationComponent_Conditional_33_Conditional_67_Template, 3, 0, "button", 123);
|
|
712
|
+
i0.ɵɵelementStart(68, "button", 124);
|
|
713
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Conditional_33_Template_button_click_68_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openAgentFromPanel()); });
|
|
714
|
+
i0.ɵɵelement(69, "i", 125);
|
|
473
715
|
i0.ɵɵtext(70, " Open Full Record ");
|
|
474
716
|
i0.ɵɵelementEnd()();
|
|
475
717
|
} if (rf & 2) {
|
|
@@ -541,9 +783,14 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
541
783
|
parentAgent: 'all',
|
|
542
784
|
status: 'all',
|
|
543
785
|
executionMode: 'all',
|
|
544
|
-
exposeAsAction: 'all'
|
|
786
|
+
exposeAsAction: 'all',
|
|
787
|
+
categoryId: 'all'
|
|
545
788
|
};
|
|
546
789
|
selectedAgentForTest = null;
|
|
790
|
+
// Category tree view data
|
|
791
|
+
categoryTree = [];
|
|
792
|
+
uncategorizedAgents = [];
|
|
793
|
+
categories = [];
|
|
547
794
|
// === Permission Checks ===
|
|
548
795
|
/** Cache for permission checks to avoid repeated calculations */
|
|
549
796
|
_permissionCache = new Map();
|
|
@@ -634,6 +881,10 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
634
881
|
await this.loadAgents();
|
|
635
882
|
// Apply filters after data is loaded (uses saved preferences)
|
|
636
883
|
this.applyFilters();
|
|
884
|
+
// If tree view mode is active, load categories for the tree
|
|
885
|
+
if (this.viewMode === 'tree') {
|
|
886
|
+
this.loadCategoriesAndBuildTree();
|
|
887
|
+
}
|
|
637
888
|
// Notify that the resource has finished loading
|
|
638
889
|
this.NotifyLoadComplete();
|
|
639
890
|
}
|
|
@@ -685,7 +936,8 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
685
936
|
parentAgent: prefs.filters.parentAgent || 'all',
|
|
686
937
|
status: prefs.filters.status || 'all',
|
|
687
938
|
executionMode: prefs.filters.executionMode || 'all',
|
|
688
|
-
exposeAsAction: prefs.filters.exposeAsAction || 'all'
|
|
939
|
+
exposeAsAction: prefs.filters.exposeAsAction || 'all',
|
|
940
|
+
categoryId: prefs.filters.categoryId || 'all'
|
|
689
941
|
};
|
|
690
942
|
}
|
|
691
943
|
}
|
|
@@ -778,7 +1030,8 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
778
1030
|
parentAgent: 'all',
|
|
779
1031
|
status: 'all',
|
|
780
1032
|
executionMode: 'all',
|
|
781
|
-
exposeAsAction: 'all'
|
|
1033
|
+
exposeAsAction: 'all',
|
|
1034
|
+
categoryId: 'all'
|
|
782
1035
|
};
|
|
783
1036
|
this.applyFilters();
|
|
784
1037
|
this.saveUserPreferencesDebounced();
|
|
@@ -823,9 +1076,21 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
823
1076
|
const isExposed = this.currentFilters.exposeAsAction === 'true';
|
|
824
1077
|
filtered = filtered.filter(agent => agent.ExposeAsAction === isExposed);
|
|
825
1078
|
}
|
|
1079
|
+
// Apply category filter — match the selected category or any of its descendants
|
|
1080
|
+
if (this.currentFilters.categoryId !== 'all') {
|
|
1081
|
+
const matchingIds = this.getCategoryAndDescendantIds(this.currentFilters.categoryId);
|
|
1082
|
+
filtered = filtered.filter(agent => {
|
|
1083
|
+
const agentCatId = agent.CategoryID;
|
|
1084
|
+
return agentCatId != null && matchingIds.some(id => UUIDsEqual(id, agentCatId));
|
|
1085
|
+
});
|
|
1086
|
+
}
|
|
826
1087
|
// Apply sorting
|
|
827
1088
|
filtered = this.applySorting(filtered);
|
|
828
1089
|
this.filteredAgents = filtered;
|
|
1090
|
+
// Rebuild tree view data when filters change
|
|
1091
|
+
if (this.viewMode === 'tree') {
|
|
1092
|
+
this.buildCategoryTree();
|
|
1093
|
+
}
|
|
829
1094
|
}
|
|
830
1095
|
/**
|
|
831
1096
|
* Sort the agents by the specified column
|
|
@@ -880,6 +1145,12 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
880
1145
|
}
|
|
881
1146
|
setViewMode(mode) {
|
|
882
1147
|
this.viewMode = mode;
|
|
1148
|
+
if (mode === 'tree' && this.categories.length === 0) {
|
|
1149
|
+
this.loadCategoriesAndBuildTree();
|
|
1150
|
+
}
|
|
1151
|
+
else if (mode === 'tree') {
|
|
1152
|
+
this.buildCategoryTree();
|
|
1153
|
+
}
|
|
883
1154
|
this.emitStateChange();
|
|
884
1155
|
this.saveUserPreferencesDebounced();
|
|
885
1156
|
}
|
|
@@ -1045,6 +1316,92 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
1045
1316
|
hasLogoURL(agent) {
|
|
1046
1317
|
return !!agent?.LogoURL;
|
|
1047
1318
|
}
|
|
1319
|
+
// ========================================
|
|
1320
|
+
// Category Tree View
|
|
1321
|
+
// ========================================
|
|
1322
|
+
/** Load categories from the database and build the tree structure */
|
|
1323
|
+
async loadCategoriesAndBuildTree() {
|
|
1324
|
+
try {
|
|
1325
|
+
const rv = new RunView();
|
|
1326
|
+
const result = await rv.RunView({
|
|
1327
|
+
EntityName: 'MJ: AI Agent Categories',
|
|
1328
|
+
Fields: ['ID', 'Name', 'ParentID', 'Description'],
|
|
1329
|
+
ExtraFilter: "Status='Active'",
|
|
1330
|
+
OrderBy: 'Name ASC',
|
|
1331
|
+
ResultType: 'simple'
|
|
1332
|
+
});
|
|
1333
|
+
if (result.Success) {
|
|
1334
|
+
this.categories = result.Results;
|
|
1335
|
+
this.buildCategoryTree();
|
|
1336
|
+
this.cdr.detectChanges();
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1339
|
+
catch (error) {
|
|
1340
|
+
console.error('[AgentConfiguration] Error loading categories:', error);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
/** Build tree nodes from flat categories + filtered agents */
|
|
1344
|
+
buildCategoryTree() {
|
|
1345
|
+
const agentsByCategory = new Map();
|
|
1346
|
+
const uncategorized = [];
|
|
1347
|
+
for (const agent of this.filteredAgents) {
|
|
1348
|
+
const catId = agent.CategoryID;
|
|
1349
|
+
if (catId) {
|
|
1350
|
+
const normalizedId = catId.toUpperCase();
|
|
1351
|
+
if (!agentsByCategory.has(normalizedId)) {
|
|
1352
|
+
agentsByCategory.set(normalizedId, []);
|
|
1353
|
+
}
|
|
1354
|
+
agentsByCategory.get(normalizedId).push(agent);
|
|
1355
|
+
}
|
|
1356
|
+
else {
|
|
1357
|
+
uncategorized.push(agent);
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1360
|
+
// Build tree from root categories (ParentID is null)
|
|
1361
|
+
const rootCategories = this.categories.filter(c => !c.ParentID);
|
|
1362
|
+
this.categoryTree = rootCategories.map(c => this.buildTreeNode(c, agentsByCategory));
|
|
1363
|
+
this.uncategorizedAgents = uncategorized;
|
|
1364
|
+
}
|
|
1365
|
+
/** Recursively build a CategoryTreeNode */
|
|
1366
|
+
buildTreeNode(category, agentsByCategory) {
|
|
1367
|
+
const children = this.categories
|
|
1368
|
+
.filter(c => c.ParentID && UUIDsEqual(c.ParentID, category.ID))
|
|
1369
|
+
.map(c => this.buildTreeNode(c, agentsByCategory));
|
|
1370
|
+
const normalizedId = category.ID.toUpperCase();
|
|
1371
|
+
return {
|
|
1372
|
+
Category: category,
|
|
1373
|
+
Agents: agentsByCategory.get(normalizedId) || [],
|
|
1374
|
+
Children: children,
|
|
1375
|
+
Expanded: true // default expanded
|
|
1376
|
+
};
|
|
1377
|
+
}
|
|
1378
|
+
/** Get a category and all its descendant IDs (for inclusive filtering) */
|
|
1379
|
+
getCategoryAndDescendantIds(categoryId) {
|
|
1380
|
+
const ids = [categoryId];
|
|
1381
|
+
const children = this.categories.filter(c => c.ParentID && UUIDsEqual(c.ParentID, categoryId));
|
|
1382
|
+
for (const child of children) {
|
|
1383
|
+
ids.push(...this.getCategoryAndDescendantIds(child.ID));
|
|
1384
|
+
}
|
|
1385
|
+
return ids;
|
|
1386
|
+
}
|
|
1387
|
+
/** Toggle a category node's expanded state in the tree view */
|
|
1388
|
+
toggleCategoryNode(node) {
|
|
1389
|
+
node.Expanded = !node.Expanded;
|
|
1390
|
+
}
|
|
1391
|
+
/** Check if a tree node has any visible content (agents or children with content) */
|
|
1392
|
+
hasVisibleContent(node) {
|
|
1393
|
+
if (node.Agents.length > 0)
|
|
1394
|
+
return true;
|
|
1395
|
+
return node.Children.some(child => this.hasVisibleContent(child));
|
|
1396
|
+
}
|
|
1397
|
+
/** Get the total agent count for a category including all descendants */
|
|
1398
|
+
getAgentCount(node) {
|
|
1399
|
+
let count = node.Agents.length;
|
|
1400
|
+
for (const child of node.Children) {
|
|
1401
|
+
count += this.getAgentCount(child);
|
|
1402
|
+
}
|
|
1403
|
+
return count;
|
|
1404
|
+
}
|
|
1048
1405
|
// === BaseResourceComponent Required Methods ===
|
|
1049
1406
|
/**
|
|
1050
1407
|
* Get the display name for this resource
|
|
@@ -1059,44 +1416,48 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
1059
1416
|
return 'fa-solid fa-robot';
|
|
1060
1417
|
}
|
|
1061
1418
|
static ɵfac = function AgentConfigurationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AgentConfigurationComponent)(i0.ɵɵdirectiveInject(i1.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i2.CreateAgentService), i0.ɵɵdirectiveInject(i3.NavigationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
1062
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentConfigurationComponent, selectors: [["app-agent-configuration"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
1063
|
-
i0.ɵɵelementStart(0, "div",
|
|
1064
|
-
i0.ɵɵelement(4, "i",
|
|
1419
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentConfigurationComponent, selectors: [["app-agent-configuration"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 34, vars: 24, consts: [["categoryNodeTpl", ""], [1, "agent-configuration-container"], [1, "dashboard-header"], [1, "header-info"], [1, "dashboard-title"], [1, "fa-solid", "fa-robot"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "item-count"], [1, "header-controls"], [1, "view-toggle"], ["type", "button", "title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["type", "button", "title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["type", "button", "title", "Category Tree View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-folder-tree"], ["type", "button", "title", "Create New Agent", 1, "control-btn", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "main-content"], ["orientation", "horizontal", 1, "main-splitter", 3, "layoutChange"], [3, "size", "collapsible", "resizable", "scrollable", "hidden"], [3, "filtersChange", "filterChange", "resetFilters", "closePanel", "agents", "filteredAgents", "filters"], [3, "resizable", "scrollable"], [1, "agents-content"], [1, "loading-container"], [1, "detail-panel-overlay"], [1, "detail-panel"], ["text", "Loading agents...", "size", "large"], [1, "empty-state"], ["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"], [1, "tree-category-group"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "tree-category-header", "depth-0"], [1, "fa-solid", "fa-folder-open", "tree-folder-icon"], [1, "tree-category-name"], [1, "tree-category-count"], [1, "tree-agent-list"], [1, "tree-agent-row"], [1, "tree-agent-row", 3, "click"], [1, "tree-agent-icon"], [1, "tree-agent-logo", 3, "src", "alt"], [1, "tree-agent-info"], [1, "tree-agent-name"], [1, "tree-agent-type"], [1, "tree-agent-status"], ["type", "button", "title", "Run Agent", 1, "action-btn-small", "primary"], ["type", "button", "title", "Run Agent", 1, "action-btn-small", "primary", 3, "click"], [1, "tree-category-header", 3, "click"], [1, "fa-solid", "tree-chevron"], [1, "fa-solid", "tree-folder-icon"], [1, "tree-agent-list", 3, "padding-left"], [3, "padding-left"], [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", "View Details", 1, "action-btn-small", 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) {
|
|
1420
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "h2", 4);
|
|
1421
|
+
i0.ɵɵelement(4, "i", 5);
|
|
1065
1422
|
i0.ɵɵtext(5, " Agent Configuration ");
|
|
1066
1423
|
i0.ɵɵelementEnd();
|
|
1067
|
-
i0.ɵɵelementStart(6, "button",
|
|
1424
|
+
i0.ɵɵelementStart(6, "button", 6);
|
|
1068
1425
|
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_6_listener() { return ctx.toggleFilterPanel(); });
|
|
1069
|
-
i0.ɵɵelement(7, "i",
|
|
1426
|
+
i0.ɵɵelement(7, "i", 7);
|
|
1070
1427
|
i0.ɵɵconditionalCreate(8, AgentConfigurationComponent_Conditional_8_Template, 1, 0)(9, AgentConfigurationComponent_Conditional_9_Template, 1, 0);
|
|
1071
1428
|
i0.ɵɵelementEnd();
|
|
1072
|
-
i0.ɵɵelementStart(10, "span",
|
|
1429
|
+
i0.ɵɵelementStart(10, "span", 8);
|
|
1073
1430
|
i0.ɵɵtext(11);
|
|
1074
1431
|
i0.ɵɵelementEnd()();
|
|
1075
|
-
i0.ɵɵelementStart(12, "div",
|
|
1432
|
+
i0.ɵɵelementStart(12, "div", 9)(13, "div", 10)(14, "button", 11);
|
|
1076
1433
|
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_14_listener() { return ctx.setViewMode("grid"); });
|
|
1077
|
-
i0.ɵɵelement(15, "i",
|
|
1434
|
+
i0.ɵɵelement(15, "i", 12);
|
|
1078
1435
|
i0.ɵɵelementEnd();
|
|
1079
|
-
i0.ɵɵelementStart(16, "button",
|
|
1436
|
+
i0.ɵɵelementStart(16, "button", 13);
|
|
1080
1437
|
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_16_listener() { return ctx.setViewMode("list"); });
|
|
1081
|
-
i0.ɵɵelement(17, "i",
|
|
1438
|
+
i0.ɵɵelement(17, "i", 14);
|
|
1439
|
+
i0.ɵɵelementEnd();
|
|
1440
|
+
i0.ɵɵelementStart(18, "button", 15);
|
|
1441
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_18_listener() { return ctx.setViewMode("tree"); });
|
|
1442
|
+
i0.ɵɵelement(19, "i", 16);
|
|
1082
1443
|
i0.ɵɵelementEnd()();
|
|
1083
|
-
i0.ɵɵelementStart(
|
|
1084
|
-
i0.ɵɵlistener("click", function
|
|
1085
|
-
i0.ɵɵelement(
|
|
1086
|
-
i0.ɵɵtext(
|
|
1444
|
+
i0.ɵɵelementStart(20, "button", 17);
|
|
1445
|
+
i0.ɵɵlistener("click", function AgentConfigurationComponent_Template_button_click_20_listener() { return ctx.createNewAgent(); });
|
|
1446
|
+
i0.ɵɵelement(21, "i", 18);
|
|
1447
|
+
i0.ɵɵtext(22, " New Agent ");
|
|
1087
1448
|
i0.ɵɵelementEnd()()();
|
|
1088
|
-
i0.ɵɵelementStart(
|
|
1089
|
-
i0.ɵɵlistener("layoutChange", function
|
|
1090
|
-
i0.ɵɵelementStart(
|
|
1091
|
-
i0.ɵɵlistener("filtersChange", function
|
|
1449
|
+
i0.ɵɵelementStart(23, "div", 19)(24, "kendo-splitter", 20);
|
|
1450
|
+
i0.ɵɵlistener("layoutChange", function AgentConfigurationComponent_Template_kendo_splitter_layoutChange_24_listener($event) { return ctx.onMainSplitterChange($event); });
|
|
1451
|
+
i0.ɵɵelementStart(25, "kendo-splitter-pane", 21)(26, "mj-agent-filter-panel", 22);
|
|
1452
|
+
i0.ɵɵlistener("filtersChange", function AgentConfigurationComponent_Template_mj_agent_filter_panel_filtersChange_26_listener($event) { return ctx.onFiltersChange($event); })("filterChange", function AgentConfigurationComponent_Template_mj_agent_filter_panel_filterChange_26_listener() { return ctx.onFilterChange(); })("resetFilters", function AgentConfigurationComponent_Template_mj_agent_filter_panel_resetFilters_26_listener() { return ctx.onResetFilters(); })("closePanel", function AgentConfigurationComponent_Template_mj_agent_filter_panel_closePanel_26_listener() { return ctx.toggleFilterPanel(); });
|
|
1092
1453
|
i0.ɵɵelementEnd()();
|
|
1093
|
-
i0.ɵɵelementStart(
|
|
1094
|
-
i0.ɵɵconditionalCreate(
|
|
1095
|
-
i0.ɵɵconditionalCreate(
|
|
1454
|
+
i0.ɵɵelementStart(27, "kendo-splitter-pane", 23)(28, "div", 24);
|
|
1455
|
+
i0.ɵɵconditionalCreate(29, AgentConfigurationComponent_Conditional_29_Template, 2, 0, "div", 25);
|
|
1456
|
+
i0.ɵɵconditionalCreate(30, AgentConfigurationComponent_Conditional_30_Template, 2, 1);
|
|
1096
1457
|
i0.ɵɵelementEnd()()()();
|
|
1097
|
-
i0.ɵɵconditionalCreate(
|
|
1098
|
-
i0.ɵɵelementStart(
|
|
1099
|
-
i0.ɵɵconditionalCreate(
|
|
1458
|
+
i0.ɵɵconditionalCreate(31, AgentConfigurationComponent_Conditional_31_Template, 1, 0, "div", 26);
|
|
1459
|
+
i0.ɵɵelementStart(32, "div", 27);
|
|
1460
|
+
i0.ɵɵconditionalCreate(33, AgentConfigurationComponent_Conditional_33_Template, 71, 26);
|
|
1100
1461
|
i0.ɵɵelementEnd()();
|
|
1101
1462
|
} if (rf & 2) {
|
|
1102
1463
|
i0.ɵɵadvance(8);
|
|
@@ -1107,6 +1468,8 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
1107
1468
|
i0.ɵɵclassProp("active", ctx.viewMode === "grid");
|
|
1108
1469
|
i0.ɵɵadvance(2);
|
|
1109
1470
|
i0.ɵɵclassProp("active", ctx.viewMode === "list");
|
|
1471
|
+
i0.ɵɵadvance(2);
|
|
1472
|
+
i0.ɵɵclassProp("active", ctx.viewMode === "tree");
|
|
1110
1473
|
i0.ɵɵadvance(7);
|
|
1111
1474
|
i0.ɵɵproperty("size", ctx.filterPanelVisible ? "320px" : "0px")("collapsible", false)("resizable", ctx.filterPanelVisible)("scrollable", false)("hidden", !ctx.filterPanelVisible);
|
|
1112
1475
|
i0.ɵɵadvance();
|
|
@@ -1114,16 +1477,16 @@ let AgentConfigurationComponent = class AgentConfigurationComponent extends Base
|
|
|
1114
1477
|
i0.ɵɵadvance();
|
|
1115
1478
|
i0.ɵɵproperty("resizable", true)("scrollable", true);
|
|
1116
1479
|
i0.ɵɵadvance(2);
|
|
1117
|
-
i0.ɵɵconditional(ctx.isLoading ?
|
|
1480
|
+
i0.ɵɵconditional(ctx.isLoading ? 29 : -1);
|
|
1118
1481
|
i0.ɵɵadvance();
|
|
1119
|
-
i0.ɵɵconditional(!ctx.isLoading ?
|
|
1482
|
+
i0.ɵɵconditional(!ctx.isLoading ? 30 : -1);
|
|
1120
1483
|
i0.ɵɵadvance();
|
|
1121
|
-
i0.ɵɵconditional(ctx.detailPanelVisible ?
|
|
1484
|
+
i0.ɵɵconditional(ctx.detailPanelVisible ? 31 : -1);
|
|
1122
1485
|
i0.ɵɵadvance();
|
|
1123
1486
|
i0.ɵɵclassProp("visible", ctx.detailPanelVisible);
|
|
1124
1487
|
i0.ɵɵadvance();
|
|
1125
|
-
i0.ɵɵconditional(ctx.selectedAgent ?
|
|
1126
|
-
} }, dependencies: [i4.SplitterComponent, i4.SplitterPaneComponent, i5.LoadingComponent, 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: linear-gradient(135deg, #f5f7fa 0%, #e4e8ed 100%);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n}\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\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: #1e293b;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n font-size: 22px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border: 1px solid #dee2e6;\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\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: linear-gradient(135deg, #e9ecef 0%, #dee2e6 100%);\n border-color: #ced4da;\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: #6366f1;\n font-size: 14px;\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n padding: 6px 12px;\n background: #f8f9fa;\n border-radius: 20px;\n border: 1px solid #e9ecef;\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: #f8f9fa;\n border-radius: 8px;\n padding: 3px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px 14px;\n border-radius: 6px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 15px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #6366f1;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\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: #f8f9fa;\n border-color: #ced4da;\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: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n border-color: #4f46e5;\n color: white;\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #4338ca 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.35);\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\nkendo-splitter[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n[_nghost-%COMP%] .k-splitter {\n border: none;\n background: transparent;\n}\n\n[_nghost-%COMP%] .k-splitbar {\n background: #e5e7eb;\n width: 6px;\n}\n\n[_nghost-%COMP%] .k-splitbar:hover {\n background: #c7d2fe;\n}\n\n[_nghost-%COMP%] .k-pane {\n overflow: hidden;\n}\n\n\n\n\n\n\n.agents-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 28px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 50%, #e8f0fe 100%);\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: white;\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 #e2e8f0;\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: linear-gradient(90deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.agent-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 20px 40px -15px rgba(99, 102, 241, 0.25);\n transform: translateY(-4px);\n border-color: #c7d2fe;\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 rgba(99, 102, 241, 0.3);\n border-color: #a5b4fc;\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 #f1f5f9;\n transition: background-color 0.2s;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background-color: #fafbfc;\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: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\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: #1e293b;\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: #64748b;\n display: flex;\n align-items: center;\n gap: 6px;\n background: #f1f5f9;\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #6366f1;\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: #059669;\n background: #d1fae5;\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #059669;\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: #d97706;\n background: #fef3c7;\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #d97706;\n}\n\n.meta-item.status-disabled[_ngcontent-%COMP%], \n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: #64748b;\n background: #e2e8f0;\n}\n\n.meta-item.status-disabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.meta-item.status-inactive[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #64748b;\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: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n color: #4f46e5;\n border: 1px solid #c7d2fe;\n}\n\n.type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #6366f1;\n}\n\n\n\n.meta-item.type-badge[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n color: #4f46e5;\n border: 1px solid #c7d2fe;\n}\n\n.meta-item.type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #94a3b8;\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: #6366f1;\n background: #f1f5f9;\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: #6366f1;\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: #64748b;\n}\n\n.agent-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: #94a3b8;\n}\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid #e2e8f0;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: 12px;\n border: 1px solid #e2e8f0;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 15px;\n color: #1e293b;\n font-weight: 600;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 18px 24px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-top: 1px solid #e2e8f0;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: white;\n border: 2px solid #e2e8f0;\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: #475569;\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: #f8fafc;\n border-color: #6366f1;\n color: #6366f1;\n transform: translateY(-1px);\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border-color: transparent;\n color: white;\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px rgba(99, 102, 241, 0.4);\n}\n\n\n\n.agents-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid #e2e8f0;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-bottom: 2px solid #e2e8f0;\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: #475569;\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: #e2e8f0;\n color: #6366f1;\n}\n\n.agents-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] {\n color: #6366f1;\n background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\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: #94a3b8;\n transition: all 0.2s ease;\n}\n\n.agents-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.agents-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n color: #6366f1;\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 #f1f5f9;\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: linear-gradient(135deg, #fafbfc 0%, #f8fafc 100%);\n}\n\n.agents-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: #475569;\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: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.25);\n}\n\n.agent-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\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: #1e293b;\n margin-bottom: 0;\n white-space: normal;\n}\n\n.agent-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #64748b;\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: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);\n color: #047857;\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n color: #b45309;\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%], \n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e2e8f0 0%, #cbd5e1 100%);\n color: #475569;\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.execution-mode[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #475569;\n}\n\n.execution-mode[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: white;\n border: 2px solid #e2e8f0;\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: #475569;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: #f8fafc;\n border-color: #6366f1;\n color: #6366f1;\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border-color: transparent;\n color: white;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.25);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.35);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 100px 32px;\n color: #64748b;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 80px;\n background: linear-gradient(135deg, #c7d2fe 0%, #ddd6fe 100%);\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: #1e293b;\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: #64748b;\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n color: white;\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 rgba(99, 102, 241, 0.3);\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px rgba(99, 102, 241, 0.4);\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(15, 23, 42, 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: white;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-bottom: 1px solid #e2e8f0;\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: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\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: #1e293b;\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #64748b;\n font-weight: 500;\n}\n\n.detail-panel-close[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e2e8f0;\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: #64748b;\n}\n\n.detail-panel-close[_ngcontent-%COMP%]:hover {\n background: #f8fafc;\n border-color: #cbd5e1;\n color: #1e293b;\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: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n color: #4f46e5;\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: #64748b;\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: #6366f1;\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: #475569;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: 12px;\n border: 1px solid #e2e8f0;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #1e293b;\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: #1e293b;\n color: #e2e8f0;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-top: 1px solid #e2e8f0;\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: white;\n border: 2px solid #e2e8f0;\n color: #475569;\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n border-color: #6366f1;\n color: #6366f1;\n background: #fafbff;\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border: 2px solid transparent;\n color: white;\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px rgba(99, 102, 241, 0.4);\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: #fef08a;\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}"] });
|
|
1488
|
+
i0.ɵɵconditional(ctx.selectedAgent ? 33 : -1);
|
|
1489
|
+
} }, dependencies: [i4.NgTemplateOutlet, i5.SplitterComponent, i5.SplitterPaneComponent, i6.LoadingComponent, i7.AgentFilterPanelComponent, i4.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\nkendo-splitter[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n[_nghost-%COMP%] .k-splitter {\n border: none;\n background: transparent;\n}\n\n[_nghost-%COMP%] .k-splitbar {\n background: var(--mj-border-default);\n width: 6px;\n}\n\n[_nghost-%COMP%] .k-splitbar:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n[_nghost-%COMP%] .k-pane {\n overflow: hidden;\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}\n\n.tree-category-group[_ngcontent-%COMP%] {\n margin-bottom: 2px;\n}\n\n.tree-category-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.tree-category-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.tree-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n width: 12px;\n text-align: center;\n transition: transform 0.15s ease;\n}\n\n.tree-folder-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.tree-category-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.tree-category-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n font-weight: 500;\n}\n\n\n\n.tree-agent-list[_ngcontent-%COMP%] {\n padding-left: 24px;\n}\n\n.tree-agent-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.tree-agent-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.tree-agent-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.tree-agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-inverse);\n}\n\n.tree-agent-logo[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n object-fit: cover;\n}\n\n.tree-agent-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.tree-agent-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tree-agent-type[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.tree-agent-status[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n.tree-agent-status.status-active[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text);\n background: var(--mj-status-success-bg);\n}\n\n.tree-agent-status.status-disabled[_ngcontent-%COMP%], \n.tree-agent-status.status-inactive[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n}\n\n.tree-agent-status.status-pending[_ngcontent-%COMP%] {\n color: var(--mj-status-warning-text);\n background: var(--mj-status-warning-bg);\n}"] });
|
|
1127
1490
|
};
|
|
1128
1491
|
AgentConfigurationComponent = __decorate([
|
|
1129
1492
|
RegisterClass(BaseResourceComponent, 'AIAgentsResource')
|
|
@@ -1131,7 +1494,7 @@ AgentConfigurationComponent = __decorate([
|
|
|
1131
1494
|
export { AgentConfigurationComponent };
|
|
1132
1495
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentConfigurationComponent, [{
|
|
1133
1496
|
type: Component,
|
|
1134
|
-
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 </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 <kendo-splitter \n class=\"main-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onMainSplitterChange($event)\"\n >\n \n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane \n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\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 </kendo-splitter-pane>\n \n <!-- Agents List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"true\">\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 <!-- 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 </kendo-splitter-pane>\n </kendo-splitter>\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 indigo/purple accents\n ============================================ */\n\n/* Container */\n.agent-configuration-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: linear-gradient(135deg, #f5f7fa 0%, #e4e8ed 100%);\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: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\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: #1e293b;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.dashboard-title i {\n color: #6366f1;\n font-size: 22px;\n}\n\n.filter-toggle-btn {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border: 1px solid #dee2e6;\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\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: linear-gradient(135deg, #e9ecef 0%, #dee2e6 100%);\n border-color: #ced4da;\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: #6366f1;\n font-size: 14px;\n}\n\n.item-count {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n padding: 6px 12px;\n background: #f8f9fa;\n border-radius: 20px;\n border: 1px solid #e9ecef;\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: #f8f9fa;\n border-radius: 8px;\n padding: 3px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 8px 14px;\n border-radius: 6px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 15px;\n}\n\n.view-btn:hover {\n color: #495057;\n}\n\n.view-btn.active {\n background: white;\n color: #6366f1;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 10px 18px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\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: #f8f9fa;\n border-color: #ced4da;\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: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n border-color: #4f46e5;\n color: white;\n}\n\n.control-btn.primary:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #4338ca 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.35);\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 */\nkendo-splitter {\n background: transparent;\n}\n\n:host ::ng-deep .k-splitter {\n border: none;\n background: transparent;\n}\n\n:host ::ng-deep .k-splitbar {\n background: #e5e7eb;\n width: 6px;\n}\n\n:host ::ng-deep .k-splitbar:hover {\n background: #c7d2fe;\n}\n\n:host ::ng-deep .k-pane {\n overflow: hidden;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 50%, #e8f0fe 100%);\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: white;\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 #e2e8f0;\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: linear-gradient(90deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.agent-card:hover {\n box-shadow: 0 20px 40px -15px rgba(99, 102, 241, 0.25);\n transform: translateY(-4px);\n border-color: #c7d2fe;\n}\n\n.agent-card:hover::before {\n opacity: 1;\n}\n\n.agent-card.expanded {\n box-shadow: 0 25px 50px -12px rgba(99, 102, 241, 0.3);\n border-color: #a5b4fc;\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 #f1f5f9;\n transition: background-color 0.2s;\n}\n\n.card-header:hover {\n background-color: #fafbfc;\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: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.agent-icon i {\n color: white;\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: #1e293b;\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: #64748b;\n display: flex;\n align-items: center;\n gap: 6px;\n background: #f1f5f9;\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item i {\n font-size: 11px;\n color: #6366f1;\n}\n\n.meta-item.status-active {\n color: #059669;\n background: #d1fae5;\n}\n\n.meta-item.status-active i {\n color: #059669;\n}\n\n.meta-item.status-pending {\n color: #d97706;\n background: #fef3c7;\n}\n\n.meta-item.status-pending i {\n color: #d97706;\n}\n\n.meta-item.status-disabled,\n.meta-item.status-inactive {\n color: #64748b;\n background: #e2e8f0;\n}\n\n.meta-item.status-disabled i,\n.meta-item.status-inactive i {\n color: #64748b;\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: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n color: #4f46e5;\n border: 1px solid #c7d2fe;\n}\n\n.type-badge i {\n font-size: 11px;\n color: #6366f1;\n}\n\n/* Type badge in meta context (grid view) */\n.meta-item.type-badge {\n background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n color: #4f46e5;\n border: 1px solid #c7d2fe;\n}\n\n.meta-item.type-badge i {\n color: #6366f1;\n}\n\n.expand-icon {\n font-size: 16px;\n color: #94a3b8;\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: #6366f1;\n background: #f1f5f9;\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: #6366f1;\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: #64748b;\n}\n\n.agent-description.text-muted {\n font-style: italic;\n color: #94a3b8;\n}\n\n/* Expanded Content */\n.expanded-content {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid #e2e8f0;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: 12px;\n border: 1px solid #e2e8f0;\n}\n\n.stat-label {\n font-size: 11px;\n font-weight: 700;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value {\n font-size: 15px;\n color: #1e293b;\n font-weight: 600;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 18px 24px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-top: 1px solid #e2e8f0;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: white;\n border: 2px solid #e2e8f0;\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: #475569;\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: #f8fafc;\n border-color: #6366f1;\n color: #6366f1;\n transform: translateY(-1px);\n}\n\n.action-btn-primary {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border-color: transparent;\n color: white;\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.action-btn-primary:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px rgba(99, 102, 241, 0.4);\n}\n\n/* List View */\n.agents-list {\n background: white;\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid #e2e8f0;\n overflow: hidden;\n}\n\n.agents-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.agents-table thead {\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-bottom: 2px solid #e2e8f0;\n}\n\n.agents-table th {\n padding: 16px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: #475569;\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: #e2e8f0;\n color: #6366f1;\n}\n\n.agents-table th.sorted {\n color: #6366f1;\n background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\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: #94a3b8;\n transition: all 0.2s ease;\n}\n\n.agents-table th:hover .sort-icon {\n color: #6366f1;\n}\n\n.agents-table th.sorted .sort-icon {\n color: #6366f1;\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 #f1f5f9;\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: linear-gradient(135deg, #fafbfc 0%, #f8fafc 100%);\n}\n\n.agents-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: #475569;\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: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.25);\n}\n\n.agent-icon-small i {\n color: white;\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: #1e293b;\n margin-bottom: 0;\n white-space: normal;\n}\n\n.agent-description-small {\n font-size: 13px;\n color: #64748b;\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: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);\n color: #047857;\n}\n\n.status-badge.status-pending {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n color: #b45309;\n}\n\n.status-badge.status-disabled,\n.status-badge.status-inactive {\n background: linear-gradient(135deg, #e2e8f0 0%, #cbd5e1 100%);\n color: #475569;\n}\n\n.status-badge.status-unknown {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.execution-mode {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #475569;\n}\n\n.execution-mode i {\n color: #6366f1;\n}\n\n.table-actions {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small {\n background: white;\n border: 2px solid #e2e8f0;\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: #475569;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: #f8fafc;\n border-color: #6366f1;\n color: #6366f1;\n}\n\n.action-btn-small.primary {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border-color: transparent;\n color: white;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.25);\n}\n\n.action-btn-small.primary:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.35);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 100px 32px;\n color: #64748b;\n}\n\n.empty-state i {\n font-size: 80px;\n background: linear-gradient(135deg, #c7d2fe 0%, #ddd6fe 100%);\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: #1e293b;\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: #64748b;\n}\n\n.empty-state-btn {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n color: white;\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 rgba(99, 102, 241, 0.3);\n}\n\n.empty-state-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px rgba(99, 102, 241, 0.4);\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(15, 23, 42, 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: white;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-bottom: 1px solid #e2e8f0;\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: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.detail-icon i {\n color: white;\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: #1e293b;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: #64748b;\n font-weight: 500;\n}\n\n.detail-panel-close {\n background: white;\n border: 1px solid #e2e8f0;\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: #64748b;\n}\n\n.detail-panel-close:hover {\n background: #f8fafc;\n border-color: #cbd5e1;\n color: #1e293b;\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: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n color: #4f46e5;\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: #64748b;\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: #6366f1;\n font-size: 14px;\n}\n\n.detail-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: #475569;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: 12px;\n border: 1px solid #e2e8f0;\n}\n\n.detail-label {\n font-size: 11px;\n font-weight: 700;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: 14px;\n color: #1e293b;\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: #1e293b;\n color: #e2e8f0;\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: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-top: 1px solid #e2e8f0;\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: white;\n border: 2px solid #e2e8f0;\n color: #475569;\n}\n\n.detail-action-btn.secondary:hover {\n border-color: #6366f1;\n color: #6366f1;\n background: #fafbff;\n}\n\n.detail-action-btn.primary {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border: 2px solid transparent;\n color: white;\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n}\n\n.detail-action-btn.primary:hover {\n background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px rgba(99, 102, 241, 0.4);\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: #fef08a;\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n"] }]
|
|
1497
|
+
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 <kendo-splitter \n class=\"main-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onMainSplitterChange($event)\"\n >\n \n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane \n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\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 </kendo-splitter-pane>\n \n <!-- Agents List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"true\">\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 (Mac Finder style) -->\n @if (viewMode === 'tree') {\n <div class=\"agents-tree\">\n @for (node of categoryTree; track node.Category.ID) {\n @if (hasVisibleContent(node)) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTpl; context: { $implicit: node, depth: 0 }\"></ng-container>\n }\n }\n\n <!-- Uncategorized agents -->\n @if (uncategorizedAgents.length > 0) {\n <div class=\"tree-category-group\">\n <div class=\"tree-category-header depth-0\">\n <i class=\"fa-solid fa-folder-open tree-folder-icon\"></i>\n <span class=\"tree-category-name\">Uncategorized</span>\n <span class=\"tree-category-count\">{{ uncategorizedAgents.length }}</span>\n </div>\n <div class=\"tree-agent-list\">\n @for (agent of uncategorizedAgents; track agent.ID) {\n <div class=\"tree-agent-row\" (click)=\"showAgentDetails(agent)\">\n <div class=\"tree-agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"tree-agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"tree-agent-info\">\n <span class=\"tree-agent-name\">{{ agent.Name }}</span>\n <span class=\"tree-agent-type\">{{ getAgentTypeName(agent) }}</span>\n </div>\n <span class=\"tree-agent-status\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status }}\n </span>\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Recursive category node template -->\n <ng-template #categoryNodeTpl let-node let-depth=\"depth\">\n <div class=\"tree-category-group\">\n <div class=\"tree-category-header\" [class]=\"'depth-' + depth\" (click)=\"toggleCategoryNode(node)\">\n <i class=\"fa-solid tree-chevron\"\n [class.fa-chevron-right]=\"!node.Expanded\"\n [class.fa-chevron-down]=\"node.Expanded\"></i>\n <i class=\"fa-solid tree-folder-icon\"\n [class.fa-folder]=\"!node.Expanded\"\n [class.fa-folder-open]=\"node.Expanded\"></i>\n <span class=\"tree-category-name\">{{ node.Category.Name }}</span>\n <span class=\"tree-category-count\">{{ getAgentCount(node) }}</span>\n </div>\n\n @if (node.Expanded) {\n <!-- Agents directly in this category -->\n @if (node.Agents.length > 0) {\n <div class=\"tree-agent-list\" [style.padding-left.px]=\"(depth + 1) * 24\">\n @for (agent of node.Agents; track agent.ID) {\n <div class=\"tree-agent-row\" (click)=\"showAgentDetails(agent)\">\n <div class=\"tree-agent-icon\" [style.background-color]=\"getAgentIconColor(agent)\">\n @if (hasLogoURL(agent)) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"tree-agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n <div class=\"tree-agent-info\">\n <span class=\"tree-agent-name\">{{ agent.Name }}</span>\n <span class=\"tree-agent-type\">{{ getAgentTypeName(agent) }}</span>\n </div>\n <span class=\"tree-agent-status\" [class]=\"'status-' + (agent.Status || 'unknown').toLowerCase()\">\n {{ agent.Status }}\n </span>\n @if (agent.Status === 'Active' && UserCanReadAgents) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"runAgent(agent); $event.stopPropagation()\"\n title=\"Run Agent\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Child categories -->\n @for (child of node.Children; track child.Category.ID) {\n @if (hasVisibleContent(child)) {\n <div [style.padding-left.px]=\"(depth + 1) * 24\">\n <ng-container *ngTemplateOutlet=\"categoryNodeTpl; context: { $implicit: child, depth: depth + 1 }\"></ng-container>\n </div>\n }\n }\n }\n </div>\n </ng-template>\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 </kendo-splitter-pane>\n </kendo-splitter>\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 */\nkendo-splitter {\n background: transparent;\n}\n\n:host ::ng-deep .k-splitter {\n border: none;\n background: transparent;\n}\n\n:host ::ng-deep .k-splitbar {\n background: var(--mj-border-default);\n width: 6px;\n}\n\n:host ::ng-deep .k-splitbar:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n}\n\n:host ::ng-deep .k-pane {\n overflow: hidden;\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}\n\n.tree-category-group {\n margin-bottom: 2px;\n}\n\n.tree-category-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.tree-category-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.tree-chevron {\n font-size: 10px;\n color: var(--mj-text-muted);\n width: 12px;\n text-align: center;\n transition: transform 0.15s ease;\n}\n\n.tree-folder-icon {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.tree-category-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.tree-category-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n font-weight: 500;\n}\n\n/* Agent rows within tree */\n.tree-agent-list {\n padding-left: 24px;\n}\n\n.tree-agent-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.tree-agent-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.tree-agent-icon {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.tree-agent-icon i {\n font-size: 12px;\n color: var(--mj-text-inverse);\n}\n\n.tree-agent-logo {\n width: 28px;\n height: 28px;\n border-radius: 6px;\n object-fit: cover;\n}\n\n.tree-agent-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.tree-agent-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tree-agent-type {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.tree-agent-status {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n.tree-agent-status.status-active {\n color: var(--mj-status-success-text);\n background: var(--mj-status-success-bg);\n}\n\n.tree-agent-status.status-disabled,\n.tree-agent-status.status-inactive {\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n}\n\n.tree-agent-status.status-pending {\n color: var(--mj-status-warning-text);\n background: var(--mj-status-warning-bg);\n}\n"] }]
|
|
1135
1498
|
}], () => [{ type: i1.AITestHarnessDialogService }, { type: i2.CreateAgentService }, { type: i3.NavigationService }, { type: i0.ChangeDetectorRef }], null); })();
|
|
1136
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentConfigurationComponent, { className: "AgentConfigurationComponent", filePath: "src/AI/components/agents/agent-configuration.component.ts", lineNumber:
|
|
1499
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentConfigurationComponent, { className: "AgentConfigurationComponent", filePath: "src/AI/components/agents/agent-configuration.component.ts", lineNumber: 61 }); })();
|
|
1137
1500
|
//# sourceMappingURL=agent-configuration.component.js.map
|