@memberjunction/ng-dashboards 6.1.0-edge.2 → 6.1.0-edge.4
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/LICENSE +180 -4
- package/README.md +1 -1
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +4 -4
- package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -1
- package/dist/DatabaseDesigner/services/database-designer.engine.js +5 -9
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +7 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +2 -2
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -1
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +8 -7
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/components/widgets/run-history-panel.component.d.ts +1 -1
- package/dist/Integration/components/widgets/run-history-panel.component.d.ts.map +1 -1
- package/dist/Integration/components/widgets/run-history-panel.component.js +6 -0
- package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +13 -3
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +13 -2
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Workflows/components/workflow-run-debug-state.d.ts +41 -0
- package/dist/Workflows/components/workflow-run-debug-state.d.ts.map +1 -0
- package/dist/Workflows/components/workflow-run-debug-state.js +78 -0
- package/dist/Workflows/components/workflow-run-debug-state.js.map +1 -0
- package/dist/Workflows/components/workflow-run-layout.d.ts +83 -0
- package/dist/Workflows/components/workflow-run-layout.d.ts.map +1 -0
- package/dist/Workflows/components/workflow-run-layout.js +133 -0
- package/dist/Workflows/components/workflow-run-layout.js.map +1 -0
- package/dist/Workflows/components/workflow-runs-resource.component.d.ts +146 -3
- package/dist/Workflows/components/workflow-runs-resource.component.d.ts.map +1 -1
- package/dist/Workflows/components/workflow-runs-resource.component.js +1271 -125
- package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
- package/dist/workflows-dashboards.module.d.ts +2 -1
- package/dist/workflows-dashboards.module.d.ts.map +1 -1
- package/dist/workflows-dashboards.module.js +6 -2
- package/dist/workflows-dashboards.module.js.map +1 -1
- package/package.json +64 -64
|
@@ -506,7 +506,7 @@ let ActivityComponent = class ActivityComponent extends BaseResourceComponent {
|
|
|
506
506
|
// Detail panel tab
|
|
507
507
|
ActiveDetailTab = 'entities';
|
|
508
508
|
IsLoadingWatermarks = false;
|
|
509
|
-
StatusOptions = ['All', 'Success', 'Failed', 'In Progress', 'Pending'];
|
|
509
|
+
StatusOptions = ['All', 'Success', 'Failed', 'Cancelled', 'In Progress', 'Queued', 'Pending'];
|
|
510
510
|
DateOptions = [
|
|
511
511
|
{ Value: 'all', Label: 'All' },
|
|
512
512
|
{ Value: 'today', Label: 'Today' },
|
|
@@ -1173,7 +1173,7 @@ export { ActivityComponent };
|
|
|
1173
1173
|
type: Component,
|
|
1174
1174
|
args: [{ standalone: false, selector: 'app-integration-activity', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integration Activity\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Sync run history and outcomes\">\n <!-- [meta] retains the succeeded/failed status pills (genuine variant\n signal \u2014 error rate at a glance) and the records aggregate\n (non-trivially derived: count of records across all runs).\n \"Total runs\" dropped per chrome slot discipline audit Task B \u2014\n that count equals the visible list's row count. -->\n @if (!IsLoading && AllRuns.length > 0) {\n <div meta>\n <mj-stat-badge [Count]=\"SuccessfulRuns\" Label=\"succeeded\" Variant=\"success\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"FailedRuns\" Label=\"failed\" Variant=\"error\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"TotalRecordsProcessed | number\" Label=\"records\"></mj-stat-badge>\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"Refresh()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search integrations...\"\n [Value]=\"SearchQuery\"\n (ValueChange)=\"OnSearchValueChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ResetIntegrationFilter()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n (Reset)=\"ResetIntegrationFilter()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\">\n<div class=\"activity-container\">\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-area\">\n <mj-loading text=\"Loading activity...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && FilteredRuns.length === 0) {\n <mj-empty-state Variant=\"no-results\" Icon=\"fa-solid fa-inbox\"\n Title=\"No runs found for the selected filters.\" />\n }\n\n <!-- Split View: Run List + Detail Panel -->\n @if (!IsLoading && FilteredRuns.length > 0) {\n <div class=\"split-view\">\n\n <!-- Left panel: Run list -->\n <div class=\"run-list-panel\">\n @for (run of FilteredRuns; track run.ID) {\n <!-- Run row \u2192 accordion panel. The title slot carries the run's status +\n integration + meta columns; the accordion toggle reveals the entity\n breakdown (formerly the chevron's ToggleExpand). SelectRun (the\n right-hand detail panel) moves to the header actions slot, since the\n accordion header click now owns expand/collapse.\n Side-effecting handler (ToggleExpand async-loads the breakdown) +\n Default CD \u2192 [Expanded] + (ExpandedChange). -->\n <mj-accordion-panel class=\"run-panel\"\n [class.selected]=\"IsSelectedRun(run.ID)\"\n Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"IsExpanded(run.ID)\"\n (ExpandedChange)=\"ToggleExpand(run.ID)\">\n <ng-template mjAccordionTitle>\n <!-- Status indicator -->\n <span [class]=\"GetStatusDotClass(run.Status)\"></span>\n <i [class]=\"GetStatusIcon(run.Status)\"\n [class.icon-green]=\"run.Status === 'Success'\"\n [class.icon-red]=\"run.Status === 'Failed'\"\n [class.icon-amber]=\"run.Status === 'In Progress'\"\n [class.icon-gray]=\"run.Status === 'Pending'\"\n class=\"status-icon\"></i>\n\n <!-- Integration info -->\n <div class=\"run-info\">\n <span class=\"run-integration\">{{ run.Integration }}</span>\n <span class=\"run-company\">{{ run.Company }}</span>\n </div>\n\n <!-- Started time -->\n <div class=\"run-meta\" [title]=\"FormatAbsoluteDate(run.StartedAt)\">\n {{ GetRelativeTime(run.StartedAt) }}\n </div>\n\n <!-- Duration -->\n <div class=\"run-meta run-duration\">\n {{ FormatDuration(run.StartedAt, run.EndedAt) }}\n </div>\n\n <!-- Records -->\n <div class=\"run-meta run-records\">\n {{ run.TotalRecords | number }}\n </div>\n\n <!-- Errors -->\n <div class=\"run-meta run-errors\" [class.has-errors]=\"run.ErrorLog\">\n @if (run.ErrorLog) {\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n }\n </div>\n\n <!-- Triggered by -->\n <div class=\"run-meta run-user\">\n {{ run.RunByUser || 'Scheduled' }}\n </div>\n </ng-template>\n\n <!-- Open/close the right-hand detail panel (entity breakdown +\n watermarks). Lives in the actions slot because the accordion\n header click is now the expand/collapse toggle. -->\n <ng-template mjAccordionActions>\n <button type=\"button\" class=\"detail-toggle-btn\"\n [class.active]=\"IsSelectedRun(run.ID)\"\n (click)=\"SelectRun(run.ID)\"\n title=\"Show run detail panel\">\n <i class=\"fa-solid fa-table-columns\"></i>\n </button>\n </ng-template>\n\n <!-- Expanded section: entity breakdown (lazy body) -->\n <ng-template mjAccordionBody>\n <div class=\"expanded-section\">\n @if (IsLoadingExpandedDetails()) {\n <div class=\"expanded-loading\">\n <mj-loading text=\"Loading breakdown...\" size=\"small\"></mj-loading>\n </div>\n } @else if (GetExpandedDetails().length === 0) {\n <mj-empty-state class=\"expanded-empty\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No entity details for this run.\" />\n } @else {\n <table class=\"entity-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th class=\"num-col\">Processed</th>\n <th class=\"num-col\">Created</th>\n <th class=\"num-col\">Updated</th>\n <th class=\"num-col\">Deleted</th>\n <th class=\"num-col\">Errored</th>\n <th class=\"num-col\">Skipped</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of GetExpandedDetails(); track detail.EntityID) {\n <tr [class.error-row]=\"detail.RecordsErrored > 0\">\n <td>{{ detail.Entity }}</td>\n <td class=\"num-col\">{{ detail.RecordsProcessed | number }}</td>\n <td class=\"num-col created-col\">{{ detail.RecordsCreated | number }}</td>\n <td class=\"num-col updated-col\">{{ detail.RecordsUpdated | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsDeleted | number }}</td>\n <td class=\"num-col error-col\">{{ detail.RecordsErrored | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsSkipped | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Error log in expanded view -->\n @if (run.ErrorLog) {\n <div class=\"error-log-block\">\n <div class=\"error-log-label\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error Log\n </div>\n <pre class=\"error-log-content\">{{ run.ErrorLog }}</pre>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n\n <!-- Right panel: Detail -->\n @if (SelectedRunID && GetSelectedRun()) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-header-info\">\n <h3>{{ GetSelectedRun()!.Integration }}</h3>\n <span [class]=\"StatusChipClass(GetSelectedRun()!.Status)\">\n <i [class]=\"GetStatusIcon(GetSelectedRun()!.Status)\"></i>\n {{ GetSelectedRun()!.Status }}\n </span>\n <span class=\"detail-time\">{{ FormatDate(GetSelectedRun()!.StartedAt) }}</span>\n </div>\n <button class=\"close-detail-btn\" (click)=\"SelectRun(SelectedRunID!)\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Duration bar -->\n @if (GetSelectedRun()!.StartedAt && GetSelectedRun()!.EndedAt) {\n <div class=\"duration-bar-container\">\n <div class=\"duration-bar-track\">\n <div class=\"duration-bar-fill\"\n [style.width.%]=\"GetDurationBarWidth(GetSelectedRun()!)\"></div>\n </div>\n <div class=\"duration-bar-labels\">\n <span>{{ FormatDate(GetSelectedRun()!.StartedAt) }}</span>\n <span class=\"duration-bar-value\">{{ GetDurationBarLabel(GetSelectedRun()!) }}</span>\n <span>{{ FormatDate(GetSelectedRun()!.EndedAt) }}</span>\n </div>\n </div>\n }\n\n <!-- Tabs -->\n <div class=\"detail-tabs\">\n <button class=\"tab-btn\" [class.active]=\"ActiveDetailTab === 'entities'\"\n (click)=\"SetDetailTab('entities')\">\n <i class=\"fa-solid fa-table\"></i> Entity Breakdown\n </button>\n <button class=\"tab-btn\" [class.active]=\"ActiveDetailTab === 'watermarks'\"\n (click)=\"SetDetailTab('watermarks')\">\n <i class=\"fa-solid fa-droplet\"></i> Watermarks\n </button>\n </div>\n\n <div class=\"detail-content\">\n <!-- Entity breakdown tab -->\n @if (ActiveDetailTab === 'entities') {\n @if (IsLoadingDetail) {\n <div class=\"detail-loading\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </div>\n } @else if (SelectedRunDetails.length === 0) {\n <mj-empty-state class=\"detail-empty\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No entity detail records for this run.\" />\n } @else {\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th class=\"num-col\">Processed</th>\n <th class=\"num-col\">Created</th>\n <th class=\"num-col\">Updated</th>\n <th class=\"num-col\">Deleted</th>\n <th class=\"num-col\">Errors</th>\n <th class=\"num-col\">Skipped</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of SelectedRunDetails; track detail.EntityID) {\n <tr [class.error-row]=\"detail.RecordsErrored > 0\">\n <td>{{ detail.Entity }}</td>\n <td class=\"num-col\">{{ detail.RecordsProcessed | number }}</td>\n <td class=\"num-col created-col\">{{ detail.RecordsCreated | number }}</td>\n <td class=\"num-col updated-col\">{{ detail.RecordsUpdated | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsDeleted | number }}</td>\n <td class=\"num-col error-col\">{{ detail.RecordsErrored | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsSkipped | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Error log -->\n @if (GetSelectedRun()?.ErrorLog) {\n <div class=\"error-log-block detail-error-log\">\n <div class=\"error-log-label\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error Log\n </div>\n <pre class=\"error-log-content\">{{ GetSelectedRun()!.ErrorLog }}</pre>\n </div>\n }\n }\n\n <!-- Watermarks tab -->\n @if (ActiveDetailTab === 'watermarks') {\n @if (IsLoadingWatermarks) {\n <div class=\"detail-loading\">\n <mj-loading text=\"Loading watermarks...\" size=\"small\"></mj-loading>\n </div>\n } @else if (WatermarkData.length === 0) {\n <mj-empty-state class=\"detail-empty\" Size=\"compact\" Icon=\"fa-solid fa-droplet-slash\"\n Title=\"No watermarks recorded for this integration.\" />\n } @else {\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity Map</th>\n <th>Type</th>\n <th>Current Value</th>\n <th>Last Applied</th>\n </tr>\n </thead>\n <tbody>\n @for (wm of WatermarkData; track wm.ID) {\n <tr>\n <td>{{ wm.EntityMap }}</td>\n <td><span class=\"type-badge\">{{ wm.WatermarkType }}</span></td>\n <td class=\"mono-cell watermark-value\">{{ FormatWatermark(wm.WatermarkValue) }}</td>\n <td>{{ FormatDate(wm.LastSyncAt) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n }\n </div>\n </div>\n }\n\n </div>\n }\n\n</div>\n </mj-page-body>\n</mj-page-layout>\n", styles: [":host {\n display: block;\n height: 100%;\n}\n\n.activity-container {\n /* padding / scroll now owned by <mj-page-body>; flex sizing keeps the\n inner split-view (flex: 1 + min-height: 0) able to fill remaining height. */\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n gap: 14px;\n}\n\n/* Slot passthrough now lives in <mj-page-header>'s SCSS; per-section\n .integration-header-* rules deleted. Stat badge styling now lives in\n <mj-stat-badge>; per-section .integration-stat-badge* rules deleted. */\n\n/* Vertical separator between distinct chip groups in the toolbar slot. */\n.toolbar-divider {\n display: inline-block;\n width: 1px;\n height: 18px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n/* \u2500\u2500 Loading / Empty \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.loading-area {\n display: flex;\n justify-content: center;\n padding: 48px;\n}\n\n/* \u2500\u2500 Split View \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.split-view {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* \u2500\u2500 Run List Panel (left 70%) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.run-list-panel {\n flex: 7;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n/* Run rows are now <mj-accordion-panel> (Size=\"sm\", FlushBody). The accordion\n owns the header chrome + chevron + hover, so the old .run-row / .run-row-main /\n .expand-btn wrappers were removed. We keep only the selection highlight: the\n run whose detail panel is open on the right tints its accordion header row. */\n.run-panel.selected ::ng-deep .mj-accordion-header-row {\n background: var(--mj-status-info-bg);\n}\n\n/* Status indicator */\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.status-icon {\n font-size: 14px;\n width: 16px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.icon-green { color: var(--mj-color-success-600); }\n.icon-red { color: var(--mj-status-error); }\n.icon-amber { color: var(--mj-status-warning); }\n.icon-gray { color: var(--mj-text-disabled); }\n\n/* Run info */\n.run-info {\n flex: 2;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.run-integration {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.run-company {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n/* Meta columns */\n.run-meta {\n flex-shrink: 0;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n min-width: 60px;\n text-align: right;\n}\n\n.run-duration {\n font-variant-numeric: tabular-nums;\n min-width: 56px;\n}\n\n.run-records {\n font-variant-numeric: tabular-nums;\n min-width: 48px;\n}\n\n.run-errors {\n min-width: 24px;\n text-align: center;\n}\n\n.run-errors.has-errors {\n color: var(--mj-status-error);\n}\n\n.run-user {\n min-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Detail-panel toggle in the accordion header actions slot (formerly the\n row-level SelectRun click). Reuses the old .expand-btn affordance. */\n.detail-toggle-btn {\n background: none;\n border: none;\n cursor: pointer;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n transition: background 0.15s, color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-toggle-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.detail-toggle-btn.active {\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Expanded Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.expanded-section {\n /* Now the accordion body content (FlushBody \u2192 it provides its own padding).\n border-top removed: the accordion's expanded header-row already draws the\n header/body separator. */\n padding: 8px 14px 14px 48px;\n background: var(--mj-bg-page);\n}\n\n.expanded-loading,\n.expanded-empty {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n width: 100%;\n}\n\n.expanded-empty i {\n margin-right: 6px;\n}\n\n.entity-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.entity-table th {\n text-align: left;\n padding: 6px 8px;\n color: var(--mj-text-disabled);\n font-weight: 600;\n font-size: 11px;\n border-bottom: 1px solid var(--mj-border-default);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.entity-table td {\n padding: 5px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-table .num-col,\n.detail-table .num-col {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.entity-table .created-col,\n.detail-table .created-col {\n color: var(--mj-color-success-600);\n font-weight: 600;\n}\n\n.entity-table .updated-col,\n.detail-table .updated-col {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-table .error-col,\n.detail-table .error-col {\n color: var(--mj-color-error-600);\n font-weight: 600;\n}\n\n.error-row {\n background: var(--mj-status-error-bg);\n}\n\n/* \u2500\u2500 Error Log Block \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.error-log-block {\n margin-top: 10px;\n}\n\n.error-log-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-color-error-600);\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.error-log-content {\n margin: 0;\n padding: 10px 12px;\n background: var(--mj-text-primary);\n color: var(--mj-bg-surface-sunken);\n font-family: 'SF Mono', 'Menlo', 'Consolas', monospace;\n font-size: 11px;\n border-radius: 8px;\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 200px;\n overflow-y: auto;\n line-height: 1.5;\n}\n\n.detail-error-log {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* \u2500\u2500 Detail Panel (right 30%) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.detail-panel {\n flex: 3;\n min-width: 340px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n gap: 12px;\n}\n\n.detail-header-info {\n display: flex;\n flex-direction: column;\n gap: 6px;\n min-width: 0;\n}\n\n.detail-header-info h3 {\n margin: 0;\n font-size: 15px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.detail-time {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.close-detail-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 16px;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.close-detail-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n/* Duration bar */\n.duration-bar-container {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.duration-bar-track {\n height: 6px;\n background: var(--mj-bg-surface-active);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.duration-bar-fill {\n height: 100%;\n background: linear-gradient(90deg, var(--mj-brand-primary), var(--mj-color-accent-400));\n border-radius: 3px;\n transition: width 0.3s;\n}\n\n.duration-bar-labels {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 4px;\n font-size: 10px;\n color: var(--mj-text-disabled);\n}\n\n.duration-bar-value {\n font-weight: 700;\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n/* Tabs */\n.detail-tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 0 16px;\n gap: 2px;\n}\n\n.tab-btn {\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n padding: 10px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 5px;\n transition: color 0.15s, border-color 0.15s;\n}\n\n.tab-btn:hover {\n color: var(--mj-brand-primary);\n}\n\n.tab-btn.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n/* Detail content area */\n.detail-content {\n flex: 1;\n overflow-y: auto;\n}\n\n.detail-loading,\n.detail-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n width: 100%;\n}\n\n.detail-empty i {\n font-size: 24px;\n margin-bottom: 8px;\n display: block;\n}\n\n.detail-empty p {\n margin: 0;\n font-size: 13px;\n}\n\n.detail-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.detail-table th {\n text-align: left;\n padding: 8px 10px;\n color: var(--mj-text-disabled);\n font-weight: 600;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n font-size: 11px;\n}\n\n.detail-table td {\n padding: 7px 10px;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.mono-cell {\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.watermark-value {\n font-family: 'SF Mono', 'Menlo', 'Consolas', monospace;\n font-size: 11px;\n}\n\n/* Status chips */\n.chip {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n white-space: nowrap;\n}\n\n.chip-green { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.chip-red { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n.chip-amber { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n.chip-gray { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n\n/* Watermark type badge */\n.type-badge {\n display: inline-flex;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n@media (max-width: 900px) {\n .split-view {\n flex-direction: column;\n }\n\n .detail-panel {\n min-width: 0;\n max-height: 50vh;\n }\n\n .run-user {\n display: none;\n }\n}\n"] }]
|
|
1175
1175
|
}], null, null); })();
|
|
1176
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActivityComponent, { className: "ActivityComponent", filePath: "src/Integration/components/activity/activity.component.ts", lineNumber:
|
|
1176
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActivityComponent, { className: "ActivityComponent", filePath: "src/Integration/components/activity/activity.component.ts", lineNumber: 55 }); })();
|
|
1177
1177
|
export function LoadActivityComponent() {
|
|
1178
1178
|
// Tree-shaking prevention: importing this module causes
|
|
1179
1179
|
// @RegisterClass decorators to fire, registering components.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/activity/activity.component.ts","../../../../src/Integration/components/activity/activity.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, AfterViewInit, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { CompositeKey, IRunViewProvider, RunView } from '@memberjunction/core';\nimport {\n IntegrationDataService,\n IntegrationSummary,\n IntegrationRunRow,\n RunDetailRow,\n EntityMapRow,\n} from '../../services/integration-data.service';\nimport {\n buildActivityAgentContext,\n resolveIntegrationSurface,\n navLabelForSurface,\n resolveIntegrationRecord,\n buildIntegrationNotFoundError,\n ActivityRunSummary,\n NamedIntegrationRecord,\n} from '../../integration-agent-context';\nimport { AgentToolResult, validateEnumParam, validateStringParam } from '../../../shared/agent-tool-validation';\n\ntype StatusFilterType = 'All' | 'Success' | 'Failed' | 'In Progress' | 'Pending';\ntype DateFilterType = 'today' | '7d' | '30d' | 'all';\n\ninterface WatermarkRow {\n ID: string;\n EntityMapID: string;\n WatermarkType: string;\n WatermarkValue: string | null;\n LastSyncAt: string | null;\n EntityMap: string;\n}\n\ninterface IntegrationOption {\n ID: string;\n Name: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'IntegrationActivity')\n@Component({\n standalone: false,\n selector: 'app-integration-activity',\n templateUrl: './activity.component.html',\n styleUrls: ['./activity.component.css']\n})\nexport class ActivityComponent extends BaseResourceComponent implements OnInit, AfterViewInit {\n\n // Data\n AllRuns: IntegrationRunRow[] = [];\n FilteredRuns: IntegrationRunRow[] = [];\n Summaries: IntegrationSummary[] = [];\n Integrations: IntegrationOption[] = [];\n SelectedRunID: string | null = null;\n SelectedRunDetails: RunDetailRow[] = [];\n WatermarkData: WatermarkRow[] = [];\n IsLoading = true;\n IsLoadingDetail = false;\n\n // Filters\n StatusFilter: StatusFilterType = 'All';\n IntegrationFilter: string | null = null;\n DateFilter: DateFilterType = '7d';\n SearchQuery = '';\n ExpandedRunID: string | null = null;\n\n // Expanded row details cache\n private expandedDetails: RunDetailRow[] = [];\n private isLoadingExpanded = false;\n\n // Detail panel tab\n ActiveDetailTab: 'entities' | 'watermarks' = 'entities';\n IsLoadingWatermarks = false;\n\n StatusOptions: StatusFilterType[] = ['All', 'Success', 'Failed', 'In Progress', 'Pending'];\n DateOptions: { Value: DateFilterType; Label: string }[] = [\n { Value: 'all', Label: 'All' },\n { Value: 'today', Label: 'Today' },\n { Value: '7d', Label: '7 Days' },\n { Value: '30d', Label: '30 Days' }\n ];\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.dataService.Provider = this.ProviderToUse;\n await this.LoadData();\n this.NotifyLoadComplete();\n }\n\n // ── Data Loading ──────────────────────────────────────────\n\n async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n const provider = this.RunViewToUse;\n const [summaries, runs] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllRuns(provider)\n ]);\n this.Summaries = summaries;\n this.Integrations = this.buildIntegrationOptions(summaries);\n this.AllRuns = runs;\n this.ApplyFilters();\n } catch (err) {\n console.error('[IntegrationActivity] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadAllRuns(provider: IRunViewProvider | null): Promise<IntegrationRunRow[]> {\n const rv = new RunView(provider ?? null);\n const result = await rv.RunView<IntegrationRunRow>({\n EntityName: 'MJ: Company Integration Runs',\n ExtraFilter: '',\n OrderBy: 'StartedAt DESC',\n MaxRows: 200,\n Fields: ['ID', 'CompanyIntegrationID', 'StartedAt', 'EndedAt', 'TotalRecords',\n 'Status', 'ErrorLog', 'Integration', 'Company', 'RunByUser'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private buildIntegrationOptions(summaries: IntegrationSummary[]): IntegrationOption[] {\n return summaries.map(s => ({\n ID: s.Integration.ID,\n Name: `${s.Integration.Integration} (${s.Integration.Company})`\n }));\n }\n\n async LoadRunDetails(runID: string): Promise<RunDetailRow[]> {\n try {\n return await this.dataService.LoadRunDetails(runID, this.RunViewToUse);\n } catch (err) {\n console.error('[IntegrationActivity] Failed to load run details:', err);\n return [];\n }\n }\n\n async LoadWatermarks(companyIntegrationID: string): Promise<void> {\n this.IsLoadingWatermarks = true;\n this.cdr.detectChanges();\n try {\n this.WatermarkData = await this.loadWatermarkData(companyIntegrationID);\n } catch (err) {\n console.error('[IntegrationActivity] Failed to load watermarks:', err);\n } finally {\n this.IsLoadingWatermarks = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadWatermarkData(companyIntegrationID: string): Promise<WatermarkRow[]> {\n const entityMaps = await this.dataService.LoadEntityMaps(companyIntegrationID, this.RunViewToUse);\n if (entityMaps.length === 0) return [];\n\n const entityMapIDs = entityMaps.map(m => `'${m.ID}'`).join(',');\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<WatermarkRow>({\n EntityName: 'MJ: Company Integration Sync Watermarks',\n ExtraFilter: `EntityMapID IN (${entityMapIDs})`,\n OrderBy: 'LastSyncAt DESC',\n Fields: ['ID', 'EntityMapID', 'WatermarkType', 'WatermarkValue', 'LastSyncAt'],\n ResultType: 'simple'\n });\n\n return this.mergeWatermarksWithEntityMaps(result.Results, entityMaps);\n }\n\n private mergeWatermarksWithEntityMaps(\n watermarks: WatermarkRow[],\n entityMaps: EntityMapRow[]\n ): WatermarkRow[] {\n const mapLookup = new Map(entityMaps.map(m => [m.ID.toLowerCase(), m]));\n return watermarks.map(w => ({\n ...w,\n EntityMap: mapLookup.get(w.EntityMapID?.toLowerCase())?.ExternalObjectName ?? w.EntityMapID\n }));\n }\n\n // ── Filtering ─────────────────────────────────────────────\n\n ApplyFilters(): void {\n let filtered = this.AllRuns;\n filtered = this.filterByStatus(filtered);\n filtered = this.filterByIntegration(filtered);\n filtered = this.filterByDate(filtered);\n filtered = this.filterBySearch(filtered);\n this.FilteredRuns = filtered;\n this.emitAgentContext();\n }\n\n // ---------------------------------------------------------------------------\n // AI Agent Context & Client Tools\n //\n // 🔒 SAFETY BOUNDARY: The Activity surface exposes ONLY read-only filter /\n // search / select / open-record / navigation / refresh tools to the agent\n // (SwitchIntegrationSurface, FilterActivityByStatus / ByTimeRange / ByIntegration,\n // SearchActivity, ClearActivityFilters, SelectActivityRun, OpenActivityRunRecord,\n // RefreshIntegrationData). It deliberately does NOT expose any sync trigger\n // (RunSync — a LIVE external sync), nor any mutation of mappings, schedules, or\n // credentials. SelectActivityRun opens the read-only detail panel;\n // OpenActivityRunRecord opens the run record in a tab for VIEWING (not editing).\n // The agent can narrow what's shown and select/open runs; the user performs\n // every mutating action from the UI.\n // ---------------------------------------------------------------------------\n\n ngAfterViewInit(): void {\n this.emitAgentContext();\n this.registerAgentTools();\n }\n\n private emitAgentContext(): void {\n const kpis = this.dataService.ComputeKPIs(this.Summaries);\n const selectedRun = this.GetSelectedRun();\n const context = buildActivityAgentContext({\n KPIs: {\n TotalIntegrations: kpis.TotalIntegrations,\n ActiveSyncs: kpis.ActiveSyncs,\n RecordsSyncedToday: kpis.RecordsSyncedToday,\n SyncErrorRate: kpis.ErrorRate,\n PipelineCount: 0,\n ScheduledSyncCount: 0,\n },\n IsLoading: this.IsLoading,\n StatusFilter: this.StatusFilter,\n DateFilter: this.DateFilter,\n IntegrationFilterName: this.resolveIntegrationFilterName(),\n SearchQuery: this.SearchQuery,\n FilteredRunCount: this.FilteredRuns.length,\n TotalRunCount: this.AllRuns.length,\n SuccessfulRunCount: this.SuccessfulRuns,\n FailedRunCount: this.FailedRuns,\n TotalRecordsProcessed: this.TotalRecordsProcessed,\n VisibleRuns: this.FilteredRuns.map(r => this.buildRunSummary(r)),\n SelectedRunId: this.SelectedRunID,\n SelectedRunName: selectedRun ? this.runLabel(selectedRun) : null,\n AvailableIntegrationNames: this.Integrations.map(i => i.Name),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SwitchIntegrationSurface',\n Description: 'Switch to a different Integration surface. Valid surfaces: Overview, Connections, Activity, Schedules.',\n ParameterSchema: { type: 'object', properties: { surface: { type: 'string' } }, required: ['surface'] },\n Handler: async (params: Record<string, unknown>) => this.toolSwitchSurface(params),\n },\n {\n Name: 'FilterActivityByStatus',\n Description: 'Filter the run-activity list by status. Valid: All, Success, Failed, In Progress, Pending.',\n ParameterSchema: { type: 'object', properties: { status: { type: 'string' } }, required: ['status'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByStatus(params),\n },\n {\n Name: 'FilterActivityByTimeRange',\n Description: 'Filter the run-activity list by time range. Valid: today, 7d, 30d, all.',\n ParameterSchema: { type: 'object', properties: { range: { type: 'string' } }, required: ['range'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByTimeRange(params),\n },\n {\n Name: 'FilterActivityByIntegration',\n Description: 'Filter the run-activity list to a single integration. Accepts the integration ID or name (exact or partial), or \"all\" to clear.',\n ParameterSchema: { type: 'object', properties: { integration: { type: 'string' } }, required: ['integration'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByIntegration(params),\n },\n {\n Name: 'SearchActivity',\n Description: 'Search the run-activity list by integration or company name.',\n ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },\n Handler: async (params: Record<string, unknown>) => this.toolSearch(params),\n },\n {\n Name: 'ClearActivityFilters',\n Description: 'Reset the run-activity filters (status → All, time range → 7d, integration → all, search cleared).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetIntegrationFilter();\n this.OnSearchValueChange('');\n return { Success: true };\n },\n },\n {\n Name: 'SelectActivityRun',\n Description: 'Open the detail panel for a run. Accepts the run ID or a run label (integration/company/status, exact or partial).',\n ParameterSchema: { type: 'object', properties: { run: { type: 'string' } }, required: ['run'] },\n Handler: async (params: Record<string, unknown>) => this.toolSelectRun(params),\n },\n {\n Name: 'OpenActivityRunRecord',\n Description: 'Open a company-integration-run record in a tab for viewing. Accepts the run ID or a run label (exact or partial).',\n ParameterSchema: { type: 'object', properties: { run: { type: 'string' } }, required: ['run'] },\n Handler: async (params: Record<string, unknown>) => this.toolOpenRunRecord(params),\n },\n {\n Name: 'RefreshIntegrationData',\n Description: 'Reload the integration run-activity history.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.LoadData();\n return { Success: true };\n },\n },\n ]);\n }\n\n private async toolSwitchSurface(params: Record<string, unknown>): Promise<AgentToolResult> {\n const surface = resolveIntegrationSurface(params['surface']);\n if (!surface) {\n return { Success: false, ErrorMessage: 'Invalid surface. Expected one of: Overview, Connections, Activity, Schedules.' };\n }\n const tabId = await this.navigationService.OpenNavItemByName(navLabelForSurface(surface));\n if (!tabId) {\n return { Success: false, ErrorMessage: `Could not open the \"${surface}\" surface.` };\n }\n return { Success: true };\n }\n\n private toolFilterByStatus(params: Record<string, unknown>): AgentToolResult {\n const check = validateEnumParam<StatusFilterType>(params['status'], this.StatusOptions, 'status');\n if (!check.ok) {\n return check.result;\n }\n this.SetStatusFilter(check.value);\n return { Success: true };\n }\n\n private toolFilterByTimeRange(params: Record<string, unknown>): AgentToolResult {\n const allowed = this.DateOptions.map(d => d.Value);\n const check = validateEnumParam<DateFilterType>(params['range'], allowed, 'range');\n if (!check.ok) {\n return check.result;\n }\n this.SetDateFilter(check.value);\n return { Success: true };\n }\n\n private toolFilterByIntegration(params: Record<string, unknown>): AgentToolResult {\n const check = validateStringParam(params['integration'], 'integration');\n if (!check.ok) {\n return check.result;\n }\n if (check.value.trim().toLowerCase() === 'all') {\n this.SetIntegrationFilter(null);\n return { Success: true };\n }\n const candidates: NamedIntegrationRecord[] = this.Integrations.map(i => ({ ID: i.ID, Name: i.Name }));\n const match = resolveIntegrationRecord(check.value, candidates);\n if (!match) {\n return { Success: false, ErrorMessage: buildIntegrationNotFoundError(check.value, candidates, 'integration') };\n }\n this.SetIntegrationFilter(match.ID);\n return { Success: true };\n }\n\n private toolSearch(params: Record<string, unknown>): AgentToolResult {\n const check = validateStringParam(params['query'], 'query');\n if (!check.ok) {\n return check.result;\n }\n this.OnSearchValueChange(check.value);\n return { Success: true };\n }\n\n private async toolSelectRun(params: Record<string, unknown>): Promise<AgentToolResult> {\n const match = this.resolveRunFromParam(params['run']);\n if (!match.ok) {\n return match.result;\n }\n // SelectRun toggles; only open when not already the selected run.\n if (!UUIDsEqual(this.SelectedRunID, match.value.ID)) {\n await this.SelectRun(match.value.ID);\n }\n this.emitAgentContext();\n return { Success: true };\n }\n\n private toolOpenRunRecord(params: Record<string, unknown>): AgentToolResult {\n const match = this.resolveRunFromParam(params['run']);\n if (!match.ok) {\n return match.result;\n }\n this.navigationService.OpenEntityRecord('MJ: Company Integration Runs', CompositeKey.FromID(match.value.ID));\n return { Success: true };\n }\n\n /** Resolve an agent-supplied run reference (id or label) against the loaded runs. */\n private resolveRunFromParam(\n raw: unknown,\n ): { ok: true; value: IntegrationRunRow } | { ok: false; result: AgentToolResult } {\n const check = validateStringParam(raw, 'run');\n if (!check.ok) {\n return { ok: false, result: check.result };\n }\n const candidates: NamedIntegrationRecord[] = this.AllRuns.map(r => ({ ID: r.ID, Name: this.runLabel(r) }));\n const match = resolveIntegrationRecord(check.value, candidates);\n if (!match) {\n return { ok: false, result: { Success: false, ErrorMessage: buildIntegrationNotFoundError(check.value, candidates, 'run') } };\n }\n const run = this.AllRuns.find(r => UUIDsEqual(r.ID, match.ID));\n if (!run) {\n return { ok: false, result: { Success: false, ErrorMessage: buildIntegrationNotFoundError(check.value, candidates, 'run') } };\n }\n return { ok: true, value: run };\n }\n\n /** Human-readable label for a run row, used for agent name-resolution + context. */\n private runLabel(run: IntegrationRunRow): string {\n const who = run.Integration ?? 'Integration';\n const company = run.Company ? ` (${run.Company})` : '';\n return `${who}${company} · ${run.Status}`;\n }\n\n private buildRunSummary(run: IntegrationRunRow): ActivityRunSummary {\n return {\n ID: run.ID,\n Name: this.runLabel(run),\n Status: run.Status,\n TotalRecords: run.TotalRecords,\n When: this.dataService.ComputeRelativeTime(run.StartedAt),\n };\n }\n\n /** Resolve the active integration-filter ID to its display name, or null. */\n private resolveIntegrationFilterName(): string | null {\n if (!this.IntegrationFilter) {\n return null;\n }\n return this.Integrations.find(i => UUIDsEqual(i.ID, this.IntegrationFilter))?.Name ?? null;\n }\n\n private filterByStatus(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n if (this.StatusFilter === 'All') return runs;\n return runs.filter(r => r.Status === this.StatusFilter);\n }\n\n private filterByIntegration(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n if (!this.IntegrationFilter) return runs;\n return runs.filter(r => UUIDsEqual(r.CompanyIntegrationID, this.IntegrationFilter));\n }\n\n private filterByDate(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n const cutoff = this.getDateCutoff(this.DateFilter);\n if (!cutoff) return runs;\n return runs.filter(r => r.StartedAt && new Date(r.StartedAt) >= cutoff);\n }\n\n private filterBySearch(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n if (!this.SearchQuery.trim()) return runs;\n const query = this.SearchQuery.toLowerCase().trim();\n return runs.filter(r =>\n r.Integration?.toLowerCase().includes(query) ||\n r.Company?.toLowerCase().includes(query)\n );\n }\n\n private getDateCutoff(range: DateFilterType): Date | null {\n if (range === 'all') return null;\n const now = new Date();\n if (range === 'today') {\n const today = new Date(now);\n today.setHours(0, 0, 0, 0);\n return today;\n }\n const days = range === '7d' ? 7 : 30;\n const cutoff = new Date(now);\n cutoff.setDate(cutoff.getDate() - days);\n return cutoff;\n }\n\n SetStatusFilter(status: StatusFilterType): void {\n this.StatusFilter = status;\n this.ApplyFilters();\n }\n\n SetDateFilter(range: DateFilterType): void {\n this.DateFilter = range;\n this.ApplyFilters();\n }\n\n SetIntegrationFilter(id: string | null): void {\n this.IntegrationFilter = id;\n this.ApplyFilters();\n }\n\n OnSearchChange(): void {\n this.ApplyFilters();\n }\n\n /** Bridge for <mj-page-search> which emits a plain string. */\n OnSearchValueChange(value: string): void {\n this.SearchQuery = value;\n this.ApplyFilters();\n }\n\n // ---- Integration filter popover wiring ---------------------------------\n\n get ActivityFilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'dateRange',\n type: 'chips',\n label: 'Date range',\n chipOptions: this.DateOptions.map(d => ({ text: d.Label, value: d.Value })),\n },\n {\n key: 'status',\n type: 'chips',\n label: 'Status',\n chipOptions: this.StatusOptions.map(s => ({ text: s, value: s })),\n },\n {\n key: 'integration',\n type: 'dropdown',\n label: 'Integration',\n icon: 'fa-solid fa-plug',\n placeholder: 'All Integrations',\n filterable: this.Integrations.length > 10,\n options: [\n { text: 'All Integrations', value: '' },\n ...this.Integrations.map(i => ({ text: i.Name, value: i.ID })),\n ],\n },\n ];\n }\n\n get ActivityFilterValues(): Record<string, unknown> {\n return {\n dateRange: this.DateFilter,\n status: this.StatusFilter,\n integration: this.IntegrationFilter ?? ''\n };\n }\n\n get ActiveFilterCount(): number {\n let count = 0;\n if (this.DateFilter !== '7d') count++;\n if (this.StatusFilter !== 'All') count++;\n if (this.IntegrationFilter) count++;\n return count;\n }\n\n OnFilterValuesChange(values: Record<string, unknown>): void {\n const next = (values ?? {}) as { dateRange?: string; status?: string; integration?: string };\n if (next.dateRange && next.dateRange !== this.DateFilter) {\n this.SetDateFilter(next.dateRange as DateFilterType);\n }\n if (next.status && next.status !== this.StatusFilter) {\n this.SetStatusFilter(next.status as StatusFilterType);\n }\n const integ = next.integration ?? '';\n if ((integ || null) !== this.IntegrationFilter) {\n this.SetIntegrationFilter(integ || null);\n }\n }\n\n ResetIntegrationFilter(): void {\n if (this.DateFilter !== '7d') this.SetDateFilter('7d');\n if (this.StatusFilter !== 'All') this.SetStatusFilter('All');\n if (this.IntegrationFilter) this.SetIntegrationFilter(null);\n }\n\n async Refresh(): Promise<void> {\n await this.LoadData();\n }\n\n // ── Run Selection & Expansion ─────────────────────────────\n\n async SelectRun(runID: string): Promise<void> {\n if (UUIDsEqual(this.SelectedRunID, runID)) {\n this.SelectedRunID = null;\n this.SelectedRunDetails = [];\n this.WatermarkData = [];\n this.emitAgentContext();\n return;\n }\n this.SelectedRunID = runID;\n this.ActiveDetailTab = 'entities';\n this.IsLoadingDetail = true;\n this.cdr.detectChanges();\n this.emitAgentContext();\n\n const run = this.findRunByID(runID);\n try {\n this.SelectedRunDetails = await this.LoadRunDetails(runID);\n if (run) {\n await this.LoadWatermarks(run.CompanyIntegrationID);\n }\n } finally {\n this.IsLoadingDetail = false;\n this.cdr.detectChanges();\n }\n }\n\n async ToggleExpand(runID: string): Promise<void> {\n if (UUIDsEqual(this.ExpandedRunID, runID)) {\n this.ExpandedRunID = null;\n this.expandedDetails = [];\n return;\n }\n this.ExpandedRunID = runID;\n this.isLoadingExpanded = true;\n this.cdr.detectChanges();\n try {\n this.expandedDetails = await this.LoadRunDetails(runID);\n } finally {\n this.isLoadingExpanded = false;\n this.cdr.detectChanges();\n }\n }\n\n IsExpanded(runID: string): boolean {\n return UUIDsEqual(this.ExpandedRunID, runID);\n }\n\n IsSelectedRun(runID: string): boolean {\n return UUIDsEqual(this.SelectedRunID, runID);\n }\n\n GetExpandedDetails(): RunDetailRow[] {\n return this.expandedDetails;\n }\n\n IsLoadingExpandedDetails(): boolean {\n return this.isLoadingExpanded;\n }\n\n GetSelectedRun(): IntegrationRunRow | null {\n return this.findRunByID(this.SelectedRunID);\n }\n\n SetDetailTab(tab: 'entities' | 'watermarks'): void {\n this.ActiveDetailTab = tab;\n }\n\n private findRunByID(runID: string | null): IntegrationRunRow | null {\n if (!runID) return null;\n return this.AllRuns.find(r => UUIDsEqual(r.ID, runID)) ?? null;\n }\n\n // ── Formatting Helpers ────────────────────────────────────\n\n FormatDuration(startedAt: Date | string | null, endedAt: Date | string | null): string {\n if (!startedAt || !endedAt) return '--';\n const ms = new Date(endedAt).getTime() - new Date(startedAt).getTime();\n return this.dataService.FormatDuration(ms);\n }\n\n GetRelativeTime(dateStr: Date | string | null): string {\n return this.dataService.ComputeRelativeTime(dateStr);\n }\n\n FormatAbsoluteDate(dateStr: Date | string | null): string {\n if (!dateStr) return '';\n return new Date(dateStr).toLocaleString(undefined, {\n year: 'numeric', month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit', second: '2-digit'\n });\n }\n\n FormatWatermark(value: string | null): string {\n if (!value) return 'Not set';\n if (value.length > 40) return value.substring(0, 37) + '...';\n return value;\n }\n\n FormatDate(dateStr: Date | string | null): string {\n if (!dateStr) return '--';\n return new Date(dateStr).toLocaleString(undefined, {\n month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit'\n });\n }\n\n GetStatusIcon(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 GetStatusColor(status: string): string {\n if (status === 'Success') return 'green';\n if (status === 'Failed') return 'red';\n if (status === 'In Progress') return 'amber';\n return 'gray';\n }\n\n GetStatusDotClass(status: string): string {\n return `status-dot dot-${this.GetStatusColor(status)}`;\n }\n\n StatusChipClass(status: string): string {\n return `chip chip-${this.GetStatusColor(status)}`;\n }\n\n GetErrorCount(run: IntegrationRunRow): number {\n return run.ErrorLog ? 1 : 0;\n }\n\n // ── Summary Computed Properties ───────────────────────────\n\n get TotalRuns(): number {\n return this.FilteredRuns.length;\n }\n\n get SuccessfulRuns(): number {\n return this.FilteredRuns.filter(r => r.Status === 'Success').length;\n }\n\n get FailedRuns(): number {\n return this.FilteredRuns.filter(r => r.Status === 'Failed').length;\n }\n\n get TotalRecordsProcessed(): number {\n return this.FilteredRuns.reduce((acc, r) => acc + r.TotalRecords, 0);\n }\n\n // ── Duration Bar (detail panel) ───────────────────────────\n\n GetDurationBarWidth(run: IntegrationRunRow): number {\n if (!run.StartedAt || !run.EndedAt) return 0;\n return 100;\n }\n\n GetDurationBarLabel(run: IntegrationRunRow): string {\n return this.FormatDuration(run.StartedAt, run.EndedAt);\n }\n\n // ── Resource overrides ────────────────────────────────────\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Activity';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n}\n\nexport function LoadActivityComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Integration Activity\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Sync run history and outcomes\">\n <!-- [meta] retains the succeeded/failed status pills (genuine variant\n signal — error rate at a glance) and the records aggregate\n (non-trivially derived: count of records across all runs).\n \"Total runs\" dropped per chrome slot discipline audit Task B —\n that count equals the visible list's row count. -->\n @if (!IsLoading && AllRuns.length > 0) {\n <div meta>\n <mj-stat-badge [Count]=\"SuccessfulRuns\" Label=\"succeeded\" Variant=\"success\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"FailedRuns\" Label=\"failed\" Variant=\"error\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"TotalRecordsProcessed | number\" Label=\"records\"></mj-stat-badge>\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"Refresh()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search integrations...\"\n [Value]=\"SearchQuery\"\n (ValueChange)=\"OnSearchValueChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ResetIntegrationFilter()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n (Reset)=\"ResetIntegrationFilter()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\">\n<div class=\"activity-container\">\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-area\">\n <mj-loading text=\"Loading activity...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && FilteredRuns.length === 0) {\n <mj-empty-state Variant=\"no-results\" Icon=\"fa-solid fa-inbox\"\n Title=\"No runs found for the selected filters.\" />\n }\n\n <!-- Split View: Run List + Detail Panel -->\n @if (!IsLoading && FilteredRuns.length > 0) {\n <div class=\"split-view\">\n\n <!-- Left panel: Run list -->\n <div class=\"run-list-panel\">\n @for (run of FilteredRuns; track run.ID) {\n <!-- Run row → accordion panel. The title slot carries the run's status +\n integration + meta columns; the accordion toggle reveals the entity\n breakdown (formerly the chevron's ToggleExpand). SelectRun (the\n right-hand detail panel) moves to the header actions slot, since the\n accordion header click now owns expand/collapse.\n Side-effecting handler (ToggleExpand async-loads the breakdown) +\n Default CD → [Expanded] + (ExpandedChange). -->\n <mj-accordion-panel class=\"run-panel\"\n [class.selected]=\"IsSelectedRun(run.ID)\"\n Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"IsExpanded(run.ID)\"\n (ExpandedChange)=\"ToggleExpand(run.ID)\">\n <ng-template mjAccordionTitle>\n <!-- Status indicator -->\n <span [class]=\"GetStatusDotClass(run.Status)\"></span>\n <i [class]=\"GetStatusIcon(run.Status)\"\n [class.icon-green]=\"run.Status === 'Success'\"\n [class.icon-red]=\"run.Status === 'Failed'\"\n [class.icon-amber]=\"run.Status === 'In Progress'\"\n [class.icon-gray]=\"run.Status === 'Pending'\"\n class=\"status-icon\"></i>\n\n <!-- Integration info -->\n <div class=\"run-info\">\n <span class=\"run-integration\">{{ run.Integration }}</span>\n <span class=\"run-company\">{{ run.Company }}</span>\n </div>\n\n <!-- Started time -->\n <div class=\"run-meta\" [title]=\"FormatAbsoluteDate(run.StartedAt)\">\n {{ GetRelativeTime(run.StartedAt) }}\n </div>\n\n <!-- Duration -->\n <div class=\"run-meta run-duration\">\n {{ FormatDuration(run.StartedAt, run.EndedAt) }}\n </div>\n\n <!-- Records -->\n <div class=\"run-meta run-records\">\n {{ run.TotalRecords | number }}\n </div>\n\n <!-- Errors -->\n <div class=\"run-meta run-errors\" [class.has-errors]=\"run.ErrorLog\">\n @if (run.ErrorLog) {\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n }\n </div>\n\n <!-- Triggered by -->\n <div class=\"run-meta run-user\">\n {{ run.RunByUser || 'Scheduled' }}\n </div>\n </ng-template>\n\n <!-- Open/close the right-hand detail panel (entity breakdown +\n watermarks). Lives in the actions slot because the accordion\n header click is now the expand/collapse toggle. -->\n <ng-template mjAccordionActions>\n <button type=\"button\" class=\"detail-toggle-btn\"\n [class.active]=\"IsSelectedRun(run.ID)\"\n (click)=\"SelectRun(run.ID)\"\n title=\"Show run detail panel\">\n <i class=\"fa-solid fa-table-columns\"></i>\n </button>\n </ng-template>\n\n <!-- Expanded section: entity breakdown (lazy body) -->\n <ng-template mjAccordionBody>\n <div class=\"expanded-section\">\n @if (IsLoadingExpandedDetails()) {\n <div class=\"expanded-loading\">\n <mj-loading text=\"Loading breakdown...\" size=\"small\"></mj-loading>\n </div>\n } @else if (GetExpandedDetails().length === 0) {\n <mj-empty-state class=\"expanded-empty\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No entity details for this run.\" />\n } @else {\n <table class=\"entity-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th class=\"num-col\">Processed</th>\n <th class=\"num-col\">Created</th>\n <th class=\"num-col\">Updated</th>\n <th class=\"num-col\">Deleted</th>\n <th class=\"num-col\">Errored</th>\n <th class=\"num-col\">Skipped</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of GetExpandedDetails(); track detail.EntityID) {\n <tr [class.error-row]=\"detail.RecordsErrored > 0\">\n <td>{{ detail.Entity }}</td>\n <td class=\"num-col\">{{ detail.RecordsProcessed | number }}</td>\n <td class=\"num-col created-col\">{{ detail.RecordsCreated | number }}</td>\n <td class=\"num-col updated-col\">{{ detail.RecordsUpdated | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsDeleted | number }}</td>\n <td class=\"num-col error-col\">{{ detail.RecordsErrored | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsSkipped | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Error log in expanded view -->\n @if (run.ErrorLog) {\n <div class=\"error-log-block\">\n <div class=\"error-log-label\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error Log\n </div>\n <pre class=\"error-log-content\">{{ run.ErrorLog }}</pre>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n\n <!-- Right panel: Detail -->\n @if (SelectedRunID && GetSelectedRun()) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-header-info\">\n <h3>{{ GetSelectedRun()!.Integration }}</h3>\n <span [class]=\"StatusChipClass(GetSelectedRun()!.Status)\">\n <i [class]=\"GetStatusIcon(GetSelectedRun()!.Status)\"></i>\n {{ GetSelectedRun()!.Status }}\n </span>\n <span class=\"detail-time\">{{ FormatDate(GetSelectedRun()!.StartedAt) }}</span>\n </div>\n <button class=\"close-detail-btn\" (click)=\"SelectRun(SelectedRunID!)\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Duration bar -->\n @if (GetSelectedRun()!.StartedAt && GetSelectedRun()!.EndedAt) {\n <div class=\"duration-bar-container\">\n <div class=\"duration-bar-track\">\n <div class=\"duration-bar-fill\"\n [style.width.%]=\"GetDurationBarWidth(GetSelectedRun()!)\"></div>\n </div>\n <div class=\"duration-bar-labels\">\n <span>{{ FormatDate(GetSelectedRun()!.StartedAt) }}</span>\n <span class=\"duration-bar-value\">{{ GetDurationBarLabel(GetSelectedRun()!) }}</span>\n <span>{{ FormatDate(GetSelectedRun()!.EndedAt) }}</span>\n </div>\n </div>\n }\n\n <!-- Tabs -->\n <div class=\"detail-tabs\">\n <button class=\"tab-btn\" [class.active]=\"ActiveDetailTab === 'entities'\"\n (click)=\"SetDetailTab('entities')\">\n <i class=\"fa-solid fa-table\"></i> Entity Breakdown\n </button>\n <button class=\"tab-btn\" [class.active]=\"ActiveDetailTab === 'watermarks'\"\n (click)=\"SetDetailTab('watermarks')\">\n <i class=\"fa-solid fa-droplet\"></i> Watermarks\n </button>\n </div>\n\n <div class=\"detail-content\">\n <!-- Entity breakdown tab -->\n @if (ActiveDetailTab === 'entities') {\n @if (IsLoadingDetail) {\n <div class=\"detail-loading\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </div>\n } @else if (SelectedRunDetails.length === 0) {\n <mj-empty-state class=\"detail-empty\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No entity detail records for this run.\" />\n } @else {\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th class=\"num-col\">Processed</th>\n <th class=\"num-col\">Created</th>\n <th class=\"num-col\">Updated</th>\n <th class=\"num-col\">Deleted</th>\n <th class=\"num-col\">Errors</th>\n <th class=\"num-col\">Skipped</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of SelectedRunDetails; track detail.EntityID) {\n <tr [class.error-row]=\"detail.RecordsErrored > 0\">\n <td>{{ detail.Entity }}</td>\n <td class=\"num-col\">{{ detail.RecordsProcessed | number }}</td>\n <td class=\"num-col created-col\">{{ detail.RecordsCreated | number }}</td>\n <td class=\"num-col updated-col\">{{ detail.RecordsUpdated | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsDeleted | number }}</td>\n <td class=\"num-col error-col\">{{ detail.RecordsErrored | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsSkipped | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Error log -->\n @if (GetSelectedRun()?.ErrorLog) {\n <div class=\"error-log-block detail-error-log\">\n <div class=\"error-log-label\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error Log\n </div>\n <pre class=\"error-log-content\">{{ GetSelectedRun()!.ErrorLog }}</pre>\n </div>\n }\n }\n\n <!-- Watermarks tab -->\n @if (ActiveDetailTab === 'watermarks') {\n @if (IsLoadingWatermarks) {\n <div class=\"detail-loading\">\n <mj-loading text=\"Loading watermarks...\" size=\"small\"></mj-loading>\n </div>\n } @else if (WatermarkData.length === 0) {\n <mj-empty-state class=\"detail-empty\" Size=\"compact\" Icon=\"fa-solid fa-droplet-slash\"\n Title=\"No watermarks recorded for this integration.\" />\n } @else {\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity Map</th>\n <th>Type</th>\n <th>Current Value</th>\n <th>Last Applied</th>\n </tr>\n </thead>\n <tbody>\n @for (wm of WatermarkData; track wm.ID) {\n <tr>\n <td>{{ wm.EntityMap }}</td>\n <td><span class=\"type-badge\">{{ wm.WatermarkType }}</span></td>\n <td class=\"mono-cell watermark-value\">{{ FormatWatermark(wm.WatermarkValue) }}</td>\n <td>{{ FormatDate(wm.LastSyncAt) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n }\n </div>\n </div>\n }\n\n </div>\n }\n\n</div>\n </mj-page-body>\n</mj-page-layout>\n"]}
|
|
1
|
+
{"version":3,"file":"activity.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/activity/activity.component.ts","../../../../src/Integration/components/activity/activity.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAyB,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,OAAO,EAAE,YAAY,EAAoB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,sBAAsB,GAKvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,GAG9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAmB,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;;;;;;;;ICZ1G,8BAAU;IAGR,AADA,AADA,oCAA4F,wBACT,wBACK;;IAC1F,iBAAM;;;IAHW,cAAwB;IAAxB,6CAAwB;IACxB,cAAoB;IAApB,yCAAoB;IACpB,cAAwC;IAAxC,0EAAwC;;;IA+B3D,+BAA0B;IACxB,iCAAkE;IACpE,iBAAM;;;IAKN,qCACoD;;;IAwDtC,wBAAgD;;;IA/BpD,AADA,uBAAqD,YAM1B;IAIzB,AADF,+BAAsB,eACU;IAAA,YAAqB;IAAA,iBAAO;IAC1D,gCAA0B;IAAA,YAAiB;IAC7C,AAD6C,iBAAO,EAC9C;IAGN,+BAAkE;IAChE,YACF;IAAA,iBAAM;IAGN,+BAAmC;IACjC,aACF;IAAA,iBAAM;IAGN,gCAAkC;IAChC,aACF;;IAAA,iBAAM;IAGN,gCAAmE;IACjE,uHAAoB;IAGtB,iBAAM;IAGN,gCAA+B;IAC7B,aACF;IAAA,iBAAM;;;;IAvCA,sDAAuC;IAC1C,cAAmC;IAAnC,kDAAmC;IAInC,AADA,AADA,AADA,yDAA6C,wCACH,+CACO,0CACL;IAKf,eAAqB;IAArB,wCAAqB;IACzB,eAAiB;IAAjB,oCAAiB;IAIvB,cAA2C;IAA3C,mEAA2C;IAC/D,cACF;IADE,yEACF;IAIE,eACF;IADE,wFACF;IAIE,eACF;IADE,4EACF;IAGiC,eAAiC;IAAjC,6CAAiC;IAChE,cAEC;IAFD,2CAEC;IAKD,eACF;IADE,gEACF;;;;IAOA,kCAGsC;IAD9B,wPAAS,2BAAiB,KAAC;IAEjC,wBAAyC;IAC3C,iBAAS;;;;IAJD,yDAAsC;;;IAW1C,+BAA8B;IAC5B,iCAAkE;IACpE,iBAAM;;;IAEN,qCAC4C;;;IAiBpC,AADF,0BAAkD,SAC5C;IAAA,YAAmB;IAAA,iBAAK;IAC5B,8BAAoB;IAAA,YAAsC;;IAAA,iBAAK;IAC/D,8BAAgC;IAAA,YAAoC;;IAAA,iBAAK;IACzE,8BAAgC;IAAA,aAAoC;;IAAA,iBAAK;IACzE,+BAAoB;IAAA,aAAoC;;IAAA,iBAAK;IAC7D,+BAA8B;IAAA,aAAoC;;IAAA,iBAAK;IACvE,+BAAoB;IAAA,aAAoC;;IAC1D,AAD0D,iBAAK,EAC1D;;;IARD,yDAA6C;IAC3C,eAAmB;IAAnB,sCAAmB;IACH,eAAsC;IAAtC,sEAAsC;IAC1B,eAAoC;IAApC,qEAAoC;IACpC,eAAoC;IAApC,sEAAoC;IAChD,eAAoC;IAApC,sEAAoC;IAC1B,eAAoC;IAApC,sEAAoC;IAC9C,eAAoC;IAApC,sEAAoC;;;IAlB1D,AADF,AADF,AADF,iCAA4B,YACnB,SACD,SACE;IAAA,sBAAM;IAAA,iBAAK;IACf,8BAAoB;IAAA,yBAAS;IAAA,iBAAK;IAClC,8BAAoB;IAAA,uBAAO;IAAA,iBAAK;IAChC,8BAAoB;IAAA,wBAAO;IAAA,iBAAK;IAChC,+BAAoB;IAAA,wBAAO;IAAA,iBAAK;IAChC,+BAAoB;IAAA,wBAAO;IAAA,iBAAK;IAChC,+BAAoB;IAAA,wBAAO;IAE/B,AADE,AAD6B,iBAAK,EAC7B,EACC;IACR,8BAAO;IACL,yIAUC;IAEL,AADE,iBAAQ,EACF;;;IAZJ,gBAUC;IAVD,cAAA,2BAAoB,CAUnB;;;IAQH,AADF,+BAA6B,cACE;IAC3B,wBAAgD;IAAC,2BACnD;IAAA,iBAAM;IACN,+BAA+B;IAAA,YAAkB;IACnD,AADmD,iBAAM,EACnD;;;IAD2B,eAAkB;IAAlB,qCAAkB;;;IA3CvD,+BAA8B;IAQ1B,AAHA,AAJF,uHAAkC,4GAIc,oGAGvC;IA8BT,uHAAoB;IAQtB,iBAAM;;;;IA7CJ,cAkCC;IAlCD,0GAkCC;IAGD,eAOC;IAPD,0CAOC;;;;IA5GP,8CAI4D;IAAxC,oPAAkB,8BAAoB,KAAC;IA0DzD,AAVA,AA/CA,0GAA8B,2FA+CE,2FAUH;IAiD/B,iBAAqB;;;;IA9GD,2DAAwC;IAExC,AADU,gCAAkB,0CACG;;;IAoI/C,AADF,+BAAoC,cACF;IAC9B,0BACoE;IACtE,iBAAM;IAEJ,AADF,+BAAiC,WACzB;IAAA,YAA6C;IAAA,iBAAO;IAC1D,gCAAiC;IAAA,YAA4C;IAAA,iBAAO;IACpF,4BAAM;IAAA,YAA2C;IAErD,AADE,AADmD,iBAAO,EACpD,EACF;;;IAPG,eAAwD;IAAxD,iFAAwD;IAGvD,eAA6C;IAA7C,0EAA6C;IAClB,eAA4C;IAA5C,yEAA4C;IACvE,eAA2C;IAA3C,wEAA2C;;;IAqBjD,+BAA4B;IAC1B,iCAAgE;IAClE,iBAAM;;;IAEN,qCACmD;;;IAiB3C,AADF,0BAAkD,SAC5C;IAAA,YAAmB;IAAA,iBAAK;IAC5B,8BAAoB;IAAA,YAAsC;;IAAA,iBAAK;IAC/D,8BAAgC;IAAA,YAAoC;;IAAA,iBAAK;IACzE,8BAAgC;IAAA,aAAoC;;IAAA,iBAAK;IACzE,+BAAoB;IAAA,aAAoC;;IAAA,iBAAK;IAC7D,+BAA8B;IAAA,aAAoC;;IAAA,iBAAK;IACvE,+BAAoB;IAAA,aAAoC;;IAC1D,AAD0D,iBAAK,EAC1D;;;IARD,yDAA6C;IAC3C,eAAmB;IAAnB,sCAAmB;IACH,eAAsC;IAAtC,sEAAsC;IAC1B,eAAoC;IAApC,qEAAoC;IACpC,eAAoC;IAApC,sEAAoC;IAChD,eAAoC;IAApC,sEAAoC;IAC1B,eAAoC;IAApC,sEAAoC;IAC9C,eAAoC;IAApC,sEAAoC;;;IAlB1D,AADF,AADF,AADF,iCAA4B,YACnB,SACD,SACE;IAAA,sBAAM;IAAA,iBAAK;IACf,8BAAoB;IAAA,yBAAS;IAAA,iBAAK;IAClC,8BAAoB;IAAA,uBAAO;IAAA,iBAAK;IAChC,8BAAoB;IAAA,wBAAO;IAAA,iBAAK;IAChC,+BAAoB;IAAA,wBAAO;IAAA,iBAAK;IAChC,+BAAoB;IAAA,uBAAM;IAAA,iBAAK;IAC/B,+BAAoB;IAAA,wBAAO;IAE/B,AADE,AAD6B,iBAAK,EAC7B,EACC;IACR,8BAAO;IACL,kJAUC;IAEL,AADE,iBAAQ,EACF;;;IAZJ,gBAUC;IAVD,wCAUC;;;IAQH,AADF,+BAA8C,cACf;IAC3B,wBAAgD;IAAC,2BACnD;IAAA,iBAAM;IACN,+BAA+B;IAAA,YAAgC;IACjE,AADiE,iBAAM,EACjE;;;IAD2B,eAAgC;IAAhC,sDAAgC;;;IAnCjE,AAHA,AAJF,gIAAuB,qHAIuB,6GAGrC;IA8BT,gIAAkC;;;;IArClC,6FAkCC;IAGD,eAOC;IAPD,kGAOC;;;IAMC,+BAA4B;IAC1B,iCAAmE;IACrE,iBAAM;;;IAEN,qCACyD;;;IAcjD,AADF,0BAAI,SACE;IAAA,YAAkB;IAAA,iBAAK;IACvB,AAAJ,0BAAI,eAAyB;IAAA,YAAsB;IAAO,AAAP,iBAAO,EAAK;IAC/D,8BAAsC;IAAA,YAAwC;IAAA,iBAAK;IACnF,0BAAI;IAAA,YAA+B;IACrC,AADqC,iBAAK,EACrC;;;;IAJC,eAAkB;IAAlB,qCAAkB;IACO,eAAsB;IAAtB,yCAAsB;IACb,eAAwC;IAAxC,kEAAwC;IAC1E,eAA+B;IAA/B,yDAA+B;;;IAZrC,AADF,AADF,AADF,iCAA4B,YACnB,SACD,SACE;IAAA,0BAAU;IAAA,iBAAK;IACnB,0BAAI;IAAA,oBAAI;IAAA,iBAAK;IACb,0BAAI;IAAA,6BAAa;IAAA,iBAAK;IACtB,0BAAI;IAAA,6BAAY;IAEpB,AADE,AADkB,iBAAK,EAClB,EACC;IACR,8BAAO;IACL,mJAOC;IAEL,AADE,iBAAQ,EACF;;;IATJ,gBAOC;IAPD,mCAOC;;;IAlBL,AAHA,AAJF,gIAA2B,qHAIc,6GAGhC;;;IAPT,4FA4BC;;;;IAvHD,AADF,AADF,AADF,+BAA0B,cACG,cACO,SAC1B;IAAA,YAAmC;IAAA,iBAAK;IAC5C,4BAA0D;IACxD,oBAAyD;IACzD,YACF;IAAA,iBAAO;IACP,gCAA0B;IAAA,YAA6C;IACzE,AADyE,iBAAO,EAC1E;IACN,mCAAmF;IAAlD,sMAAS,sCAAyB,KAAC;IAClE,yBAAiC;IAErC,AADE,iBAAS,EACL;IAGN,oHAAgE;IAgB9D,AADF,gCAAyB,kBAEoB;IAAnC,sMAAS,oBAAa,UAAU,CAAC,KAAC;IACxC,yBAAiC;IAAC,mCACpC;IAAA,iBAAS;IACT,mCAC6C;IAArC,sMAAS,oBAAa,YAAY,CAAC,KAAC;IAC1C,yBAAmC;IAAC,6BACtC;IACF,AADE,iBAAS,EACL;IAEN,gCAA4B;IAE1B,wGAAsC;IAiDtC,wGAAwC;IAgC5C,AADE,iBAAM,EACF;;;IA1HI,eAAmC;IAAnC,yDAAmC;IACjC,cAAmD;IAAnD,qEAAmD;IACpD,cAAiD;IAAjD,mEAAiD;IACpD,cACF;IADE,+DACF;IAC0B,eAA6C;IAA7C,0EAA6C;IAQ3E,eAYC;IAZD,gGAYC;IAIyB,eAA+C;IAA/C,+DAA+C;IAI/C,eAAiD;IAAjD,iEAAiD;IAQzE,eA8CC;IA9CD,iEA8CC;IAGD,cA8BC;IA9BD,mEA8BC;;;IAzPP,AAHF,+BAAwB,cAGM;IAC1B,mHAwHC;IACH,iBAAM;IAGN,qGAAyC;IAiI3C,iBAAM;;;IA7PF,eAwHC;IAxHD,kCAwHC;IAIH,eA+HC;IA/HD,0EA+HC;;ADnQA,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,qBAAqB;IAE1D,OAAO;IACP,OAAO,GAAwB,EAAE,CAAC;IAClC,YAAY,GAAwB,EAAE,CAAC;IACvC,SAAS,GAAyB,EAAE,CAAC;IACrC,YAAY,GAAwB,EAAE,CAAC;IACvC,aAAa,GAAkB,IAAI,CAAC;IACpC,kBAAkB,GAAmB,EAAE,CAAC;IACxC,aAAa,GAAmB,EAAE,CAAC;IACnC,SAAS,GAAG,IAAI,CAAC;IACjB,eAAe,GAAG,KAAK,CAAC;IAExB,UAAU;IACV,YAAY,GAAqB,KAAK,CAAC;IACvC,iBAAiB,GAAkB,IAAI,CAAC;IACxC,UAAU,GAAmB,IAAI,CAAC;IAClC,WAAW,GAAG,EAAE,CAAC;IACjB,aAAa,GAAkB,IAAI,CAAC;IAEpC,6BAA6B;IACrB,eAAe,GAAmB,EAAE,CAAC;IACrC,iBAAiB,GAAG,KAAK,CAAC;IAElC,mBAAmB;IACnB,eAAe,GAA8B,UAAU,CAAC;IACxD,mBAAmB,GAAG,KAAK,CAAC;IAE5B,aAAa,GAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClH,WAAW,GAA+C;QACxD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC9B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAClC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;QAChC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;KACnC,CAAC;IAEM,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7C,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExC,KAAK,CAAC,QAAQ;QACZ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/C,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,6DAA6D;IAE7D,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC;gBACnD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;QACnE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAiC;QACzD,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAoB;YACjD,UAAU,EAAE,8BAA8B;YAC1C,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc;gBACpE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC;YACrE,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAEO,uBAAuB,CAAC,SAA+B;QAC7D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzB,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE;YACpB,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,GAAG;SAChE,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;YACxE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,oBAA4B;QAC/C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,oBAA4B;QAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEvC,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAe;YAC5C,UAAU,EAAE,yCAAyC;YACrD,WAAW,EAAE,mBAAmB,YAAY,GAAG;YAC/C,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,CAAC;YAC9E,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IAEO,6BAA6B,CACnC,UAA0B,EAC1B,UAA0B;QAE1B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,GAAG,CAAC;YACJ,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,kBAAkB,IAAI,CAAC,CAAC,WAAW;SAC5F,CAAC,CAAC,CAAC;IACN,CAAC;IAED,6DAA6D;IAE7D,YAAY;QACV,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC9C,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,8EAA8E;IAC9E,kCAAkC;IAClC,EAAE;IACF,2EAA2E;IAC3E,0EAA0E;IAC1E,mFAAmF;IACnF,kFAAkF;IAClF,4EAA4E;IAC5E,gFAAgF;IAChF,mEAAmE;IACnE,iFAAiF;IACjF,4EAA4E;IAC5E,qCAAqC;IACrC,8EAA8E;IAE9E,eAAe;QACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,gBAAgB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACxC,IAAI,EAAE;gBACJ,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,aAAa,EAAE,IAAI,CAAC,SAAS;gBAC7B,aAAa,EAAE,CAAC;gBAChB,kBAAkB,EAAE,CAAC;aACtB;YACD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,qBAAqB,EAAE,IAAI,CAAC,4BAA4B,EAAE;YAC1D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;YAC1C,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAClC,kBAAkB,EAAE,IAAI,CAAC,cAAc;YACvC,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAChE,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAChE,yBAAyB,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAC/C;gBACE,IAAI,EAAE,0BAA0B;gBAChC,WAAW,EAAE,wGAAwG;gBACrH,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;gBACvG,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;aACnF;YACD;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,WAAW,EAAE,4FAA4F;gBACzG,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;gBACrG,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;aACpF;YACD;gBACE,IAAI,EAAE,2BAA2B;gBACjC,WAAW,EAAE,yEAAyE;gBACtF,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;gBACnG,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;aACvF;YACD;gBACE,IAAI,EAAE,6BAA6B;gBACnC,WAAW,EAAE,iIAAiI;gBAC9I,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;gBAC/G,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;aACzF;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,8DAA8D;gBAC3E,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;gBACnG,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;aAC5E;YACD;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,WAAW,EAAE,oGAAoG;gBACjH,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACnD,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC9B,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC3B,CAAC;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,oHAAoH;gBACjI,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC/F,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;aAC/E;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,mHAAmH;gBAChI,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC/F,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;aACnF;YACD;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,WAAW,EAAE,8CAA8C;gBAC3D,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACnD,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC3B,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,MAA+B;QAC7D,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,+EAA+E,EAAE,CAAC;QAC3H,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,uBAAuB,OAAO,YAAY,EAAE,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,kBAAkB,CAAC,MAA+B;QACxD,MAAM,KAAK,GAAG,iBAAiB,CAAmB,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAClG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,qBAAqB,CAAC,MAA+B;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,iBAAiB,CAAiB,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,uBAAuB,CAAC,MAA+B;QAC7D,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YAC/C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,UAAU,GAA6B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;QACjH,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,UAAU,CAAC,MAA+B;QAChD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAA+B;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,kEAAkE;QAClE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB,CAAC,MAA+B;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,8BAA8B,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,qFAAqF;IAC7E,mBAAmB,CACzB,GAAY;QAEZ,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7C,CAAC;QACD,MAAM,UAAU,GAA6B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAChI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,6BAA6B,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAChI,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,oFAAoF;IAC5E,QAAQ,CAAC,GAAsB;QACrC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,IAAI,aAAa,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,GAAG,GAAG,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAEO,eAAe,CAAC,GAAsB;QAC5C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,6EAA6E;IACrE,4BAA4B;QAClC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;IAC7F,CAAC;IAEO,cAAc,CAAC,IAAyB;QAC9C,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAEO,mBAAmB,CAAC,IAAyB;QACnD,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtF,CAAC;IAEO,YAAY,CAAC,IAAyB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC;IAC1E,CAAC;IAEO,cAAc,CAAC,IAAyB;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrB,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACzC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,KAAqB;QACzC,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,MAAwB;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,KAAqB;QACjC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,oBAAoB,CAAC,EAAiB;QACpC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,8DAA8D;IAC9D,mBAAmB,CAAC,KAAa;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,2EAA2E;IAE3E,IAAI,oBAAoB;QACtB,OAAO;YACL;gBACE,GAAG,EAAE,WAAW;gBAChB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;aAC5E;YACD;gBACE,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aAClE;YACD;gBACE,GAAG,EAAE,aAAa;gBAClB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,kBAAkB;gBAC/B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;gBACzC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE;oBACvC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBAC/D;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,WAAW,EAAE,IAAI,CAAC,iBAAiB,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAAE,KAAK,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;YAAE,KAAK,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,iBAAiB;YAAE,KAAK,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB,CAAC,MAA+B;QAClD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAkE,CAAC;QAC7F,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACzD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAA2B,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAA0B,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/C,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,sBAAsB;QACpB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;YAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,6DAA6D;IAE7D,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,wBAAwB;QACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,GAA8B;QACzC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,KAAoB;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;IACjE,CAAC;IAED,6DAA6D;IAE7D,cAAc,CAAC,SAA+B,EAAE,OAA6B;QAC3E,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,OAA6B;QAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,kBAAkB,CAAC,OAA6B;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;YACjD,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS;YAC/C,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;SACtD,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,KAAoB;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,OAA6B;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;YACjD,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS;YAC9B,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;SACnC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,0BAA0B,CAAC;QAC5D,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,0BAA0B,CAAC;QAC3D,IAAI,MAAM,KAAK,aAAa;YAAE,OAAO,6BAA6B,CAAC;QACnE,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QACzC,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,MAAM,KAAK,aAAa;YAAE,OAAO,OAAO,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,OAAO,kBAAkB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,OAAO,aAAa,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;IACpD,CAAC;IAED,aAAa,CAAC,GAAsB;QAClC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,6DAA6D;IAE7D,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACtE,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAED,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,6DAA6D;IAE7D,mBAAmB,CAAC,GAAsB;QACxC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,mBAAmB,CAAC,GAAsB;QACxC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,6DAA6D;IAE7D,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC9C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC5C,OAAO,+BAA+B,CAAC;IACzC,CAAC;iPA3rBU,iBAAiB,yBAAjB,iBAAiB;6DAAjB,iBAAiB;YCrD5B,AADF,sCAAgB,wBAI6B;YAMzC,mFAAwC;YAQtC,AADF,8BAAa,2BACoD;YAAtB,6GAAW,aAAS,IAAC;YAChE,AADiE,iBAAoB,EAC/E;YAEJ,AADF,8BAAa,wBAImC;YAA5C,wHAAe,+BAA2B,IAAC;YAC7C,iBAAiB;YACjB,4CAGiD;YAA/C,iIAAqB,4BAAwB,IAAC;YAC9C,0CAIqC;YAAnC,AADA,2HAAgB,gCAA4B,IAAC,0FACpC,4BAAwB,IAAC;YAI1C,AADE,AADE,AADE,iBAAkB,EACA,EAChB,EACS;YAGnB,AADE,uCAA4B,cACE;YAG9B,sFAAiB;YAOjB,iGAA+C;YAM/C,sFAA6C;YAuQ/C,AADE,AADF,iBAAM,EACW,EACA;;YAtTb,eAMC;YAND,mEAMC;YAEoB,eAAqB;YAArB,uCAAqB;YAKtC,eAAqB;YAArB,uCAAqB;YAIrB,cAAiC;YACjC,AADA,mDAAiC,2CACK;YAGpC,cAA+B;YAC/B,AADA,iDAA+B,oCACA;YAQzB,cAAa;YAAb,2BAAa;YAI3B,eAIC;YAJD,yCAIC;YAGD,cAGC;YAHD,2EAGC;YAGD,cAmQC;YAnQD,yEAmQC;;;ADtQU,iBAAiB;IAP7B,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAO/C,iBAAiB,CA4rB7B;;iFA5rBY,iBAAiB;cAN7B,SAAS;6BACI,KAAK,YACP,0BAA0B;;kFAIzB,iBAAiB;AA8rB9B,MAAM,UAAU,qBAAqB;IACnC,wDAAwD;IACxD,6DAA6D;AAC/D,CAAC","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, AfterViewInit, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport type { MJCompanyIntegrationRunEntity } from '@memberjunction/core-entities';\nimport { CompositeKey, IRunViewProvider, RunView } from '@memberjunction/core';\nimport {\n IntegrationDataService,\n IntegrationSummary,\n IntegrationRunRow,\n RunDetailRow,\n EntityMapRow,\n} from '../../services/integration-data.service';\nimport {\n buildActivityAgentContext,\n resolveIntegrationSurface,\n navLabelForSurface,\n resolveIntegrationRecord,\n buildIntegrationNotFoundError,\n ActivityRunSummary,\n NamedIntegrationRecord,\n} from '../../integration-agent-context';\nimport { AgentToolResult, validateEnumParam, validateStringParam } from '../../../shared/agent-tool-validation';\n\n/**\n * The activity filter's choices: 'All' plus every real run status, derived from the entity so the\n * filter can never silently lose a status the database can produce. The hand-written union this\n * replaces had already fallen behind — 'Queued' rows existed and were unfilterable.\n */\ntype StatusFilterType = 'All' | MJCompanyIntegrationRunEntity['Status'];\ntype DateFilterType = 'today' | '7d' | '30d' | 'all';\n\ninterface WatermarkRow {\n ID: string;\n EntityMapID: string;\n WatermarkType: string;\n WatermarkValue: string | null;\n LastSyncAt: string | null;\n EntityMap: string;\n}\n\ninterface IntegrationOption {\n ID: string;\n Name: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'IntegrationActivity')\n@Component({\n standalone: false,\n selector: 'app-integration-activity',\n templateUrl: './activity.component.html',\n styleUrls: ['./activity.component.css']\n})\nexport class ActivityComponent extends BaseResourceComponent implements OnInit, AfterViewInit {\n\n // Data\n AllRuns: IntegrationRunRow[] = [];\n FilteredRuns: IntegrationRunRow[] = [];\n Summaries: IntegrationSummary[] = [];\n Integrations: IntegrationOption[] = [];\n SelectedRunID: string | null = null;\n SelectedRunDetails: RunDetailRow[] = [];\n WatermarkData: WatermarkRow[] = [];\n IsLoading = true;\n IsLoadingDetail = false;\n\n // Filters\n StatusFilter: StatusFilterType = 'All';\n IntegrationFilter: string | null = null;\n DateFilter: DateFilterType = '7d';\n SearchQuery = '';\n ExpandedRunID: string | null = null;\n\n // Expanded row details cache\n private expandedDetails: RunDetailRow[] = [];\n private isLoadingExpanded = false;\n\n // Detail panel tab\n ActiveDetailTab: 'entities' | 'watermarks' = 'entities';\n IsLoadingWatermarks = false;\n\n StatusOptions: StatusFilterType[] = ['All', 'Success', 'Failed', 'Cancelled', 'In Progress', 'Queued', 'Pending'];\n DateOptions: { Value: DateFilterType; Label: string }[] = [\n { Value: 'all', Label: 'All' },\n { Value: 'today', Label: 'Today' },\n { Value: '7d', Label: '7 Days' },\n { Value: '30d', Label: '30 Days' }\n ];\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.dataService.Provider = this.ProviderToUse;\n await this.LoadData();\n this.NotifyLoadComplete();\n }\n\n // ── Data Loading ──────────────────────────────────────────\n\n async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n try {\n const provider = this.RunViewToUse;\n const [summaries, runs] = await Promise.all([\n this.dataService.LoadIntegrationSummaries(provider),\n this.loadAllRuns(provider)\n ]);\n this.Summaries = summaries;\n this.Integrations = this.buildIntegrationOptions(summaries);\n this.AllRuns = runs;\n this.ApplyFilters();\n } catch (err) {\n console.error('[IntegrationActivity] Failed to load data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadAllRuns(provider: IRunViewProvider | null): Promise<IntegrationRunRow[]> {\n const rv = new RunView(provider ?? null);\n const result = await rv.RunView<IntegrationRunRow>({\n EntityName: 'MJ: Company Integration Runs',\n ExtraFilter: '',\n OrderBy: 'StartedAt DESC',\n MaxRows: 200,\n Fields: ['ID', 'CompanyIntegrationID', 'StartedAt', 'EndedAt', 'TotalRecords',\n 'Status', 'ErrorLog', 'Integration', 'Company', 'RunByUser'],\n ResultType: 'simple'\n });\n return result.Results;\n }\n\n private buildIntegrationOptions(summaries: IntegrationSummary[]): IntegrationOption[] {\n return summaries.map(s => ({\n ID: s.Integration.ID,\n Name: `${s.Integration.Integration} (${s.Integration.Company})`\n }));\n }\n\n async LoadRunDetails(runID: string): Promise<RunDetailRow[]> {\n try {\n return await this.dataService.LoadRunDetails(runID, this.RunViewToUse);\n } catch (err) {\n console.error('[IntegrationActivity] Failed to load run details:', err);\n return [];\n }\n }\n\n async LoadWatermarks(companyIntegrationID: string): Promise<void> {\n this.IsLoadingWatermarks = true;\n this.cdr.detectChanges();\n try {\n this.WatermarkData = await this.loadWatermarkData(companyIntegrationID);\n } catch (err) {\n console.error('[IntegrationActivity] Failed to load watermarks:', err);\n } finally {\n this.IsLoadingWatermarks = false;\n this.cdr.detectChanges();\n }\n }\n\n private async loadWatermarkData(companyIntegrationID: string): Promise<WatermarkRow[]> {\n const entityMaps = await this.dataService.LoadEntityMaps(companyIntegrationID, this.RunViewToUse);\n if (entityMaps.length === 0) return [];\n\n const entityMapIDs = entityMaps.map(m => `'${m.ID}'`).join(',');\n const rv = new RunView(this.RunViewToUse ?? null);\n const result = await rv.RunView<WatermarkRow>({\n EntityName: 'MJ: Company Integration Sync Watermarks',\n ExtraFilter: `EntityMapID IN (${entityMapIDs})`,\n OrderBy: 'LastSyncAt DESC',\n Fields: ['ID', 'EntityMapID', 'WatermarkType', 'WatermarkValue', 'LastSyncAt'],\n ResultType: 'simple'\n });\n\n return this.mergeWatermarksWithEntityMaps(result.Results, entityMaps);\n }\n\n private mergeWatermarksWithEntityMaps(\n watermarks: WatermarkRow[],\n entityMaps: EntityMapRow[]\n ): WatermarkRow[] {\n const mapLookup = new Map(entityMaps.map(m => [m.ID.toLowerCase(), m]));\n return watermarks.map(w => ({\n ...w,\n EntityMap: mapLookup.get(w.EntityMapID?.toLowerCase())?.ExternalObjectName ?? w.EntityMapID\n }));\n }\n\n // ── Filtering ─────────────────────────────────────────────\n\n ApplyFilters(): void {\n let filtered = this.AllRuns;\n filtered = this.filterByStatus(filtered);\n filtered = this.filterByIntegration(filtered);\n filtered = this.filterByDate(filtered);\n filtered = this.filterBySearch(filtered);\n this.FilteredRuns = filtered;\n this.emitAgentContext();\n }\n\n // ---------------------------------------------------------------------------\n // AI Agent Context & Client Tools\n //\n // 🔒 SAFETY BOUNDARY: The Activity surface exposes ONLY read-only filter /\n // search / select / open-record / navigation / refresh tools to the agent\n // (SwitchIntegrationSurface, FilterActivityByStatus / ByTimeRange / ByIntegration,\n // SearchActivity, ClearActivityFilters, SelectActivityRun, OpenActivityRunRecord,\n // RefreshIntegrationData). It deliberately does NOT expose any sync trigger\n // (RunSync — a LIVE external sync), nor any mutation of mappings, schedules, or\n // credentials. SelectActivityRun opens the read-only detail panel;\n // OpenActivityRunRecord opens the run record in a tab for VIEWING (not editing).\n // The agent can narrow what's shown and select/open runs; the user performs\n // every mutating action from the UI.\n // ---------------------------------------------------------------------------\n\n ngAfterViewInit(): void {\n this.emitAgentContext();\n this.registerAgentTools();\n }\n\n private emitAgentContext(): void {\n const kpis = this.dataService.ComputeKPIs(this.Summaries);\n const selectedRun = this.GetSelectedRun();\n const context = buildActivityAgentContext({\n KPIs: {\n TotalIntegrations: kpis.TotalIntegrations,\n ActiveSyncs: kpis.ActiveSyncs,\n RecordsSyncedToday: kpis.RecordsSyncedToday,\n SyncErrorRate: kpis.ErrorRate,\n PipelineCount: 0,\n ScheduledSyncCount: 0,\n },\n IsLoading: this.IsLoading,\n StatusFilter: this.StatusFilter,\n DateFilter: this.DateFilter,\n IntegrationFilterName: this.resolveIntegrationFilterName(),\n SearchQuery: this.SearchQuery,\n FilteredRunCount: this.FilteredRuns.length,\n TotalRunCount: this.AllRuns.length,\n SuccessfulRunCount: this.SuccessfulRuns,\n FailedRunCount: this.FailedRuns,\n TotalRecordsProcessed: this.TotalRecordsProcessed,\n VisibleRuns: this.FilteredRuns.map(r => this.buildRunSummary(r)),\n SelectedRunId: this.SelectedRunID,\n SelectedRunName: selectedRun ? this.runLabel(selectedRun) : null,\n AvailableIntegrationNames: this.Integrations.map(i => i.Name),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SwitchIntegrationSurface',\n Description: 'Switch to a different Integration surface. Valid surfaces: Overview, Connections, Activity, Schedules.',\n ParameterSchema: { type: 'object', properties: { surface: { type: 'string' } }, required: ['surface'] },\n Handler: async (params: Record<string, unknown>) => this.toolSwitchSurface(params),\n },\n {\n Name: 'FilterActivityByStatus',\n Description: 'Filter the run-activity list by status. Valid: All, Success, Failed, In Progress, Pending.',\n ParameterSchema: { type: 'object', properties: { status: { type: 'string' } }, required: ['status'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByStatus(params),\n },\n {\n Name: 'FilterActivityByTimeRange',\n Description: 'Filter the run-activity list by time range. Valid: today, 7d, 30d, all.',\n ParameterSchema: { type: 'object', properties: { range: { type: 'string' } }, required: ['range'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByTimeRange(params),\n },\n {\n Name: 'FilterActivityByIntegration',\n Description: 'Filter the run-activity list to a single integration. Accepts the integration ID or name (exact or partial), or \"all\" to clear.',\n ParameterSchema: { type: 'object', properties: { integration: { type: 'string' } }, required: ['integration'] },\n Handler: async (params: Record<string, unknown>) => this.toolFilterByIntegration(params),\n },\n {\n Name: 'SearchActivity',\n Description: 'Search the run-activity list by integration or company name.',\n ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },\n Handler: async (params: Record<string, unknown>) => this.toolSearch(params),\n },\n {\n Name: 'ClearActivityFilters',\n Description: 'Reset the run-activity filters (status → All, time range → 7d, integration → all, search cleared).',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.ResetIntegrationFilter();\n this.OnSearchValueChange('');\n return { Success: true };\n },\n },\n {\n Name: 'SelectActivityRun',\n Description: 'Open the detail panel for a run. Accepts the run ID or a run label (integration/company/status, exact or partial).',\n ParameterSchema: { type: 'object', properties: { run: { type: 'string' } }, required: ['run'] },\n Handler: async (params: Record<string, unknown>) => this.toolSelectRun(params),\n },\n {\n Name: 'OpenActivityRunRecord',\n Description: 'Open a company-integration-run record in a tab for viewing. Accepts the run ID or a run label (exact or partial).',\n ParameterSchema: { type: 'object', properties: { run: { type: 'string' } }, required: ['run'] },\n Handler: async (params: Record<string, unknown>) => this.toolOpenRunRecord(params),\n },\n {\n Name: 'RefreshIntegrationData',\n Description: 'Reload the integration run-activity history.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n await this.LoadData();\n return { Success: true };\n },\n },\n ]);\n }\n\n private async toolSwitchSurface(params: Record<string, unknown>): Promise<AgentToolResult> {\n const surface = resolveIntegrationSurface(params['surface']);\n if (!surface) {\n return { Success: false, ErrorMessage: 'Invalid surface. Expected one of: Overview, Connections, Activity, Schedules.' };\n }\n const tabId = await this.navigationService.OpenNavItemByName(navLabelForSurface(surface));\n if (!tabId) {\n return { Success: false, ErrorMessage: `Could not open the \"${surface}\" surface.` };\n }\n return { Success: true };\n }\n\n private toolFilterByStatus(params: Record<string, unknown>): AgentToolResult {\n const check = validateEnumParam<StatusFilterType>(params['status'], this.StatusOptions, 'status');\n if (!check.ok) {\n return check.result;\n }\n this.SetStatusFilter(check.value);\n return { Success: true };\n }\n\n private toolFilterByTimeRange(params: Record<string, unknown>): AgentToolResult {\n const allowed = this.DateOptions.map(d => d.Value);\n const check = validateEnumParam<DateFilterType>(params['range'], allowed, 'range');\n if (!check.ok) {\n return check.result;\n }\n this.SetDateFilter(check.value);\n return { Success: true };\n }\n\n private toolFilterByIntegration(params: Record<string, unknown>): AgentToolResult {\n const check = validateStringParam(params['integration'], 'integration');\n if (!check.ok) {\n return check.result;\n }\n if (check.value.trim().toLowerCase() === 'all') {\n this.SetIntegrationFilter(null);\n return { Success: true };\n }\n const candidates: NamedIntegrationRecord[] = this.Integrations.map(i => ({ ID: i.ID, Name: i.Name }));\n const match = resolveIntegrationRecord(check.value, candidates);\n if (!match) {\n return { Success: false, ErrorMessage: buildIntegrationNotFoundError(check.value, candidates, 'integration') };\n }\n this.SetIntegrationFilter(match.ID);\n return { Success: true };\n }\n\n private toolSearch(params: Record<string, unknown>): AgentToolResult {\n const check = validateStringParam(params['query'], 'query');\n if (!check.ok) {\n return check.result;\n }\n this.OnSearchValueChange(check.value);\n return { Success: true };\n }\n\n private async toolSelectRun(params: Record<string, unknown>): Promise<AgentToolResult> {\n const match = this.resolveRunFromParam(params['run']);\n if (!match.ok) {\n return match.result;\n }\n // SelectRun toggles; only open when not already the selected run.\n if (!UUIDsEqual(this.SelectedRunID, match.value.ID)) {\n await this.SelectRun(match.value.ID);\n }\n this.emitAgentContext();\n return { Success: true };\n }\n\n private toolOpenRunRecord(params: Record<string, unknown>): AgentToolResult {\n const match = this.resolveRunFromParam(params['run']);\n if (!match.ok) {\n return match.result;\n }\n this.navigationService.OpenEntityRecord('MJ: Company Integration Runs', CompositeKey.FromID(match.value.ID));\n return { Success: true };\n }\n\n /** Resolve an agent-supplied run reference (id or label) against the loaded runs. */\n private resolveRunFromParam(\n raw: unknown,\n ): { ok: true; value: IntegrationRunRow } | { ok: false; result: AgentToolResult } {\n const check = validateStringParam(raw, 'run');\n if (!check.ok) {\n return { ok: false, result: check.result };\n }\n const candidates: NamedIntegrationRecord[] = this.AllRuns.map(r => ({ ID: r.ID, Name: this.runLabel(r) }));\n const match = resolveIntegrationRecord(check.value, candidates);\n if (!match) {\n return { ok: false, result: { Success: false, ErrorMessage: buildIntegrationNotFoundError(check.value, candidates, 'run') } };\n }\n const run = this.AllRuns.find(r => UUIDsEqual(r.ID, match.ID));\n if (!run) {\n return { ok: false, result: { Success: false, ErrorMessage: buildIntegrationNotFoundError(check.value, candidates, 'run') } };\n }\n return { ok: true, value: run };\n }\n\n /** Human-readable label for a run row, used for agent name-resolution + context. */\n private runLabel(run: IntegrationRunRow): string {\n const who = run.Integration ?? 'Integration';\n const company = run.Company ? ` (${run.Company})` : '';\n return `${who}${company} · ${run.Status}`;\n }\n\n private buildRunSummary(run: IntegrationRunRow): ActivityRunSummary {\n return {\n ID: run.ID,\n Name: this.runLabel(run),\n Status: run.Status,\n TotalRecords: run.TotalRecords,\n When: this.dataService.ComputeRelativeTime(run.StartedAt),\n };\n }\n\n /** Resolve the active integration-filter ID to its display name, or null. */\n private resolveIntegrationFilterName(): string | null {\n if (!this.IntegrationFilter) {\n return null;\n }\n return this.Integrations.find(i => UUIDsEqual(i.ID, this.IntegrationFilter))?.Name ?? null;\n }\n\n private filterByStatus(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n if (this.StatusFilter === 'All') return runs;\n return runs.filter(r => r.Status === this.StatusFilter);\n }\n\n private filterByIntegration(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n if (!this.IntegrationFilter) return runs;\n return runs.filter(r => UUIDsEqual(r.CompanyIntegrationID, this.IntegrationFilter));\n }\n\n private filterByDate(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n const cutoff = this.getDateCutoff(this.DateFilter);\n if (!cutoff) return runs;\n return runs.filter(r => r.StartedAt && new Date(r.StartedAt) >= cutoff);\n }\n\n private filterBySearch(runs: IntegrationRunRow[]): IntegrationRunRow[] {\n if (!this.SearchQuery.trim()) return runs;\n const query = this.SearchQuery.toLowerCase().trim();\n return runs.filter(r =>\n r.Integration?.toLowerCase().includes(query) ||\n r.Company?.toLowerCase().includes(query)\n );\n }\n\n private getDateCutoff(range: DateFilterType): Date | null {\n if (range === 'all') return null;\n const now = new Date();\n if (range === 'today') {\n const today = new Date(now);\n today.setHours(0, 0, 0, 0);\n return today;\n }\n const days = range === '7d' ? 7 : 30;\n const cutoff = new Date(now);\n cutoff.setDate(cutoff.getDate() - days);\n return cutoff;\n }\n\n SetStatusFilter(status: StatusFilterType): void {\n this.StatusFilter = status;\n this.ApplyFilters();\n }\n\n SetDateFilter(range: DateFilterType): void {\n this.DateFilter = range;\n this.ApplyFilters();\n }\n\n SetIntegrationFilter(id: string | null): void {\n this.IntegrationFilter = id;\n this.ApplyFilters();\n }\n\n OnSearchChange(): void {\n this.ApplyFilters();\n }\n\n /** Bridge for <mj-page-search> which emits a plain string. */\n OnSearchValueChange(value: string): void {\n this.SearchQuery = value;\n this.ApplyFilters();\n }\n\n // ---- Integration filter popover wiring ---------------------------------\n\n get ActivityFilterFields(): FilterFieldConfig[] {\n return [\n {\n key: 'dateRange',\n type: 'chips',\n label: 'Date range',\n chipOptions: this.DateOptions.map(d => ({ text: d.Label, value: d.Value })),\n },\n {\n key: 'status',\n type: 'chips',\n label: 'Status',\n chipOptions: this.StatusOptions.map(s => ({ text: s, value: s })),\n },\n {\n key: 'integration',\n type: 'dropdown',\n label: 'Integration',\n icon: 'fa-solid fa-plug',\n placeholder: 'All Integrations',\n filterable: this.Integrations.length > 10,\n options: [\n { text: 'All Integrations', value: '' },\n ...this.Integrations.map(i => ({ text: i.Name, value: i.ID })),\n ],\n },\n ];\n }\n\n get ActivityFilterValues(): Record<string, unknown> {\n return {\n dateRange: this.DateFilter,\n status: this.StatusFilter,\n integration: this.IntegrationFilter ?? ''\n };\n }\n\n get ActiveFilterCount(): number {\n let count = 0;\n if (this.DateFilter !== '7d') count++;\n if (this.StatusFilter !== 'All') count++;\n if (this.IntegrationFilter) count++;\n return count;\n }\n\n OnFilterValuesChange(values: Record<string, unknown>): void {\n const next = (values ?? {}) as { dateRange?: string; status?: string; integration?: string };\n if (next.dateRange && next.dateRange !== this.DateFilter) {\n this.SetDateFilter(next.dateRange as DateFilterType);\n }\n if (next.status && next.status !== this.StatusFilter) {\n this.SetStatusFilter(next.status as StatusFilterType);\n }\n const integ = next.integration ?? '';\n if ((integ || null) !== this.IntegrationFilter) {\n this.SetIntegrationFilter(integ || null);\n }\n }\n\n ResetIntegrationFilter(): void {\n if (this.DateFilter !== '7d') this.SetDateFilter('7d');\n if (this.StatusFilter !== 'All') this.SetStatusFilter('All');\n if (this.IntegrationFilter) this.SetIntegrationFilter(null);\n }\n\n async Refresh(): Promise<void> {\n await this.LoadData();\n }\n\n // ── Run Selection & Expansion ─────────────────────────────\n\n async SelectRun(runID: string): Promise<void> {\n if (UUIDsEqual(this.SelectedRunID, runID)) {\n this.SelectedRunID = null;\n this.SelectedRunDetails = [];\n this.WatermarkData = [];\n this.emitAgentContext();\n return;\n }\n this.SelectedRunID = runID;\n this.ActiveDetailTab = 'entities';\n this.IsLoadingDetail = true;\n this.cdr.detectChanges();\n this.emitAgentContext();\n\n const run = this.findRunByID(runID);\n try {\n this.SelectedRunDetails = await this.LoadRunDetails(runID);\n if (run) {\n await this.LoadWatermarks(run.CompanyIntegrationID);\n }\n } finally {\n this.IsLoadingDetail = false;\n this.cdr.detectChanges();\n }\n }\n\n async ToggleExpand(runID: string): Promise<void> {\n if (UUIDsEqual(this.ExpandedRunID, runID)) {\n this.ExpandedRunID = null;\n this.expandedDetails = [];\n return;\n }\n this.ExpandedRunID = runID;\n this.isLoadingExpanded = true;\n this.cdr.detectChanges();\n try {\n this.expandedDetails = await this.LoadRunDetails(runID);\n } finally {\n this.isLoadingExpanded = false;\n this.cdr.detectChanges();\n }\n }\n\n IsExpanded(runID: string): boolean {\n return UUIDsEqual(this.ExpandedRunID, runID);\n }\n\n IsSelectedRun(runID: string): boolean {\n return UUIDsEqual(this.SelectedRunID, runID);\n }\n\n GetExpandedDetails(): RunDetailRow[] {\n return this.expandedDetails;\n }\n\n IsLoadingExpandedDetails(): boolean {\n return this.isLoadingExpanded;\n }\n\n GetSelectedRun(): IntegrationRunRow | null {\n return this.findRunByID(this.SelectedRunID);\n }\n\n SetDetailTab(tab: 'entities' | 'watermarks'): void {\n this.ActiveDetailTab = tab;\n }\n\n private findRunByID(runID: string | null): IntegrationRunRow | null {\n if (!runID) return null;\n return this.AllRuns.find(r => UUIDsEqual(r.ID, runID)) ?? null;\n }\n\n // ── Formatting Helpers ────────────────────────────────────\n\n FormatDuration(startedAt: Date | string | null, endedAt: Date | string | null): string {\n if (!startedAt || !endedAt) return '--';\n const ms = new Date(endedAt).getTime() - new Date(startedAt).getTime();\n return this.dataService.FormatDuration(ms);\n }\n\n GetRelativeTime(dateStr: Date | string | null): string {\n return this.dataService.ComputeRelativeTime(dateStr);\n }\n\n FormatAbsoluteDate(dateStr: Date | string | null): string {\n if (!dateStr) return '';\n return new Date(dateStr).toLocaleString(undefined, {\n year: 'numeric', month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit', second: '2-digit'\n });\n }\n\n FormatWatermark(value: string | null): string {\n if (!value) return 'Not set';\n if (value.length > 40) return value.substring(0, 37) + '...';\n return value;\n }\n\n FormatDate(dateStr: Date | string | null): string {\n if (!dateStr) return '--';\n return new Date(dateStr).toLocaleString(undefined, {\n month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit'\n });\n }\n\n GetStatusIcon(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 GetStatusColor(status: string): string {\n if (status === 'Success') return 'green';\n if (status === 'Failed') return 'red';\n if (status === 'In Progress') return 'amber';\n return 'gray';\n }\n\n GetStatusDotClass(status: string): string {\n return `status-dot dot-${this.GetStatusColor(status)}`;\n }\n\n StatusChipClass(status: string): string {\n return `chip chip-${this.GetStatusColor(status)}`;\n }\n\n GetErrorCount(run: IntegrationRunRow): number {\n return run.ErrorLog ? 1 : 0;\n }\n\n // ── Summary Computed Properties ───────────────────────────\n\n get TotalRuns(): number {\n return this.FilteredRuns.length;\n }\n\n get SuccessfulRuns(): number {\n return this.FilteredRuns.filter(r => r.Status === 'Success').length;\n }\n\n get FailedRuns(): number {\n return this.FilteredRuns.filter(r => r.Status === 'Failed').length;\n }\n\n get TotalRecordsProcessed(): number {\n return this.FilteredRuns.reduce((acc, r) => acc + r.TotalRecords, 0);\n }\n\n // ── Duration Bar (detail panel) ───────────────────────────\n\n GetDurationBarWidth(run: IntegrationRunRow): number {\n if (!run.StartedAt || !run.EndedAt) return 0;\n return 100;\n }\n\n GetDurationBarLabel(run: IntegrationRunRow): string {\n return this.FormatDuration(run.StartedAt, run.EndedAt);\n }\n\n // ── Resource overrides ────────────────────────────────────\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Activity';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n}\n\nexport function LoadActivityComponent(): void {\n // Tree-shaking prevention: importing this module causes\n // @RegisterClass decorators to fire, registering components.\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Integration Activity\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Sync run history and outcomes\">\n <!-- [meta] retains the succeeded/failed status pills (genuine variant\n signal — error rate at a glance) and the records aggregate\n (non-trivially derived: count of records across all runs).\n \"Total runs\" dropped per chrome slot discipline audit Task B —\n that count equals the visible list's row count. -->\n @if (!IsLoading && AllRuns.length > 0) {\n <div meta>\n <mj-stat-badge [Count]=\"SuccessfulRuns\" Label=\"succeeded\" Variant=\"success\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"FailedRuns\" Label=\"failed\" Variant=\"error\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"TotalRecordsProcessed | number\" Label=\"records\"></mj-stat-badge>\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"Refresh()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search integrations...\"\n [Value]=\"SearchQuery\"\n (ValueChange)=\"OnSearchValueChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ResetIntegrationFilter()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n (Reset)=\"ResetIntegrationFilter()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\">\n<div class=\"activity-container\">\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-area\">\n <mj-loading text=\"Loading activity...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && FilteredRuns.length === 0) {\n <mj-empty-state Variant=\"no-results\" Icon=\"fa-solid fa-inbox\"\n Title=\"No runs found for the selected filters.\" />\n }\n\n <!-- Split View: Run List + Detail Panel -->\n @if (!IsLoading && FilteredRuns.length > 0) {\n <div class=\"split-view\">\n\n <!-- Left panel: Run list -->\n <div class=\"run-list-panel\">\n @for (run of FilteredRuns; track run.ID) {\n <!-- Run row → accordion panel. The title slot carries the run's status +\n integration + meta columns; the accordion toggle reveals the entity\n breakdown (formerly the chevron's ToggleExpand). SelectRun (the\n right-hand detail panel) moves to the header actions slot, since the\n accordion header click now owns expand/collapse.\n Side-effecting handler (ToggleExpand async-loads the breakdown) +\n Default CD → [Expanded] + (ExpandedChange). -->\n <mj-accordion-panel class=\"run-panel\"\n [class.selected]=\"IsSelectedRun(run.ID)\"\n Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"IsExpanded(run.ID)\"\n (ExpandedChange)=\"ToggleExpand(run.ID)\">\n <ng-template mjAccordionTitle>\n <!-- Status indicator -->\n <span [class]=\"GetStatusDotClass(run.Status)\"></span>\n <i [class]=\"GetStatusIcon(run.Status)\"\n [class.icon-green]=\"run.Status === 'Success'\"\n [class.icon-red]=\"run.Status === 'Failed'\"\n [class.icon-amber]=\"run.Status === 'In Progress'\"\n [class.icon-gray]=\"run.Status === 'Pending'\"\n class=\"status-icon\"></i>\n\n <!-- Integration info -->\n <div class=\"run-info\">\n <span class=\"run-integration\">{{ run.Integration }}</span>\n <span class=\"run-company\">{{ run.Company }}</span>\n </div>\n\n <!-- Started time -->\n <div class=\"run-meta\" [title]=\"FormatAbsoluteDate(run.StartedAt)\">\n {{ GetRelativeTime(run.StartedAt) }}\n </div>\n\n <!-- Duration -->\n <div class=\"run-meta run-duration\">\n {{ FormatDuration(run.StartedAt, run.EndedAt) }}\n </div>\n\n <!-- Records -->\n <div class=\"run-meta run-records\">\n {{ run.TotalRecords | number }}\n </div>\n\n <!-- Errors -->\n <div class=\"run-meta run-errors\" [class.has-errors]=\"run.ErrorLog\">\n @if (run.ErrorLog) {\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n }\n </div>\n\n <!-- Triggered by -->\n <div class=\"run-meta run-user\">\n {{ run.RunByUser || 'Scheduled' }}\n </div>\n </ng-template>\n\n <!-- Open/close the right-hand detail panel (entity breakdown +\n watermarks). Lives in the actions slot because the accordion\n header click is now the expand/collapse toggle. -->\n <ng-template mjAccordionActions>\n <button type=\"button\" class=\"detail-toggle-btn\"\n [class.active]=\"IsSelectedRun(run.ID)\"\n (click)=\"SelectRun(run.ID)\"\n title=\"Show run detail panel\">\n <i class=\"fa-solid fa-table-columns\"></i>\n </button>\n </ng-template>\n\n <!-- Expanded section: entity breakdown (lazy body) -->\n <ng-template mjAccordionBody>\n <div class=\"expanded-section\">\n @if (IsLoadingExpandedDetails()) {\n <div class=\"expanded-loading\">\n <mj-loading text=\"Loading breakdown...\" size=\"small\"></mj-loading>\n </div>\n } @else if (GetExpandedDetails().length === 0) {\n <mj-empty-state class=\"expanded-empty\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No entity details for this run.\" />\n } @else {\n <table class=\"entity-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th class=\"num-col\">Processed</th>\n <th class=\"num-col\">Created</th>\n <th class=\"num-col\">Updated</th>\n <th class=\"num-col\">Deleted</th>\n <th class=\"num-col\">Errored</th>\n <th class=\"num-col\">Skipped</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of GetExpandedDetails(); track detail.EntityID) {\n <tr [class.error-row]=\"detail.RecordsErrored > 0\">\n <td>{{ detail.Entity }}</td>\n <td class=\"num-col\">{{ detail.RecordsProcessed | number }}</td>\n <td class=\"num-col created-col\">{{ detail.RecordsCreated | number }}</td>\n <td class=\"num-col updated-col\">{{ detail.RecordsUpdated | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsDeleted | number }}</td>\n <td class=\"num-col error-col\">{{ detail.RecordsErrored | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsSkipped | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Error log in expanded view -->\n @if (run.ErrorLog) {\n <div class=\"error-log-block\">\n <div class=\"error-log-label\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error Log\n </div>\n <pre class=\"error-log-content\">{{ run.ErrorLog }}</pre>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n\n <!-- Right panel: Detail -->\n @if (SelectedRunID && GetSelectedRun()) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-header-info\">\n <h3>{{ GetSelectedRun()!.Integration }}</h3>\n <span [class]=\"StatusChipClass(GetSelectedRun()!.Status)\">\n <i [class]=\"GetStatusIcon(GetSelectedRun()!.Status)\"></i>\n {{ GetSelectedRun()!.Status }}\n </span>\n <span class=\"detail-time\">{{ FormatDate(GetSelectedRun()!.StartedAt) }}</span>\n </div>\n <button class=\"close-detail-btn\" (click)=\"SelectRun(SelectedRunID!)\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Duration bar -->\n @if (GetSelectedRun()!.StartedAt && GetSelectedRun()!.EndedAt) {\n <div class=\"duration-bar-container\">\n <div class=\"duration-bar-track\">\n <div class=\"duration-bar-fill\"\n [style.width.%]=\"GetDurationBarWidth(GetSelectedRun()!)\"></div>\n </div>\n <div class=\"duration-bar-labels\">\n <span>{{ FormatDate(GetSelectedRun()!.StartedAt) }}</span>\n <span class=\"duration-bar-value\">{{ GetDurationBarLabel(GetSelectedRun()!) }}</span>\n <span>{{ FormatDate(GetSelectedRun()!.EndedAt) }}</span>\n </div>\n </div>\n }\n\n <!-- Tabs -->\n <div class=\"detail-tabs\">\n <button class=\"tab-btn\" [class.active]=\"ActiveDetailTab === 'entities'\"\n (click)=\"SetDetailTab('entities')\">\n <i class=\"fa-solid fa-table\"></i> Entity Breakdown\n </button>\n <button class=\"tab-btn\" [class.active]=\"ActiveDetailTab === 'watermarks'\"\n (click)=\"SetDetailTab('watermarks')\">\n <i class=\"fa-solid fa-droplet\"></i> Watermarks\n </button>\n </div>\n\n <div class=\"detail-content\">\n <!-- Entity breakdown tab -->\n @if (ActiveDetailTab === 'entities') {\n @if (IsLoadingDetail) {\n <div class=\"detail-loading\">\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n </div>\n } @else if (SelectedRunDetails.length === 0) {\n <mj-empty-state class=\"detail-empty\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No entity detail records for this run.\" />\n } @else {\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th class=\"num-col\">Processed</th>\n <th class=\"num-col\">Created</th>\n <th class=\"num-col\">Updated</th>\n <th class=\"num-col\">Deleted</th>\n <th class=\"num-col\">Errors</th>\n <th class=\"num-col\">Skipped</th>\n </tr>\n </thead>\n <tbody>\n @for (detail of SelectedRunDetails; track detail.EntityID) {\n <tr [class.error-row]=\"detail.RecordsErrored > 0\">\n <td>{{ detail.Entity }}</td>\n <td class=\"num-col\">{{ detail.RecordsProcessed | number }}</td>\n <td class=\"num-col created-col\">{{ detail.RecordsCreated | number }}</td>\n <td class=\"num-col updated-col\">{{ detail.RecordsUpdated | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsDeleted | number }}</td>\n <td class=\"num-col error-col\">{{ detail.RecordsErrored | number }}</td>\n <td class=\"num-col\">{{ detail.RecordsSkipped | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- Error log -->\n @if (GetSelectedRun()?.ErrorLog) {\n <div class=\"error-log-block detail-error-log\">\n <div class=\"error-log-label\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> Error Log\n </div>\n <pre class=\"error-log-content\">{{ GetSelectedRun()!.ErrorLog }}</pre>\n </div>\n }\n }\n\n <!-- Watermarks tab -->\n @if (ActiveDetailTab === 'watermarks') {\n @if (IsLoadingWatermarks) {\n <div class=\"detail-loading\">\n <mj-loading text=\"Loading watermarks...\" size=\"small\"></mj-loading>\n </div>\n } @else if (WatermarkData.length === 0) {\n <mj-empty-state class=\"detail-empty\" Size=\"compact\" Icon=\"fa-solid fa-droplet-slash\"\n Title=\"No watermarks recorded for this integration.\" />\n } @else {\n <table class=\"detail-table\">\n <thead>\n <tr>\n <th>Entity Map</th>\n <th>Type</th>\n <th>Current Value</th>\n <th>Last Applied</th>\n </tr>\n </thead>\n <tbody>\n @for (wm of WatermarkData; track wm.ID) {\n <tr>\n <td>{{ wm.EntityMap }}</td>\n <td><span class=\"type-badge\">{{ wm.WatermarkType }}</span></td>\n <td class=\"mono-cell watermark-value\">{{ FormatWatermark(wm.WatermarkValue) }}</td>\n <td>{{ FormatDate(wm.LastSyncAt) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n }\n </div>\n </div>\n }\n\n </div>\n }\n\n</div>\n </mj-page-body>\n</mj-page-layout>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mapping-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -2316,6 +2316,9 @@ let MappingWorkspaceComponent = class MappingWorkspaceComponent extends BaseReso
|
|
|
2316
2316
|
return 'green';
|
|
2317
2317
|
if (this.LatestRun.Status === 'Failed')
|
|
2318
2318
|
return 'red';
|
|
2319
|
+
// Deliberately stopped reads as neutral, not as a defect and not as still-running.
|
|
2320
|
+
if (this.LatestRun.Status === 'Cancelled')
|
|
2321
|
+
return 'gray';
|
|
2319
2322
|
return 'amber';
|
|
2320
2323
|
}
|
|
2321
2324
|
FormatDate(dateStr) {
|