@memberjunction/ng-dashboards 5.8.0 → 5.10.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/models/model-management.component.d.ts +2 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +44 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +15 -12
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +16 -22
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +31 -11
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +10 -7
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +96 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -0
- package/dist/Integration/components/activity/activity.component.js +961 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -0
- package/dist/Integration/components/connections/connections.component.d.ts +194 -0
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -0
- package/dist/Integration/components/connections/connections.component.js +2368 -0
- package/dist/Integration/components/connections/connections.component.js.map +1 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts +213 -15
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2093 -187
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts +60 -0
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -0
- package/dist/Integration/components/overview/overview.component.js +628 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +203 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js +2057 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -0
- package/dist/Integration/components/schedules/schedules.component.d.ts +110 -0
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -0
- package/dist/Integration/components/schedules/schedules.component.js +842 -0
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.d.ts +141 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.d.ts.map +1 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.js +1538 -0
- package/dist/Integration/components/visual-editor/visual-editor.component.js.map +1 -0
- package/dist/Integration/components/widgets/run-history-panel.component.js +3 -2
- package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
- package/dist/Integration/index.d.ts +5 -3
- package/dist/Integration/index.d.ts.map +1 -1
- package/dist/Integration/index.js +11 -7
- package/dist/Integration/index.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +20 -16
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +40 -21
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +123 -9
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +385 -68
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +27 -4
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +338 -144
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/__tests__/integration-data-service.test.js.map +1 -1
- package/dist/__tests__/mapping-validation.test.d.ts +2 -0
- package/dist/__tests__/mapping-validation.test.d.ts.map +1 -0
- package/dist/__tests__/mapping-validation.test.js +170 -0
- package/dist/__tests__/mapping-validation.test.js.map +1 -0
- package/package.json +40 -38
- package/dist/Integration/components/connection-studio/connection-studio.component.d.ts +0 -81
- package/dist/Integration/components/connection-studio/connection-studio.component.d.ts.map +0 -1
- package/dist/Integration/components/connection-studio/connection-studio.component.js +0 -960
- package/dist/Integration/components/connection-studio/connection-studio.component.js.map +0 -1
- package/dist/Integration/components/control-tower/control-tower.component.d.ts +0 -43
- package/dist/Integration/components/control-tower/control-tower.component.d.ts.map +0 -1
- package/dist/Integration/components/control-tower/control-tower.component.js +0 -446
- package/dist/Integration/components/control-tower/control-tower.component.js.map +0 -1
- package/dist/Integration/components/sync-activity/sync-activity.component.d.ts +0 -65
- package/dist/Integration/components/sync-activity/sync-activity.component.d.ts.map +0 -1
- package/dist/Integration/components/sync-activity/sync-activity.component.js +0 -671
- package/dist/Integration/components/sync-activity/sync-activity.component.js.map +0 -1
- package/dist/__tests__/connection-studio.test.d.ts +0 -2
- package/dist/__tests__/connection-studio.test.d.ts.map +0 -1
- package/dist/__tests__/connection-studio.test.js +0 -186
- package/dist/__tests__/connection-studio.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/overview/overview.component.ts","../../../../src/Integration/components/overview/overview.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { RunView, IRunViewProvider } from '@memberjunction/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport {\n IntegrationDataService,\n ResolveIntegrationIcon,\n IntegrationSummary,\n IntegrationKPIs,\n ActivityFeedItem,\n DailyRecordCount,\n EntityMapRow\n} from '../../services/integration-data.service';\n\ntype StatusColorType = 'green' | 'amber' | 'red' | 'gray';\n\ninterface NotificationBanner {\n Type: 'success' | 'error';\n Message: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'IntegrationOverview')\n@Component({\n standalone: false,\n selector: 'app-integration-overview',\n templateUrl: './overview.component.html',\n styleUrls: ['./overview.component.css']\n})\nexport class OverviewComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n Summaries: IntegrationSummary[] = [];\n KPIs: IntegrationKPIs = {\n TotalIntegrations: 0,\n ActiveSyncs: 0,\n RecordsSyncedToday: 0,\n ErrorRate: 0,\n AverageSyncDurationMs: null\n };\n ActivityFeed: ActivityFeedItem[] = [];\n DailyCounts: DailyRecordCount[] = [];\n EntityMapCounts: Map<string, number> = new Map();\n\n IsLoading = false;\n RunningIntegrationID: string | null = null;\n Notification: NotificationBanner | null = null;\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private notificationTimer: ReturnType<typeof setTimeout> | null = null;\n\n async ngOnInit(): Promise<void> {\n await this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.clearNotificationTimer();\n }\n\n // ---------------------------------------------------------------------------\n // Data Loading\n // ---------------------------------------------------------------------------\n\n async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n const provider = this.RunViewToUse;\n const [summaries, activityFeed, dailyCounts] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.dataService.LoadRecentRuns(10, provider),\n this.dataService.LoadDailyRecordCounts(7, provider)\n ]);\n this.Summaries = summaries;\n this.KPIs = this.dataService.ComputeKPIs(summaries);\n this.ActivityFeed = activityFeed;\n this.DailyCounts = dailyCounts;\n await this.loadEntityMapCounts(summaries, provider);\n } catch (err) {\n console.error('[IntegrationOverview] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n async Refresh(): Promise<void> {\n await this.LoadData();\n }\n\n // ---------------------------------------------------------------------------\n // Sync Actions\n // ---------------------------------------------------------------------------\n\n async RunSync(integrationID: string): Promise<void> {\n if (this.RunningIntegrationID) return;\n this.RunningIntegrationID = integrationID;\n this.dismissNotification();\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.RunSync(integrationID);\n if (result.Success) {\n this.showNotification('success', result.Message || 'Sync started successfully');\n await this.LoadData();\n } else {\n this.showNotification('error', result.Message || 'Sync failed');\n }\n } catch (err) {\n const error = err as Error;\n this.showNotification('error', `Unexpected error: ${error.message}`);\n console.error('[IntegrationOverview] RunSync error:', err);\n } finally {\n this.RunningIntegrationID = null;\n this.cdr.detectChanges();\n }\n }\n\n IsRunning(integrationID: string): boolean {\n return UUIDsEqual(this.RunningIntegrationID, integrationID);\n }\n\n // ---------------------------------------------------------------------------\n // KPI Helpers\n // ---------------------------------------------------------------------------\n\n get SuccessRate(): number {\n if (this.KPIs.ErrorRate == null) return 100;\n return Math.round((100 - this.KPIs.ErrorRate) * 10) / 10;\n }\n\n get SuccessRateGradient(): string {\n const pct = this.SuccessRate;\n const angle = (pct / 100) * 360;\n return `conic-gradient(#10b981 ${angle}deg, #e5e7eb ${angle}deg)`;\n }\n\n get ActiveCount(): number {\n return this.KPIs.ActiveSyncs;\n }\n\n FormatDuration(ms: number | null): string {\n return this.dataService.FormatDuration(ms);\n }\n\n FormatNumber(value: number): string {\n if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `${(value / 1_000).toFixed(1)}K`;\n return value.toLocaleString();\n }\n\n // ---------------------------------------------------------------------------\n // Pipeline Card Helpers\n // ---------------------------------------------------------------------------\n\n GetIntegrationIcon(summary: IntegrationSummary): string {\n if (summary.SourceType?.IconClass) {\n return summary.SourceType.IconClass;\n }\n return this.resolveIconByName(summary.Integration.Integration ?? summary.Integration.Name);\n }\n\n GetStatusDotClass(color: StatusColorType): string {\n return `status-dot status-dot-${color}`;\n }\n\n GetStatusLabel(color: StatusColorType): string {\n if (color === 'green') return 'Healthy';\n if (color === 'amber') return 'Warning';\n if (color === 'red') return 'Error';\n return 'Inactive';\n }\n\n GetEntityMapCount(integrationID: string): number {\n for (const [key, value] of this.EntityMapCounts) {\n if (UUIDsEqual(key, integrationID)) return value;\n }\n return 0;\n }\n\n GetSparklineDotClass(run: { Status: string }): string {\n if (run.Status === 'Success') return 'spark-dot spark-green';\n if (run.Status === 'Failed') return 'spark-dot spark-red';\n if (run.Status === 'In Progress' || run.Status === 'Pending') return 'spark-dot spark-amber';\n return 'spark-dot spark-gray';\n }\n\n GetCardBorderClass(color: StatusColorType): string {\n return color === 'red' ? 'pipeline-card pipeline-card-error' : 'pipeline-card';\n }\n\n // ---------------------------------------------------------------------------\n // Bar Chart Helpers\n // ---------------------------------------------------------------------------\n\n get MaxDailyRecords(): number {\n if (this.DailyCounts.length === 0) return 1;\n const maxVal = Math.max(...this.DailyCounts.map(d => d.Records));\n return maxVal > 0 ? maxVal : 1;\n }\n\n BarHeight(records: number): number {\n return Math.max((records / this.MaxDailyRecords) * 100, 2);\n }\n\n // ---------------------------------------------------------------------------\n // Activity Feed Helpers\n // ---------------------------------------------------------------------------\n\n ActivityStatusIcon(status: string): string {\n if (status === 'Success') return 'fa-solid fa-circle-check';\n if (status === 'Failed') return 'fa-solid fa-circle-xmark';\n if (status === 'In Progress') return 'fa-solid fa-spinner fa-spin';\n return 'fa-solid fa-clock';\n }\n\n // ---------------------------------------------------------------------------\n // Notification Management\n // ---------------------------------------------------------------------------\n\n DismissNotification(): void {\n this.dismissNotification();\n this.cdr.detectChanges();\n }\n\n // ---------------------------------------------------------------------------\n // Resource Overrides\n // ---------------------------------------------------------------------------\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Overview';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-gauge-high';\n }\n\n // ---------------------------------------------------------------------------\n // Private Helpers\n // ---------------------------------------------------------------------------\n\n private async loadEntityMapCounts(\n summaries: IntegrationSummary[],\n provider: IRunViewProvider | null\n ): Promise<void> {\n if (summaries.length === 0) return;\n const allMaps = await this.loadAllEntityMaps(provider);\n this.EntityMapCounts = this.countMapsByIntegration(allMaps);\n }\n\n private async loadAllEntityMaps(\n provider: IRunViewProvider | null\n ): Promise<EntityMapRow[]> {\n const rv = new RunView(provider ?? null);\n const result = await rv.RunView<EntityMapRow>({\n EntityName: 'MJ: Company Integration Entity Maps',\n ExtraFilter: '',\n OrderBy: 'CompanyIntegrationID',\n Fields: ['ID', 'CompanyIntegrationID'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private countMapsByIntegration(maps: EntityMapRow[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const map of maps) {\n const current = counts.get(map.CompanyIntegrationID) ?? 0;\n counts.set(map.CompanyIntegrationID, current + 1);\n }\n return counts;\n }\n\n private resolveIconByName(name: string): string {\n return ResolveIntegrationIcon(name);\n }\n\n private showNotification(type: 'success' | 'error', message: string): void {\n this.clearNotificationTimer();\n this.Notification = { Type: type, Message: message };\n this.notificationTimer = setTimeout(() => {\n this.Notification = null;\n this.cdr.detectChanges();\n }, 5000);\n }\n\n private dismissNotification(): void {\n this.clearNotificationTimer();\n this.Notification = null;\n }\n\n private clearNotificationTimer(): void {\n if (this.notificationTimer) {\n clearTimeout(this.notificationTimer);\n this.notificationTimer = null;\n }\n }\n}\n\nexport function LoadOverviewComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<div class=\"overview\">\n <!-- Notification Banner -->\n @if (Notification) {\n <div class=\"notification\" [class.notification-success]=\"Notification.Type === 'success'\"\n [class.notification-error]=\"Notification.Type === 'error'\">\n @if (Notification.Type === 'success') {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span class=\"notification-message\">{{ Notification.Message }}</span>\n <button class=\"notification-dismiss\" (click)=\"DismissNotification()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n\n @if (IsLoading) {\n <mj-loading text=\"Loading integrations...\" size=\"medium\"></mj-loading>\n } @else if (Summaries.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug-circle-xmark\"></i>\n <h3>No Integrations Configured</h3>\n <p>Set up your first integration using the Connection Studio to start syncing data.</p>\n </div>\n } @else {\n <!-- ====================================================================\n SECTION 1: Metric Strip\n ==================================================================== -->\n <div class=\"metric-strip\">\n <!-- Total Pipelines -->\n <div class=\"metric-card\">\n <div class=\"metric-icon metric-icon-blue\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n </div>\n <div class=\"metric-body\">\n <span class=\"metric-value\">{{ KPIs.TotalIntegrations }}</span>\n <span class=\"metric-label\">Total Pipelines</span>\n </div>\n </div>\n\n <!-- Records Today -->\n <div class=\"metric-card\">\n <div class=\"metric-icon metric-icon-green\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"metric-body\">\n <span class=\"metric-value\">{{ FormatNumber(KPIs.RecordsSyncedToday) }}</span>\n <span class=\"metric-label\">Records Today</span>\n </div>\n </div>\n\n <!-- Success Rate (with conic gradient ring) -->\n <div class=\"metric-card\">\n <div class=\"metric-ring\" [style.background]=\"SuccessRateGradient\">\n <div class=\"metric-ring-inner\">\n <span class=\"metric-ring-value\">{{ SuccessRate }}%</span>\n </div>\n </div>\n <div class=\"metric-body\">\n <span class=\"metric-value metric-value-indigo\">{{ SuccessRate }}%</span>\n <span class=\"metric-label\">Success Rate</span>\n </div>\n </div>\n\n <!-- Active Now -->\n <div class=\"metric-card\">\n <div class=\"metric-icon metric-icon-emerald\">\n <i class=\"fa-solid fa-bolt\"></i>\n @if (ActiveCount > 0) {\n <span class=\"pulse-dot\"></span>\n }\n </div>\n <div class=\"metric-body\">\n <span class=\"metric-value\">{{ ActiveCount }}</span>\n <span class=\"metric-label\">Active Now</span>\n </div>\n </div>\n\n <!-- Avg Duration -->\n <div class=\"metric-card\">\n <div class=\"metric-icon metric-icon-orange\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"metric-body\">\n <span class=\"metric-value\">{{ FormatDuration(KPIs.AverageSyncDurationMs) }}</span>\n <span class=\"metric-label\">Avg Duration</span>\n </div>\n </div>\n </div>\n\n <!-- ====================================================================\n SECTION 2: Pipeline Health Grid\n ==================================================================== -->\n <div class=\"section-heading\">\n <h3><i class=\"fa-solid fa-heart-pulse\"></i> Pipeline Health</h3>\n <button class=\"refresh-btn\" (click)=\"Refresh()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n </div>\n\n <div class=\"pipeline-grid\">\n @for (summary of Summaries; track summary.Integration.ID) {\n <div [class]=\"GetCardBorderClass(summary.StatusColor)\">\n <!-- Card Header -->\n <div class=\"card-header\">\n <div class=\"card-header-left\">\n <div class=\"card-icon-wrap\">\n <i [class]=\"GetIntegrationIcon(summary)\"></i>\n </div>\n <div class=\"card-title-wrap\">\n <span class=\"card-title\">{{ summary.Integration.Name }}</span>\n <span class=\"card-subtitle\">{{ summary.SourceType?.Name ?? 'Custom' }}</span>\n </div>\n </div>\n <div [class]=\"GetStatusDotClass(summary.StatusColor)\"\n [title]=\"GetStatusLabel(summary.StatusColor)\">\n @if (summary.LatestRun?.Status === 'In Progress') {\n <span class=\"dot-pulse\"></span>\n }\n </div>\n </div>\n\n <!-- Pipeline Flow Visual -->\n <div class=\"pipeline-flow\">\n <div class=\"flow-node\">\n <i [class]=\"GetIntegrationIcon(summary)\"></i>\n </div>\n <div class=\"flow-arrow\">\n <div class=\"flow-line\"></div>\n <span class=\"flow-count\">{{ GetEntityMapCount(summary.Integration.ID) }} maps</span>\n <div class=\"flow-line\"></div>\n </div>\n <div class=\"flow-node flow-node-mj\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </div>\n </div>\n\n <!-- Stats Row -->\n <div class=\"card-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Last sync</span>\n <span class=\"stat-value\">{{ summary.RelativeTime }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Records</span>\n <span class=\"stat-value\">{{ FormatNumber(summary.LatestRun?.TotalRecords ?? 0) }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Duration</span>\n <span class=\"stat-value\">{{ FormatDuration(summary.DurationMs) }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Errors</span>\n <span class=\"stat-value\" [class.stat-error]=\"summary.TotalErrors > 0\">\n {{ summary.TotalErrors }}\n </span>\n </div>\n </div>\n\n <!-- Sparkline (last 5 runs) -->\n <div class=\"sparkline-row\">\n <span class=\"sparkline-label\">Recent runs</span>\n <div class=\"sparkline-dots\">\n @for (run of summary.RecentRuns; track run.ID) {\n <span [class]=\"GetSparklineDotClass(run)\"\n [title]=\"run.Status + ' - ' + (run.StartedAt ?? 'N/A')\"></span>\n }\n @if (summary.RecentRuns.length === 0) {\n <span class=\"sparkline-none\">No runs</span>\n }\n </div>\n </div>\n\n <!-- Card Footer -->\n <div class=\"card-footer\">\n @if (IsRunning(summary.Integration.ID)) {\n <button class=\"btn-sync btn-sync-disabled\" disabled>\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n </button>\n } @else {\n <button class=\"btn-sync\"\n (click)=\"RunSync(summary.Integration.ID)\"\n [disabled]=\"!summary.Integration.IsActive || RunningIntegrationID !== null\">\n <i class=\"fa-solid fa-play\"></i> Sync Now\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- ====================================================================\n SECTION 3: Bottom - Bar Chart & Activity Feed\n ==================================================================== -->\n <div class=\"bottom-split\">\n <!-- Bar Chart (left, 60%) -->\n <div class=\"chart-panel\">\n <h3 class=\"panel-title\"><i class=\"fa-solid fa-chart-bar\"></i> Records Synced (7 days)</h3>\n @if (DailyCounts.length === 0) {\n <p class=\"empty-hint\">No data available.</p>\n } @else {\n <div class=\"bar-chart\">\n @for (day of DailyCounts; track day.Date) {\n <div class=\"bar-column\">\n <div class=\"bar-count\">{{ FormatNumber(day.Records) }}</div>\n <div class=\"bar-fill\" [style.height.%]=\"BarHeight(day.Records)\"></div>\n <div class=\"bar-day\">{{ day.Label }}</div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Activity Feed (right, 40%) -->\n <div class=\"feed-panel\">\n <h3 class=\"panel-title\"><i class=\"fa-solid fa-stream\"></i> Recent Activity</h3>\n @if (ActivityFeed.length === 0) {\n <p class=\"empty-hint\">No recent activity.</p>\n } @else {\n <div class=\"feed-list\">\n @for (item of ActivityFeed; track item.RunID) {\n <div class=\"feed-item\">\n <i [class]=\"ActivityStatusIcon(item.Status)\"\n [class.feed-icon-green]=\"item.StatusColor === 'green'\"\n [class.feed-icon-red]=\"item.StatusColor === 'red'\"\n [class.feed-icon-amber]=\"item.StatusColor === 'amber'\">\n </i>\n <div class=\"feed-details\">\n <span class=\"feed-name\">{{ item.IntegrationName }}</span>\n <span class=\"feed-meta\">{{ item.TotalRecords | number }} records · {{ item.RelativeTime }}</span>\n </div>\n <span class=\"feed-badge\" [class]=\"'feed-badge-' + item.StatusColor\">\n {{ item.Status }}\n </span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n</div>\n"]}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
3
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
4
|
+
import { IntegrationSummary, EntityMapRow } from '../../services/integration-data.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
interface PipelineCard {
|
|
7
|
+
IntegrationID: string;
|
|
8
|
+
IntegrationName: string;
|
|
9
|
+
Icon: string;
|
|
10
|
+
StatusColor: string;
|
|
11
|
+
StatusLabel: string;
|
|
12
|
+
EntityMapCount: number;
|
|
13
|
+
ActiveMapCount: number;
|
|
14
|
+
UniqueEntityCount: number;
|
|
15
|
+
LastSync: string;
|
|
16
|
+
IsExpanded: boolean;
|
|
17
|
+
EntityMaps: EntityMapRow[];
|
|
18
|
+
/** Filtered subset currently visible */
|
|
19
|
+
FilteredMaps: EntityMapRow[];
|
|
20
|
+
SearchTerm: string;
|
|
21
|
+
}
|
|
22
|
+
type TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';
|
|
23
|
+
interface TransformStepUI {
|
|
24
|
+
Type: TransformType;
|
|
25
|
+
Config: Record<string, unknown>;
|
|
26
|
+
OnError: 'Skip' | 'Null' | 'Fail';
|
|
27
|
+
}
|
|
28
|
+
interface VisualSourceField {
|
|
29
|
+
Name: string;
|
|
30
|
+
Label: string;
|
|
31
|
+
Type: string;
|
|
32
|
+
IsRequired: boolean;
|
|
33
|
+
IsPrimaryKey: boolean;
|
|
34
|
+
}
|
|
35
|
+
interface VisualDestField {
|
|
36
|
+
Name: string;
|
|
37
|
+
Type: string;
|
|
38
|
+
IsRequired: boolean;
|
|
39
|
+
}
|
|
40
|
+
interface VisualConnection {
|
|
41
|
+
ID: string | null;
|
|
42
|
+
SourceFieldName: string;
|
|
43
|
+
DestFieldName: string;
|
|
44
|
+
IsKeyField: boolean;
|
|
45
|
+
IsRequired: boolean;
|
|
46
|
+
Direction: 'SourceToDest' | 'DestToSource' | 'Both';
|
|
47
|
+
TransformSteps: TransformStepUI[];
|
|
48
|
+
IsDirty: boolean;
|
|
49
|
+
IsNew: boolean;
|
|
50
|
+
MarkedForDelete: boolean;
|
|
51
|
+
}
|
|
52
|
+
export declare class PipelinesComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
53
|
+
PipelineCards: PipelineCard[];
|
|
54
|
+
IsLoading: boolean;
|
|
55
|
+
GlobalSearch: string;
|
|
56
|
+
VisualEditorOpen: boolean;
|
|
57
|
+
EditorEntityMap: EntityMapRow | null;
|
|
58
|
+
EditorCard: PipelineCard | null;
|
|
59
|
+
EditorSourceFields: VisualSourceField[];
|
|
60
|
+
EditorDestFields: VisualDestField[];
|
|
61
|
+
EditorConnections: VisualConnection[];
|
|
62
|
+
EditorLoading: boolean;
|
|
63
|
+
EditorSaving: boolean;
|
|
64
|
+
EditorSaveSuccess: boolean;
|
|
65
|
+
/** Currently selected connection index (opens transform panel) */
|
|
66
|
+
SelectedConnectionIdx: number | null;
|
|
67
|
+
/** When non-null, user is in "connect mode" — next dest click creates a mapping */
|
|
68
|
+
ConnectingFromSource: string | null;
|
|
69
|
+
/** Search/filter within the visual editor columns */
|
|
70
|
+
EditorSearchSource: string;
|
|
71
|
+
EditorSearchDest: string;
|
|
72
|
+
/** Data preview state */
|
|
73
|
+
ShowSourcePreview: boolean;
|
|
74
|
+
ShowDestPreview: boolean;
|
|
75
|
+
PreviewSourceLoading: boolean;
|
|
76
|
+
PreviewDestLoading: boolean;
|
|
77
|
+
PreviewSourceRows: Array<Record<string, string | number | boolean | null>>;
|
|
78
|
+
PreviewDestRows: Array<Record<string, string | number | boolean | null>>;
|
|
79
|
+
PreviewSourceColumns: string[];
|
|
80
|
+
PreviewDestColumns: string[];
|
|
81
|
+
/** Collapsible section state */
|
|
82
|
+
FieldMapsExpanded: boolean;
|
|
83
|
+
InfoPanelExpanded: boolean;
|
|
84
|
+
/** Info panel data */
|
|
85
|
+
InfoPanelLoading: boolean;
|
|
86
|
+
InfoDestRecordCount: number | null;
|
|
87
|
+
InfoLastSync: {
|
|
88
|
+
StartedAt: string | null;
|
|
89
|
+
EndedAt: string | null;
|
|
90
|
+
Status: string;
|
|
91
|
+
TotalRecords: number;
|
|
92
|
+
} | null;
|
|
93
|
+
/** SVG layout constants */
|
|
94
|
+
readonly FIELD_HEIGHT = 40;
|
|
95
|
+
readonly SVG_WIDTH = 200;
|
|
96
|
+
/** Transform type metadata */
|
|
97
|
+
readonly TRANSFORM_TYPES: Array<{
|
|
98
|
+
Value: TransformType;
|
|
99
|
+
Label: string;
|
|
100
|
+
Icon: string;
|
|
101
|
+
}>;
|
|
102
|
+
private dataService;
|
|
103
|
+
private cdr;
|
|
104
|
+
ngOnInit(): Promise<void>;
|
|
105
|
+
ngOnDestroy(): void;
|
|
106
|
+
GetResourceDisplayName(_data: ResourceData): Promise<string>;
|
|
107
|
+
GetResourceIconClass(_data: ResourceData): Promise<string>;
|
|
108
|
+
LoadData(): Promise<void>;
|
|
109
|
+
BuildCards(summaries: IntegrationSummary[], allEntityMaps: EntityMapRow[]): void;
|
|
110
|
+
ToggleCard(card: PipelineCard): void;
|
|
111
|
+
ExpandAll(): void;
|
|
112
|
+
CollapseAll(): void;
|
|
113
|
+
OnCardSearch(card: PipelineCard, event: Event): void;
|
|
114
|
+
OnGlobalSearchChange(event: Event): void;
|
|
115
|
+
get FilteredCards(): PipelineCard[];
|
|
116
|
+
OnMapRowClick(card: PipelineCard, entityMap: EntityMapRow): void;
|
|
117
|
+
OnToggleSyncEnabled(card: PipelineCard, em: EntityMapRow, event: Event): Promise<void>;
|
|
118
|
+
OnToggleEditorSyncEnabled(event: Event): Promise<void>;
|
|
119
|
+
ToggleSourcePreview(): Promise<void>;
|
|
120
|
+
ToggleDestPreview(): Promise<void>;
|
|
121
|
+
private loadSourcePreview;
|
|
122
|
+
private loadDestPreview;
|
|
123
|
+
ToggleFieldMaps(): void;
|
|
124
|
+
ToggleInfoPanel(): void;
|
|
125
|
+
private loadInfoPanelData;
|
|
126
|
+
FormatSyncDate(dateStr: string | null): string;
|
|
127
|
+
SyncStatusClass(status: string): string;
|
|
128
|
+
/**
|
|
129
|
+
* Direction arrows for entity-level sync direction.
|
|
130
|
+
* Pull = data flows FROM external source INTO MJ = right arrow (→)
|
|
131
|
+
* Push = data flows FROM MJ OUT to external = left arrow (←)
|
|
132
|
+
*/
|
|
133
|
+
DirectionLabel(direction: string): string;
|
|
134
|
+
DirectionBadgeClass(direction: string): string;
|
|
135
|
+
DirectionText(direction: string): string;
|
|
136
|
+
get IntegrationCount(): number;
|
|
137
|
+
get TotalMapCount(): number;
|
|
138
|
+
OpenVisualEditor(card: PipelineCard, entityMap: EntityMapRow): void;
|
|
139
|
+
CloseVisualEditor(): void;
|
|
140
|
+
LoadVisualEditorData(): Promise<void>;
|
|
141
|
+
get FilteredEditorSourceFields(): VisualSourceField[];
|
|
142
|
+
get FilteredEditorDestFields(): VisualDestField[];
|
|
143
|
+
/** Only show connections where both source and dest are visible */
|
|
144
|
+
get VisibleConnections(): VisualConnection[];
|
|
145
|
+
get EditorCanvasHeight(): number;
|
|
146
|
+
GetConnectionPath(conn: VisualConnection): string;
|
|
147
|
+
GetConnectionMidY(conn: VisualConnection): number;
|
|
148
|
+
GetConnectionLineClass(conn: VisualConnection): string;
|
|
149
|
+
GetConnectionBadgeClass(conn: VisualConnection): string;
|
|
150
|
+
GetConnectionTransformIcon(conn: VisualConnection): string;
|
|
151
|
+
/** Direction-aware icon for the SVG connection badge */
|
|
152
|
+
GetConnectionDirectionIcon(conn: VisualConnection): string;
|
|
153
|
+
GetTransformTypeLabel(type: TransformType): string;
|
|
154
|
+
IsSourceFieldMapped(fieldName: string): boolean;
|
|
155
|
+
IsDestFieldMapped(fieldName: string): boolean;
|
|
156
|
+
OnEditorSourceClick(fieldName: string): void;
|
|
157
|
+
OnEditorDestClick(fieldName: string): void;
|
|
158
|
+
CancelConnect(): void;
|
|
159
|
+
SelectConnection(index: number, event: Event): void;
|
|
160
|
+
DeselectConnection(): void;
|
|
161
|
+
get SelectedConnection(): VisualConnection | null;
|
|
162
|
+
RemoveSelectedConnection(): void;
|
|
163
|
+
ToggleConnectionKey(): void;
|
|
164
|
+
ToggleConnectionRequired(): void;
|
|
165
|
+
GetDirectionArrowClass(direction: string): string;
|
|
166
|
+
OnConnectionDirectionChange(direction: 'SourceToDest' | 'DestToSource' | 'Both'): void;
|
|
167
|
+
OnConnectionTransformChange(stepIndex: number, type: TransformType): void;
|
|
168
|
+
OnTransformConfigChange(conn: VisualConnection, stepIndex: number, key: string, value: string): void;
|
|
169
|
+
AddTransformStep(): void;
|
|
170
|
+
RemoveTransformStep(stepIndex: number): void;
|
|
171
|
+
get HasEditorChanges(): boolean;
|
|
172
|
+
SaveVisualEditor(): Promise<void>;
|
|
173
|
+
AutoMapEditorFields(): Promise<void>;
|
|
174
|
+
get EditorMappedCount(): number;
|
|
175
|
+
get EditorKeyFieldCount(): number;
|
|
176
|
+
get EditorRequiredCount(): number;
|
|
177
|
+
/** Get transform config keys for inline editing */
|
|
178
|
+
GetConfigKeys(step: TransformStepUI): string[];
|
|
179
|
+
GetConfigValue(step: TransformStepUI, key: string): string;
|
|
180
|
+
private getSourceFieldIndex;
|
|
181
|
+
private getDestFieldIndex;
|
|
182
|
+
private getSourceFieldY;
|
|
183
|
+
private getDestFieldY;
|
|
184
|
+
private getPrimaryTransformType;
|
|
185
|
+
private parseTransformPipeline;
|
|
186
|
+
private serializeTransformPipeline;
|
|
187
|
+
private getDefaultConfigForType;
|
|
188
|
+
/**
|
|
189
|
+
* Resolve source fields from IntegrationObjectField metadata via IntegrationEngineBase.
|
|
190
|
+
* CompanyIntegrationID → Integration → IntegrationObject → IntegrationObjectFields.
|
|
191
|
+
*/
|
|
192
|
+
private resolveSourceFieldsFromMetadata;
|
|
193
|
+
private applyMapFilter;
|
|
194
|
+
private loadAllEntityMaps;
|
|
195
|
+
private resolveIcon;
|
|
196
|
+
private statusToColor;
|
|
197
|
+
private statusToLabel;
|
|
198
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PipelinesComponent, never>;
|
|
199
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PipelinesComponent, "app-integration-pipelines", never, {}, {}, never, never, false, never>;
|
|
200
|
+
}
|
|
201
|
+
export declare function LoadPipelinesComponent(): void;
|
|
202
|
+
export {};
|
|
203
|
+
//# sourceMappingURL=pipelines.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipelines.component.d.ts","sourceRoot":"","sources":["../../../../src/Integration/components/pipelines/pipelines.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAGxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAGL,kBAAkB,EAClB,YAAY,EAEb,MAAM,yCAAyC,CAAC;;AAMjD,UAAU,YAAY;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,wCAAwC;IACxC,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,KAAK,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExH,UAAU,eAAe;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC;IACpD,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,qBAOa,kBAAmB,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAMxF,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,YAAY,SAAM;IAMlB,gBAAgB,UAAS;IACzB,eAAe,EAAE,YAAY,GAAG,IAAI,CAAQ;IAC5C,UAAU,EAAE,YAAY,GAAG,IAAI,CAAQ;IACvC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAC7C,gBAAgB,EAAE,eAAe,EAAE,CAAM;IACzC,iBAAiB,EAAE,gBAAgB,EAAE,CAAM;IAC3C,aAAa,UAAS;IACtB,YAAY,UAAS;IACrB,iBAAiB,UAAS;IAE1B,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE5C,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C,qDAAqD;IACrD,kBAAkB,SAAM;IACxB,gBAAgB,SAAM;IAEtB,yBAAyB;IACzB,iBAAiB,UAAS;IAC1B,eAAe,UAAS;IACxB,oBAAoB,UAAS;IAC7B,kBAAkB,UAAS;IAC3B,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAM;IAChF,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAM;IAC9E,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAElC,gCAAgC;IAChC,iBAAiB,UAAQ;IACzB,iBAAiB,UAAS;IAE1B,sBAAsB;IACtB,gBAAgB,UAAS;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAQ;IAEvH,2BAA2B;IAC3B,QAAQ,CAAC,YAAY,MAAM;IAC3B,QAAQ,CAAC,SAAS,OAAO;IAEzB,8BAA8B;IAC9B,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAUpF;IAMF,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,GAAG,CAA6B;IAMlC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,WAAW,IAAI,IAAI;IAQb,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB/B,UAAU,CAAC,SAAS,EAAE,kBAAkB,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI;IA6BhF,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAOpC,SAAS,IAAI,IAAI;IAOjB,WAAW,IAAI,IAAI;IAUnB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAOpD,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMxC,IAAI,aAAa,IAAI,YAAY,EAAE,CAUlC;IAMD,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAQ1D,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtF,yBAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtD,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;YAQ1B,iBAAiB;YAsBjB,eAAe;IA0B7B,eAAe,IAAI,IAAI;IAKvB,eAAe,IAAI,IAAI;YAQT,iBAAiB;IAuB/B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAe9C,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAavC;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAOzC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAO9C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAOxC,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAUD,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAuBnE,iBAAiB,IAAI,IAAI;IAYnB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqE3C,IAAI,0BAA0B,IAAI,iBAAiB,EAAE,CAMpD;IAED,IAAI,wBAAwB,IAAI,eAAe,EAAE,CAIhD;IAED,mEAAmE;IACnE,IAAI,kBAAkB,IAAI,gBAAgB,EAAE,CAM3C;IAMD,IAAI,kBAAkB,IAAI,MAAM,CAI/B;IAED,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IASjD,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAMjD,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAKtD,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAKvD,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAK1D,wDAAwD;IACxD,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;IAQ1D,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAQlD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQ7C,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAa5C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAkC1C,aAAa,IAAI,IAAI;IASrB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAOnD,kBAAkB,IAAI,IAAI;IAK1B,IAAI,kBAAkB,IAAI,gBAAgB,GAAG,IAAI,CAGhD;IAED,wBAAwB,IAAI,IAAI;IAahC,mBAAmB,IAAI,IAAI;IAQ3B,wBAAwB,IAAI,IAAI;IAQhC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQjD,2BAA2B,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,GAAG,IAAI;IAQtF,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IASzE,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMpG,gBAAgB,IAAI,IAAI;IAQxB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAY5C,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAEK,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CjC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC1C,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,mDAAmD;IACnD,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE;IAI9C,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAW1D,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,uBAAuB;IAc/B;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAwBvC,OAAO,CAAC,cAAc;YASR,iBAAiB;IAc/B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;yCA5/BV,kBAAkB;2CAAlB,kBAAkB;CAkgC9B;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C"}
|