@memberjunction/ng-dashboards 5.21.0 → 5.23.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/README.md +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +364 -362
- 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/autotagging/autotagging-pipeline-resource.component.d.ts +313 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2792 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +382 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2683 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +191 -197
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +9 -8
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +305 -299
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +319 -313
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +240 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js +1767 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
- package/dist/AI/index.d.ts +3 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +6 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +161 -193
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +10 -12
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +61 -68
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -11
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +82 -96
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +130 -134
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +40 -46
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.js +2 -2
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +2 -2
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +127 -132
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +2 -2
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +11 -17
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +2 -2
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +2 -2
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +181 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1704 -182
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +4 -4
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +7 -9
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +6 -10
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +12 -20
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +126 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1086 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +5 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -0
- package/dist/KnowledgeHub/index.js +6 -0
- package/dist/KnowledgeHub/index.js.map +1 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +9 -7
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +10 -9
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
- 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-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +6 -9
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +20 -22
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +241 -200
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +63 -8
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +7 -5
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +9 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +122 -54
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +8 -13
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +6 -27
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +14 -11
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +58 -44
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +4 -8
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +0 -19
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/component-studio-dashboards.module.d.ts +7 -11
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +22 -34
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +13 -18
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +18 -31
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +5 -8
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +3 -19
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +7 -13
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +0 -27
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +5 -8
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +3 -19
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +5 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +6 -1
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +6 -10
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +3 -23
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +7 -12
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +4 -27
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +47 -53
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { ResolveIntegrationIcon } from '../../services/integration-data.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@
|
|
4
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
5
5
|
import * as i2 from "@angular/common";
|
|
6
6
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
7
7
|
function IntegrationCardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -109,7 +109,7 @@ export class IntegrationCardComponent {
|
|
|
109
109
|
this.ExpandToggle.emit(this.Summary.Integration.ID);
|
|
110
110
|
}
|
|
111
111
|
static ɵfac = function IntegrationCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IntegrationCardComponent)(); };
|
|
112
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IntegrationCardComponent, selectors: [["app-integration-card"]], inputs: { Summary: "Summary", Expanded: "Expanded", ViewProvider: "ViewProvider" }, outputs: { RunNowClick: "RunNowClick", ExpandToggle: "ExpandToggle" }, standalone: false, decls: 29, vars:
|
|
112
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IntegrationCardComponent, selectors: [["app-integration-card"]], inputs: { Summary: "Summary", Expanded: "Expanded", ViewProvider: "ViewProvider" }, outputs: { RunNowClick: "RunNowClick", ExpandToggle: "ExpandToggle" }, standalone: false, decls: 29, vars: 22, consts: [[1, "integration-card"], [1, "card-header"], [1, "source-icon"], [1, "card-title-area"], [1, "card-title"], [1, "source-type-label"], [1, "status-area"], [1, "status-indicator"], [1, "status-chip"], [1, "card-body"], [1, "stat-row"], [1, "stat-label"], [1, "stat-value"], [1, "sparkline-row"], [1, "card-footer"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid"], [1, "stat-value", "error-value"], [1, "error-badge"], [1, "sparkline-label"], [1, "sparkline"], [1, "spark-bar", 3, "height", "spark-success", "spark-failed", "spark-pending", "title"], [1, "spark-bar", 3, "title"]], template: function IntegrationCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
113
113
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
114
114
|
i0.ɵɵelement(3, "i");
|
|
115
115
|
i0.ɵɵelementEnd();
|
|
@@ -168,12 +168,10 @@ export class IntegrationCardComponent {
|
|
|
168
168
|
i0.ɵɵadvance();
|
|
169
169
|
i0.ɵɵconditional(ctx.Summary.RecentRuns.length > 1 ? 21 : -1);
|
|
170
170
|
i0.ɵɵadvance(2);
|
|
171
|
-
i0.ɵɵproperty("
|
|
172
|
-
i0.ɵɵadvance(
|
|
173
|
-
i0.ɵɵproperty("look", "flat");
|
|
174
|
-
i0.ɵɵadvance();
|
|
171
|
+
i0.ɵɵproperty("disabled", !ctx.Summary.Integration.IsActive);
|
|
172
|
+
i0.ɵɵadvance(4);
|
|
175
173
|
i0.ɵɵclassProp("fa-chevron-down", !ctx.Expanded)("fa-chevron-up", ctx.Expanded);
|
|
176
|
-
} }, dependencies: [i1.
|
|
174
|
+
} }, dependencies: [i1.MJButtonDirective, i2.DecimalPipe], styles: [".integration-card[_ngcontent-%COMP%] {\n background: var(--card-bg, #fff);\n border: 1px solid var(--border-color, #e0e0e0);\n border-radius: 8px;\n padding: 16px;\n transition: box-shadow 0.2s;\n }\n .integration-card[_ngcontent-%COMP%]:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }\n .integration-card.inactive[_ngcontent-%COMP%] { opacity: 0.6; }\n\n .card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n }\n .source-icon[_ngcontent-%COMP%] {\n width: 40px; height: 40px;\n border-radius: 8px;\n background: var(--icon-bg, #f0f4ff);\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: var(--primary-color, #4a6cf7);\n }\n .card-title-area[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n .card-title[_ngcontent-%COMP%] {\n margin: 0; font-size: 14px; font-weight: 600;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .source-type-label[_ngcontent-%COMP%] { font-size: 12px; color: #888; }\n\n .status-area[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n display: inline-block;\n }\n .indicator-green[_ngcontent-%COMP%] { background: #1b7a3d; }\n .indicator-amber[_ngcontent-%COMP%] { background: #b5850a; }\n .indicator-red[_ngcontent-%COMP%] { background: #c62828; }\n .indicator-gray[_ngcontent-%COMP%] { background: #999; }\n\n .status-indicator.pulsing[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_pulse 1.5s ease-in-out infinite;\n }\n @keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.5; transform: scale(1.3); }\n }\n\n .status-chip[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 600; padding: 3px 8px;\n border-radius: 12px; text-transform: uppercase; white-space: nowrap;\n }\n .status-green[_ngcontent-%COMP%] { background: #e6f9ed; color: #1b7a3d; }\n .status-amber[_ngcontent-%COMP%] { background: #fff7e0; color: #b5850a; }\n .status-red[_ngcontent-%COMP%] { background: #fde8e8; color: #c62828; }\n .status-gray[_ngcontent-%COMP%] { background: #f0f0f0; color: #757575; }\n\n .card-body[_ngcontent-%COMP%] { margin-bottom: 12px; }\n .stat-row[_ngcontent-%COMP%] {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n }\n .stat-label[_ngcontent-%COMP%] { color: #666; }\n .stat-value[_ngcontent-%COMP%] { font-weight: 500; }\n .error-value[_ngcontent-%COMP%] { color: #c62828; }\n .error-badge[_ngcontent-%COMP%] {\n background: #fde8e8;\n color: #c62828;\n padding: 1px 8px;\n border-radius: 10px;\n font-size: 12px;\n font-weight: 700;\n }\n\n \n\n .sparkline-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n padding: 8px 0;\n border-top: 1px solid #f0f0f0;\n margin-bottom: 4px;\n }\n .sparkline-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #999;\n white-space: nowrap;\n }\n .sparkline[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 24px;\n flex: 1;\n }\n .spark-bar[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 2px;\n border-radius: 2px 2px 0 0;\n transition: height 0.3s ease;\n }\n .spark-success[_ngcontent-%COMP%] { background: #4a6cf7; }\n .spark-failed[_ngcontent-%COMP%] { background: #c62828; }\n .spark-pending[_ngcontent-%COMP%] { background: #b5850a; }\n\n .card-footer[_ngcontent-%COMP%] {\n display: flex; justify-content: space-between;\n border-top: 1px solid #eee; padding-top: 8px;\n }"] });
|
|
177
175
|
}
|
|
178
176
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntegrationCardComponent, [{
|
|
179
177
|
type: Component,
|
|
@@ -240,11 +238,11 @@ export class IntegrationCardComponent {
|
|
|
240
238
|
}
|
|
241
239
|
|
|
242
240
|
<div class="card-footer">
|
|
243
|
-
<button
|
|
241
|
+
<button mjButton variant="primary" size="sm"
|
|
244
242
|
(click)="OnRunNowClick()" [disabled]="!Summary.Integration.IsActive">
|
|
245
243
|
<i class="fa-solid fa-play"></i> Run Now
|
|
246
244
|
</button>
|
|
247
|
-
<button
|
|
245
|
+
<button mjButton variant="flat" size="sm" (click)="OnExpandToggle()">
|
|
248
246
|
<i class="fa-solid" [class.fa-chevron-down]="!Expanded" [class.fa-chevron-up]="Expanded"></i>
|
|
249
247
|
History
|
|
250
248
|
</button>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-card.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/widgets/integration-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAsB,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;;;;;;IA+BzF,AADF,+BAAsB,eACK;IAAA,8BAAc;IAAA,iBAAO;IAC9C,gCAAyB;IAAA,YAA6C;;IACxE,AADwE,iBAAO,EACzE;IAEJ,AADF,+BAAsB,eACK;IAAA,wBAAQ;IAAA,iBAAO;IACxC,gCAAyB;IAAA,aAAuB;IAClD,AADkD,iBAAO,EACnD;;;IALqB,eAA6C;IAA7C,iFAA6C;IAI7C,eAAuB;IAAvB,8CAAuB;;;IAKhD,AADF,+BAAsB,eACK;IAAA,sBAAM;IAAA,iBAAO;IAEpC,AADF,gCAAqC,eACT;IAAA,YAAyB;IAEvD,AADE,AADqD,iBAAO,EACrD,EACH;;;IAFwB,eAAyB;IAAzB,gDAAyB;;;IAYnD,0BAMM;;;;IALD,yEAAmD;IAGnD,AADA,AADA,4DAAgD,4CACF,4EAC6B;IAC3E,2EAAuD;;;IARhE,AADF,+BAA2B,eACK;IAAA,4BAAY;IAAA,iBAAO;IACjD,+BAAuB;IACrB,2GAQC;IAEL,AADE,iBAAM,EACF;;;IAVF,eAQC;IARD,wCAQC;;AAyIb,MAAM,OAAO,wBAAwB;IAC1B,OAAO,CAAsB;IAC7B,QAAQ,GAAY,KAAK,CAAC;IAC1B,YAAY,GAA4B,IAAI,CAAC;IAC5C,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;IACzC,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;IAEpD,IAAI,eAAe;QACjB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,CAAC;QACD,OAAO,sBAAsB,CAC3B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAClB,CAAC;IACJ,CAAC;IAED,IAAI,WAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QACxC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QACxC,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,QAAQ,CAAC;QACrC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa;eAClD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC;IACpD,CAAC;IAED,IAAI,iBAAiB;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACnC,IAAI,EAAE,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,IAAI,YAAY,GAAG,EAAE;YAAE,OAAO,GAAG,YAAY,GAAG,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;QAClC,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC;IACnC,CAAC;IAED,IAAI,eAAe;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7E,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,aAAa;QACX,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;kHAvDU,wBAAwB;6DAAxB,wBAAwB;YA/L7B,AADF,AADF,8BAA+E,aACpD,aACE;YACvB,oBAAiC;YACnC,iBAAM;YAEJ,AADF,8BAA6B,YACJ;YAAA,YAA8B;YAAA,iBAAK;YAC1D,+BAAgC;YAAA,YAA2C;YAC7E,AAD6E,iBAAO,EAC9E;YACN,8BAAyB;YACvB,2BACiD;YACjD,gCAAoE;YAClE,aACF;YAEJ,AADE,AADE,iBAAO,EACH,EACF;YAIF,AADF,AADF,+BAAuB,eACC,gBACK;YAAA,yBAAQ;YAAA,iBAAO;YACxC,iCAAyB;YAAA,aAA0B;YACrD,AADqD,iBAAO,EACtD;YACN,mFAAyB;YAUzB,6FAA+B;YAQjC,iBAAM;YAGN,6FAAqC;YAkBnC,AADF,gCAAyB,kBAEsD;YAArE,sGAAS,mBAAe,IAAC;YAC/B,yBAAgC;YAAC,0BACnC;YAAA,iBAAS;YACT,mCAA+D;YAA3B,sGAAS,oBAAgB,IAAC;YAC5D,yBAA6F;YAC7F,0BACF;YAEJ,AADE,AADE,iBAAS,EACL,EACF;;YAvEwB,6DAAgD;YAGrE,eAAyB;YAAzB,kCAAyB;YAGL,eAA8B;YAA9B,kDAA8B;YACrB,eAA2C;YAA3C,wGAA2C;YAG5C,eAA4C;YAA5C,qDAA4C;YACrE,gDAAmC;YACf,cAAyC;YAAzC,kDAAyC;YACjE,cACF;YADE,gDACF;YAOyB,eAA0B;YAA1B,8CAA0B;YAErD,cASC;YATD,iDASC;YACD,cAOC;YAPD,uDAOC;YAIH,cAeC;YAfD,6DAeC;YAGqB,eAAe;YACD,AADE,AAAhB,6BAAe,yBAAyB,+CACgB;YAGxD,eAAe;YAAf,6BAAe;YACb,cAAmC;YAAC,AAApC,gDAAmC,+BAAiC;;;iFA8HrF,wBAAwB;cArMpC,SAAS;6BACI,KAAK,YACP,sBAAsB,YACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyET;;kBA0HA,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,MAAM;;kBACN,MAAM;;kFALI,wBAAwB","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IRunViewProvider } from '@memberjunction/core';\nimport { IntegrationSummary, ResolveIntegrationIcon } from '../../services/integration-data.service';\n\n@Component({\n standalone: false,\n selector: 'app-integration-card',\n template: `\n <div class=\"integration-card\" [class.inactive]=\"!Summary.Integration.IsActive\">\n <div class=\"card-header\">\n <div class=\"source-icon\">\n <i [class]=\"SourceIconClass\"></i>\n </div>\n <div class=\"card-title-area\">\n <h3 class=\"card-title\">{{ Summary.Integration.Name }}</h3>\n <span class=\"source-type-label\">{{ Summary.SourceType?.Name ?? 'Unknown' }}</span>\n </div>\n <div class=\"status-area\">\n <span class=\"status-indicator\" [class]=\"'indicator-' + Summary.StatusColor\"\n [class.pulsing]=\"IsActivelySyncing\"></span>\n <span class=\"status-chip\" [class]=\"'status-' + Summary.StatusColor\">\n {{ StatusLabel }}\n </span>\n </div>\n </div>\n\n <div class=\"card-body\">\n <div class=\"stat-row\">\n <span class=\"stat-label\">Last Run</span>\n <span class=\"stat-value\">{{ Summary.RelativeTime }}</span>\n </div>\n @if (Summary.LatestRun) {\n <div class=\"stat-row\">\n <span class=\"stat-label\">Records Synced</span>\n <span class=\"stat-value\">{{ Summary.LatestRun.TotalRecords | number }}</span>\n </div>\n <div class=\"stat-row\">\n <span class=\"stat-label\">Duration</span>\n <span class=\"stat-value\">{{ FormattedDuration }}</span>\n </div>\n }\n @if (Summary.TotalErrors > 0) {\n <div class=\"stat-row\">\n <span class=\"stat-label\">Errors</span>\n <span class=\"stat-value error-value\">\n <span class=\"error-badge\">{{ Summary.TotalErrors }}</span>\n </span>\n </div>\n }\n </div>\n\n <!-- Sparkline: records synced for last 5 runs -->\n @if (Summary.RecentRuns.length > 1) {\n <div class=\"sparkline-row\">\n <span class=\"sparkline-label\">Recent syncs</span>\n <div class=\"sparkline\">\n @for (run of Summary.RecentRuns; track run.ID) {\n <div class=\"spark-bar\"\n [style.height.%]=\"SparkBarHeight(run.TotalRecords)\"\n [class.spark-success]=\"run.Status === 'Success'\"\n [class.spark-failed]=\"run.Status === 'Failed'\"\n [class.spark-pending]=\"run.Status !== 'Success' && run.Status !== 'Failed'\"\n [title]=\"run.TotalRecords + ' records - ' + run.Status\">\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"card-footer\">\n <button kendoButton [look]=\"'flat'\" [themeColor]=\"'primary'\"\n (click)=\"OnRunNowClick()\" [disabled]=\"!Summary.Integration.IsActive\">\n <i class=\"fa-solid fa-play\"></i> Run Now\n </button>\n <button kendoButton [look]=\"'flat'\" (click)=\"OnExpandToggle()\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!Expanded\" [class.fa-chevron-up]=\"Expanded\"></i>\n History\n </button>\n </div>\n </div>\n `,\n styles: [`\n .integration-card {\n background: var(--card-bg, #fff);\n border: 1px solid var(--border-color, #e0e0e0);\n border-radius: 8px;\n padding: 16px;\n transition: box-shadow 0.2s;\n }\n .integration-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }\n .integration-card.inactive { opacity: 0.6; }\n\n .card-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n }\n .source-icon {\n width: 40px; height: 40px;\n border-radius: 8px;\n background: var(--icon-bg, #f0f4ff);\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: var(--primary-color, #4a6cf7);\n }\n .card-title-area { flex: 1; min-width: 0; }\n .card-title {\n margin: 0; font-size: 14px; font-weight: 600;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .source-type-label { font-size: 12px; color: #888; }\n\n .status-area {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n display: inline-block;\n }\n .indicator-green { background: #1b7a3d; }\n .indicator-amber { background: #b5850a; }\n .indicator-red { background: #c62828; }\n .indicator-gray { background: #999; }\n\n .status-indicator.pulsing {\n animation: pulse 1.5s ease-in-out infinite;\n }\n @keyframes pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.5; transform: scale(1.3); }\n }\n\n .status-chip {\n font-size: 11px; font-weight: 600; padding: 3px 8px;\n border-radius: 12px; text-transform: uppercase; white-space: nowrap;\n }\n .status-green { background: #e6f9ed; color: #1b7a3d; }\n .status-amber { background: #fff7e0; color: #b5850a; }\n .status-red { background: #fde8e8; color: #c62828; }\n .status-gray { background: #f0f0f0; color: #757575; }\n\n .card-body { margin-bottom: 12px; }\n .stat-row {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n }\n .stat-label { color: #666; }\n .stat-value { font-weight: 500; }\n .error-value { color: #c62828; }\n .error-badge {\n background: #fde8e8;\n color: #c62828;\n padding: 1px 8px;\n border-radius: 10px;\n font-size: 12px;\n font-weight: 700;\n }\n\n /* Sparkline */\n .sparkline-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n padding: 8px 0;\n border-top: 1px solid #f0f0f0;\n margin-bottom: 4px;\n }\n .sparkline-label {\n font-size: 11px;\n color: #999;\n white-space: nowrap;\n }\n .sparkline {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 24px;\n flex: 1;\n }\n .spark-bar {\n flex: 1;\n min-height: 2px;\n border-radius: 2px 2px 0 0;\n transition: height 0.3s ease;\n }\n .spark-success { background: #4a6cf7; }\n .spark-failed { background: #c62828; }\n .spark-pending { background: #b5850a; }\n\n .card-footer {\n display: flex; justify-content: space-between;\n border-top: 1px solid #eee; padding-top: 8px;\n }\n `]\n})\nexport class IntegrationCardComponent {\n @Input() Summary!: IntegrationSummary;\n @Input() Expanded: boolean = false;\n @Input() ViewProvider: IRunViewProvider | null = null;\n @Output() RunNowClick = new EventEmitter<string>();\n @Output() ExpandToggle = new EventEmitter<string>();\n\n get SourceIconClass(): string {\n if (this.Summary.SourceType?.IconClass) {\n return this.Summary.SourceType.IconClass;\n }\n return ResolveIntegrationIcon(\n this.Summary.Integration.Integration ?? this.Summary.Integration.Name,\n this.Summary.Icon\n );\n }\n\n get StatusLabel(): string {\n const color = this.Summary.StatusColor;\n if (color === 'green') return 'Healthy';\n if (color === 'amber') return 'Warning';\n if (color === 'red') return 'Failed';\n return 'Inactive';\n }\n\n get IsActivelySyncing(): boolean {\n return this.Summary.LatestRun?.Status === 'In Progress'\n || this.Summary.LatestRun?.Status === 'Pending';\n }\n\n get FormattedDuration(): string {\n const ms = this.Summary.DurationMs;\n if (ms == null) return '--';\n const totalSeconds = Math.floor(ms / 1000);\n if (totalSeconds < 60) return `${totalSeconds}s`;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${minutes}m ${seconds}s`;\n }\n\n get MaxSparkRecords(): number {\n const maxVal = Math.max(...this.Summary.RecentRuns.map(r => r.TotalRecords));\n return maxVal > 0 ? maxVal : 1;\n }\n\n SparkBarHeight(records: number): number {\n return Math.max((records / this.MaxSparkRecords) * 100, 8);\n }\n\n OnRunNowClick(): void {\n this.RunNowClick.emit(this.Summary.Integration.ID);\n }\n\n OnExpandToggle(): void {\n this.ExpandToggle.emit(this.Summary.Integration.ID);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"integration-card.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/widgets/integration-card.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IRunViewProvider } from '@memberjunction/core';\nimport { IntegrationSummary, ResolveIntegrationIcon } from '../../services/integration-data.service';\n\n@Component({\n standalone: false,\n selector: 'app-integration-card',\n template: `\n <div class=\"integration-card\" [class.inactive]=\"!Summary.Integration.IsActive\">\n <div class=\"card-header\">\n <div class=\"source-icon\">\n <i [class]=\"SourceIconClass\"></i>\n </div>\n <div class=\"card-title-area\">\n <h3 class=\"card-title\">{{ Summary.Integration.Name }}</h3>\n <span class=\"source-type-label\">{{ Summary.SourceType?.Name ?? 'Unknown' }}</span>\n </div>\n <div class=\"status-area\">\n <span class=\"status-indicator\" [class]=\"'indicator-' + Summary.StatusColor\"\n [class.pulsing]=\"IsActivelySyncing\"></span>\n <span class=\"status-chip\" [class]=\"'status-' + Summary.StatusColor\">\n {{ StatusLabel }}\n </span>\n </div>\n </div>\n\n <div class=\"card-body\">\n <div class=\"stat-row\">\n <span class=\"stat-label\">Last Run</span>\n <span class=\"stat-value\">{{ Summary.RelativeTime }}</span>\n </div>\n @if (Summary.LatestRun) {\n <div class=\"stat-row\">\n <span class=\"stat-label\">Records Synced</span>\n <span class=\"stat-value\">{{ Summary.LatestRun.TotalRecords | number }}</span>\n </div>\n <div class=\"stat-row\">\n <span class=\"stat-label\">Duration</span>\n <span class=\"stat-value\">{{ FormattedDuration }}</span>\n </div>\n }\n @if (Summary.TotalErrors > 0) {\n <div class=\"stat-row\">\n <span class=\"stat-label\">Errors</span>\n <span class=\"stat-value error-value\">\n <span class=\"error-badge\">{{ Summary.TotalErrors }}</span>\n </span>\n </div>\n }\n </div>\n\n <!-- Sparkline: records synced for last 5 runs -->\n @if (Summary.RecentRuns.length > 1) {\n <div class=\"sparkline-row\">\n <span class=\"sparkline-label\">Recent syncs</span>\n <div class=\"sparkline\">\n @for (run of Summary.RecentRuns; track run.ID) {\n <div class=\"spark-bar\"\n [style.height.%]=\"SparkBarHeight(run.TotalRecords)\"\n [class.spark-success]=\"run.Status === 'Success'\"\n [class.spark-failed]=\"run.Status === 'Failed'\"\n [class.spark-pending]=\"run.Status !== 'Success' && run.Status !== 'Failed'\"\n [title]=\"run.TotalRecords + ' records - ' + run.Status\">\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"card-footer\">\n <button mjButton variant=\"primary\" size=\"sm\"\n (click)=\"OnRunNowClick()\" [disabled]=\"!Summary.Integration.IsActive\">\n <i class=\"fa-solid fa-play\"></i> Run Now\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"OnExpandToggle()\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!Expanded\" [class.fa-chevron-up]=\"Expanded\"></i>\n History\n </button>\n </div>\n </div>\n `,\n styles: [`\n .integration-card {\n background: var(--card-bg, #fff);\n border: 1px solid var(--border-color, #e0e0e0);\n border-radius: 8px;\n padding: 16px;\n transition: box-shadow 0.2s;\n }\n .integration-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }\n .integration-card.inactive { opacity: 0.6; }\n\n .card-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n }\n .source-icon {\n width: 40px; height: 40px;\n border-radius: 8px;\n background: var(--icon-bg, #f0f4ff);\n display: flex; align-items: center; justify-content: center;\n font-size: 18px; color: var(--primary-color, #4a6cf7);\n }\n .card-title-area { flex: 1; min-width: 0; }\n .card-title {\n margin: 0; font-size: 14px; font-weight: 600;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .source-type-label { font-size: 12px; color: #888; }\n\n .status-area {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n display: inline-block;\n }\n .indicator-green { background: #1b7a3d; }\n .indicator-amber { background: #b5850a; }\n .indicator-red { background: #c62828; }\n .indicator-gray { background: #999; }\n\n .status-indicator.pulsing {\n animation: pulse 1.5s ease-in-out infinite;\n }\n @keyframes pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.5; transform: scale(1.3); }\n }\n\n .status-chip {\n font-size: 11px; font-weight: 600; padding: 3px 8px;\n border-radius: 12px; text-transform: uppercase; white-space: nowrap;\n }\n .status-green { background: #e6f9ed; color: #1b7a3d; }\n .status-amber { background: #fff7e0; color: #b5850a; }\n .status-red { background: #fde8e8; color: #c62828; }\n .status-gray { background: #f0f0f0; color: #757575; }\n\n .card-body { margin-bottom: 12px; }\n .stat-row {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n }\n .stat-label { color: #666; }\n .stat-value { font-weight: 500; }\n .error-value { color: #c62828; }\n .error-badge {\n background: #fde8e8;\n color: #c62828;\n padding: 1px 8px;\n border-radius: 10px;\n font-size: 12px;\n font-weight: 700;\n }\n\n /* Sparkline */\n .sparkline-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n padding: 8px 0;\n border-top: 1px solid #f0f0f0;\n margin-bottom: 4px;\n }\n .sparkline-label {\n font-size: 11px;\n color: #999;\n white-space: nowrap;\n }\n .sparkline {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 24px;\n flex: 1;\n }\n .spark-bar {\n flex: 1;\n min-height: 2px;\n border-radius: 2px 2px 0 0;\n transition: height 0.3s ease;\n }\n .spark-success { background: #4a6cf7; }\n .spark-failed { background: #c62828; }\n .spark-pending { background: #b5850a; }\n\n .card-footer {\n display: flex; justify-content: space-between;\n border-top: 1px solid #eee; padding-top: 8px;\n }\n `]\n})\nexport class IntegrationCardComponent {\n @Input() Summary!: IntegrationSummary;\n @Input() Expanded: boolean = false;\n @Input() ViewProvider: IRunViewProvider | null = null;\n @Output() RunNowClick = new EventEmitter<string>();\n @Output() ExpandToggle = new EventEmitter<string>();\n\n get SourceIconClass(): string {\n if (this.Summary.SourceType?.IconClass) {\n return this.Summary.SourceType.IconClass;\n }\n return ResolveIntegrationIcon(\n this.Summary.Integration.Integration ?? this.Summary.Integration.Name,\n this.Summary.Icon\n );\n }\n\n get StatusLabel(): string {\n const color = this.Summary.StatusColor;\n if (color === 'green') return 'Healthy';\n if (color === 'amber') return 'Warning';\n if (color === 'red') return 'Failed';\n return 'Inactive';\n }\n\n get IsActivelySyncing(): boolean {\n return this.Summary.LatestRun?.Status === 'In Progress'\n || this.Summary.LatestRun?.Status === 'Pending';\n }\n\n get FormattedDuration(): string {\n const ms = this.Summary.DurationMs;\n if (ms == null) return '--';\n const totalSeconds = Math.floor(ms / 1000);\n if (totalSeconds < 60) return `${totalSeconds}s`;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${minutes}m ${seconds}s`;\n }\n\n get MaxSparkRecords(): number {\n const maxVal = Math.max(...this.Summary.RecentRuns.map(r => r.TotalRecords));\n return maxVal > 0 ? maxVal : 1;\n }\n\n SparkBarHeight(records: number): number {\n return Math.max((records / this.MaxSparkRecords) * 100, 8);\n }\n\n OnRunNowClick(): void {\n this.RunNowClick.emit(this.Summary.Integration.ID);\n }\n\n OnExpandToggle(): void {\n this.ExpandToggle.emit(this.Summary.Integration.ID);\n }\n}\n"]}
|
|
@@ -10,18 +10,14 @@ import * as i8 from "./components/widgets/run-history-panel.component";
|
|
|
10
10
|
import * as i9 from "./components/visual-editor/visual-editor.component";
|
|
11
11
|
import * as i10 from "@angular/common";
|
|
12
12
|
import * as i11 from "@angular/forms";
|
|
13
|
-
import * as i12 from "@
|
|
14
|
-
import * as i13 from "@
|
|
15
|
-
import * as i14 from "@
|
|
16
|
-
import * as i15 from "@
|
|
17
|
-
import * as i16 from "@
|
|
18
|
-
import * as i17 from "@memberjunction/ng-shared-generic";
|
|
19
|
-
import * as i18 from "@memberjunction/ng-credentials";
|
|
20
|
-
import * as i19 from "@memberjunction/ng-trees";
|
|
21
|
-
import * as i20 from "@memberjunction/ng-scheduling";
|
|
13
|
+
import * as i12 from "@memberjunction/ng-ui-components";
|
|
14
|
+
import * as i13 from "@memberjunction/ng-shared-generic";
|
|
15
|
+
import * as i14 from "@memberjunction/ng-credentials";
|
|
16
|
+
import * as i15 from "@memberjunction/ng-trees";
|
|
17
|
+
import * as i16 from "@memberjunction/ng-scheduling";
|
|
22
18
|
export declare class IntegrationModule {
|
|
23
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<IntegrationModule, never>;
|
|
24
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<IntegrationModule, [typeof i1.OverviewComponent, typeof i2.PipelinesComponent, typeof i3.ConnectionsComponent, typeof i4.MappingWorkspaceComponent, typeof i5.ActivityComponent, typeof i6.SchedulesComponent, typeof i7.IntegrationCardComponent, typeof i8.RunHistoryPanelComponent, typeof i9.VisualFieldEditorComponent], [typeof i10.CommonModule, typeof i11.FormsModule, typeof i12.
|
|
20
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<IntegrationModule, [typeof i1.OverviewComponent, typeof i2.PipelinesComponent, typeof i3.ConnectionsComponent, typeof i4.MappingWorkspaceComponent, typeof i5.ActivityComponent, typeof i6.SchedulesComponent, typeof i7.IntegrationCardComponent, typeof i8.RunHistoryPanelComponent, typeof i9.VisualFieldEditorComponent], [typeof i10.CommonModule, typeof i11.FormsModule, typeof i12.MJButtonDirective, typeof i12.MJComboboxComponent, typeof i12.MJDropdownComponent, typeof i12.MJSwitchComponent, typeof i13.SharedGenericModule, typeof i14.CredentialsModule, typeof i15.NgTreesModule, typeof i16.SchedulingModule], [typeof i1.OverviewComponent, typeof i2.PipelinesComponent, typeof i3.ConnectionsComponent, typeof i4.MappingWorkspaceComponent, typeof i5.ActivityComponent, typeof i6.SchedulesComponent, typeof i7.IntegrationCardComponent, typeof i8.RunHistoryPanelComponent, typeof i9.VisualFieldEditorComponent]>;
|
|
25
21
|
static ɵinj: i0.ɵɵInjectorDeclaration<IntegrationModule>;
|
|
26
22
|
}
|
|
27
23
|
//# sourceMappingURL=integration.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.module.d.ts","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"integration.module.d.ts","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAoBA,qBAuCa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAI"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import {
|
|
5
|
-
import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
|
|
6
|
-
import { InputsModule } from '@progress/kendo-angular-inputs';
|
|
7
|
-
import { GridModule } from '@progress/kendo-angular-grid';
|
|
8
|
-
import { LayoutModule } from '@progress/kendo-angular-layout';
|
|
4
|
+
import { MJButtonDirective, MJComboboxComponent, MJDropdownComponent, MJSwitchComponent } from '@memberjunction/ng-ui-components';
|
|
9
5
|
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
10
6
|
import { CredentialsModule } from '@memberjunction/ng-credentials';
|
|
11
7
|
import { NgTreesModule } from '@memberjunction/ng-trees';
|
|
@@ -28,11 +24,9 @@ export class IntegrationModule {
|
|
|
28
24
|
IntegrationDataService
|
|
29
25
|
], imports: [CommonModule,
|
|
30
26
|
FormsModule,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
GridModule,
|
|
35
|
-
LayoutModule,
|
|
27
|
+
MJComboboxComponent,
|
|
28
|
+
MJDropdownComponent,
|
|
29
|
+
MJSwitchComponent,
|
|
36
30
|
SharedGenericModule,
|
|
37
31
|
CredentialsModule,
|
|
38
32
|
NgTreesModule,
|
|
@@ -55,11 +49,10 @@ export class IntegrationModule {
|
|
|
55
49
|
imports: [
|
|
56
50
|
CommonModule,
|
|
57
51
|
FormsModule,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
LayoutModule,
|
|
52
|
+
MJButtonDirective,
|
|
53
|
+
MJComboboxComponent,
|
|
54
|
+
MJDropdownComponent,
|
|
55
|
+
MJSwitchComponent,
|
|
63
56
|
SharedGenericModule,
|
|
64
57
|
CredentialsModule,
|
|
65
58
|
NgTreesModule,
|
|
@@ -91,11 +84,10 @@ export class IntegrationModule {
|
|
|
91
84
|
RunHistoryPanelComponent,
|
|
92
85
|
VisualFieldEditorComponent], imports: [CommonModule,
|
|
93
86
|
FormsModule,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
LayoutModule,
|
|
87
|
+
MJButtonDirective,
|
|
88
|
+
MJComboboxComponent,
|
|
89
|
+
MJDropdownComponent,
|
|
90
|
+
MJSwitchComponent,
|
|
99
91
|
SharedGenericModule,
|
|
100
92
|
CredentialsModule,
|
|
101
93
|
NgTreesModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.module.js","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"integration.module.js","sourceRoot":"","sources":["../../src/Integration/integration.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAClI,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4DAA4D,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;;AAyC7E,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;iEAfjB;YACT,sBAAsB;SACvB,YAbC,YAAY;YACZ,WAAW;YAEX,mBAAmB;YACnB,mBAAmB;YACnB,iBAAiB;YACjB,mBAAmB;YACnB,iBAAiB;YACjB,aAAa;YACb,gBAAgB;;iFAiBP,iBAAiB;cAvC7B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,iBAAiB;oBACjB,kBAAkB;oBAClB,oBAAoB;oBACpB,yBAAyB;oBACzB,iBAAiB;oBACjB,kBAAkB;oBAClB,wBAAwB;oBACxB,wBAAwB;oBACxB,0BAA0B;iBAC3B;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,iBAAiB;oBACjB,mBAAmB;oBACnB,mBAAmB;oBACnB,iBAAiB;oBACjB,mBAAmB;oBACnB,iBAAiB;oBACjB,aAAa;oBACb,gBAAgB;iBACjB;gBACD,SAAS,EAAE;oBACT,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,iBAAiB;oBACjB,kBAAkB;oBAClB,oBAAoB;oBACpB,yBAAyB;oBACzB,iBAAiB;oBACjB,kBAAkB;oBAClB,wBAAwB;oBACxB,wBAAwB;oBACxB,0BAA0B;iBAC3B;aACF;;wFACY,iBAAiB,mBArC1B,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,yBAAyB;QACzB,iBAAiB;QACjB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,0BAA0B,aAG1B,YAAY;QACZ,WAAW;QACX,iBAAiB;QACjB,mBAAmB;QACnB,mBAAmB;QACnB,iBAAiB;QACjB,mBAAmB;QACnB,iBAAiB;QACjB,aAAa;QACb,gBAAgB,aAMhB,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,yBAAyB;QACzB,iBAAiB;QACjB,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,0BAA0B","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MJButtonDirective, MJComboboxComponent, MJDropdownComponent, MJSwitchComponent } from '@memberjunction/ng-ui-components';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { CredentialsModule } from '@memberjunction/ng-credentials';\nimport { NgTreesModule } from '@memberjunction/ng-trees';\nimport { SchedulingModule } from '@memberjunction/ng-scheduling';\n\nimport { OverviewComponent } from './components/overview/overview.component';\nimport { PipelinesComponent } from './components/pipelines/pipelines.component';\nimport { ConnectionsComponent } from './components/connections/connections.component';\nimport { MappingWorkspaceComponent } from './components/mapping-workspace/mapping-workspace.component';\nimport { ActivityComponent } from './components/activity/activity.component';\nimport { SchedulesComponent } from './components/schedules/schedules.component';\nimport { IntegrationCardComponent } from './components/widgets/integration-card.component';\nimport { RunHistoryPanelComponent } from './components/widgets/run-history-panel.component';\nimport { VisualFieldEditorComponent } from './components/visual-editor/visual-editor.component';\nimport { IntegrationDataService } from './services/integration-data.service';\n\n@NgModule({\n declarations: [\n OverviewComponent,\n PipelinesComponent,\n ConnectionsComponent,\n MappingWorkspaceComponent,\n ActivityComponent,\n SchedulesComponent,\n IntegrationCardComponent,\n RunHistoryPanelComponent,\n VisualFieldEditorComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MJButtonDirective,\n MJComboboxComponent,\n MJDropdownComponent,\n MJSwitchComponent,\n SharedGenericModule,\n CredentialsModule,\n NgTreesModule,\n SchedulingModule\n ],\n providers: [\n IntegrationDataService\n ],\n exports: [\n OverviewComponent,\n PipelinesComponent,\n ConnectionsComponent,\n MappingWorkspaceComponent,\n ActivityComponent,\n SchedulesComponent,\n IntegrationCardComponent,\n RunHistoryPanelComponent,\n VisualFieldEditorComponent\n ]\n})\nexport class IntegrationModule { }\n"]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Knowledge Hub Clusters Dashboard Tab
|
|
3
|
+
*
|
|
4
|
+
* Full-page cluster visualization with:
|
|
5
|
+
* - Left sidebar: saved cluster visualizations (persisted via UserInfoEngine)
|
|
6
|
+
* - Main area: SVG scatter plot (mj-cluster-scatter)
|
|
7
|
+
* - Floating config panel (mj-cluster-config-panel)
|
|
8
|
+
* - Top metrics bar
|
|
9
|
+
*
|
|
10
|
+
* Registered as BaseResourceComponent for the Knowledge Hub application.
|
|
11
|
+
*/
|
|
12
|
+
import { OnDestroy, AfterViewInit } from '@angular/core';
|
|
13
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
14
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
15
|
+
import { ClusterConfig, ClusterConfigPanelEntityOption, ClusterConfigPanelEntityDocOption, ClusterVisualizationResult, ClusterMetrics, ClusterPoint, ClusterLabel, SavedClusterVisualization } from '@memberjunction/ng-clustering';
|
|
16
|
+
import { ClusterScatterComponent } from '@memberjunction/ng-clustering';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
export declare class ClusterVisualizationResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {
|
|
19
|
+
scatterPlot?: ClusterScatterComponent;
|
|
20
|
+
private cdr;
|
|
21
|
+
private clusteringService;
|
|
22
|
+
private navigationService;
|
|
23
|
+
private destroy$;
|
|
24
|
+
/** LLM-generated cluster labels for the current result */
|
|
25
|
+
ClusterLabels: ClusterLabel[];
|
|
26
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
27
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
28
|
+
/** Current visualization result */
|
|
29
|
+
Result: ClusterVisualizationResult | null;
|
|
30
|
+
/** Whether a clustering run is in progress */
|
|
31
|
+
IsRunning: boolean;
|
|
32
|
+
/** The active cluster config */
|
|
33
|
+
ActiveConfig: ClusterConfig;
|
|
34
|
+
/** Title for the top bar */
|
|
35
|
+
VisualizationTitle: string;
|
|
36
|
+
/** Entity options for the config panel dropdown */
|
|
37
|
+
EntityOptions: ClusterConfigPanelEntityOption[];
|
|
38
|
+
/** Entity document options for the selected entity (shown when 2+) */
|
|
39
|
+
EntityDocOptions: ClusterConfigPanelEntityDocOption[];
|
|
40
|
+
SavedVisualizations: SavedClusterVisualization[];
|
|
41
|
+
ActiveSavedId: string | null;
|
|
42
|
+
private userSettingEntity;
|
|
43
|
+
ngAfterViewInit(): Promise<void>;
|
|
44
|
+
ngOnDestroy(): void;
|
|
45
|
+
get Metrics(): ClusterMetrics | null;
|
|
46
|
+
get HasResult(): boolean;
|
|
47
|
+
get SilhouetteScoreFormatted(): string;
|
|
48
|
+
get IsSilhouetteGood(): boolean;
|
|
49
|
+
get ComputationTimeFormatted(): string;
|
|
50
|
+
/** Handle "Run Clustering" from the config panel */
|
|
51
|
+
OnRunClustering(config: ClusterConfig): Promise<void>;
|
|
52
|
+
/** Handle point click — log for now */
|
|
53
|
+
OnPointClicked(_point: ClusterPoint): void;
|
|
54
|
+
/** Handle point hover */
|
|
55
|
+
OnPointHovered(_point: ClusterPoint | null): void;
|
|
56
|
+
/** Navigate to the entity record when "Open Record" is clicked in the detail panel */
|
|
57
|
+
OnOpenRecord(point: ClusterPoint): void;
|
|
58
|
+
/** Save the current visualization */
|
|
59
|
+
OnSaveVisualization(): Promise<void>;
|
|
60
|
+
/** Select a saved visualization — restore from cache if available, otherwise re-run */
|
|
61
|
+
OnSelectSaved(saved: SavedClusterVisualization): Promise<void>;
|
|
62
|
+
/** Delete a saved visualization */
|
|
63
|
+
OnDeleteSaved(saved: SavedClusterVisualization, event: MouseEvent): Promise<void>;
|
|
64
|
+
/** Start a new analysis (clear current) */
|
|
65
|
+
OnNewAnalysis(): void;
|
|
66
|
+
IsActiveSaved(saved: SavedClusterVisualization): boolean;
|
|
67
|
+
TrackSavedBy(_index: number, saved: SavedClusterVisualization): string;
|
|
68
|
+
FormatDate(iso: string): string;
|
|
69
|
+
/** Populate the entity options for the config panel dropdown */
|
|
70
|
+
private loadEntityOptions;
|
|
71
|
+
/** Update entity document options when the selected entity changes */
|
|
72
|
+
private updateEntityDocOptions;
|
|
73
|
+
/**
|
|
74
|
+
* Fetch vectors from Entity Document Runs via RunView.
|
|
75
|
+
* Entity Documents store vectorized entity data; we query for runs
|
|
76
|
+
* that match the requested entity.
|
|
77
|
+
*/
|
|
78
|
+
private fetchVectorsForEntity;
|
|
79
|
+
/** Parse the JSON metadata string from the vector DB into a record */
|
|
80
|
+
private parseVectorMetadata;
|
|
81
|
+
/** Build a human-readable label from vector metadata (prefers Name field, falls back to RecordID) */
|
|
82
|
+
private buildLabel;
|
|
83
|
+
/**
|
|
84
|
+
* After clustering completes, send sample records per cluster to an LLM for naming.
|
|
85
|
+
* Updates ClusterLabels and refreshes the view.
|
|
86
|
+
*/
|
|
87
|
+
private requestClusterLabelsFromLLM;
|
|
88
|
+
/** Build a text block describing sample records per cluster for the LLM prompt */
|
|
89
|
+
private buildClusterDataForPrompt;
|
|
90
|
+
/** Apply cluster labels to the result's Clusters array (sets the Label property) */
|
|
91
|
+
private applyLabelsToResult;
|
|
92
|
+
/**
|
|
93
|
+
* Strip full vector arrays from the result before saving (they're large and not needed for display).
|
|
94
|
+
* Keeps points with 2D coordinates and metadata but removes the original high-dimensional vectors.
|
|
95
|
+
*/
|
|
96
|
+
private stripVectorsFromResult;
|
|
97
|
+
/** Load saved visualizations from UserInfoEngine settings */
|
|
98
|
+
private loadSavedVisualizations;
|
|
99
|
+
/** Persist saved visualizations to UserInfoEngine settings */
|
|
100
|
+
private persistSavedVisualizations;
|
|
101
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClusterVisualizationResourceComponent, never>;
|
|
102
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClusterVisualizationResourceComponent, "app-cluster-visualization-resource", never, {}, {}, never, never, false, never>;
|
|
103
|
+
}
|
|
104
|
+
/** Tree-shaking prevention */
|
|
105
|
+
export declare function LoadClusterVisualizationResource(): void;
|
|
106
|
+
//# sourceMappingURL=cluster-visualization-resource.component.d.ts.map
|
package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster-visualization-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/clusters/cluster-visualization-resource.component.ts"],"names":[],"mappings":"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"}
|