@memberjunction/ng-dashboards 5.34.1 → 5.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +202 -158
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +191 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +19 -79
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +19 -79
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +19 -79
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +307 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +654 -648
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +230 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +679 -786
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +114 -99
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +51 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -6
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +37 -7
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +46 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +40 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +42 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -10,463 +10,416 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
|
10
10
|
import { RunView } from '@memberjunction/core';
|
|
11
11
|
import { IntegrationDataService, } from '../../services/integration-data.service';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@
|
|
13
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
14
14
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
15
15
|
import * as i3 from "@angular/common";
|
|
16
|
-
const _forTrack0 = ($index, $item) => $item.
|
|
17
|
-
const _forTrack1 = ($index, $item) => $item.
|
|
16
|
+
const _forTrack0 = ($index, $item) => $item.Value;
|
|
17
|
+
const _forTrack1 = ($index, $item) => $item.ID;
|
|
18
18
|
const _forTrack2 = ($index, $item) => $item.EntityID;
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
i0.ɵɵ
|
|
22
|
-
i0.ɵɵ
|
|
23
|
-
i0.ɵɵtext(1);
|
|
19
|
+
function ActivityComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
21
|
+
i0.ɵɵelement(1, "mj-stat-badge", 15)(2, "mj-stat-badge", 16)(3, "mj-stat-badge", 17);
|
|
22
|
+
i0.ɵɵpipe(4, "number");
|
|
24
23
|
i0.ɵɵelementEnd();
|
|
25
24
|
} if (rf & 2) {
|
|
26
|
-
const
|
|
27
|
-
const ctx_r2 = i0.ɵɵnextContext();
|
|
28
|
-
i0.ɵɵclassProp("active", ctx_r2.StatusFilter === status_r2);
|
|
25
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
29
26
|
i0.ɵɵadvance();
|
|
30
|
-
i0.ɵɵ
|
|
27
|
+
i0.ɵɵproperty("Count", ctx_r0.SuccessfulRuns);
|
|
28
|
+
i0.ɵɵadvance();
|
|
29
|
+
i0.ɵɵproperty("Count", ctx_r0.FailedRuns);
|
|
30
|
+
i0.ɵɵadvance();
|
|
31
|
+
i0.ɵɵproperty("Count", i0.ɵɵpipeBind1(4, 3, ctx_r0.TotalRecordsProcessed));
|
|
31
32
|
} }
|
|
32
33
|
function ActivityComponent_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
-
i0.ɵɵ
|
|
34
|
-
i0.ɵɵ
|
|
34
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
35
|
+
i0.ɵɵelementStart(0, "mj-filter-chip", 18);
|
|
36
|
+
i0.ɵɵlistener("Clicked", function ActivityComponent_For_10_Template_mj_filter_chip_Clicked_0_listener() { const status_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetStatusFilter(status_r3)); });
|
|
35
37
|
i0.ɵɵelementEnd();
|
|
36
38
|
} if (rf & 2) {
|
|
37
|
-
const
|
|
38
|
-
i0.ɵɵ
|
|
39
|
-
i0.ɵɵ
|
|
40
|
-
i0.ɵɵtextInterpolate(opt_r4.Name);
|
|
39
|
+
const status_r3 = ctx.$implicit;
|
|
40
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
41
|
+
i0.ɵɵproperty("Label", status_r3)("Active", ctx_r0.StatusFilter === status_r3);
|
|
41
42
|
} }
|
|
42
43
|
function ActivityComponent_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
-
const
|
|
44
|
-
i0.ɵɵelementStart(0, "
|
|
45
|
-
i0.ɵɵlistener("
|
|
46
|
-
i0.ɵɵtext(1);
|
|
47
|
-
i0.ɵɵelementEnd();
|
|
48
|
-
} if (rf & 2) {
|
|
49
|
-
const d_r6 = ctx.$implicit;
|
|
50
|
-
const ctx_r2 = i0.ɵɵnextContext();
|
|
51
|
-
i0.ɵɵclassProp("active", ctx_r2.DateFilter === d_r6.Value);
|
|
52
|
-
i0.ɵɵadvance();
|
|
53
|
-
i0.ɵɵtextInterpolate1(" ", d_r6.Label, " ");
|
|
54
|
-
} }
|
|
55
|
-
function ActivityComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
-
i0.ɵɵelementStart(0, "div", 11)(1, "div", 16);
|
|
57
|
-
i0.ɵɵelement(2, "span", 17);
|
|
58
|
-
i0.ɵɵelementStart(3, "span", 18);
|
|
59
|
-
i0.ɵɵtext(4);
|
|
44
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
45
|
+
i0.ɵɵelementStart(0, "mj-filter-chip", 18);
|
|
46
|
+
i0.ɵɵlistener("Clicked", function ActivityComponent_For_13_Template_mj_filter_chip_Clicked_0_listener() { const d_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetDateFilter(d_r5.Value)); });
|
|
60
47
|
i0.ɵɵelementEnd();
|
|
61
|
-
i0.ɵɵelementStart(5, "span", 19);
|
|
62
|
-
i0.ɵɵtext(6, "Total Runs");
|
|
63
|
-
i0.ɵɵelementEnd()();
|
|
64
|
-
i0.ɵɵelementStart(7, "div", 16);
|
|
65
|
-
i0.ɵɵelement(8, "span", 20);
|
|
66
|
-
i0.ɵɵelementStart(9, "span", 21);
|
|
67
|
-
i0.ɵɵtext(10);
|
|
68
|
-
i0.ɵɵelementEnd();
|
|
69
|
-
i0.ɵɵelementStart(11, "span", 19);
|
|
70
|
-
i0.ɵɵtext(12, "Successful");
|
|
71
|
-
i0.ɵɵelementEnd()();
|
|
72
|
-
i0.ɵɵelementStart(13, "div", 16);
|
|
73
|
-
i0.ɵɵelement(14, "span", 22);
|
|
74
|
-
i0.ɵɵelementStart(15, "span", 23);
|
|
75
|
-
i0.ɵɵtext(16);
|
|
76
|
-
i0.ɵɵelementEnd();
|
|
77
|
-
i0.ɵɵelementStart(17, "span", 19);
|
|
78
|
-
i0.ɵɵtext(18, "Failed");
|
|
79
|
-
i0.ɵɵelementEnd()();
|
|
80
|
-
i0.ɵɵelementStart(19, "div", 16);
|
|
81
|
-
i0.ɵɵelement(20, "span", 17);
|
|
82
|
-
i0.ɵɵelementStart(21, "span", 18);
|
|
83
|
-
i0.ɵɵtext(22);
|
|
84
|
-
i0.ɵɵpipe(23, "number");
|
|
85
|
-
i0.ɵɵelementEnd();
|
|
86
|
-
i0.ɵɵelementStart(24, "span", 19);
|
|
87
|
-
i0.ɵɵtext(25, "Records Processed");
|
|
88
|
-
i0.ɵɵelementEnd()()();
|
|
89
48
|
} if (rf & 2) {
|
|
90
|
-
const
|
|
91
|
-
i0.ɵɵ
|
|
92
|
-
i0.ɵɵ
|
|
93
|
-
i0.ɵɵadvance(6);
|
|
94
|
-
i0.ɵɵtextInterpolate(ctx_r2.SuccessfulRuns);
|
|
95
|
-
i0.ɵɵadvance(6);
|
|
96
|
-
i0.ɵɵtextInterpolate(ctx_r2.FailedRuns);
|
|
97
|
-
i0.ɵɵadvance(6);
|
|
98
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(23, 4, ctx_r2.TotalRecordsProcessed));
|
|
49
|
+
const d_r5 = ctx.$implicit;
|
|
50
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
51
|
+
i0.ɵɵproperty("Label", d_r5.Label)("Active", ctx_r0.DateFilter === d_r5.Value);
|
|
99
52
|
} }
|
|
100
|
-
function
|
|
53
|
+
function ActivityComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
101
54
|
i0.ɵɵelementStart(0, "div", 12);
|
|
102
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
55
|
+
i0.ɵɵelement(1, "mj-loading", 19);
|
|
103
56
|
i0.ɵɵelementEnd();
|
|
104
57
|
} }
|
|
105
|
-
function
|
|
58
|
+
function ActivityComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
106
59
|
i0.ɵɵelementStart(0, "div", 13);
|
|
107
|
-
i0.ɵɵelement(1, "i",
|
|
60
|
+
i0.ɵɵelement(1, "i", 20);
|
|
108
61
|
i0.ɵɵelementStart(2, "p");
|
|
109
62
|
i0.ɵɵtext(3, "No runs found for the selected filters.");
|
|
110
63
|
i0.ɵɵelementEnd()();
|
|
111
64
|
} }
|
|
112
|
-
function
|
|
113
|
-
i0.ɵɵelement(0, "i",
|
|
65
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelement(0, "i", 34);
|
|
114
67
|
} }
|
|
115
|
-
function
|
|
116
|
-
i0.ɵɵelementStart(0, "div",
|
|
117
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
68
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
70
|
+
i0.ɵɵelement(1, "mj-loading", 44);
|
|
118
71
|
i0.ɵɵelementEnd();
|
|
119
72
|
} }
|
|
120
|
-
function
|
|
121
|
-
i0.ɵɵelementStart(0, "div",
|
|
122
|
-
i0.ɵɵelement(1, "i",
|
|
73
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
75
|
+
i0.ɵɵelement(1, "i", 45);
|
|
123
76
|
i0.ɵɵtext(2, " No entity details for this run. ");
|
|
124
77
|
i0.ɵɵelementEnd();
|
|
125
78
|
} }
|
|
126
|
-
function
|
|
79
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_3_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
127
80
|
i0.ɵɵelementStart(0, "tr")(1, "td");
|
|
128
81
|
i0.ɵɵtext(2);
|
|
129
82
|
i0.ɵɵelementEnd();
|
|
130
|
-
i0.ɵɵelementStart(3, "td",
|
|
83
|
+
i0.ɵɵelementStart(3, "td", 46);
|
|
131
84
|
i0.ɵɵtext(4);
|
|
132
85
|
i0.ɵɵpipe(5, "number");
|
|
133
86
|
i0.ɵɵelementEnd();
|
|
134
|
-
i0.ɵɵelementStart(6, "td",
|
|
87
|
+
i0.ɵɵelementStart(6, "td", 48);
|
|
135
88
|
i0.ɵɵtext(7);
|
|
136
89
|
i0.ɵɵpipe(8, "number");
|
|
137
90
|
i0.ɵɵelementEnd();
|
|
138
|
-
i0.ɵɵelementStart(9, "td",
|
|
91
|
+
i0.ɵɵelementStart(9, "td", 49);
|
|
139
92
|
i0.ɵɵtext(10);
|
|
140
93
|
i0.ɵɵpipe(11, "number");
|
|
141
94
|
i0.ɵɵelementEnd();
|
|
142
|
-
i0.ɵɵelementStart(12, "td",
|
|
95
|
+
i0.ɵɵelementStart(12, "td", 46);
|
|
143
96
|
i0.ɵɵtext(13);
|
|
144
97
|
i0.ɵɵpipe(14, "number");
|
|
145
98
|
i0.ɵɵelementEnd();
|
|
146
|
-
i0.ɵɵelementStart(15, "td",
|
|
99
|
+
i0.ɵɵelementStart(15, "td", 50);
|
|
147
100
|
i0.ɵɵtext(16);
|
|
148
101
|
i0.ɵɵpipe(17, "number");
|
|
149
102
|
i0.ɵɵelementEnd();
|
|
150
|
-
i0.ɵɵelementStart(18, "td",
|
|
103
|
+
i0.ɵɵelementStart(18, "td", 46);
|
|
151
104
|
i0.ɵɵtext(19);
|
|
152
105
|
i0.ɵɵpipe(20, "number");
|
|
153
106
|
i0.ɵɵelementEnd()();
|
|
154
107
|
} if (rf & 2) {
|
|
155
|
-
const
|
|
156
|
-
i0.ɵɵclassProp("error-row",
|
|
108
|
+
const detail_r9 = ctx.$implicit;
|
|
109
|
+
i0.ɵɵclassProp("error-row", detail_r9.RecordsErrored > 0);
|
|
157
110
|
i0.ɵɵadvance(2);
|
|
158
|
-
i0.ɵɵtextInterpolate(
|
|
111
|
+
i0.ɵɵtextInterpolate(detail_r9.Entity);
|
|
159
112
|
i0.ɵɵadvance(2);
|
|
160
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 9,
|
|
113
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 9, detail_r9.RecordsProcessed));
|
|
161
114
|
i0.ɵɵadvance(3);
|
|
162
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(8, 11,
|
|
115
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(8, 11, detail_r9.RecordsCreated));
|
|
163
116
|
i0.ɵɵadvance(3);
|
|
164
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 13,
|
|
117
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 13, detail_r9.RecordsUpdated));
|
|
165
118
|
i0.ɵɵadvance(3);
|
|
166
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 15,
|
|
119
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 15, detail_r9.RecordsDeleted));
|
|
167
120
|
i0.ɵɵadvance(3);
|
|
168
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(17, 17,
|
|
121
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(17, 17, detail_r9.RecordsErrored));
|
|
169
122
|
i0.ɵɵadvance(3);
|
|
170
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(20, 19,
|
|
123
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(20, 19, detail_r9.RecordsSkipped));
|
|
171
124
|
} }
|
|
172
|
-
function
|
|
173
|
-
i0.ɵɵelementStart(0, "table",
|
|
125
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
126
|
+
i0.ɵɵelementStart(0, "table", 42)(1, "thead")(2, "tr")(3, "th");
|
|
174
127
|
i0.ɵɵtext(4, "Entity");
|
|
175
128
|
i0.ɵɵelementEnd();
|
|
176
|
-
i0.ɵɵelementStart(5, "th",
|
|
129
|
+
i0.ɵɵelementStart(5, "th", 46);
|
|
177
130
|
i0.ɵɵtext(6, "Processed");
|
|
178
131
|
i0.ɵɵelementEnd();
|
|
179
|
-
i0.ɵɵelementStart(7, "th",
|
|
132
|
+
i0.ɵɵelementStart(7, "th", 46);
|
|
180
133
|
i0.ɵɵtext(8, "Created");
|
|
181
134
|
i0.ɵɵelementEnd();
|
|
182
|
-
i0.ɵɵelementStart(9, "th",
|
|
135
|
+
i0.ɵɵelementStart(9, "th", 46);
|
|
183
136
|
i0.ɵɵtext(10, "Updated");
|
|
184
137
|
i0.ɵɵelementEnd();
|
|
185
|
-
i0.ɵɵelementStart(11, "th",
|
|
138
|
+
i0.ɵɵelementStart(11, "th", 46);
|
|
186
139
|
i0.ɵɵtext(12, "Deleted");
|
|
187
140
|
i0.ɵɵelementEnd();
|
|
188
|
-
i0.ɵɵelementStart(13, "th",
|
|
141
|
+
i0.ɵɵelementStart(13, "th", 46);
|
|
189
142
|
i0.ɵɵtext(14, "Errored");
|
|
190
143
|
i0.ɵɵelementEnd();
|
|
191
|
-
i0.ɵɵelementStart(15, "th",
|
|
144
|
+
i0.ɵɵelementStart(15, "th", 46);
|
|
192
145
|
i0.ɵɵtext(16, "Skipped");
|
|
193
146
|
i0.ɵɵelementEnd()()();
|
|
194
147
|
i0.ɵɵelementStart(17, "tbody");
|
|
195
|
-
i0.ɵɵrepeaterCreate(18,
|
|
148
|
+
i0.ɵɵrepeaterCreate(18, ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_3_For_19_Template, 21, 21, "tr", 47, _forTrack2);
|
|
196
149
|
i0.ɵɵelementEnd()();
|
|
197
150
|
} if (rf & 2) {
|
|
198
|
-
const
|
|
151
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
199
152
|
i0.ɵɵadvance(18);
|
|
200
|
-
i0.ɵɵrepeater(
|
|
153
|
+
i0.ɵɵrepeater(ctx_r0.GetExpandedDetails());
|
|
201
154
|
} }
|
|
202
|
-
function
|
|
203
|
-
i0.ɵɵelementStart(0, "div",
|
|
204
|
-
i0.ɵɵelement(2, "i",
|
|
155
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 51);
|
|
157
|
+
i0.ɵɵelement(2, "i", 34);
|
|
205
158
|
i0.ɵɵtext(3, " Error Log ");
|
|
206
159
|
i0.ɵɵelementEnd();
|
|
207
|
-
i0.ɵɵelementStart(4, "pre",
|
|
160
|
+
i0.ɵɵelementStart(4, "pre", 52);
|
|
208
161
|
i0.ɵɵtext(5);
|
|
209
162
|
i0.ɵɵelementEnd()();
|
|
210
163
|
} if (rf & 2) {
|
|
211
|
-
const
|
|
164
|
+
const run_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
212
165
|
i0.ɵɵadvance(5);
|
|
213
|
-
i0.ɵɵtextInterpolate(
|
|
166
|
+
i0.ɵɵtextInterpolate(run_r7.ErrorLog);
|
|
214
167
|
} }
|
|
215
|
-
function
|
|
216
|
-
const
|
|
217
|
-
i0.ɵɵelementStart(0, "div",
|
|
218
|
-
i0.ɵɵlistener("click", function
|
|
219
|
-
i0.ɵɵconditionalCreate(1,
|
|
220
|
-
i0.ɵɵconditionalCreate(4,
|
|
168
|
+
function ActivityComponent_Conditional_18_For_3_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
171
|
+
i0.ɵɵlistener("click", function ActivityComponent_Conditional_18_For_3_Conditional_22_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
172
|
+
i0.ɵɵconditionalCreate(1, ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_1_Template, 2, 0, "div", 40)(2, ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_2_Template, 3, 0, "div", 41)(3, ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_3_Template, 20, 0, "table", 42);
|
|
173
|
+
i0.ɵɵconditionalCreate(4, ActivityComponent_Conditional_18_For_3_Conditional_22_Conditional_4_Template, 6, 1, "div", 43);
|
|
221
174
|
i0.ɵɵelementEnd();
|
|
222
175
|
} if (rf & 2) {
|
|
223
|
-
const
|
|
224
|
-
const
|
|
176
|
+
const run_r7 = i0.ɵɵnextContext().$implicit;
|
|
177
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
225
178
|
i0.ɵɵadvance();
|
|
226
|
-
i0.ɵɵconditional(
|
|
179
|
+
i0.ɵɵconditional(ctx_r0.IsLoadingExpandedDetails() ? 1 : ctx_r0.GetExpandedDetails().length === 0 ? 2 : 3);
|
|
227
180
|
i0.ɵɵadvance(3);
|
|
228
|
-
i0.ɵɵconditional(
|
|
181
|
+
i0.ɵɵconditional(run_r7.ErrorLog ? 4 : -1);
|
|
229
182
|
} }
|
|
230
|
-
function
|
|
231
|
-
const
|
|
232
|
-
i0.ɵɵelementStart(0, "div",
|
|
233
|
-
i0.ɵɵlistener("click", function
|
|
234
|
-
i0.ɵɵelementStart(1, "div",
|
|
235
|
-
i0.ɵɵelement(2, "span")(3, "i",
|
|
236
|
-
i0.ɵɵelementStart(4, "div",
|
|
183
|
+
function ActivityComponent_Conditional_18_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
184
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
185
|
+
i0.ɵɵelementStart(0, "div", 24);
|
|
186
|
+
i0.ɵɵlistener("click", function ActivityComponent_Conditional_18_For_3_Template_div_click_0_listener() { const run_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SelectRun(run_r7.ID)); });
|
|
187
|
+
i0.ɵɵelementStart(1, "div", 25);
|
|
188
|
+
i0.ɵɵelement(2, "span")(3, "i", 26);
|
|
189
|
+
i0.ɵɵelementStart(4, "div", 27)(5, "span", 28);
|
|
237
190
|
i0.ɵɵtext(6);
|
|
238
191
|
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵelementStart(7, "span",
|
|
192
|
+
i0.ɵɵelementStart(7, "span", 29);
|
|
240
193
|
i0.ɵɵtext(8);
|
|
241
194
|
i0.ɵɵelementEnd()();
|
|
242
|
-
i0.ɵɵelementStart(9, "div",
|
|
195
|
+
i0.ɵɵelementStart(9, "div", 30);
|
|
243
196
|
i0.ɵɵtext(10);
|
|
244
197
|
i0.ɵɵelementEnd();
|
|
245
|
-
i0.ɵɵelementStart(11, "div",
|
|
198
|
+
i0.ɵɵelementStart(11, "div", 31);
|
|
246
199
|
i0.ɵɵtext(12);
|
|
247
200
|
i0.ɵɵelementEnd();
|
|
248
|
-
i0.ɵɵelementStart(13, "div",
|
|
201
|
+
i0.ɵɵelementStart(13, "div", 32);
|
|
249
202
|
i0.ɵɵtext(14);
|
|
250
203
|
i0.ɵɵpipe(15, "number");
|
|
251
204
|
i0.ɵɵelementEnd();
|
|
252
|
-
i0.ɵɵelementStart(16, "div",
|
|
253
|
-
i0.ɵɵconditionalCreate(17,
|
|
205
|
+
i0.ɵɵelementStart(16, "div", 33);
|
|
206
|
+
i0.ɵɵconditionalCreate(17, ActivityComponent_Conditional_18_For_3_Conditional_17_Template, 1, 0, "i", 34);
|
|
254
207
|
i0.ɵɵelementEnd();
|
|
255
|
-
i0.ɵɵelementStart(18, "div",
|
|
208
|
+
i0.ɵɵelementStart(18, "div", 35);
|
|
256
209
|
i0.ɵɵtext(19);
|
|
257
210
|
i0.ɵɵelementEnd();
|
|
258
|
-
i0.ɵɵelementStart(20, "button",
|
|
259
|
-
i0.ɵɵlistener("click", function
|
|
260
|
-
i0.ɵɵelement(21, "i",
|
|
211
|
+
i0.ɵɵelementStart(20, "button", 36);
|
|
212
|
+
i0.ɵɵlistener("click", function ActivityComponent_Conditional_18_For_3_Template_button_click_20_listener($event) { const run_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.ToggleExpand(run_r7.ID); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
213
|
+
i0.ɵɵelement(21, "i", 37);
|
|
261
214
|
i0.ɵɵelementEnd()();
|
|
262
|
-
i0.ɵɵconditionalCreate(22,
|
|
215
|
+
i0.ɵɵconditionalCreate(22, ActivityComponent_Conditional_18_For_3_Conditional_22_Template, 5, 2, "div", 38);
|
|
263
216
|
i0.ɵɵelementEnd();
|
|
264
217
|
} if (rf & 2) {
|
|
265
|
-
const
|
|
266
|
-
const
|
|
267
|
-
i0.ɵɵclassProp("selected",
|
|
218
|
+
const run_r7 = ctx.$implicit;
|
|
219
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
220
|
+
i0.ɵɵclassProp("selected", ctx_r0.IsSelectedRun(run_r7.ID));
|
|
268
221
|
i0.ɵɵadvance(2);
|
|
269
|
-
i0.ɵɵclassMap(
|
|
222
|
+
i0.ɵɵclassMap(ctx_r0.GetStatusDotClass(run_r7.Status));
|
|
270
223
|
i0.ɵɵadvance();
|
|
271
|
-
i0.ɵɵclassMap(
|
|
272
|
-
i0.ɵɵclassProp("icon-green",
|
|
224
|
+
i0.ɵɵclassMap(ctx_r0.GetStatusIcon(run_r7.Status));
|
|
225
|
+
i0.ɵɵclassProp("icon-green", run_r7.Status === "Success")("icon-red", run_r7.Status === "Failed")("icon-amber", run_r7.Status === "In Progress")("icon-gray", run_r7.Status === "Pending");
|
|
273
226
|
i0.ɵɵadvance(3);
|
|
274
|
-
i0.ɵɵtextInterpolate(
|
|
227
|
+
i0.ɵɵtextInterpolate(run_r7.Integration);
|
|
275
228
|
i0.ɵɵadvance(2);
|
|
276
|
-
i0.ɵɵtextInterpolate(
|
|
229
|
+
i0.ɵɵtextInterpolate(run_r7.Company);
|
|
277
230
|
i0.ɵɵadvance();
|
|
278
|
-
i0.ɵɵproperty("title",
|
|
231
|
+
i0.ɵɵproperty("title", ctx_r0.FormatAbsoluteDate(run_r7.StartedAt));
|
|
279
232
|
i0.ɵɵadvance();
|
|
280
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
233
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.GetRelativeTime(run_r7.StartedAt), " ");
|
|
281
234
|
i0.ɵɵadvance(2);
|
|
282
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
235
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.FormatDuration(run_r7.StartedAt, run_r7.EndedAt), " ");
|
|
283
236
|
i0.ɵɵadvance(2);
|
|
284
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 27,
|
|
237
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 27, run_r7.TotalRecords), " ");
|
|
285
238
|
i0.ɵɵadvance(2);
|
|
286
|
-
i0.ɵɵclassProp("has-errors",
|
|
239
|
+
i0.ɵɵclassProp("has-errors", run_r7.ErrorLog);
|
|
287
240
|
i0.ɵɵadvance();
|
|
288
|
-
i0.ɵɵconditional(
|
|
241
|
+
i0.ɵɵconditional(run_r7.ErrorLog ? 17 : -1);
|
|
289
242
|
i0.ɵɵadvance(2);
|
|
290
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
243
|
+
i0.ɵɵtextInterpolate1(" ", run_r7.RunByUser || "Scheduled", " ");
|
|
291
244
|
i0.ɵɵadvance(2);
|
|
292
|
-
i0.ɵɵclassProp("rotated",
|
|
245
|
+
i0.ɵɵclassProp("rotated", ctx_r0.IsExpanded(run_r7.ID));
|
|
293
246
|
i0.ɵɵadvance();
|
|
294
|
-
i0.ɵɵconditional(
|
|
247
|
+
i0.ɵɵconditional(ctx_r0.IsExpanded(run_r7.ID) ? 22 : -1);
|
|
295
248
|
} }
|
|
296
|
-
function
|
|
297
|
-
i0.ɵɵelementStart(0, "div",
|
|
298
|
-
i0.ɵɵelement(2, "div",
|
|
249
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
250
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 64);
|
|
251
|
+
i0.ɵɵelement(2, "div", 65);
|
|
299
252
|
i0.ɵɵelementEnd();
|
|
300
|
-
i0.ɵɵelementStart(3, "div",
|
|
253
|
+
i0.ɵɵelementStart(3, "div", 66)(4, "span");
|
|
301
254
|
i0.ɵɵtext(5);
|
|
302
255
|
i0.ɵɵelementEnd();
|
|
303
|
-
i0.ɵɵelementStart(6, "span",
|
|
256
|
+
i0.ɵɵelementStart(6, "span", 67);
|
|
304
257
|
i0.ɵɵtext(7);
|
|
305
258
|
i0.ɵɵelementEnd();
|
|
306
259
|
i0.ɵɵelementStart(8, "span");
|
|
307
260
|
i0.ɵɵtext(9);
|
|
308
261
|
i0.ɵɵelementEnd()()();
|
|
309
262
|
} if (rf & 2) {
|
|
310
|
-
const
|
|
263
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
311
264
|
i0.ɵɵadvance(2);
|
|
312
|
-
i0.ɵɵstyleProp("width",
|
|
265
|
+
i0.ɵɵstyleProp("width", ctx_r0.GetDurationBarWidth(ctx_r0.GetSelectedRun()), "%");
|
|
313
266
|
i0.ɵɵadvance(3);
|
|
314
|
-
i0.ɵɵtextInterpolate(
|
|
267
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatDate(ctx_r0.GetSelectedRun().StartedAt));
|
|
315
268
|
i0.ɵɵadvance(2);
|
|
316
|
-
i0.ɵɵtextInterpolate(
|
|
269
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetDurationBarLabel(ctx_r0.GetSelectedRun()));
|
|
317
270
|
i0.ɵɵadvance(2);
|
|
318
|
-
i0.ɵɵtextInterpolate(
|
|
271
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatDate(ctx_r0.GetSelectedRun().EndedAt));
|
|
319
272
|
} }
|
|
320
|
-
function
|
|
321
|
-
i0.ɵɵelementStart(0, "div",
|
|
322
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
273
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
274
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
275
|
+
i0.ɵɵelement(1, "mj-loading", 72);
|
|
323
276
|
i0.ɵɵelementEnd();
|
|
324
277
|
} }
|
|
325
|
-
function
|
|
326
|
-
i0.ɵɵelementStart(0, "div",
|
|
327
|
-
i0.ɵɵelement(1, "i",
|
|
278
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
279
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
280
|
+
i0.ɵɵelement(1, "i", 45);
|
|
328
281
|
i0.ɵɵelementStart(2, "p");
|
|
329
282
|
i0.ɵɵtext(3, "No entity detail records for this run.");
|
|
330
283
|
i0.ɵɵelementEnd()();
|
|
331
284
|
} }
|
|
332
|
-
function
|
|
285
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_2_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
333
286
|
i0.ɵɵelementStart(0, "tr")(1, "td");
|
|
334
287
|
i0.ɵɵtext(2);
|
|
335
288
|
i0.ɵɵelementEnd();
|
|
336
|
-
i0.ɵɵelementStart(3, "td",
|
|
289
|
+
i0.ɵɵelementStart(3, "td", 46);
|
|
337
290
|
i0.ɵɵtext(4);
|
|
338
291
|
i0.ɵɵpipe(5, "number");
|
|
339
292
|
i0.ɵɵelementEnd();
|
|
340
|
-
i0.ɵɵelementStart(6, "td",
|
|
293
|
+
i0.ɵɵelementStart(6, "td", 48);
|
|
341
294
|
i0.ɵɵtext(7);
|
|
342
295
|
i0.ɵɵpipe(8, "number");
|
|
343
296
|
i0.ɵɵelementEnd();
|
|
344
|
-
i0.ɵɵelementStart(9, "td",
|
|
297
|
+
i0.ɵɵelementStart(9, "td", 49);
|
|
345
298
|
i0.ɵɵtext(10);
|
|
346
299
|
i0.ɵɵpipe(11, "number");
|
|
347
300
|
i0.ɵɵelementEnd();
|
|
348
|
-
i0.ɵɵelementStart(12, "td",
|
|
301
|
+
i0.ɵɵelementStart(12, "td", 46);
|
|
349
302
|
i0.ɵɵtext(13);
|
|
350
303
|
i0.ɵɵpipe(14, "number");
|
|
351
304
|
i0.ɵɵelementEnd();
|
|
352
|
-
i0.ɵɵelementStart(15, "td",
|
|
305
|
+
i0.ɵɵelementStart(15, "td", 50);
|
|
353
306
|
i0.ɵɵtext(16);
|
|
354
307
|
i0.ɵɵpipe(17, "number");
|
|
355
308
|
i0.ɵɵelementEnd();
|
|
356
|
-
i0.ɵɵelementStart(18, "td",
|
|
309
|
+
i0.ɵɵelementStart(18, "td", 46);
|
|
357
310
|
i0.ɵɵtext(19);
|
|
358
311
|
i0.ɵɵpipe(20, "number");
|
|
359
312
|
i0.ɵɵelementEnd()();
|
|
360
313
|
} if (rf & 2) {
|
|
361
|
-
const
|
|
362
|
-
i0.ɵɵclassProp("error-row",
|
|
314
|
+
const detail_r11 = ctx.$implicit;
|
|
315
|
+
i0.ɵɵclassProp("error-row", detail_r11.RecordsErrored > 0);
|
|
363
316
|
i0.ɵɵadvance(2);
|
|
364
|
-
i0.ɵɵtextInterpolate(
|
|
317
|
+
i0.ɵɵtextInterpolate(detail_r11.Entity);
|
|
365
318
|
i0.ɵɵadvance(2);
|
|
366
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 9,
|
|
319
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 9, detail_r11.RecordsProcessed));
|
|
367
320
|
i0.ɵɵadvance(3);
|
|
368
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(8, 11,
|
|
321
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(8, 11, detail_r11.RecordsCreated));
|
|
369
322
|
i0.ɵɵadvance(3);
|
|
370
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 13,
|
|
323
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 13, detail_r11.RecordsUpdated));
|
|
371
324
|
i0.ɵɵadvance(3);
|
|
372
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 15,
|
|
325
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 15, detail_r11.RecordsDeleted));
|
|
373
326
|
i0.ɵɵadvance(3);
|
|
374
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(17, 17,
|
|
327
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(17, 17, detail_r11.RecordsErrored));
|
|
375
328
|
i0.ɵɵadvance(3);
|
|
376
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(20, 19,
|
|
329
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(20, 19, detail_r11.RecordsSkipped));
|
|
377
330
|
} }
|
|
378
|
-
function
|
|
379
|
-
i0.ɵɵelementStart(0, "table",
|
|
331
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
332
|
+
i0.ɵɵelementStart(0, "table", 70)(1, "thead")(2, "tr")(3, "th");
|
|
380
333
|
i0.ɵɵtext(4, "Entity");
|
|
381
334
|
i0.ɵɵelementEnd();
|
|
382
|
-
i0.ɵɵelementStart(5, "th",
|
|
335
|
+
i0.ɵɵelementStart(5, "th", 46);
|
|
383
336
|
i0.ɵɵtext(6, "Processed");
|
|
384
337
|
i0.ɵɵelementEnd();
|
|
385
|
-
i0.ɵɵelementStart(7, "th",
|
|
338
|
+
i0.ɵɵelementStart(7, "th", 46);
|
|
386
339
|
i0.ɵɵtext(8, "Created");
|
|
387
340
|
i0.ɵɵelementEnd();
|
|
388
|
-
i0.ɵɵelementStart(9, "th",
|
|
341
|
+
i0.ɵɵelementStart(9, "th", 46);
|
|
389
342
|
i0.ɵɵtext(10, "Updated");
|
|
390
343
|
i0.ɵɵelementEnd();
|
|
391
|
-
i0.ɵɵelementStart(11, "th",
|
|
344
|
+
i0.ɵɵelementStart(11, "th", 46);
|
|
392
345
|
i0.ɵɵtext(12, "Deleted");
|
|
393
346
|
i0.ɵɵelementEnd();
|
|
394
|
-
i0.ɵɵelementStart(13, "th",
|
|
347
|
+
i0.ɵɵelementStart(13, "th", 46);
|
|
395
348
|
i0.ɵɵtext(14, "Errors");
|
|
396
349
|
i0.ɵɵelementEnd();
|
|
397
|
-
i0.ɵɵelementStart(15, "th",
|
|
350
|
+
i0.ɵɵelementStart(15, "th", 46);
|
|
398
351
|
i0.ɵɵtext(16, "Skipped");
|
|
399
352
|
i0.ɵɵelementEnd()()();
|
|
400
353
|
i0.ɵɵelementStart(17, "tbody");
|
|
401
|
-
i0.ɵɵrepeaterCreate(18,
|
|
354
|
+
i0.ɵɵrepeaterCreate(18, ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_2_For_19_Template, 21, 21, "tr", 47, _forTrack2);
|
|
402
355
|
i0.ɵɵelementEnd()();
|
|
403
356
|
} if (rf & 2) {
|
|
404
|
-
const
|
|
357
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
405
358
|
i0.ɵɵadvance(18);
|
|
406
|
-
i0.ɵɵrepeater(
|
|
359
|
+
i0.ɵɵrepeater(ctx_r0.SelectedRunDetails);
|
|
407
360
|
} }
|
|
408
|
-
function
|
|
409
|
-
i0.ɵɵelementStart(0, "div",
|
|
410
|
-
i0.ɵɵelement(2, "i",
|
|
361
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
362
|
+
i0.ɵɵelementStart(0, "div", 71)(1, "div", 51);
|
|
363
|
+
i0.ɵɵelement(2, "i", 34);
|
|
411
364
|
i0.ɵɵtext(3, " Error Log ");
|
|
412
365
|
i0.ɵɵelementEnd();
|
|
413
|
-
i0.ɵɵelementStart(4, "pre",
|
|
366
|
+
i0.ɵɵelementStart(4, "pre", 52);
|
|
414
367
|
i0.ɵɵtext(5);
|
|
415
368
|
i0.ɵɵelementEnd()();
|
|
416
369
|
} if (rf & 2) {
|
|
417
|
-
const
|
|
370
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
418
371
|
i0.ɵɵadvance(5);
|
|
419
|
-
i0.ɵɵtextInterpolate(
|
|
372
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetSelectedRun().ErrorLog);
|
|
420
373
|
} }
|
|
421
|
-
function
|
|
422
|
-
i0.ɵɵconditionalCreate(0,
|
|
423
|
-
i0.ɵɵconditionalCreate(3,
|
|
374
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
375
|
+
i0.ɵɵconditionalCreate(0, ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_0_Template, 2, 0, "div", 68)(1, ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_1_Template, 4, 0, "div", 69)(2, ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_2_Template, 20, 0, "table", 70);
|
|
376
|
+
i0.ɵɵconditionalCreate(3, ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Conditional_3_Template, 6, 1, "div", 71);
|
|
424
377
|
} if (rf & 2) {
|
|
425
378
|
let tmp_4_0;
|
|
426
|
-
const
|
|
427
|
-
i0.ɵɵconditional(
|
|
379
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
380
|
+
i0.ɵɵconditional(ctx_r0.IsLoadingDetail ? 0 : ctx_r0.SelectedRunDetails.length === 0 ? 1 : 2);
|
|
428
381
|
i0.ɵɵadvance(3);
|
|
429
|
-
i0.ɵɵconditional(((tmp_4_0 =
|
|
382
|
+
i0.ɵɵconditional(((tmp_4_0 = ctx_r0.GetSelectedRun()) == null ? null : tmp_4_0.ErrorLog) ? 3 : -1);
|
|
430
383
|
} }
|
|
431
|
-
function
|
|
432
|
-
i0.ɵɵelementStart(0, "div",
|
|
433
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
384
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
386
|
+
i0.ɵɵelement(1, "mj-loading", 73);
|
|
434
387
|
i0.ɵɵelementEnd();
|
|
435
388
|
} }
|
|
436
|
-
function
|
|
437
|
-
i0.ɵɵelementStart(0, "div",
|
|
438
|
-
i0.ɵɵelement(1, "i",
|
|
389
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
390
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
391
|
+
i0.ɵɵelement(1, "i", 74);
|
|
439
392
|
i0.ɵɵelementStart(2, "p");
|
|
440
393
|
i0.ɵɵtext(3, "No watermarks recorded for this integration.");
|
|
441
394
|
i0.ɵɵelementEnd()();
|
|
442
395
|
} }
|
|
443
|
-
function
|
|
396
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_2_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
444
397
|
i0.ɵɵelementStart(0, "tr")(1, "td");
|
|
445
398
|
i0.ɵɵtext(2);
|
|
446
399
|
i0.ɵɵelementEnd();
|
|
447
|
-
i0.ɵɵelementStart(3, "td")(4, "span",
|
|
400
|
+
i0.ɵɵelementStart(3, "td")(4, "span", 75);
|
|
448
401
|
i0.ɵɵtext(5);
|
|
449
402
|
i0.ɵɵelementEnd()();
|
|
450
|
-
i0.ɵɵelementStart(6, "td",
|
|
403
|
+
i0.ɵɵelementStart(6, "td", 76);
|
|
451
404
|
i0.ɵɵtext(7);
|
|
452
405
|
i0.ɵɵelementEnd();
|
|
453
406
|
i0.ɵɵelementStart(8, "td");
|
|
454
407
|
i0.ɵɵtext(9);
|
|
455
408
|
i0.ɵɵelementEnd()();
|
|
456
409
|
} if (rf & 2) {
|
|
457
|
-
const
|
|
458
|
-
const
|
|
410
|
+
const wm_r12 = ctx.$implicit;
|
|
411
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
459
412
|
i0.ɵɵadvance(2);
|
|
460
|
-
i0.ɵɵtextInterpolate(
|
|
413
|
+
i0.ɵɵtextInterpolate(wm_r12.EntityMap);
|
|
461
414
|
i0.ɵɵadvance(3);
|
|
462
|
-
i0.ɵɵtextInterpolate(
|
|
415
|
+
i0.ɵɵtextInterpolate(wm_r12.WatermarkType);
|
|
463
416
|
i0.ɵɵadvance(2);
|
|
464
|
-
i0.ɵɵtextInterpolate(
|
|
417
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatWatermark(wm_r12.WatermarkValue));
|
|
465
418
|
i0.ɵɵadvance(2);
|
|
466
|
-
i0.ɵɵtextInterpolate(
|
|
419
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatDate(wm_r12.LastSyncAt));
|
|
467
420
|
} }
|
|
468
|
-
function
|
|
469
|
-
i0.ɵɵelementStart(0, "table",
|
|
421
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
i0.ɵɵelementStart(0, "table", 70)(1, "thead")(2, "tr")(3, "th");
|
|
470
423
|
i0.ɵɵtext(4, "Entity Map");
|
|
471
424
|
i0.ɵɵelementEnd();
|
|
472
425
|
i0.ɵɵelementStart(5, "th");
|
|
@@ -479,85 +432,85 @@ function ActivityComponent_Conditional_21_Conditional_4_Conditional_22_Condition
|
|
|
479
432
|
i0.ɵɵtext(10, "Last Applied");
|
|
480
433
|
i0.ɵɵelementEnd()()();
|
|
481
434
|
i0.ɵɵelementStart(11, "tbody");
|
|
482
|
-
i0.ɵɵrepeaterCreate(12,
|
|
435
|
+
i0.ɵɵrepeaterCreate(12, ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_2_For_13_Template, 10, 4, "tr", null, _forTrack1);
|
|
483
436
|
i0.ɵɵelementEnd()();
|
|
484
437
|
} if (rf & 2) {
|
|
485
|
-
const
|
|
438
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
486
439
|
i0.ɵɵadvance(12);
|
|
487
|
-
i0.ɵɵrepeater(
|
|
440
|
+
i0.ɵɵrepeater(ctx_r0.WatermarkData);
|
|
488
441
|
} }
|
|
489
|
-
function
|
|
490
|
-
i0.ɵɵconditionalCreate(0,
|
|
442
|
+
function ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
443
|
+
i0.ɵɵconditionalCreate(0, ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_0_Template, 2, 0, "div", 68)(1, ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_1_Template, 4, 0, "div", 69)(2, ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Conditional_2_Template, 14, 0, "table", 70);
|
|
491
444
|
} if (rf & 2) {
|
|
492
|
-
const
|
|
493
|
-
i0.ɵɵconditional(
|
|
445
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
446
|
+
i0.ɵɵconditional(ctx_r0.IsLoadingWatermarks ? 0 : ctx_r0.WatermarkData.length === 0 ? 1 : 2);
|
|
494
447
|
} }
|
|
495
|
-
function
|
|
496
|
-
const
|
|
497
|
-
i0.ɵɵelementStart(0, "div",
|
|
448
|
+
function ActivityComponent_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
450
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "div", 53)(2, "div", 54)(3, "h3");
|
|
498
451
|
i0.ɵɵtext(4);
|
|
499
452
|
i0.ɵɵelementEnd();
|
|
500
453
|
i0.ɵɵelementStart(5, "span");
|
|
501
454
|
i0.ɵɵelement(6, "i");
|
|
502
455
|
i0.ɵɵtext(7);
|
|
503
456
|
i0.ɵɵelementEnd();
|
|
504
|
-
i0.ɵɵelementStart(8, "span",
|
|
457
|
+
i0.ɵɵelementStart(8, "span", 55);
|
|
505
458
|
i0.ɵɵtext(9);
|
|
506
459
|
i0.ɵɵelementEnd()();
|
|
507
|
-
i0.ɵɵelementStart(10, "button",
|
|
508
|
-
i0.ɵɵlistener("click", function
|
|
509
|
-
i0.ɵɵelement(11, "i",
|
|
460
|
+
i0.ɵɵelementStart(10, "button", 56);
|
|
461
|
+
i0.ɵɵlistener("click", function ActivityComponent_Conditional_18_Conditional_4_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SelectRun(ctx_r0.SelectedRunID)); });
|
|
462
|
+
i0.ɵɵelement(11, "i", 57);
|
|
510
463
|
i0.ɵɵelementEnd()();
|
|
511
|
-
i0.ɵɵconditionalCreate(12,
|
|
512
|
-
i0.ɵɵelementStart(13, "div",
|
|
513
|
-
i0.ɵɵlistener("click", function
|
|
514
|
-
i0.ɵɵelement(15, "i",
|
|
464
|
+
i0.ɵɵconditionalCreate(12, ActivityComponent_Conditional_18_Conditional_4_Conditional_12_Template, 10, 5, "div", 58);
|
|
465
|
+
i0.ɵɵelementStart(13, "div", 59)(14, "button", 60);
|
|
466
|
+
i0.ɵɵlistener("click", function ActivityComponent_Conditional_18_Conditional_4_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetDetailTab("entities")); });
|
|
467
|
+
i0.ɵɵelement(15, "i", 61);
|
|
515
468
|
i0.ɵɵtext(16, " Entity Breakdown ");
|
|
516
469
|
i0.ɵɵelementEnd();
|
|
517
|
-
i0.ɵɵelementStart(17, "button",
|
|
518
|
-
i0.ɵɵlistener("click", function
|
|
519
|
-
i0.ɵɵelement(18, "i",
|
|
470
|
+
i0.ɵɵelementStart(17, "button", 60);
|
|
471
|
+
i0.ɵɵlistener("click", function ActivityComponent_Conditional_18_Conditional_4_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetDetailTab("watermarks")); });
|
|
472
|
+
i0.ɵɵelement(18, "i", 62);
|
|
520
473
|
i0.ɵɵtext(19, " Watermarks ");
|
|
521
474
|
i0.ɵɵelementEnd()();
|
|
522
|
-
i0.ɵɵelementStart(20, "div",
|
|
523
|
-
i0.ɵɵconditionalCreate(21,
|
|
524
|
-
i0.ɵɵconditionalCreate(22,
|
|
475
|
+
i0.ɵɵelementStart(20, "div", 63);
|
|
476
|
+
i0.ɵɵconditionalCreate(21, ActivityComponent_Conditional_18_Conditional_4_Conditional_21_Template, 4, 2);
|
|
477
|
+
i0.ɵɵconditionalCreate(22, ActivityComponent_Conditional_18_Conditional_4_Conditional_22_Template, 3, 1);
|
|
525
478
|
i0.ɵɵelementEnd()();
|
|
526
479
|
} if (rf & 2) {
|
|
527
|
-
const
|
|
480
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
528
481
|
i0.ɵɵadvance(4);
|
|
529
|
-
i0.ɵɵtextInterpolate(
|
|
482
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetSelectedRun().Integration);
|
|
530
483
|
i0.ɵɵadvance();
|
|
531
|
-
i0.ɵɵclassMap(
|
|
484
|
+
i0.ɵɵclassMap(ctx_r0.StatusChipClass(ctx_r0.GetSelectedRun().Status));
|
|
532
485
|
i0.ɵɵadvance();
|
|
533
|
-
i0.ɵɵclassMap(
|
|
486
|
+
i0.ɵɵclassMap(ctx_r0.GetStatusIcon(ctx_r0.GetSelectedRun().Status));
|
|
534
487
|
i0.ɵɵadvance();
|
|
535
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
488
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.GetSelectedRun().Status, " ");
|
|
536
489
|
i0.ɵɵadvance(2);
|
|
537
|
-
i0.ɵɵtextInterpolate(
|
|
490
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatDate(ctx_r0.GetSelectedRun().StartedAt));
|
|
538
491
|
i0.ɵɵadvance(3);
|
|
539
|
-
i0.ɵɵconditional(
|
|
492
|
+
i0.ɵɵconditional(ctx_r0.GetSelectedRun().StartedAt && ctx_r0.GetSelectedRun().EndedAt ? 12 : -1);
|
|
540
493
|
i0.ɵɵadvance(2);
|
|
541
|
-
i0.ɵɵclassProp("active",
|
|
494
|
+
i0.ɵɵclassProp("active", ctx_r0.ActiveDetailTab === "entities");
|
|
542
495
|
i0.ɵɵadvance(3);
|
|
543
|
-
i0.ɵɵclassProp("active",
|
|
496
|
+
i0.ɵɵclassProp("active", ctx_r0.ActiveDetailTab === "watermarks");
|
|
544
497
|
i0.ɵɵadvance(4);
|
|
545
|
-
i0.ɵɵconditional(
|
|
498
|
+
i0.ɵɵconditional(ctx_r0.ActiveDetailTab === "entities" ? 21 : -1);
|
|
546
499
|
i0.ɵɵadvance();
|
|
547
|
-
i0.ɵɵconditional(
|
|
500
|
+
i0.ɵɵconditional(ctx_r0.ActiveDetailTab === "watermarks" ? 22 : -1);
|
|
548
501
|
} }
|
|
549
|
-
function
|
|
550
|
-
i0.ɵɵelementStart(0, "div", 14)(1, "div",
|
|
551
|
-
i0.ɵɵrepeaterCreate(2,
|
|
502
|
+
function ActivityComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
503
|
+
i0.ɵɵelementStart(0, "div", 14)(1, "div", 21);
|
|
504
|
+
i0.ɵɵrepeaterCreate(2, ActivityComponent_Conditional_18_For_3_Template, 23, 29, "div", 22, _forTrack1);
|
|
552
505
|
i0.ɵɵelementEnd();
|
|
553
|
-
i0.ɵɵconditionalCreate(4,
|
|
506
|
+
i0.ɵɵconditionalCreate(4, ActivityComponent_Conditional_18_Conditional_4_Template, 23, 14, "div", 23);
|
|
554
507
|
i0.ɵɵelementEnd();
|
|
555
508
|
} if (rf & 2) {
|
|
556
|
-
const
|
|
509
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
557
510
|
i0.ɵɵadvance(2);
|
|
558
|
-
i0.ɵɵrepeater(
|
|
511
|
+
i0.ɵɵrepeater(ctx_r0.FilteredRuns);
|
|
559
512
|
i0.ɵɵadvance(2);
|
|
560
|
-
i0.ɵɵconditional(
|
|
513
|
+
i0.ɵɵconditional(ctx_r0.SelectedRunID && ctx_r0.GetSelectedRun() ? 4 : -1);
|
|
561
514
|
} }
|
|
562
515
|
let ActivityComponent = class ActivityComponent extends BaseResourceComponent {
|
|
563
516
|
// Data
|
|
@@ -583,10 +536,10 @@ let ActivityComponent = class ActivityComponent extends BaseResourceComponent {
|
|
|
583
536
|
IsLoadingWatermarks = false;
|
|
584
537
|
StatusOptions = ['All', 'Success', 'Failed', 'In Progress', 'Pending'];
|
|
585
538
|
DateOptions = [
|
|
539
|
+
{ Value: 'all', Label: 'All' },
|
|
586
540
|
{ Value: 'today', Label: 'Today' },
|
|
587
541
|
{ Value: '7d', Label: '7 Days' },
|
|
588
|
-
{ Value: '30d', Label: '30 Days' }
|
|
589
|
-
{ Value: 'all', Label: 'All' }
|
|
542
|
+
{ Value: '30d', Label: '30 Days' }
|
|
590
543
|
];
|
|
591
544
|
dataService = inject(IntegrationDataService);
|
|
592
545
|
cdr = inject(ChangeDetectorRef);
|
|
@@ -743,6 +696,42 @@ let ActivityComponent = class ActivityComponent extends BaseResourceComponent {
|
|
|
743
696
|
OnSearchChange() {
|
|
744
697
|
this.ApplyFilters();
|
|
745
698
|
}
|
|
699
|
+
/** Bridge for <mj-page-search> which emits a plain string. */
|
|
700
|
+
OnSearchValueChange(value) {
|
|
701
|
+
this.SearchQuery = value;
|
|
702
|
+
this.ApplyFilters();
|
|
703
|
+
}
|
|
704
|
+
// ---- Integration filter popover wiring ---------------------------------
|
|
705
|
+
get ActivityFilterFields() {
|
|
706
|
+
return [
|
|
707
|
+
{
|
|
708
|
+
key: 'integration',
|
|
709
|
+
type: 'dropdown',
|
|
710
|
+
label: 'Integration',
|
|
711
|
+
icon: 'fa-solid fa-plug',
|
|
712
|
+
placeholder: 'All Integrations',
|
|
713
|
+
filterable: this.Integrations.length > 10,
|
|
714
|
+
options: [
|
|
715
|
+
{ text: 'All Integrations', value: '' },
|
|
716
|
+
...this.Integrations.map(i => ({ text: i.Name, value: i.ID })),
|
|
717
|
+
],
|
|
718
|
+
},
|
|
719
|
+
];
|
|
720
|
+
}
|
|
721
|
+
get ActivityFilterValues() {
|
|
722
|
+
return { integration: this.IntegrationFilter ?? '' };
|
|
723
|
+
}
|
|
724
|
+
get ActiveFilterCount() {
|
|
725
|
+
return this.IntegrationFilter ? 1 : 0;
|
|
726
|
+
}
|
|
727
|
+
OnFilterValuesChange(values) {
|
|
728
|
+
const next = (values ?? {}).integration ?? '';
|
|
729
|
+
this.SetIntegrationFilter(next || null);
|
|
730
|
+
}
|
|
731
|
+
ResetIntegrationFilter() {
|
|
732
|
+
if (this.IntegrationFilter)
|
|
733
|
+
this.SetIntegrationFilter(null);
|
|
734
|
+
}
|
|
746
735
|
async Refresh() {
|
|
747
736
|
await this.LoadData();
|
|
748
737
|
}
|
|
@@ -900,53 +889,53 @@ let ActivityComponent = class ActivityComponent extends BaseResourceComponent {
|
|
|
900
889
|
return 'fa-solid fa-clock-rotate-left';
|
|
901
890
|
}
|
|
902
891
|
static ɵfac = /*@__PURE__*/ (() => { let ɵActivityComponent_BaseFactory; return function ActivityComponent_Factory(__ngFactoryType__) { return (ɵActivityComponent_BaseFactory || (ɵActivityComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ActivityComponent)))(__ngFactoryType__ || ActivityComponent); }; })();
|
|
903
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActivityComponent, selectors: [["app-integration-activity"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
904
|
-
i0.ɵɵelementStart(0, "
|
|
905
|
-
i0.ɵɵ
|
|
906
|
-
i0.ɵɵ
|
|
907
|
-
i0.ɵɵ
|
|
908
|
-
i0.ɵɵ
|
|
909
|
-
i0.ɵɵ
|
|
910
|
-
i0.ɵɵtext(8, "All Integrations");
|
|
911
|
-
i0.ɵɵelementEnd();
|
|
912
|
-
i0.ɵɵrepeaterCreate(9, ActivityComponent_For_10_Template, 2, 2, "option", 7, _forTrack0);
|
|
913
|
-
i0.ɵɵelementEnd()();
|
|
914
|
-
i0.ɵɵelementStart(11, "div", 2);
|
|
915
|
-
i0.ɵɵrepeaterCreate(12, ActivityComponent_For_13_Template, 2, 3, "button", 3, _forTrack1);
|
|
916
|
-
i0.ɵɵelementEnd();
|
|
917
|
-
i0.ɵɵelementStart(14, "div", 4)(15, "input", 8);
|
|
918
|
-
i0.ɵɵtwoWayListener("ngModelChange", function ActivityComponent_Template_input_ngModelChange_15_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.SearchQuery, $event) || (ctx.SearchQuery = $event); return $event; });
|
|
919
|
-
i0.ɵɵlistener("input", function ActivityComponent_Template_input_input_15_listener() { return ctx.OnSearchChange(); });
|
|
892
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActivityComponent, selectors: [["app-integration-activity"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 11, consts: [["Title", "Integration Activity", "Icon", "fa-solid fa-clock-rotate-left", "Subtitle", "Sync run history and outcomes"], ["meta", ""], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "Clicked", "Loading"], ["toolbar", ""], ["Placeholder", "Search integrations...", 3, "ValueChange", "Value"], [3, "Label", "Active"], ["aria-hidden", "true", 1, "toolbar-divider"], [3, "Flex"], [1, "activity-container"], [1, "loading-area"], [1, "empty-state"], [1, "split-view"], ["Label", "succeeded", "Variant", "success", 3, "Count"], ["Label", "failed", "Variant", "error", 3, "Count"], ["Label", "records", 3, "Count"], [3, "Clicked", "Label", "Active"], ["text", "Loading activity...", "size", "medium"], [1, "fa-solid", "fa-inbox"], [1, "run-list-panel"], [1, "run-row", 3, "selected"], [1, "detail-panel"], [1, "run-row", 3, "click"], [1, "run-row-main"], [1, "status-icon"], [1, "run-info"], [1, "run-integration"], [1, "run-company"], [1, "run-meta", 3, "title"], [1, "run-meta", "run-duration"], [1, "run-meta", "run-records"], [1, "run-meta", "run-errors"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "run-meta", "run-user"], ["title", "Show entity breakdown", 1, "expand-btn", 3, "click"], [1, "fa-solid", "fa-chevron-down"], [1, "expanded-section"], [1, "expanded-section", 3, "click"], [1, "expanded-loading"], [1, "expanded-empty"], [1, "entity-table"], [1, "error-log-block"], ["text", "Loading breakdown...", "size", "small"], [1, "fa-solid", "fa-circle-info"], [1, "num-col"], [3, "error-row"], [1, "num-col", "created-col"], [1, "num-col", "updated-col"], [1, "num-col", "error-col"], [1, "error-log-label"], [1, "error-log-content"], [1, "detail-header"], [1, "detail-header-info"], [1, "detail-time"], ["title", "Close", 1, "close-detail-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "duration-bar-container"], [1, "detail-tabs"], [1, "tab-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "fa-solid", "fa-droplet"], [1, "detail-content"], [1, "duration-bar-track"], [1, "duration-bar-fill"], [1, "duration-bar-labels"], [1, "duration-bar-value"], [1, "detail-loading"], [1, "detail-empty"], [1, "detail-table"], [1, "error-log-block", "detail-error-log"], ["text", "Loading details...", "size", "small"], ["text", "Loading watermarks...", "size", "small"], [1, "fa-solid", "fa-droplet-slash"], [1, "type-badge"], [1, "mono-cell", "watermark-value"]], template: function ActivityComponent_Template(rf, ctx) { if (rf & 1) {
|
|
893
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0);
|
|
894
|
+
i0.ɵɵconditionalCreate(2, ActivityComponent_Conditional_2_Template, 5, 5, "div", 1);
|
|
895
|
+
i0.ɵɵelementStart(3, "div", 2)(4, "mj-filter-popover", 3);
|
|
896
|
+
i0.ɵɵlistener("ClearAllRequested", function ActivityComponent_Template_mj_filter_popover_ClearAllRequested_4_listener() { return ctx.ResetIntegrationFilter(); });
|
|
897
|
+
i0.ɵɵelementStart(5, "mj-filter-panel", 4);
|
|
898
|
+
i0.ɵɵlistener("ValuesChange", function ActivityComponent_Template_mj_filter_panel_ValuesChange_5_listener($event) { return ctx.OnFilterValuesChange($event); })("Reset", function ActivityComponent_Template_mj_filter_panel_Reset_5_listener() { return ctx.ResetIntegrationFilter(); });
|
|
920
899
|
i0.ɵɵelementEnd()();
|
|
921
|
-
i0.ɵɵelementStart(
|
|
922
|
-
i0.ɵɵlistener("
|
|
923
|
-
i0.ɵɵelement(17, "i", 10);
|
|
900
|
+
i0.ɵɵelementStart(6, "mj-refresh-button", 5);
|
|
901
|
+
i0.ɵɵlistener("Clicked", function ActivityComponent_Template_mj_refresh_button_Clicked_6_listener() { return ctx.Refresh(); });
|
|
924
902
|
i0.ɵɵelementEnd()();
|
|
925
|
-
i0.ɵɵ
|
|
926
|
-
i0.ɵɵ
|
|
927
|
-
i0.ɵɵconditionalCreate(20, ActivityComponent_Conditional_20_Template, 4, 0, "div", 13);
|
|
928
|
-
i0.ɵɵconditionalCreate(21, ActivityComponent_Conditional_21_Template, 5, 1, "div", 14);
|
|
903
|
+
i0.ɵɵelementStart(7, "div", 6)(8, "mj-page-search", 7);
|
|
904
|
+
i0.ɵɵlistener("ValueChange", function ActivityComponent_Template_mj_page_search_ValueChange_8_listener($event) { return ctx.OnSearchValueChange($event); });
|
|
929
905
|
i0.ɵɵelementEnd();
|
|
906
|
+
i0.ɵɵrepeaterCreate(9, ActivityComponent_For_10_Template, 1, 2, "mj-filter-chip", 8, i0.ɵɵrepeaterTrackByIdentity);
|
|
907
|
+
i0.ɵɵelement(11, "span", 9);
|
|
908
|
+
i0.ɵɵrepeaterCreate(12, ActivityComponent_For_13_Template, 1, 2, "mj-filter-chip", 8, _forTrack0);
|
|
909
|
+
i0.ɵɵelementEnd()();
|
|
910
|
+
i0.ɵɵelementStart(14, "mj-page-body", 10)(15, "div", 11);
|
|
911
|
+
i0.ɵɵconditionalCreate(16, ActivityComponent_Conditional_16_Template, 2, 0, "div", 12);
|
|
912
|
+
i0.ɵɵconditionalCreate(17, ActivityComponent_Conditional_17_Template, 4, 0, "div", 13);
|
|
913
|
+
i0.ɵɵconditionalCreate(18, ActivityComponent_Conditional_18_Template, 5, 1, "div", 14);
|
|
914
|
+
i0.ɵɵelementEnd()()();
|
|
930
915
|
} if (rf & 2) {
|
|
931
|
-
i0.ɵɵadvance(
|
|
916
|
+
i0.ɵɵadvance(2);
|
|
917
|
+
i0.ɵɵconditional(!ctx.IsLoading && ctx.AllRuns.length > 0 ? 2 : -1);
|
|
918
|
+
i0.ɵɵadvance(2);
|
|
919
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
920
|
+
i0.ɵɵadvance();
|
|
921
|
+
i0.ɵɵproperty("Fields", ctx.ActivityFilterFields)("Values", ctx.ActivityFilterValues);
|
|
922
|
+
i0.ɵɵadvance();
|
|
923
|
+
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
924
|
+
i0.ɵɵadvance(2);
|
|
925
|
+
i0.ɵɵproperty("Value", ctx.SearchQuery);
|
|
926
|
+
i0.ɵɵadvance();
|
|
932
927
|
i0.ɵɵrepeater(ctx.StatusOptions);
|
|
933
928
|
i0.ɵɵadvance(3);
|
|
934
|
-
i0.ɵɵproperty("ngModel", ctx.IntegrationFilter ?? "");
|
|
935
|
-
i0.ɵɵadvance(3);
|
|
936
|
-
i0.ɵɵrepeater(ctx.Integrations);
|
|
937
|
-
i0.ɵɵadvance(3);
|
|
938
929
|
i0.ɵɵrepeater(ctx.DateOptions);
|
|
939
|
-
i0.ɵɵadvance(
|
|
940
|
-
i0.ɵɵ
|
|
941
|
-
i0.ɵɵadvance(
|
|
942
|
-
i0.ɵɵconditional(
|
|
943
|
-
i0.ɵɵadvance();
|
|
944
|
-
i0.ɵɵconditional(ctx.IsLoading ? 19 : -1);
|
|
930
|
+
i0.ɵɵadvance(2);
|
|
931
|
+
i0.ɵɵproperty("Flex", true);
|
|
932
|
+
i0.ɵɵadvance(2);
|
|
933
|
+
i0.ɵɵconditional(ctx.IsLoading ? 16 : -1);
|
|
945
934
|
i0.ɵɵadvance();
|
|
946
|
-
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredRuns.length === 0 ?
|
|
935
|
+
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredRuns.length === 0 ? 17 : -1);
|
|
947
936
|
i0.ɵɵadvance();
|
|
948
|
-
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredRuns.length > 0 ?
|
|
949
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.DecimalPipe], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.activity-container[_ngcontent-%COMP%] {\n padding: 20px;\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 14px;\n overflow: auto;\n}\n\n\n\n\n.filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.filter-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.filter-pills[_ngcontent-%COMP%] {\n gap: 0;\n}\n\n.pill-btn[_ngcontent-%COMP%] {\n height: 32px;\n padding: 0 14px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n}\n\n.pill-btn[_ngcontent-%COMP%]:first-child {\n border-radius: 9999px 0 0 9999px;\n}\n\n.pill-btn[_ngcontent-%COMP%]:last-child {\n border-radius: 0 9999px 9999px 0;\n}\n\n.pill-btn[_ngcontent-%COMP%]:not(:first-child) {\n margin-left: -1px;\n}\n\n.pill-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-border-strong);\n z-index: 1;\n}\n\n.pill-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n z-index: 2;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n min-width: 180px;\n height: 32px;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.search-input[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n min-width: 180px;\n height: 32px;\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.refresh-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n transition: background 0.15s, color 0.15s;\n}\n\n.refresh-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n\n\n\n.summary-strip[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.summary-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.badge-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.dot-blue[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n.dot-green[_ngcontent-%COMP%] { background: var(--mj-color-success-600); }\n.dot-red[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n.dot-amber[_ngcontent-%COMP%] { background: var(--mj-status-warning); }\n.dot-gray[_ngcontent-%COMP%] { background: var(--mj-text-disabled); }\n\n.badge-count[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-green[_ngcontent-%COMP%] { color: var(--mj-color-success-600); }\n.count-red[_ngcontent-%COMP%] { color: var(--mj-color-error-600); }\n\n.badge-label[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n\n\n\n.loading-area[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 48px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 48px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n\n.split-view[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n.run-list-panel[_ngcontent-%COMP%] {\n flex: 7;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.run-row[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s;\n}\n\n.run-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n}\n\n.run-row.selected[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n}\n\n.run-row-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n}\n\n\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.status-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n width: 16px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.icon-green[_ngcontent-%COMP%] { color: var(--mj-color-success-600); }\n.icon-red[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n.icon-amber[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n.icon-gray[_ngcontent-%COMP%] { color: var(--mj-text-disabled); }\n\n\n\n.run-info[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.run-integration[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.run-meta[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n min-width: 56px;\n}\n\n.run-records[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n min-width: 48px;\n}\n\n.run-errors[_ngcontent-%COMP%] {\n min-width: 24px;\n text-align: center;\n}\n\n.run-errors.has-errors[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.run-user[_ngcontent-%COMP%] {\n min-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.expand-btn[_ngcontent-%COMP%] {\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: 11px;\n transition: background 0.15s, transform 0.2s;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.expand-btn[_ngcontent-%COMP%] i.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n\n\n\n.expanded-section[_ngcontent-%COMP%] {\n padding: 8px 14px 14px 48px;\n background: var(--mj-bg-page);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.expanded-loading[_ngcontent-%COMP%], \n.expanded-empty[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.expanded-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.entity-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.entity-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 5px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-table[_ngcontent-%COMP%] .num-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .num-col[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.entity-table[_ngcontent-%COMP%] .created-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .created-col[_ngcontent-%COMP%] {\n color: var(--mj-color-success-600);\n font-weight: 600;\n}\n\n.entity-table[_ngcontent-%COMP%] .updated-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .updated-col[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-table[_ngcontent-%COMP%] .error-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .error-col[_ngcontent-%COMP%] {\n color: var(--mj-color-error-600);\n font-weight: 600;\n}\n\n.error-row[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n}\n\n\n\n\n.error-log-block[_ngcontent-%COMP%] {\n margin-top: 10px;\n}\n\n.error-log-label[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n min-width: 0;\n}\n\n.detail-header-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.close-detail-btn[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n\n\n.duration-bar-container[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.duration-bar-track[_ngcontent-%COMP%] {\n height: 6px;\n background: var(--mj-bg-surface-active);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.duration-bar-fill[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n\n\n.detail-tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 0 16px;\n gap: 2px;\n}\n\n.tab-btn[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n.tab-btn.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n\n\n.detail-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.detail-loading[_ngcontent-%COMP%], \n.detail-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n margin-bottom: 8px;\n display: block;\n}\n\n.detail-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n}\n\n.detail-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.detail-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 7px 10px;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.mono-cell[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.watermark-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Menlo', 'Consolas', monospace;\n font-size: 11px;\n}\n\n\n\n.chip[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.chip-red[_ngcontent-%COMP%] { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n.chip-amber[_ngcontent-%COMP%] { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n.chip-gray[_ngcontent-%COMP%] { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n\n\n\n.type-badge[_ngcontent-%COMP%] {\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\n\n\n@media (max-width: 900px) {\n .split-view[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .detail-panel[_ngcontent-%COMP%] {\n min-width: 0;\n max-height: 50vh;\n }\n\n .run-user[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
|
|
937
|
+
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredRuns.length > 0 ? 18 : -1);
|
|
938
|
+
} }, dependencies: [i1.MJPageLayoutComponent, i1.MJPageHeaderComponent, i1.MJPageBodyComponent, i1.MJPageSearchComponent, i1.MJFilterChipComponent, i1.MJFilterPopoverComponent, i1.MJFilterPanelComponent, i1.MJStatBadgeComponent, i1.MJRefreshButtonComponent, i2.LoadingComponent, i3.DecimalPipe], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.activity-container[_ngcontent-%COMP%] {\n \n\n\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n gap: 14px;\n}\n\n\n\n\n\n\n\n\n.toolbar-divider[_ngcontent-%COMP%] {\n display: inline-block;\n width: 1px;\n height: 18px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n\n\n\n.loading-area[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 48px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 48px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n\n.split-view[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n.run-list-panel[_ngcontent-%COMP%] {\n flex: 7;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.run-row[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s;\n}\n\n.run-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n}\n\n.run-row.selected[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n}\n\n.run-row-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n}\n\n\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.status-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n width: 16px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.icon-green[_ngcontent-%COMP%] { color: var(--mj-color-success-600); }\n.icon-red[_ngcontent-%COMP%] { color: var(--mj-status-error); }\n.icon-amber[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n.icon-gray[_ngcontent-%COMP%] { color: var(--mj-text-disabled); }\n\n\n\n.run-info[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.run-integration[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.run-meta[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n min-width: 56px;\n}\n\n.run-records[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n min-width: 48px;\n}\n\n.run-errors[_ngcontent-%COMP%] {\n min-width: 24px;\n text-align: center;\n}\n\n.run-errors.has-errors[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.run-user[_ngcontent-%COMP%] {\n min-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.expand-btn[_ngcontent-%COMP%] {\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: 11px;\n transition: background 0.15s, transform 0.2s;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.expand-btn[_ngcontent-%COMP%] i.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n\n\n\n.expanded-section[_ngcontent-%COMP%] {\n padding: 8px 14px 14px 48px;\n background: var(--mj-bg-page);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.expanded-loading[_ngcontent-%COMP%], \n.expanded-empty[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.expanded-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.entity-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.entity-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 5px 8px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-table[_ngcontent-%COMP%] .num-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .num-col[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.entity-table[_ngcontent-%COMP%] .created-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .created-col[_ngcontent-%COMP%] {\n color: var(--mj-color-success-600);\n font-weight: 600;\n}\n\n.entity-table[_ngcontent-%COMP%] .updated-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .updated-col[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-table[_ngcontent-%COMP%] .error-col[_ngcontent-%COMP%], \n.detail-table[_ngcontent-%COMP%] .error-col[_ngcontent-%COMP%] {\n color: var(--mj-color-error-600);\n font-weight: 600;\n}\n\n.error-row[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n}\n\n\n\n\n.error-log-block[_ngcontent-%COMP%] {\n margin-top: 10px;\n}\n\n.error-log-label[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n min-width: 0;\n}\n\n.detail-header-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.close-detail-btn[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n\n\n.duration-bar-container[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.duration-bar-track[_ngcontent-%COMP%] {\n height: 6px;\n background: var(--mj-bg-surface-active);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.duration-bar-fill[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n\n\n.detail-tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 0 16px;\n gap: 2px;\n}\n\n.tab-btn[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n.tab-btn.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n\n\n.detail-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.detail-loading[_ngcontent-%COMP%], \n.detail-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n margin-bottom: 8px;\n display: block;\n}\n\n.detail-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n}\n\n.detail-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n\n.detail-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 7px 10px;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.mono-cell[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.watermark-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Menlo', 'Consolas', monospace;\n font-size: 11px;\n}\n\n\n\n.chip[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%] { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.chip-red[_ngcontent-%COMP%] { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n.chip-amber[_ngcontent-%COMP%] { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n.chip-gray[_ngcontent-%COMP%] { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n\n\n\n.type-badge[_ngcontent-%COMP%] {\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\n\n\n@media (max-width: 900px) {\n .split-view[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .detail-panel[_ngcontent-%COMP%] {\n min-width: 0;\n max-height: 50vh;\n }\n\n .run-user[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
|
|
950
939
|
};
|
|
951
940
|
ActivityComponent = __decorate([
|
|
952
941
|
RegisterClass(BaseResourceComponent, 'IntegrationActivity')
|
|
@@ -954,9 +943,9 @@ ActivityComponent = __decorate([
|
|
|
954
943
|
export { ActivityComponent };
|
|
955
944
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActivityComponent, [{
|
|
956
945
|
type: Component,
|
|
957
|
-
args: [{ standalone: false, selector: 'app-integration-activity', template: "<div class=\"activity-container\">\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"filter-group filter-pills\">\n @for (status of StatusOptions; track status) {\n <button class=\"pill-btn\"\n [class.active]=\"StatusFilter === status\"\n (click)=\"SetStatusFilter(status)\">\n {{ status }}\n </button>\n }\n </div>\n\n <div class=\"filter-group\">\n <select class=\"filter-select\"\n [ngModel]=\"IntegrationFilter ?? ''\"\n (ngModelChange)=\"SetIntegrationFilter($event || null)\">\n <option value=\"\">All Integrations</option>\n @for (opt of Integrations; track opt.ID) {\n <option [value]=\"opt.ID\">{{ opt.Name }}</option>\n }\n </select>\n </div>\n\n <div class=\"filter-group filter-pills\">\n @for (d of DateOptions; track d.Value) {\n <button class=\"pill-btn\"\n [class.active]=\"DateFilter === d.Value\"\n (click)=\"SetDateFilter(d.Value)\">\n {{ d.Label }}\n </button>\n }\n </div>\n\n <div class=\"filter-group\">\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\"\n (input)=\"OnSearchChange()\" />\n </div>\n\n <button class=\"refresh-btn\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Summary Strip -->\n @if (!IsLoading && AllRuns.length > 0) {\n <div class=\"summary-strip\">\n <div class=\"summary-badge\">\n <span class=\"badge-dot dot-blue\"></span>\n <span class=\"badge-count\">{{ TotalRuns }}</span>\n <span class=\"badge-label\">Total Runs</span>\n </div>\n <div class=\"summary-badge\">\n <span class=\"badge-dot dot-green\"></span>\n <span class=\"badge-count count-green\">{{ SuccessfulRuns }}</span>\n <span class=\"badge-label\">Successful</span>\n </div>\n <div class=\"summary-badge\">\n <span class=\"badge-dot dot-red\"></span>\n <span class=\"badge-count count-red\">{{ FailedRuns }}</span>\n <span class=\"badge-label\">Failed</span>\n </div>\n <div class=\"summary-badge\">\n <span class=\"badge-dot dot-blue\"></span>\n <span class=\"badge-count\">{{ TotalRecordsProcessed | number }}</span>\n <span class=\"badge-label\">Records Processed</span>\n </div>\n </div>\n }\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No runs found for the selected filters.</p>\n </div>\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 -->\n <div class=\"run-row\"\n [class.selected]=\"IsSelectedRun(run.ID)\"\n (click)=\"SelectRun(run.ID)\">\n <div class=\"run-row-main\">\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\n <!-- Expand chevron -->\n <button class=\"expand-btn\"\n (click)=\"ToggleExpand(run.ID); $event.stopPropagation()\"\n title=\"Show entity breakdown\">\n <i class=\"fa-solid fa-chevron-down\"\n [class.rotated]=\"IsExpanded(run.ID)\"></i>\n </button>\n </div>\n\n <!-- Expanded section: entity breakdown -->\n @if (IsExpanded(run.ID)) {\n <div class=\"expanded-section\" (click)=\"$event.stopPropagation()\">\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 <div class=\"expanded-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No entity details for this run.\n </div>\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 }\n </div>\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 <div class=\"detail-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <p>No entity detail records for this run.</p>\n </div>\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 <div class=\"detail-empty\">\n <i class=\"fa-solid fa-droplet-slash\"></i>\n <p>No watermarks recorded for this integration.</p>\n </div>\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", styles: [":host {\n display: block;\n height: 100%;\n}\n\n.activity-container {\n padding: 20px;\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 14px;\n overflow: auto;\n}\n\n/* \u2500\u2500 Filter Bar \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.filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.filter-group {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.filter-pills {\n gap: 0;\n}\n\n.pill-btn {\n height: 32px;\n padding: 0 14px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n}\n\n.pill-btn:first-child {\n border-radius: 9999px 0 0 9999px;\n}\n\n.pill-btn:last-child {\n border-radius: 0 9999px 9999px 0;\n}\n\n.pill-btn:not(:first-child) {\n margin-left: -1px;\n}\n\n.pill-btn:hover {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-border-strong);\n z-index: 1;\n}\n\n.pill-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n z-index: 2;\n}\n\n.filter-select {\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n min-width: 180px;\n height: 32px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.search-input {\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n min-width: 180px;\n height: 32px;\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.refresh-btn {\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n transition: background 0.15s, color 0.15s;\n}\n\n.refresh-btn:hover {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500 Summary Strip \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.summary-strip {\n display: inline-flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.summary-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.badge-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.dot-blue { background: var(--mj-brand-primary); }\n.dot-green { background: var(--mj-color-success-600); }\n.dot-red { background: var(--mj-status-error); }\n.dot-amber { background: var(--mj-status-warning); }\n.dot-gray { background: var(--mj-text-disabled); }\n\n.badge-count {\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-green { color: var(--mj-color-success-600); }\n.count-red { color: var(--mj-color-error-600); }\n\n.badge-label {\n color: var(--mj-text-disabled);\n font-size: 12px;\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.empty-state {\n text-align: center;\n padding: 48px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\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-row {\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s;\n}\n\n.run-row:hover {\n background: var(--mj-bg-page);\n}\n\n.run-row.selected {\n background: var(--mj-status-info-bg);\n}\n\n.run-row-main {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\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.expand-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: 11px;\n transition: background 0.15s, transform 0.2s;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.expand-btn i.rotated {\n transform: rotate(180deg);\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 padding: 8px 14px 14px 48px;\n background: var(--mj-bg-page);\n border-top: 1px solid var(--mj-border-subtle);\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}\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}\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"] }]
|
|
946
|
+
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-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 <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 @for (status of StatusOptions; track status) {\n <mj-filter-chip\n [Label]=\"status\"\n [Active]=\"StatusFilter === status\"\n (Clicked)=\"SetStatusFilter(status)\">\n </mj-filter-chip>\n }\n <span class=\"toolbar-divider\" aria-hidden=\"true\"></span>\n @for (d of DateOptions; track d.Value) {\n <mj-filter-chip\n [Label]=\"d.Label\"\n [Active]=\"DateFilter === d.Value\"\n (Clicked)=\"SetDateFilter(d.Value)\">\n </mj-filter-chip>\n }\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No runs found for the selected filters.</p>\n </div>\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 -->\n <div class=\"run-row\"\n [class.selected]=\"IsSelectedRun(run.ID)\"\n (click)=\"SelectRun(run.ID)\">\n <div class=\"run-row-main\">\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\n <!-- Expand chevron -->\n <button class=\"expand-btn\"\n (click)=\"ToggleExpand(run.ID); $event.stopPropagation()\"\n title=\"Show entity breakdown\">\n <i class=\"fa-solid fa-chevron-down\"\n [class.rotated]=\"IsExpanded(run.ID)\"></i>\n </button>\n </div>\n\n <!-- Expanded section: entity breakdown -->\n @if (IsExpanded(run.ID)) {\n <div class=\"expanded-section\" (click)=\"$event.stopPropagation()\">\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 <div class=\"expanded-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No entity details for this run.\n </div>\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 }\n </div>\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 <div class=\"detail-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <p>No entity detail records for this run.</p>\n </div>\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 <div class=\"detail-empty\">\n <i class=\"fa-solid fa-droplet-slash\"></i>\n <p>No watermarks recorded for this integration.</p>\n </div>\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.empty-state {\n text-align: center;\n padding: 48px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\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-row {\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n transition: background 0.1s;\n}\n\n.run-row:hover {\n background: var(--mj-bg-page);\n}\n\n.run-row.selected {\n background: var(--mj-status-info-bg);\n}\n\n.run-row-main {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\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.expand-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: 11px;\n transition: background 0.15s, transform 0.2s;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.expand-btn i.rotated {\n transform: rotate(180deg);\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 padding: 8px 14px 14px 48px;\n background: var(--mj-bg-page);\n border-top: 1px solid var(--mj-border-subtle);\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}\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}\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"] }]
|
|
958
947
|
}], null, null); })();
|
|
959
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActivityComponent, { className: "ActivityComponent", filePath: "src/Integration/components/activity/activity.component.ts", lineNumber:
|
|
948
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActivityComponent, { className: "ActivityComponent", filePath: "src/Integration/components/activity/activity.component.ts", lineNumber: 39 }); })();
|
|
960
949
|
export function LoadActivityComponent() {
|
|
961
950
|
// Tree-shaking prevention: importing this module causes
|
|
962
951
|
// @RegisterClass decorators to fire, registering components.
|