@memberjunction/ng-dashboards 5.28.0 → 5.30.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.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +11 -9
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +21 -19
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +154 -154
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +8 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +2 -2
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +15 -2
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +17 -5
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts +20 -0
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -0
- package/dist/Archiving/components/archive-config-resource.component.js +46 -0
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -0
- package/dist/Archiving/components/archive-runs-resource.component.d.ts +20 -0
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -0
- package/dist/Archiving/components/archive-runs-resource.component.js +46 -0
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +56 -71
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -8
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -74
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +25 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.js +99 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -0
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +21 -104
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +48 -530
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +5 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts +18 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +251 -199
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +7 -2
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +10 -2
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +144 -144
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +12 -14
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +170 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2521 -758
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts +16 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.js +187 -60
- package/dist/MCP/mcp-filter-panel.component.js.map +1 -1
- package/dist/MCP/mcp-resource.component.d.ts +0 -9
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
- package/dist/MCP/mcp-resource.component.js +1 -10
- package/dist/MCP/mcp-resource.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +7 -6
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +4 -8
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.d.ts +38 -0
- package/dist/Permissions/audit-log-resource.component.d.ts.map +1 -0
- package/dist/Permissions/audit-log-resource.component.js +380 -0
- package/dist/Permissions/audit-log-resource.component.js.map +1 -0
- package/dist/Permissions/permissions-shared.d.ts +51 -0
- package/dist/Permissions/permissions-shared.d.ts.map +1 -0
- package/dist/Permissions/permissions-shared.js +91 -0
- package/dist/Permissions/permissions-shared.js.map +1 -0
- package/dist/Permissions/resource-access-resource.component.d.ts +45 -0
- package/dist/Permissions/resource-access-resource.component.d.ts.map +1 -0
- package/dist/Permissions/resource-access-resource.component.js +342 -0
- package/dist/Permissions/resource-access-resource.component.js.map +1 -0
- package/dist/Permissions/user-access-resource.component.d.ts +39 -0
- package/dist/Permissions/user-access-resource.component.d.ts.map +1 -0
- package/dist/Permissions/user-access-resource.component.js +346 -0
- package/dist/Permissions/user-access-resource.component.js.map +1 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +13 -3
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +186 -139
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +19 -0
- package/dist/archiving-dashboards.module.d.ts.map +1 -0
- package/dist/archiving-dashboards.module.js +52 -0
- package/dist/archiving-dashboards.module.js.map +1 -0
- package/dist/component-studio-dashboards.module.d.ts +1 -0
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +7 -0
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +24 -19
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +30 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +7 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +8 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.js +14 -4
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
- package/package.json +52 -48
|
@@ -14,6 +14,16 @@ export declare class MCPFilterPanelComponent {
|
|
|
14
14
|
activeTab: MCPDashboardTab;
|
|
15
15
|
totalCount: number;
|
|
16
16
|
filteredCount: number;
|
|
17
|
+
/** Part 3.3 — available servers for the Tools tab server-filter dropdown */
|
|
18
|
+
availableServers: Array<{
|
|
19
|
+
ID: string;
|
|
20
|
+
Name: string;
|
|
21
|
+
}>;
|
|
22
|
+
/** Part 3.3 — available categories (derived from snake_case tool-name prefix) with counts */
|
|
23
|
+
availableCategories: Array<{
|
|
24
|
+
category: string;
|
|
25
|
+
count: number;
|
|
26
|
+
}>;
|
|
17
27
|
filtersChange: EventEmitter<MCPDashboardFilters>;
|
|
18
28
|
closePanel: EventEmitter<void>;
|
|
19
29
|
serverStatusOptions: {
|
|
@@ -38,7 +48,12 @@ export declare class MCPFilterPanelComponent {
|
|
|
38
48
|
onConnectionStatusChange(value: string): void;
|
|
39
49
|
onToolStatusChange(value: string): void;
|
|
40
50
|
onLogStatusChange(value: string): void;
|
|
51
|
+
onToolsServerChange(value: string): void;
|
|
52
|
+
onToolsCategoryChange(value: string): void;
|
|
53
|
+
onFavoritesOnlyChange(checked: boolean): void;
|
|
41
54
|
resetAllFilters(): void;
|
|
55
|
+
/** Part 3.3 — count of non-default filter dimensions, used for "Filters (N)" badge */
|
|
56
|
+
get activeFilterCount(): number;
|
|
42
57
|
toggleFilterPanel(): void;
|
|
43
58
|
get hasActiveFilters(): boolean;
|
|
44
59
|
get currentStatusOptions(): {
|
|
@@ -49,6 +64,6 @@ export declare class MCPFilterPanelComponent {
|
|
|
49
64
|
onCurrentStatusChange(value: string): void;
|
|
50
65
|
getTabLabel(): string;
|
|
51
66
|
static ɵfac: i0.ɵɵFactoryDeclaration<MCPFilterPanelComponent, never>;
|
|
52
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MCPFilterPanelComponent, "mj-mcp-filter-panel", never, { "filters": { "alias": "filters"; "required": false; }; "activeTab": { "alias": "activeTab"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "filteredCount": { "alias": "filteredCount"; "required": false; }; }, { "filtersChange": "filtersChange"; "closePanel": "closePanel"; }, never, never, false, never>;
|
|
67
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MCPFilterPanelComponent, "mj-mcp-filter-panel", never, { "filters": { "alias": "filters"; "required": false; }; "activeTab": { "alias": "activeTab"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "filteredCount": { "alias": "filteredCount"; "required": false; }; "availableServers": { "alias": "availableServers"; "required": false; }; "availableCategories": { "alias": "availableCategories"; "required": false; }; }, { "filtersChange": "filtersChange"; "closePanel": "closePanel"; }, never, never, false, never>;
|
|
53
68
|
}
|
|
54
69
|
//# sourceMappingURL=mcp-filter-panel.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-filter-panel.component.d.ts","sourceRoot":"","sources":["../../src/MCP/mcp-filter-panel.component.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;;AAEjF,qBAMa,uBAAuB;IACzB,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"mcp-filter-panel.component.d.ts","sourceRoot":"","sources":["../../src/MCP/mcp-filter-panel.component.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;;AAEjF,qBAMa,uBAAuB;IACzB,OAAO,EAAE,mBAAmB,CASnC;IAEO,SAAS,EAAE,eAAe,CAAa;IACvC,UAAU,SAAK;IACf,aAAa,SAAK;IAE3B,4EAA4E;IACnE,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IACpE,6FAA6F;IACpF,mBAAmB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAEpE,aAAa,oCAA2C;IACxD,UAAU,qBAA4B;IAEzC,mBAAmB;;;QAIxB;IAEK,uBAAuB;;;QAK5B;IAEK,iBAAiB;;;QAItB;IAEK,gBAAgB;;;QAKrB;IAEK,cAAc,IAAI,IAAI;IAItB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzC,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKvC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK7C,eAAe,IAAI,IAAI;IAc9B,sFAAsF;IACtF,IAAW,iBAAiB,IAAI,MAAM,CAWrC;IAEM,iBAAiB,IAAI,IAAI;IAIhC,IAAW,gBAAgB,IAAI,OAAO,CAMrC;IAED,IAAW,oBAAoB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAanE;IAED,IAAW,kBAAkB,IAAI,MAAM,CAatC;IAEM,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAiB1C,WAAW,IAAI,MAAM;yCArLjB,uBAAuB;2CAAvB,uBAAuB;CAmMnC"}
|
|
@@ -10,18 +10,29 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@angular/forms";
|
|
12
12
|
const _forTrack0 = ($index, $item) => $item.value;
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const _forTrack1 = ($index, $item) => $item.ID;
|
|
14
|
+
const _forTrack2 = ($index, $item) => $item.category;
|
|
15
|
+
function MCPFilterPanelComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelementStart(0, "span", 2);
|
|
15
17
|
i0.ɵɵtext(1);
|
|
16
18
|
i0.ɵɵelementEnd();
|
|
17
19
|
} if (rf & 2) {
|
|
18
|
-
const
|
|
19
|
-
i0.ɵɵproperty("value", option_r1.value);
|
|
20
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
20
21
|
i0.ɵɵadvance();
|
|
21
|
-
i0.ɵɵtextInterpolate(
|
|
22
|
+
i0.ɵɵtextInterpolate(ctx_r0.activeFilterCount);
|
|
22
23
|
} }
|
|
23
|
-
function
|
|
24
|
-
i0.ɵɵelementStart(0, "option",
|
|
24
|
+
function MCPFilterPanelComponent_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "option", 15);
|
|
26
|
+
i0.ɵɵtext(1);
|
|
27
|
+
i0.ɵɵelementEnd();
|
|
28
|
+
} if (rf & 2) {
|
|
29
|
+
const option_r2 = ctx.$implicit;
|
|
30
|
+
i0.ɵɵproperty("value", option_r2.value);
|
|
31
|
+
i0.ɵɵadvance();
|
|
32
|
+
i0.ɵɵtextInterpolate(option_r2.text);
|
|
33
|
+
} }
|
|
34
|
+
function MCPFilterPanelComponent_Conditional_25_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "option", 15);
|
|
25
36
|
i0.ɵɵtext(1);
|
|
26
37
|
i0.ɵɵelementEnd();
|
|
27
38
|
} if (rf & 2) {
|
|
@@ -30,25 +41,25 @@ function MCPFilterPanelComponent_Conditional_24_For_6_Template(rf, ctx) { if (rf
|
|
|
30
41
|
i0.ɵɵadvance();
|
|
31
42
|
i0.ɵɵtextInterpolate(option_r4.text);
|
|
32
43
|
} }
|
|
33
|
-
function
|
|
34
|
-
const
|
|
35
|
-
i0.ɵɵelementStart(0, "div",
|
|
36
|
-
i0.ɵɵelement(2, "span",
|
|
44
|
+
function MCPFilterPanelComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
46
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "label", 10);
|
|
47
|
+
i0.ɵɵelement(2, "span", 19);
|
|
37
48
|
i0.ɵɵtext(3, " Server Status ");
|
|
38
49
|
i0.ɵɵelementEnd();
|
|
39
|
-
i0.ɵɵelementStart(4, "select",
|
|
40
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
41
|
-
i0.ɵɵrepeaterCreate(5,
|
|
50
|
+
i0.ɵɵelementStart(4, "select", 14);
|
|
51
|
+
i0.ɵɵlistener("ngModelChange", function MCPFilterPanelComponent_Conditional_25_Template_select_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onServerStatusChange($event)); });
|
|
52
|
+
i0.ɵɵrepeaterCreate(5, MCPFilterPanelComponent_Conditional_25_For_6_Template, 2, 2, "option", 15, _forTrack0);
|
|
42
53
|
i0.ɵɵelementEnd()();
|
|
43
54
|
} if (rf & 2) {
|
|
44
|
-
const
|
|
55
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
45
56
|
i0.ɵɵadvance(4);
|
|
46
|
-
i0.ɵɵproperty("ngModel",
|
|
57
|
+
i0.ɵɵproperty("ngModel", ctx_r0.filters.serverStatus);
|
|
47
58
|
i0.ɵɵadvance();
|
|
48
|
-
i0.ɵɵrepeater(
|
|
59
|
+
i0.ɵɵrepeater(ctx_r0.serverStatusOptions);
|
|
49
60
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "option",
|
|
61
|
+
function MCPFilterPanelComponent_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementStart(0, "option", 15);
|
|
52
63
|
i0.ɵɵtext(1);
|
|
53
64
|
i0.ɵɵelementEnd();
|
|
54
65
|
} if (rf & 2) {
|
|
@@ -57,22 +68,85 @@ function MCPFilterPanelComponent_Conditional_25_For_6_Template(rf, ctx) { if (rf
|
|
|
57
68
|
i0.ɵɵadvance();
|
|
58
69
|
i0.ɵɵtextInterpolate(option_r6.text);
|
|
59
70
|
} }
|
|
60
|
-
function
|
|
71
|
+
function MCPFilterPanelComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
61
72
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
62
|
-
i0.ɵɵelementStart(0, "div",
|
|
63
|
-
i0.ɵɵelement(2, "span",
|
|
73
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "label", 10);
|
|
74
|
+
i0.ɵɵelement(2, "span", 20);
|
|
64
75
|
i0.ɵɵtext(3, " Connection Status ");
|
|
65
76
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵelementStart(4, "select",
|
|
67
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
68
|
-
i0.ɵɵrepeaterCreate(5,
|
|
77
|
+
i0.ɵɵelementStart(4, "select", 14);
|
|
78
|
+
i0.ɵɵlistener("ngModelChange", function MCPFilterPanelComponent_Conditional_26_Template_select_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onConnectionStatusChange($event)); });
|
|
79
|
+
i0.ɵɵrepeaterCreate(5, MCPFilterPanelComponent_Conditional_26_For_6_Template, 2, 2, "option", 15, _forTrack0);
|
|
69
80
|
i0.ɵɵelementEnd()();
|
|
70
81
|
} if (rf & 2) {
|
|
71
|
-
const
|
|
82
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
72
83
|
i0.ɵɵadvance(4);
|
|
73
|
-
i0.ɵɵproperty("ngModel",
|
|
84
|
+
i0.ɵɵproperty("ngModel", ctx_r0.filters.connectionStatus);
|
|
74
85
|
i0.ɵɵadvance();
|
|
75
|
-
i0.ɵɵrepeater(
|
|
86
|
+
i0.ɵɵrepeater(ctx_r0.connectionStatusOptions);
|
|
87
|
+
} }
|
|
88
|
+
function MCPFilterPanelComponent_Conditional_27_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "option", 15);
|
|
90
|
+
i0.ɵɵtext(1);
|
|
91
|
+
i0.ɵɵelementEnd();
|
|
92
|
+
} if (rf & 2) {
|
|
93
|
+
const s_r8 = ctx.$implicit;
|
|
94
|
+
i0.ɵɵproperty("value", s_r8.ID);
|
|
95
|
+
i0.ɵɵadvance();
|
|
96
|
+
i0.ɵɵtextInterpolate(s_r8.Name);
|
|
97
|
+
} }
|
|
98
|
+
function MCPFilterPanelComponent_Conditional_27_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
+
i0.ɵɵelementStart(0, "option", 15);
|
|
100
|
+
i0.ɵɵtext(1);
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const c_r9 = ctx.$implicit;
|
|
104
|
+
i0.ɵɵproperty("value", c_r9.category);
|
|
105
|
+
i0.ɵɵadvance();
|
|
106
|
+
i0.ɵɵtextInterpolate2("", c_r9.category, " (", c_r9.count, ")");
|
|
107
|
+
} }
|
|
108
|
+
function MCPFilterPanelComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
110
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "label", 10);
|
|
111
|
+
i0.ɵɵelement(2, "span", 19);
|
|
112
|
+
i0.ɵɵtext(3, " Server");
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵelementStart(4, "select", 14);
|
|
115
|
+
i0.ɵɵlistener("ngModelChange", function MCPFilterPanelComponent_Conditional_27_Template_select_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onToolsServerChange($event)); });
|
|
116
|
+
i0.ɵɵelementStart(5, "option", 21);
|
|
117
|
+
i0.ɵɵtext(6, "All Servers");
|
|
118
|
+
i0.ɵɵelementEnd();
|
|
119
|
+
i0.ɵɵrepeaterCreate(7, MCPFilterPanelComponent_Conditional_27_For_8_Template, 2, 2, "option", 15, _forTrack1);
|
|
120
|
+
i0.ɵɵelementEnd()();
|
|
121
|
+
i0.ɵɵelementStart(9, "div", 9)(10, "label", 10);
|
|
122
|
+
i0.ɵɵelement(11, "span", 22);
|
|
123
|
+
i0.ɵɵtext(12, " Category");
|
|
124
|
+
i0.ɵɵelementEnd();
|
|
125
|
+
i0.ɵɵelementStart(13, "select", 14);
|
|
126
|
+
i0.ɵɵlistener("ngModelChange", function MCPFilterPanelComponent_Conditional_27_Template_select_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onToolsCategoryChange($event)); });
|
|
127
|
+
i0.ɵɵelementStart(14, "option", 21);
|
|
128
|
+
i0.ɵɵtext(15, "All Categories");
|
|
129
|
+
i0.ɵɵelementEnd();
|
|
130
|
+
i0.ɵɵrepeaterCreate(16, MCPFilterPanelComponent_Conditional_27_For_17_Template, 2, 3, "option", 15, _forTrack2);
|
|
131
|
+
i0.ɵɵelementEnd()();
|
|
132
|
+
i0.ɵɵelementStart(18, "div", 9)(19, "label", 23)(20, "input", 24);
|
|
133
|
+
i0.ɵɵlistener("change", function MCPFilterPanelComponent_Conditional_27_Template_input_change_20_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onFavoritesOnlyChange($event.target.checked)); });
|
|
134
|
+
i0.ɵɵelementEnd();
|
|
135
|
+
i0.ɵɵelement(21, "span", 25);
|
|
136
|
+
i0.ɵɵtext(22, " Favorites only ");
|
|
137
|
+
i0.ɵɵelementEnd()();
|
|
138
|
+
} if (rf & 2) {
|
|
139
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
140
|
+
i0.ɵɵadvance(4);
|
|
141
|
+
i0.ɵɵproperty("ngModel", ctx_r0.filters.toolsServer ?? "all");
|
|
142
|
+
i0.ɵɵadvance(3);
|
|
143
|
+
i0.ɵɵrepeater(ctx_r0.availableServers);
|
|
144
|
+
i0.ɵɵadvance(6);
|
|
145
|
+
i0.ɵɵproperty("ngModel", ctx_r0.filters.toolsCategory ?? "all");
|
|
146
|
+
i0.ɵɵadvance(3);
|
|
147
|
+
i0.ɵɵrepeater(ctx_r0.availableCategories);
|
|
148
|
+
i0.ɵɵadvance(4);
|
|
149
|
+
i0.ɵɵproperty("checked", ctx_r0.filters.favoritesOnly === true);
|
|
76
150
|
} }
|
|
77
151
|
export class MCPFilterPanelComponent {
|
|
78
152
|
filters = {
|
|
@@ -80,11 +154,18 @@ export class MCPFilterPanelComponent {
|
|
|
80
154
|
serverStatus: 'all',
|
|
81
155
|
connectionStatus: 'all',
|
|
82
156
|
toolStatus: 'all',
|
|
83
|
-
logStatus: 'all'
|
|
157
|
+
logStatus: 'all',
|
|
158
|
+
toolsServer: 'all',
|
|
159
|
+
toolsCategory: 'all',
|
|
160
|
+
favoritesOnly: false
|
|
84
161
|
};
|
|
85
162
|
activeTab = 'servers';
|
|
86
163
|
totalCount = 0;
|
|
87
164
|
filteredCount = 0;
|
|
165
|
+
/** Part 3.3 — available servers for the Tools tab server-filter dropdown */
|
|
166
|
+
availableServers = [];
|
|
167
|
+
/** Part 3.3 — available categories (derived from snake_case tool-name prefix) with counts */
|
|
168
|
+
availableCategories = [];
|
|
88
169
|
filtersChange = new EventEmitter();
|
|
89
170
|
closePanel = new EventEmitter();
|
|
90
171
|
serverStatusOptions = [
|
|
@@ -132,16 +213,52 @@ export class MCPFilterPanelComponent {
|
|
|
132
213
|
this.filters = { ...this.filters, logStatus: value };
|
|
133
214
|
this.onFilterChange();
|
|
134
215
|
}
|
|
216
|
+
onToolsServerChange(value) {
|
|
217
|
+
this.filters = { ...this.filters, toolsServer: value };
|
|
218
|
+
this.onFilterChange();
|
|
219
|
+
}
|
|
220
|
+
onToolsCategoryChange(value) {
|
|
221
|
+
this.filters = { ...this.filters, toolsCategory: value };
|
|
222
|
+
this.onFilterChange();
|
|
223
|
+
}
|
|
224
|
+
onFavoritesOnlyChange(checked) {
|
|
225
|
+
this.filters = { ...this.filters, favoritesOnly: checked };
|
|
226
|
+
this.onFilterChange();
|
|
227
|
+
}
|
|
135
228
|
resetAllFilters() {
|
|
136
229
|
this.filters = {
|
|
137
230
|
searchTerm: '',
|
|
138
231
|
serverStatus: 'all',
|
|
139
232
|
connectionStatus: 'all',
|
|
140
233
|
toolStatus: 'all',
|
|
141
|
-
logStatus: 'all'
|
|
234
|
+
logStatus: 'all',
|
|
235
|
+
toolsServer: 'all',
|
|
236
|
+
toolsCategory: 'all',
|
|
237
|
+
favoritesOnly: false
|
|
142
238
|
};
|
|
143
239
|
this.onFilterChange();
|
|
144
240
|
}
|
|
241
|
+
/** Part 3.3 — count of non-default filter dimensions, used for "Filters (N)" badge */
|
|
242
|
+
get activeFilterCount() {
|
|
243
|
+
let n = 0;
|
|
244
|
+
if (this.filters.searchTerm)
|
|
245
|
+
n++;
|
|
246
|
+
if (this.filters.serverStatus && this.filters.serverStatus !== 'all')
|
|
247
|
+
n++;
|
|
248
|
+
if (this.filters.connectionStatus && this.filters.connectionStatus !== 'all')
|
|
249
|
+
n++;
|
|
250
|
+
if (this.filters.toolStatus && this.filters.toolStatus !== 'all')
|
|
251
|
+
n++;
|
|
252
|
+
if (this.filters.logStatus && this.filters.logStatus !== 'all')
|
|
253
|
+
n++;
|
|
254
|
+
if (this.filters.toolsServer && this.filters.toolsServer !== 'all')
|
|
255
|
+
n++;
|
|
256
|
+
if (this.filters.toolsCategory && this.filters.toolsCategory !== 'all')
|
|
257
|
+
n++;
|
|
258
|
+
if (this.filters.favoritesOnly)
|
|
259
|
+
n++;
|
|
260
|
+
return n;
|
|
261
|
+
}
|
|
145
262
|
toggleFilterPanel() {
|
|
146
263
|
this.closePanel.emit();
|
|
147
264
|
}
|
|
@@ -211,44 +328,48 @@ export class MCPFilterPanelComponent {
|
|
|
211
328
|
}
|
|
212
329
|
}
|
|
213
330
|
static ɵfac = function MCPFilterPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MCPFilterPanelComponent)(); };
|
|
214
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPFilterPanelComponent, selectors: [["mj-mcp-filter-panel"]], inputs: { filters: "filters", activeTab: "activeTab", totalCount: "totalCount", filteredCount: "filteredCount" }, outputs: { filtersChange: "filtersChange", closePanel: "closePanel" }, standalone: false, decls:
|
|
331
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPFilterPanelComponent, selectors: [["mj-mcp-filter-panel"]], inputs: { filters: "filters", activeTab: "activeTab", totalCount: "totalCount", filteredCount: "filteredCount", availableServers: "availableServers", availableCategories: "availableCategories" }, outputs: { filtersChange: "filtersChange", closePanel: "closePanel" }, standalone: false, decls: 32, vars: 13, consts: [[1, "filter-panel"], [1, "filter-panel-header"], [2, "margin-left", "6px", "padding", "2px 8px", "background", "var(--mj-brand-primary,#264FAF)", "color", "#fff", "border-radius", "10px", "font-size", "0.7rem", "font-weight", "600"], [1, "filter-summary-inline"], [1, "summary-value"], [1, "summary-label"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "filter-content"], [1, "filter-group"], [1, "filter-label"], [1, "fa-solid", "fa-search"], ["type", "text", 1, "filter-input", 3, "ngModelChange", "ngModel", "placeholder"], [1, "fa-solid", "fa-toggle-on"], [1, "filter-select", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "filter-actions"], ["title", "Reset all filters", 1, "reset-btn", 3, "click"], [1, "fa-solid", "fa-undo"], [1, "fa-solid", "fa-server"], [1, "fa-solid", "fa-link"], ["value", "all"], [1, "fa-solid", "fa-tags"], [1, "filter-label", 2, "display", "flex", "align-items", "center", "gap", "6px", "cursor", "pointer"], ["type", "checkbox", 3, "change", "checked"], [1, "fa-solid", "fa-star"]], template: function MCPFilterPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
215
332
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3");
|
|
216
|
-
i0.ɵɵtext(3, "MCP Filters");
|
|
333
|
+
i0.ɵɵtext(3, "MCP Filters ");
|
|
334
|
+
i0.ɵɵconditionalCreate(4, MCPFilterPanelComponent_Conditional_4_Template, 2, 1, "span", 2);
|
|
217
335
|
i0.ɵɵelementEnd();
|
|
218
|
-
i0.ɵɵelementStart(
|
|
219
|
-
i0.ɵɵtext(
|
|
336
|
+
i0.ɵɵelementStart(5, "div", 3)(6, "span", 4);
|
|
337
|
+
i0.ɵɵtext(7);
|
|
220
338
|
i0.ɵɵelementEnd();
|
|
221
|
-
i0.ɵɵelementStart(
|
|
222
|
-
i0.ɵɵtext(
|
|
339
|
+
i0.ɵɵelementStart(8, "span", 5);
|
|
340
|
+
i0.ɵɵtext(9);
|
|
223
341
|
i0.ɵɵelementEnd()();
|
|
224
|
-
i0.ɵɵelementStart(
|
|
225
|
-
i0.ɵɵlistener("click", function
|
|
226
|
-
i0.ɵɵelement(
|
|
342
|
+
i0.ɵɵelementStart(10, "button", 6);
|
|
343
|
+
i0.ɵɵlistener("click", function MCPFilterPanelComponent_Template_button_click_10_listener() { return ctx.toggleFilterPanel(); });
|
|
344
|
+
i0.ɵɵelement(11, "span", 7);
|
|
227
345
|
i0.ɵɵelementEnd()();
|
|
228
|
-
i0.ɵɵelementStart(
|
|
229
|
-
i0.ɵɵelement(
|
|
230
|
-
i0.ɵɵtext(
|
|
346
|
+
i0.ɵɵelementStart(12, "div", 8)(13, "div", 9)(14, "label", 10);
|
|
347
|
+
i0.ɵɵelement(15, "span", 11);
|
|
348
|
+
i0.ɵɵtext(16, " Search ");
|
|
231
349
|
i0.ɵɵelementEnd();
|
|
232
|
-
i0.ɵɵelementStart(
|
|
233
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
350
|
+
i0.ɵɵelementStart(17, "input", 12);
|
|
351
|
+
i0.ɵɵlistener("ngModelChange", function MCPFilterPanelComponent_Template_input_ngModelChange_17_listener($event) { return ctx.onSearchChange($event); });
|
|
234
352
|
i0.ɵɵelementEnd()();
|
|
235
|
-
i0.ɵɵelementStart(
|
|
236
|
-
i0.ɵɵelement(
|
|
237
|
-
i0.ɵɵtext(
|
|
353
|
+
i0.ɵɵelementStart(18, "div", 9)(19, "label", 10);
|
|
354
|
+
i0.ɵɵelement(20, "span", 13);
|
|
355
|
+
i0.ɵɵtext(21);
|
|
238
356
|
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵelementStart(
|
|
240
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
241
|
-
i0.ɵɵrepeaterCreate(
|
|
357
|
+
i0.ɵɵelementStart(22, "select", 14);
|
|
358
|
+
i0.ɵɵlistener("ngModelChange", function MCPFilterPanelComponent_Template_select_ngModelChange_22_listener($event) { return ctx.onCurrentStatusChange($event); });
|
|
359
|
+
i0.ɵɵrepeaterCreate(23, MCPFilterPanelComponent_For_24_Template, 2, 2, "option", 15, _forTrack0);
|
|
242
360
|
i0.ɵɵelementEnd()();
|
|
243
|
-
i0.ɵɵconditionalCreate(
|
|
244
|
-
i0.ɵɵconditionalCreate(
|
|
245
|
-
i0.ɵɵ
|
|
246
|
-
i0.ɵɵ
|
|
247
|
-
i0.ɵɵ
|
|
248
|
-
i0.ɵɵ
|
|
361
|
+
i0.ɵɵconditionalCreate(25, MCPFilterPanelComponent_Conditional_25_Template, 7, 1, "div", 9);
|
|
362
|
+
i0.ɵɵconditionalCreate(26, MCPFilterPanelComponent_Conditional_26_Template, 7, 1, "div", 9);
|
|
363
|
+
i0.ɵɵconditionalCreate(27, MCPFilterPanelComponent_Conditional_27_Template, 23, 3);
|
|
364
|
+
i0.ɵɵelementStart(28, "div", 16)(29, "button", 17);
|
|
365
|
+
i0.ɵɵlistener("click", function MCPFilterPanelComponent_Template_button_click_29_listener() { return ctx.resetAllFilters(); });
|
|
366
|
+
i0.ɵɵelement(30, "span", 18);
|
|
367
|
+
i0.ɵɵtext(31, " Reset Filters ");
|
|
249
368
|
i0.ɵɵelementEnd()()()();
|
|
250
369
|
} if (rf & 2) {
|
|
251
|
-
i0.ɵɵadvance(
|
|
370
|
+
i0.ɵɵadvance(4);
|
|
371
|
+
i0.ɵɵconditional(ctx.activeFilterCount > 0 ? 4 : -1);
|
|
372
|
+
i0.ɵɵadvance(3);
|
|
252
373
|
i0.ɵɵtextInterpolate(ctx.filteredCount);
|
|
253
374
|
i0.ɵɵadvance(2);
|
|
254
375
|
i0.ɵɵtextInterpolate1("of ", ctx.totalCount);
|
|
@@ -261,16 +382,18 @@ export class MCPFilterPanelComponent {
|
|
|
261
382
|
i0.ɵɵadvance();
|
|
262
383
|
i0.ɵɵrepeater(ctx.currentStatusOptions);
|
|
263
384
|
i0.ɵɵadvance(2);
|
|
264
|
-
i0.ɵɵconditional(ctx.activeTab === "connections" || ctx.activeTab === "tools" || ctx.activeTab === "logs" ?
|
|
385
|
+
i0.ɵɵconditional(ctx.activeTab === "connections" || ctx.activeTab === "tools" || ctx.activeTab === "logs" ? 25 : -1);
|
|
386
|
+
i0.ɵɵadvance();
|
|
387
|
+
i0.ɵɵconditional(ctx.activeTab === "logs" ? 26 : -1);
|
|
265
388
|
i0.ɵɵadvance();
|
|
266
|
-
i0.ɵɵconditional(ctx.activeTab === "
|
|
389
|
+
i0.ɵɵconditional(ctx.activeTab === "tools" ? 27 : -1);
|
|
267
390
|
i0.ɵɵadvance(2);
|
|
268
391
|
i0.ɵɵclassProp("has-filters", ctx.hasActiveFilters);
|
|
269
392
|
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%], \n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]:focus, \n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn.has-filters[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn.has-filters[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}"] });
|
|
270
393
|
}
|
|
271
394
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MCPFilterPanelComponent, [{
|
|
272
395
|
type: Component,
|
|
273
|
-
args: [{ standalone: false, selector: 'mj-mcp-filter-panel', template: "<div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>MCP Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredCount }}</span>\n <span class=\"summary-label\">of {{ totalCount }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n\n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Search\n </label>\n <input\n type=\"text\"\n class=\"filter-input\"\n [ngModel]=\"filters.searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search {{ getTabLabel().toLowerCase() }}s...\">\n </div>\n\n <!-- Status Filter (context-aware based on active tab) -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n {{ getTabLabel() }} Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"currentStatusValue\"\n (ngModelChange)=\"onCurrentStatusChange($event)\">\n @for (option of currentStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n\n <!-- Additional filters visible based on context -->\n @if (activeTab === 'connections' || activeTab === 'tools' || activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-server\"></span>\n Server Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.serverStatus\"\n (ngModelChange)=\"onServerStatusChange($event)\">\n @for (option of serverStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n @if (activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-link\"></span>\n Connection Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.connectionStatus\"\n (ngModelChange)=\"onConnectionStatusChange($event)\">\n @for (option of connectionStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button\n class=\"reset-btn\"\n (click)=\"resetAllFilters()\"\n title=\"Reset all filters\"\n [class.has-filters]=\"hasActiveFilters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n</div>\n", styles: ["/* MCP Filter Panel - Matching Agent Filter Panel Design */\n\n.filter-panel {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* Header */\n.filter-panel-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header .filter-summary-inline .summary-label {\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.filter-panel-header .close-btn {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header .close-btn .fa-solid {\n font-size: 14px;\n}\n\n/* Content Area */\n.filter-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n/* Filter Groups */\n.filter-group {\n margin-bottom: 24px;\n}\n\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group .filter-label .fa-solid {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group .filter-input,\n.filter-group .filter-select {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group .filter-input:focus,\n.filter-group .filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group .filter-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group .filter-select {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n/* Filter Actions */\n.filter-actions {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions .reset-btn {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions .reset-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions .reset-btn.has-filters {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.filter-actions .reset-btn.has-filters:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.filter-actions .reset-btn .fa-solid {\n font-size: 13px;\n}\n\n/* Scrollbar Styling */\n.filter-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n"] }]
|
|
396
|
+
args: [{ standalone: false, selector: 'mj-mcp-filter-panel', template: "<div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>MCP Filters\n @if (activeFilterCount > 0) {\n <span style=\"margin-left:6px;padding:2px 8px;background:var(--mj-brand-primary,#264FAF);color:#fff;border-radius:10px;font-size:0.7rem;font-weight:600\">{{ activeFilterCount }}</span>\n }\n </h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredCount }}</span>\n <span class=\"summary-label\">of {{ totalCount }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n\n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Search\n </label>\n <input\n type=\"text\"\n class=\"filter-input\"\n [ngModel]=\"filters.searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search {{ getTabLabel().toLowerCase() }}s...\">\n </div>\n\n <!-- Status Filter (context-aware based on active tab) -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n {{ getTabLabel() }} Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"currentStatusValue\"\n (ngModelChange)=\"onCurrentStatusChange($event)\">\n @for (option of currentStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n\n <!-- Additional filters visible based on context -->\n @if (activeTab === 'connections' || activeTab === 'tools' || activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-server\"></span>\n Server Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.serverStatus\"\n (ngModelChange)=\"onServerStatusChange($event)\">\n @for (option of serverStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n @if (activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-link\"></span>\n Connection Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.connectionStatus\"\n (ngModelChange)=\"onConnectionStatusChange($event)\">\n @for (option of connectionStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Part 3.3 \u2014 Tools tab: Server + Category filters + Favorites-only toggle -->\n @if (activeTab === 'tools') {\n <div class=\"filter-group\">\n <label class=\"filter-label\"><span class=\"fa-solid fa-server\"></span> Server</label>\n <select class=\"filter-select\" [ngModel]=\"filters.toolsServer ?? 'all'\" (ngModelChange)=\"onToolsServerChange($event)\">\n <option value=\"all\">All Servers</option>\n @for (s of availableServers; track s.ID) {\n <option [value]=\"s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div class=\"filter-group\">\n <label class=\"filter-label\"><span class=\"fa-solid fa-tags\"></span> Category</label>\n <select class=\"filter-select\" [ngModel]=\"filters.toolsCategory ?? 'all'\" (ngModelChange)=\"onToolsCategoryChange($event)\">\n <option value=\"all\">All Categories</option>\n @for (c of availableCategories; track c.category) {\n <option [value]=\"c.category\">{{ c.category }} ({{ c.count }})</option>\n }\n </select>\n </div>\n <div class=\"filter-group\">\n <label class=\"filter-label\" style=\"display:flex;align-items:center;gap:6px;cursor:pointer\">\n <input type=\"checkbox\" [checked]=\"filters.favoritesOnly === true\" (change)=\"onFavoritesOnlyChange($any($event.target).checked)\" />\n <span class=\"fa-solid fa-star\"></span>\n Favorites only\n </label>\n </div>\n }\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button\n class=\"reset-btn\"\n (click)=\"resetAllFilters()\"\n title=\"Reset all filters\"\n [class.has-filters]=\"hasActiveFilters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n</div>\n", styles: ["/* MCP Filter Panel - Matching Agent Filter Panel Design */\n\n.filter-panel {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* Header */\n.filter-panel-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header .filter-summary-inline .summary-label {\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.filter-panel-header .close-btn {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header .close-btn .fa-solid {\n font-size: 14px;\n}\n\n/* Content Area */\n.filter-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n/* Filter Groups */\n.filter-group {\n margin-bottom: 24px;\n}\n\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group .filter-label .fa-solid {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group .filter-input,\n.filter-group .filter-select {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group .filter-input:focus,\n.filter-group .filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group .filter-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group .filter-select {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n/* Filter Actions */\n.filter-actions {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions .reset-btn {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions .reset-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions .reset-btn.has-filters {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.filter-actions .reset-btn.has-filters:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.filter-actions .reset-btn .fa-solid {\n font-size: 13px;\n}\n\n/* Scrollbar Styling */\n.filter-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n"] }]
|
|
274
397
|
}], null, { filters: [{
|
|
275
398
|
type: Input
|
|
276
399
|
}], activeTab: [{
|
|
@@ -279,6 +402,10 @@ export class MCPFilterPanelComponent {
|
|
|
279
402
|
type: Input
|
|
280
403
|
}], filteredCount: [{
|
|
281
404
|
type: Input
|
|
405
|
+
}], availableServers: [{
|
|
406
|
+
type: Input
|
|
407
|
+
}], availableCategories: [{
|
|
408
|
+
type: Input
|
|
282
409
|
}], filtersChange: [{
|
|
283
410
|
type: Output
|
|
284
411
|
}], closePanel: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-filter-panel.component.js","sourceRoot":"","sources":["../../src/MCP/mcp-filter-panel.component.ts","../../src/MCP/mcp-filter-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Filter Panel Component\n *\n * Provides filtering controls for the MCP Dashboard.\n * Matches the pattern used by agent-filter-panel component.\n *\n * @module MCP Filter Panel\n */\n\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { MCPDashboardFilters, MCPDashboardTab } from './mcp-dashboard.component';\n\n@Component({\n standalone: false,\n selector: 'mj-mcp-filter-panel',\n templateUrl: './mcp-filter-panel.component.html',\n styleUrls: ['./mcp-filter-panel.component.css']\n})\nexport class MCPFilterPanelComponent {\n @Input() filters: MCPDashboardFilters = {\n searchTerm: '',\n serverStatus: 'all',\n connectionStatus: 'all',\n toolStatus: 'all',\n logStatus: 'all'\n };\n\n @Input() activeTab: MCPDashboardTab = 'servers';\n @Input() totalCount = 0;\n @Input() filteredCount = 0;\n\n @Output() filtersChange = new EventEmitter<MCPDashboardFilters>();\n @Output() closePanel = new EventEmitter<void>();\n\n public serverStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Inactive', value: 'Inactive' }\n ];\n\n public connectionStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Inactive', value: 'Inactive' },\n { text: 'Error', value: 'Error' }\n ];\n\n public toolStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Deprecated', value: 'Deprecated' }\n ];\n\n public logStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' }\n ];\n\n public onFilterChange(): void {\n this.filtersChange.emit(this.filters);\n }\n\n public onSearchChange(value: string): void {\n this.filters = { ...this.filters, searchTerm: value };\n this.onFilterChange();\n }\n\n public onServerStatusChange(value: string): void {\n this.filters = { ...this.filters, serverStatus: value };\n this.onFilterChange();\n }\n\n public onConnectionStatusChange(value: string): void {\n this.filters = { ...this.filters, connectionStatus: value };\n this.onFilterChange();\n }\n\n public onToolStatusChange(value: string): void {\n this.filters = { ...this.filters, toolStatus: value };\n this.onFilterChange();\n }\n\n public onLogStatusChange(value: string): void {\n this.filters = { ...this.filters, logStatus: value };\n this.onFilterChange();\n }\n\n public resetAllFilters(): void {\n this.filters = {\n searchTerm: '',\n serverStatus: 'all',\n connectionStatus: 'all',\n toolStatus: 'all',\n logStatus: 'all'\n };\n this.onFilterChange();\n }\n\n public toggleFilterPanel(): void {\n this.closePanel.emit();\n }\n\n public get hasActiveFilters(): boolean {\n return this.filters.searchTerm !== '' ||\n this.filters.serverStatus !== 'all' ||\n this.filters.connectionStatus !== 'all' ||\n this.filters.toolStatus !== 'all' ||\n this.filters.logStatus !== 'all';\n }\n\n public get currentStatusOptions(): { text: string; value: string }[] {\n switch (this.activeTab) {\n case 'servers':\n return this.serverStatusOptions;\n case 'connections':\n return this.connectionStatusOptions;\n case 'tools':\n return this.toolStatusOptions;\n case 'logs':\n return this.logStatusOptions;\n default:\n return this.serverStatusOptions;\n }\n }\n\n public get currentStatusValue(): string {\n switch (this.activeTab) {\n case 'servers':\n return this.filters.serverStatus;\n case 'connections':\n return this.filters.connectionStatus;\n case 'tools':\n return this.filters.toolStatus;\n case 'logs':\n return this.filters.logStatus;\n default:\n return 'all';\n }\n }\n\n public onCurrentStatusChange(value: string): void {\n switch (this.activeTab) {\n case 'servers':\n this.onServerStatusChange(value);\n break;\n case 'connections':\n this.onConnectionStatusChange(value);\n break;\n case 'tools':\n this.onToolStatusChange(value);\n break;\n case 'logs':\n this.onLogStatusChange(value);\n break;\n }\n }\n\n public getTabLabel(): string {\n switch (this.activeTab) {\n case 'servers':\n return 'Server';\n case 'connections':\n return 'Connection';\n case 'tools':\n return 'Tool';\n case 'logs':\n return 'Log';\n default:\n return 'Item';\n }\n }\n}\n","<div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>MCP Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredCount }}</span>\n <span class=\"summary-label\">of {{ totalCount }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n\n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Search\n </label>\n <input\n type=\"text\"\n class=\"filter-input\"\n [ngModel]=\"filters.searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search {{ getTabLabel().toLowerCase() }}s...\">\n </div>\n\n <!-- Status Filter (context-aware based on active tab) -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n {{ getTabLabel() }} Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"currentStatusValue\"\n (ngModelChange)=\"onCurrentStatusChange($event)\">\n @for (option of currentStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n\n <!-- Additional filters visible based on context -->\n @if (activeTab === 'connections' || activeTab === 'tools' || activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-server\"></span>\n Server Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.serverStatus\"\n (ngModelChange)=\"onServerStatusChange($event)\">\n @for (option of serverStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n @if (activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-link\"></span>\n Connection Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.connectionStatus\"\n (ngModelChange)=\"onConnectionStatusChange($event)\">\n @for (option of connectionStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button\n class=\"reset-btn\"\n (click)=\"resetAllFilters()\"\n title=\"Reset all filters\"\n [class.has-filters]=\"hasActiveFilters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"mcp-filter-panel.component.js","sourceRoot":"","sources":["../../src/MCP/mcp-filter-panel.component.ts","../../src/MCP/mcp-filter-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Filter Panel Component\n *\n * Provides filtering controls for the MCP Dashboard.\n * Matches the pattern used by agent-filter-panel component.\n *\n * @module MCP Filter Panel\n */\n\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { MCPDashboardFilters, MCPDashboardTab } from './mcp-dashboard.component';\n\n@Component({\n standalone: false,\n selector: 'mj-mcp-filter-panel',\n templateUrl: './mcp-filter-panel.component.html',\n styleUrls: ['./mcp-filter-panel.component.css']\n})\nexport class MCPFilterPanelComponent {\n @Input() filters: MCPDashboardFilters = {\n searchTerm: '',\n serverStatus: 'all',\n connectionStatus: 'all',\n toolStatus: 'all',\n logStatus: 'all',\n toolsServer: 'all',\n toolsCategory: 'all',\n favoritesOnly: false\n };\n\n @Input() activeTab: MCPDashboardTab = 'servers';\n @Input() totalCount = 0;\n @Input() filteredCount = 0;\n\n /** Part 3.3 — available servers for the Tools tab server-filter dropdown */\n @Input() availableServers: Array<{ ID: string; Name: string }> = [];\n /** Part 3.3 — available categories (derived from snake_case tool-name prefix) with counts */\n @Input() availableCategories: Array<{ category: string; count: number }> = [];\n\n @Output() filtersChange = new EventEmitter<MCPDashboardFilters>();\n @Output() closePanel = new EventEmitter<void>();\n\n public serverStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Inactive', value: 'Inactive' }\n ];\n\n public connectionStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Inactive', value: 'Inactive' },\n { text: 'Error', value: 'Error' }\n ];\n\n public toolStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Active', value: 'Active' },\n { text: 'Deprecated', value: 'Deprecated' }\n ];\n\n public logStatusOptions = [\n { text: 'All Statuses', value: 'all' },\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' }\n ];\n\n public onFilterChange(): void {\n this.filtersChange.emit(this.filters);\n }\n\n public onSearchChange(value: string): void {\n this.filters = { ...this.filters, searchTerm: value };\n this.onFilterChange();\n }\n\n public onServerStatusChange(value: string): void {\n this.filters = { ...this.filters, serverStatus: value };\n this.onFilterChange();\n }\n\n public onConnectionStatusChange(value: string): void {\n this.filters = { ...this.filters, connectionStatus: value };\n this.onFilterChange();\n }\n\n public onToolStatusChange(value: string): void {\n this.filters = { ...this.filters, toolStatus: value };\n this.onFilterChange();\n }\n\n public onLogStatusChange(value: string): void {\n this.filters = { ...this.filters, logStatus: value };\n this.onFilterChange();\n }\n\n public onToolsServerChange(value: string): void {\n this.filters = { ...this.filters, toolsServer: value };\n this.onFilterChange();\n }\n\n public onToolsCategoryChange(value: string): void {\n this.filters = { ...this.filters, toolsCategory: value };\n this.onFilterChange();\n }\n\n public onFavoritesOnlyChange(checked: boolean): void {\n this.filters = { ...this.filters, favoritesOnly: checked };\n this.onFilterChange();\n }\n\n public resetAllFilters(): void {\n this.filters = {\n searchTerm: '',\n serverStatus: 'all',\n connectionStatus: 'all',\n toolStatus: 'all',\n logStatus: 'all',\n toolsServer: 'all',\n toolsCategory: 'all',\n favoritesOnly: false\n };\n this.onFilterChange();\n }\n\n /** Part 3.3 — count of non-default filter dimensions, used for \"Filters (N)\" badge */\n public get activeFilterCount(): number {\n let n = 0;\n if (this.filters.searchTerm) n++;\n if (this.filters.serverStatus && this.filters.serverStatus !== 'all') n++;\n if (this.filters.connectionStatus && this.filters.connectionStatus !== 'all') n++;\n if (this.filters.toolStatus && this.filters.toolStatus !== 'all') n++;\n if (this.filters.logStatus && this.filters.logStatus !== 'all') n++;\n if (this.filters.toolsServer && this.filters.toolsServer !== 'all') n++;\n if (this.filters.toolsCategory && this.filters.toolsCategory !== 'all') n++;\n if (this.filters.favoritesOnly) n++;\n return n;\n }\n\n public toggleFilterPanel(): void {\n this.closePanel.emit();\n }\n\n public get hasActiveFilters(): boolean {\n return this.filters.searchTerm !== '' ||\n this.filters.serverStatus !== 'all' ||\n this.filters.connectionStatus !== 'all' ||\n this.filters.toolStatus !== 'all' ||\n this.filters.logStatus !== 'all';\n }\n\n public get currentStatusOptions(): { text: string; value: string }[] {\n switch (this.activeTab) {\n case 'servers':\n return this.serverStatusOptions;\n case 'connections':\n return this.connectionStatusOptions;\n case 'tools':\n return this.toolStatusOptions;\n case 'logs':\n return this.logStatusOptions;\n default:\n return this.serverStatusOptions;\n }\n }\n\n public get currentStatusValue(): string {\n switch (this.activeTab) {\n case 'servers':\n return this.filters.serverStatus;\n case 'connections':\n return this.filters.connectionStatus;\n case 'tools':\n return this.filters.toolStatus;\n case 'logs':\n return this.filters.logStatus;\n default:\n return 'all';\n }\n }\n\n public onCurrentStatusChange(value: string): void {\n switch (this.activeTab) {\n case 'servers':\n this.onServerStatusChange(value);\n break;\n case 'connections':\n this.onConnectionStatusChange(value);\n break;\n case 'tools':\n this.onToolStatusChange(value);\n break;\n case 'logs':\n this.onLogStatusChange(value);\n break;\n }\n }\n\n public getTabLabel(): string {\n switch (this.activeTab) {\n case 'servers':\n return 'Server';\n case 'connections':\n return 'Connection';\n case 'tools':\n return 'Tool';\n case 'logs':\n return 'Log';\n default:\n return 'Item';\n }\n }\n}\n","<div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>MCP Filters\n @if (activeFilterCount > 0) {\n <span style=\"margin-left:6px;padding:2px 8px;background:var(--mj-brand-primary,#264FAF);color:#fff;border-radius:10px;font-size:0.7rem;font-weight:600\">{{ activeFilterCount }}</span>\n }\n </h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredCount }}</span>\n <span class=\"summary-label\">of {{ totalCount }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n\n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Search\n </label>\n <input\n type=\"text\"\n class=\"filter-input\"\n [ngModel]=\"filters.searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n placeholder=\"Search {{ getTabLabel().toLowerCase() }}s...\">\n </div>\n\n <!-- Status Filter (context-aware based on active tab) -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n {{ getTabLabel() }} Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"currentStatusValue\"\n (ngModelChange)=\"onCurrentStatusChange($event)\">\n @for (option of currentStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n\n <!-- Additional filters visible based on context -->\n @if (activeTab === 'connections' || activeTab === 'tools' || activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-server\"></span>\n Server Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.serverStatus\"\n (ngModelChange)=\"onServerStatusChange($event)\">\n @for (option of serverStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n @if (activeTab === 'logs') {\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-link\"></span>\n Connection Status\n </label>\n <select\n class=\"filter-select\"\n [ngModel]=\"filters.connectionStatus\"\n (ngModelChange)=\"onConnectionStatusChange($event)\">\n @for (option of connectionStatusOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.text }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Part 3.3 — Tools tab: Server + Category filters + Favorites-only toggle -->\n @if (activeTab === 'tools') {\n <div class=\"filter-group\">\n <label class=\"filter-label\"><span class=\"fa-solid fa-server\"></span> Server</label>\n <select class=\"filter-select\" [ngModel]=\"filters.toolsServer ?? 'all'\" (ngModelChange)=\"onToolsServerChange($event)\">\n <option value=\"all\">All Servers</option>\n @for (s of availableServers; track s.ID) {\n <option [value]=\"s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div class=\"filter-group\">\n <label class=\"filter-label\"><span class=\"fa-solid fa-tags\"></span> Category</label>\n <select class=\"filter-select\" [ngModel]=\"filters.toolsCategory ?? 'all'\" (ngModelChange)=\"onToolsCategoryChange($event)\">\n <option value=\"all\">All Categories</option>\n @for (c of availableCategories; track c.category) {\n <option [value]=\"c.category\">{{ c.category }} ({{ c.count }})</option>\n }\n </select>\n </div>\n <div class=\"filter-group\">\n <label class=\"filter-label\" style=\"display:flex;align-items:center;gap:6px;cursor:pointer\">\n <input type=\"checkbox\" [checked]=\"filters.favoritesOnly === true\" (change)=\"onFavoritesOnlyChange($any($event.target).checked)\" />\n <span class=\"fa-solid fa-star\"></span>\n Favorites only\n </label>\n </div>\n }\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button\n class=\"reset-btn\"\n (click)=\"resetAllFilters()\"\n title=\"Reset all filters\"\n [class.has-filters]=\"hasActiveFilters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n</div>\n"]}
|
|
@@ -8,15 +8,6 @@ import { OnInit } from '@angular/core';
|
|
|
8
8
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
9
9
|
import { ResourceData } from '@memberjunction/core-entities';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
|
-
/**
|
|
12
|
-
* MCP Resource Component — wrapper that hosts the MCP Dashboard.
|
|
13
|
-
* Registered as 'MCPResource' for use with ResourceType: "Custom" nav items.
|
|
14
|
-
*
|
|
15
|
-
* The wrapper pattern is required because the resource container creates components
|
|
16
|
-
* via createComponent() without the MCPModule's injector context. The wrapper's
|
|
17
|
-
* template reference to <mj-mcp-dashboard> resolves through MCPModule's declarations,
|
|
18
|
-
* ensuring all child standalone imports (mj-dialog, mjButton, etc.) are available.
|
|
19
|
-
*/
|
|
20
11
|
export declare class MCPResourceComponent extends BaseResourceComponent implements OnInit {
|
|
21
12
|
ngOnInit(): void;
|
|
22
13
|
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-resource.component.d.ts","sourceRoot":"","sources":["../../src/MCP/mcp-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAG7D
|
|
1
|
+
{"version":3,"file":"mcp-resource.component.d.ts","sourceRoot":"","sources":["../../src/MCP/mcp-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAG7D,qBAca,oBAAqB,SAAQ,qBAAsB,YAAW,MAAM;IAE7E,QAAQ,IAAI,IAAI;IAKV,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAXtD,oBAAoB;2CAApB,oBAAoB;CAchC"}
|
|
@@ -15,15 +15,6 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
|
15
15
|
import { RegisterClass } from '@memberjunction/global';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
import * as i1 from "./mcp-dashboard.component";
|
|
18
|
-
/**
|
|
19
|
-
* MCP Resource Component — wrapper that hosts the MCP Dashboard.
|
|
20
|
-
* Registered as 'MCPResource' for use with ResourceType: "Custom" nav items.
|
|
21
|
-
*
|
|
22
|
-
* The wrapper pattern is required because the resource container creates components
|
|
23
|
-
* via createComponent() without the MCPModule's injector context. The wrapper's
|
|
24
|
-
* template reference to <mj-mcp-dashboard> resolves through MCPModule's declarations,
|
|
25
|
-
* ensuring all child standalone imports (mj-dialog, mjButton, etc.) are available.
|
|
26
|
-
*/
|
|
27
18
|
let MCPResourceComponent = class MCPResourceComponent extends BaseResourceComponent {
|
|
28
19
|
ngOnInit() {
|
|
29
20
|
super.ngOnInit();
|
|
@@ -50,5 +41,5 @@ export { MCPResourceComponent };
|
|
|
50
41
|
<mj-mcp-dashboard></mj-mcp-dashboard>
|
|
51
42
|
`, styles: ["\n :host {\n display: block;\n height: 100%;\n }\n "] }]
|
|
52
43
|
}], null, null); })();
|
|
53
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPResourceComponent, { className: "MCPResourceComponent", filePath: "src/MCP/mcp-resource.component.ts", lineNumber:
|
|
44
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPResourceComponent, { className: "MCPResourceComponent", filePath: "src/MCP/mcp-resource.component.ts", lineNumber: 27 }); })();
|
|
54
45
|
//# sourceMappingURL=mcp-resource.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-resource.component.js","sourceRoot":"","sources":["../../src/MCP/mcp-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;
|
|
1
|
+
{"version":3,"file":"mcp-resource.component.js","sourceRoot":"","sources":["../../src/MCP/mcp-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;AAgBhD,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,qBAAqB;IAE3D,QAAQ;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,8BAA8B,CAAC;IAC1C,CAAC;6PAbQ,oBAAoB,yBAApB,oBAAoB;6DAApB,oBAAoB;YATzB,mCAAqC;;;AAShC,oBAAoB;IAdhC,aAAa,CAAC,qBAAqB,EAAE,aAAa,CAAC;GAcvC,oBAAoB,CAchC;;iFAdY,oBAAoB;cAbhC,SAAS;6BACM,KAAK,YACP,iBAAiB,YACjB;;KAET;;kFAQQ,oBAAoB","sourcesContent":["/**\n * @fileoverview MCP Resource Component\n *\n * Resource wrapper for the MCP Dashboard that allows it to be used\n * as a nav item in applications (like the AI Application).\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\n\n@RegisterClass(BaseResourceComponent, 'MCPResource')\n@Component({\n standalone: false,\n selector: 'mj-mcp-resource',\n template: `\n <mj-mcp-dashboard></mj-mcp-dashboard>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n `]\n})\nexport class MCPResourceComponent extends BaseResourceComponent implements OnInit {\n\n ngOnInit(): void {\n super.ngOnInit();\n this.NotifyLoadComplete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'MCP';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-plug-circle-bolt';\n }\n}\n"]}
|