@memberjunction/ng-dashboards 5.21.0 → 5.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +364 -362
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +2 -2
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +313 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2792 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +382 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2683 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +191 -197
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +9 -8
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +305 -299
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +319 -313
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +240 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js +1767 -0
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
- package/dist/AI/index.d.ts +3 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +6 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +161 -193
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +10 -12
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +61 -68
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -11
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +82 -96
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +130 -134
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +40 -46
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.js +2 -2
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +2 -2
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +127 -132
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +2 -2
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +11 -17
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +2 -2
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +2 -2
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +181 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +1704 -182
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +4 -4
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +7 -9
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +6 -10
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +12 -20
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +126 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1086 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
- package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +5 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -0
- package/dist/KnowledgeHub/index.js +6 -0
- package/dist/KnowledgeHub/index.js.map +1 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +9 -7
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +10 -9
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2 -2
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +6 -9
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +20 -22
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +241 -200
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +63 -8
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +7 -5
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +9 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +122 -54
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +8 -13
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +6 -27
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +14 -11
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +58 -44
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +4 -8
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +0 -19
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/component-studio-dashboards.module.d.ts +7 -11
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +22 -34
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +13 -18
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +18 -31
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +5 -8
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +3 -19
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +7 -13
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +0 -27
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +5 -8
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +3 -19
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +5 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +6 -1
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +6 -10
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +3 -23
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +7 -12
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +4 -27
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +47 -53
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { OnInit, OnDestroy } from '@angular/core';
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { ResourceData } from '@memberjunction/core-entities';
|
|
3
3
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
4
|
+
import { TestingDialogService } from '@memberjunction/ng-testing';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/**
|
|
6
7
|
* Testing Runs Resource - displays test execution history and monitoring
|
|
7
8
|
*/
|
|
8
9
|
export declare class TestingRunsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
10
|
+
testingDialogService: TestingDialogService;
|
|
11
|
+
private cdr;
|
|
12
|
+
private destroy$;
|
|
13
|
+
constructor(testingDialogService: TestingDialogService, cdr: ChangeDetectorRef);
|
|
9
14
|
ngOnInit(): void;
|
|
10
15
|
ngOnDestroy(): void;
|
|
16
|
+
OnPanelClosed(): void;
|
|
11
17
|
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
12
18
|
GetResourceIconClass(data: ResourceData): Promise<string>;
|
|
13
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<TestingRunsResourceComponent, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-runs-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-runs-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"testing-runs-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-runs-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AAGzG,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;;AAElE;;GAEG;AACH,qBAmCa,4BAA6B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAIzF,oBAAoB,EAAE,oBAAoB;IACjD,OAAO,CAAC,GAAG;IAJb,OAAO,CAAC,QAAQ,CAAuB;gBAG9B,oBAAoB,EAAE,oBAAoB,EACzC,GAAG,EAAE,iBAAiB;IAKhC,QAAQ,IAAI,IAAI;IAUhB,WAAW,IAAI,IAAI;IAKZ,aAAa,IAAI,IAAI;IAKtB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAlCpD,4BAA4B;2CAA5B,4BAA4B;CAqCxC"}
|
|
@@ -4,19 +4,53 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Component } from '@angular/core';
|
|
7
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
8
|
+
import { Subject } from 'rxjs';
|
|
9
|
+
import { takeUntil } from 'rxjs/operators';
|
|
8
10
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
11
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "
|
|
13
|
+
import * as i1 from "@memberjunction/ng-testing";
|
|
14
|
+
import * as i2 from "@memberjunction/ng-versions";
|
|
15
|
+
import * as i3 from "./testing-runs.component";
|
|
16
|
+
function TestingRunsResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
18
|
+
i0.ɵɵelementStart(0, "mj-slide-panel", 2);
|
|
19
|
+
i0.ɵɵlistener("Closed", function TestingRunsResourceComponent_Conditional_2_Template_mj_slide_panel_Closed_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPanelClosed()); });
|
|
20
|
+
i0.ɵɵelementStart(1, "app-test-run-dialog", 3);
|
|
21
|
+
i0.ɵɵlistener("PanelClose", function TestingRunsResourceComponent_Conditional_2_Template_app_test_run_dialog_PanelClose_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPanelClosed()); });
|
|
22
|
+
i0.ɵɵelementEnd()();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
25
|
+
i0.ɵɵproperty("Title", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.testId) ? "Test Execution" : "Run Test")("Resizable", true);
|
|
26
|
+
i0.ɵɵadvance();
|
|
27
|
+
i0.ɵɵproperty("PanelMode", true)("selectedTestId", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.testId) ?? null)("selectedSuiteId", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.suiteId) ?? null)("runMode", (ctx_r1.testingDialogService.PanelOptions == null ? null : ctx_r1.testingDialogService.PanelOptions.mode) ?? "test");
|
|
28
|
+
} }
|
|
12
29
|
/**
|
|
13
30
|
* Testing Runs Resource - displays test execution history and monitoring
|
|
14
31
|
*/
|
|
15
32
|
let TestingRunsResourceComponent = class TestingRunsResourceComponent extends BaseResourceComponent {
|
|
33
|
+
testingDialogService;
|
|
34
|
+
cdr;
|
|
35
|
+
destroy$ = new Subject();
|
|
36
|
+
constructor(testingDialogService, cdr) {
|
|
37
|
+
super();
|
|
38
|
+
this.testingDialogService = testingDialogService;
|
|
39
|
+
this.cdr = cdr;
|
|
40
|
+
}
|
|
16
41
|
ngOnInit() {
|
|
42
|
+
this.testingDialogService.PanelStateChanged$.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
43
|
+
this.cdr.detectChanges();
|
|
44
|
+
});
|
|
17
45
|
this.NotifyLoadComplete();
|
|
18
46
|
}
|
|
19
47
|
ngOnDestroy() {
|
|
48
|
+
this.destroy$.next();
|
|
49
|
+
this.destroy$.complete();
|
|
50
|
+
}
|
|
51
|
+
OnPanelClosed() {
|
|
52
|
+
this.testingDialogService.ClosePanel();
|
|
53
|
+
this.cdr.markForCheck();
|
|
20
54
|
}
|
|
21
55
|
async GetResourceDisplayName(data) {
|
|
22
56
|
return 'Runs';
|
|
@@ -24,12 +58,16 @@ let TestingRunsResourceComponent = class TestingRunsResourceComponent extends Ba
|
|
|
24
58
|
async GetResourceIconClass(data) {
|
|
25
59
|
return 'fa-solid fa-play-circle';
|
|
26
60
|
}
|
|
27
|
-
static ɵfac =
|
|
28
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingRunsResourceComponent, selectors: [["mj-testing-runs-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
61
|
+
static ɵfac = function TestingRunsResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TestingRunsResourceComponent)(i0.ɵɵdirectiveInject(i1.TestingDialogService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
62
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingRunsResourceComponent, selectors: [["mj-testing-runs-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [[1, "resource-container"], ["Mode", "slide", 3, "Title", "Resizable"], ["Mode", "slide", 3, "Closed", "Title", "Resizable"], [3, "PanelClose", "PanelMode", "selectedTestId", "selectedSuiteId", "runMode"]], template: function TestingRunsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
29
63
|
i0.ɵɵelementStart(0, "div", 0);
|
|
30
64
|
i0.ɵɵelement(1, "app-testing-runs");
|
|
31
65
|
i0.ɵɵelementEnd();
|
|
32
|
-
|
|
66
|
+
i0.ɵɵconditionalCreate(2, TestingRunsResourceComponent_Conditional_2_Template, 2, 6, "mj-slide-panel", 1);
|
|
67
|
+
} if (rf & 2) {
|
|
68
|
+
i0.ɵɵadvance(2);
|
|
69
|
+
i0.ɵɵconditional(ctx.testingDialogService.IsPanelOpen ? 2 : -1);
|
|
70
|
+
} }, dependencies: [i1.TestRunDialogComponent, i2.MjSlidePanelComponent, i3.TestingRunsComponent], styles: [".resource-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n overflow: auto;\n }"], changeDetection: 0 });
|
|
33
71
|
};
|
|
34
72
|
TestingRunsResourceComponent = __decorate([
|
|
35
73
|
RegisterClass(BaseResourceComponent, 'TestingRunsResource')
|
|
@@ -37,11 +75,28 @@ TestingRunsResourceComponent = __decorate([
|
|
|
37
75
|
export { TestingRunsResourceComponent };
|
|
38
76
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingRunsResourceComponent, [{
|
|
39
77
|
type: Component,
|
|
40
|
-
args: [{ standalone: false, selector: 'mj-testing-runs-resource', template: `
|
|
78
|
+
args: [{ standalone: false, selector: 'mj-testing-runs-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
41
79
|
<div class="resource-container">
|
|
42
80
|
<app-testing-runs></app-testing-runs>
|
|
43
81
|
</div>
|
|
82
|
+
|
|
83
|
+
<!-- Slide Panel for Test Execution -->
|
|
84
|
+
@if (testingDialogService.IsPanelOpen) {
|
|
85
|
+
<mj-slide-panel
|
|
86
|
+
Mode="slide"
|
|
87
|
+
[Title]="testingDialogService.PanelOptions?.testId ? 'Test Execution' : 'Run Test'"
|
|
88
|
+
[Resizable]="true"
|
|
89
|
+
(Closed)="OnPanelClosed()">
|
|
90
|
+
<app-test-run-dialog
|
|
91
|
+
[PanelMode]="true"
|
|
92
|
+
[selectedTestId]="testingDialogService.PanelOptions?.testId ?? null"
|
|
93
|
+
[selectedSuiteId]="testingDialogService.PanelOptions?.suiteId ?? null"
|
|
94
|
+
[runMode]="testingDialogService.PanelOptions?.mode ?? 'test'"
|
|
95
|
+
(PanelClose)="OnPanelClosed()">
|
|
96
|
+
</app-test-run-dialog>
|
|
97
|
+
</mj-slide-panel>
|
|
98
|
+
}
|
|
44
99
|
`, styles: ["\n .resource-container {\n width: 100%;\n height: 100%;\n overflow: auto;\n }\n "] }]
|
|
45
|
-
}],
|
|
46
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingRunsResourceComponent, { className: "TestingRunsResourceComponent", filePath: "src/Testing/components/testing-runs-resource.component.ts", lineNumber:
|
|
100
|
+
}], () => [{ type: i1.TestingDialogService }, { type: i0.ChangeDetectorRef }], null); })();
|
|
101
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingRunsResourceComponent, { className: "TestingRunsResourceComponent", filePath: "src/Testing/components/testing-runs-resource.component.ts", lineNumber: 47 }); })();
|
|
47
102
|
//# sourceMappingURL=testing-runs-resource.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-runs-resource.component.js","sourceRoot":"","sources":["../../../src/Testing/components/testing-runs-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"testing-runs-resource.component.js","sourceRoot":"","sources":["../../../src/Testing/components/testing-runs-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAwC,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;;;;;;IAkB5D,yCAI6B;IAA3B,0MAAU,sBAAe,KAAC;IAC1B,8CAKiC;IAA/B,uNAAc,sBAAe,KAAC;IAElC,AADE,iBAAsB,EACP;;;IATf,AADA,mKAAmF,mBACjE;IAGhB,cAAkB;IAGlB,AADA,AADA,AADA,gCAAkB,uIACkD,yIACE,gIACT;;AAxBvE;;GAEG;AAoCI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,qBAAqB;IAI5D;IACC;IAJF,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,YACS,oBAA0C,EACzC,GAAsB;QAE9B,KAAK,EAAE,CAAC;QAHD,yBAAoB,GAApB,oBAAoB,CAAsB;QACzC,QAAG,GAAH,GAAG,CAAmB;IAGhC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,IAAI,CAC/C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QAC3C,OAAO,yBAAyB,CAAC;IACnC,CAAC;sHApCU,4BAA4B;6DAA5B,4BAA4B;YA7BrC,8BAAgC;YAC9B,mCAAqC;YACvC,iBAAM;YAGN,yGAAwC;;YAAxC,eAcC;YAdD,+DAcC;;;AAUQ,4BAA4B;IAnCxC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAmC/C,4BAA4B,CAqCxC;;iFArCY,4BAA4B;cAlCxC,SAAS;6BACI,KAAK,YACP,0BAA0B,mBACnB,uBAAuB,CAAC,MAAM,YACrC;;;;;;;;;;;;;;;;;;;;;GAqBT;;kFASU,4BAA4B","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { TestingDialogService } from '@memberjunction/ng-testing';\n\n/**\n * Testing Runs Resource - displays test execution history and monitoring\n */\n@RegisterClass(BaseResourceComponent, 'TestingRunsResource')\n@Component({\n standalone: false,\n selector: 'mj-testing-runs-resource',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"resource-container\">\n <app-testing-runs></app-testing-runs>\n </div>\n\n <!-- Slide Panel for Test Execution -->\n @if (testingDialogService.IsPanelOpen) {\n <mj-slide-panel\n Mode=\"slide\"\n [Title]=\"testingDialogService.PanelOptions?.testId ? 'Test Execution' : 'Run Test'\"\n [Resizable]=\"true\"\n (Closed)=\"OnPanelClosed()\">\n <app-test-run-dialog\n [PanelMode]=\"true\"\n [selectedTestId]=\"testingDialogService.PanelOptions?.testId ?? null\"\n [selectedSuiteId]=\"testingDialogService.PanelOptions?.suiteId ?? null\"\n [runMode]=\"testingDialogService.PanelOptions?.mode ?? 'test'\"\n (PanelClose)=\"OnPanelClosed()\">\n </app-test-run-dialog>\n </mj-slide-panel>\n }\n `,\n styles: [`\n .resource-container {\n width: 100%;\n height: 100%;\n overflow: auto;\n }\n `]\n})\nexport class TestingRunsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private destroy$ = new Subject<void>();\n\n constructor(\n public testingDialogService: TestingDialogService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.testingDialogService.PanelStateChanged$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public OnPanelClosed(): void {\n this.testingDialogService.ClosePanel();\n this.cdr.markForCheck();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Runs';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-play-circle';\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing-runs.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-runs.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,SAAS,EAGT,YAAY,EACZ,iBAAiB,EAEjB,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAA2C,MAAM,MAAM,CAAC;AAI3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAkC,MAAM,4BAA4B,CAAC;AACnG,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAE3B,MAAM,6CAA6C,CAAC;;AAErD,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtE,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvD,UAAU,eAAe;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,
|
|
1
|
+
{"version":3,"file":"testing-runs.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-runs.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,SAAS,EAGT,YAAY,EACZ,iBAAiB,EAEjB,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAA2C,MAAM,MAAM,CAAC;AAI3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAkC,MAAM,4BAA4B,CAAC;AACnG,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAE3B,MAAM,6CAA6C,CAAC;;AAErD,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtE,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvD,UAAU,eAAe;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBA0jCa,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAyCnD,sBAAsB,EAAE,6BAA6B;IAC5D,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,gBAAgB;IA3CjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IACnD,WAAW,wCAA+C;IAEpE,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAwC;IAG9D,WAAW,EAAE,eAAe,CAI1B;IAGF,cAAc,SAAK;IACnB,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAQ;IACzC,gBAAgB,SAAM;IACtB,oBAAoB,UAAS;IAC7B,YAAY,UAAS;IAErB,WAAW,EAAE,0BAA0B,GAAG,IAAI,CAAQ;IAEtD,eAAe,EAAE,qBAAqB,CAAyD;IAG/F,aAAa,EAAG,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzD,cAAc,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAG3C,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAM/E;IAEF,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAmC;gBAGzD,sBAAsB,EAAE,6BAA6B,EACpD,oBAAoB,EAAE,oBAAoB,EAC1C,GAAG,EAAE,iBAAiB,EACtB,gBAAgB,EAAE,gBAAgB;IAG5C,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IAMnB,WAAW,IAAI,IAAI;IAQnB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAO3C,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQrC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQjC,WAAW,IAAI,IAAI;IAOnB,OAAO,IAAI,IAAI;IASf,YAAY,IAAI,IAAI;IAMpB,SAAS,CAAC,GAAG,EAAE,0BAA0B,GAAG,IAAI;IAMhD,gBAAgB,IAAI,IAAI;IAKxB,cAAc,CAAC,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAKxE,SAAS,CAAC,GAAG,EAAE,0BAA0B,GAAG,IAAI;IAK1C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrC,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK1C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,0BAA0B,GAAG,MAAM;IAMrE,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ5C,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IActC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAUlC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQrC,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,eAAe;yCA7VZ,oBAAoB;2CAApB,oBAAoB;CAiWhC"}
|
|
@@ -433,7 +433,9 @@ export class TestingRunsComponent {
|
|
|
433
433
|
}, 1000);
|
|
434
434
|
}
|
|
435
435
|
StartNewTest() {
|
|
436
|
-
|
|
436
|
+
console.log('[TestingRuns] StartNewTest called, service IsPanelOpen before:', this.testingDialogService.IsPanelOpen);
|
|
437
|
+
this.testingDialogService.OpenAsPanel();
|
|
438
|
+
console.log('[TestingRuns] After OpenAsPanel, IsPanelOpen:', this.testingDialogService.IsPanelOpen);
|
|
437
439
|
}
|
|
438
440
|
SelectRun(run) {
|
|
439
441
|
this.SelectedRun = run;
|
|
@@ -451,7 +453,7 @@ export class TestingRunsComponent {
|
|
|
451
453
|
RerunTest(run) {
|
|
452
454
|
if (!run.testId)
|
|
453
455
|
return;
|
|
454
|
-
this.testingDialogService.
|
|
456
|
+
this.testingDialogService.OpenTestPanel(run.testId);
|
|
455
457
|
}
|
|
456
458
|
async SubmitFeedback() {
|
|
457
459
|
if (!this.SelectedRun)
|
|
@@ -736,7 +738,7 @@ export class TestingRunsComponent {
|
|
|
736
738
|
i0.ɵɵconditional(i0.ɵɵpipeBind1(54, 14, ctx.instrumentationService.isLoading$) ? 53 : ((tmp_8_0 = i0.ɵɵpipeBind1(55, 16, ctx.FilteredRuns$)) == null ? null : tmp_8_0.length) === 0 ? 56 : 57);
|
|
737
739
|
i0.ɵɵadvance(5);
|
|
738
740
|
i0.ɵɵconditional(ctx.SelectedRun ? 58 : -1);
|
|
739
|
-
} }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i2.TestStatusBadgeComponent, i2.ScoreIndicatorComponent, i2.CostDisplayComponent, i2.EvaluationBadgeComponent, i2.ExecutionContextComponent, i4.LoadingComponent, i5.AsyncPipe], styles: ["\n\n\n\n\n .runs-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n position: relative;\n }\n\n \n\n .page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n }\n\n .header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 22px;\n color: var(--mj-brand-primary);\n }\n\n .header-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n }\n\n \n\n .btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border: none;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n .btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n }\n\n .btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .spinning[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n }\n\n @keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n \n\n .filter-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n margin-bottom: 20px;\n padding: 14px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .filter-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .filter-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n }\n\n .chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n background: var(--mj-bg-surface-sunken);\n border: 2px solid transparent;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n }\n\n .chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"running\"][_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"passed\"][_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n border-color: var(--mj-status-success);\n }\n\n .chip.active[data-status=\"failed\"][_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n .chip.active[data-status=\"error\"][_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n }\n\n .result-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n white-space: nowrap;\n }\n\n .filter-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .time-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n }\n\n .time-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n min-width: 220px;\n transition: border-color 0.2s ease;\n }\n\n .search-box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n }\n\n .search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 13px;\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .clear-search[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n }\n\n .clear-search[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n }\n\n \n\n .stats-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 14px;\n margin-bottom: 20px;\n }\n\n .stat-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .stat-icon[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n }\n\n .stat-icon.total[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.pass[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n .stat-icon.duration[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.cost[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n .stat-body[_ngcontent-%COMP%] {\n flex: 1;\n }\n\n .stat-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n }\n\n .stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-top: 2px;\n }\n\n \n\n .runs-table-wrapper[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .table-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .table-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: background 0.15s ease;\n align-items: center;\n }\n\n .table-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .table-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n }\n\n .table-row.is-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .table-row.is-running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n }\n\n .table-row.is-running[_ngcontent-%COMP%] .test-name-link[_ngcontent-%COMP%]::after {\n content: '';\n display: inline-block;\n width: 8px;\n height: 8px;\n background: var(--mj-brand-primary);\n border-radius: 50%;\n margin-left: 8px;\n animation: _ngcontent-%COMP%_pulse-dot 1.5s infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse-dot {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n\n .col[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n font-size: 13px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n }\n\n .test-name-link[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .test-name-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n }\n\n .col-actions[_ngcontent-%COMP%] {\n gap: 6px;\n justify-content: flex-end;\n }\n\n .icon-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 8px;\n font-size: 13px;\n transition: all 0.2s ease;\n }\n\n .icon-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n \n\n .table-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 80px 40px;\n }\n\n .table-empty[_ngcontent-%COMP%] {\n padding: 80px 40px;\n text-align: center;\n }\n\n .table-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-strong);\n margin-bottom: 16px;\n }\n\n .table-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-muted);\n margin: 0 0 8px 0;\n }\n\n .empty-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .detail-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n }\n\n \n\n .detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 520px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_slideIn 0.25s ease-out;\n }\n\n @keyframes _ngcontent-%COMP%_slideIn {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n\n .detail-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n }\n\n .detail-title-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .detail-title-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .close-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n margin-left: 12px;\n transition: all 0.15s ease;\n }\n\n .close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .detail-panel-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px 24px;\n }\n\n .detail-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n margin-bottom: 24px;\n }\n\n .detail-metric[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .dm-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .dm-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n }\n\n .detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n \n\n .existing-feedback[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 16px;\n align-items: center;\n padding: 14px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 8px;\n font-size: 13px;\n }\n\n .feedback-label[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .feedback-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n }\n\n .feedback-comments[_ngcontent-%COMP%] {\n width: 100%;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-style: italic;\n }\n\n .feedback-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .feedback-form[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .rating-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n }\n\n .rating-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .rating-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .rating-btn.selected[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .toggle-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .toggle-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .toggle-btn.active[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .comments-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n resize: vertical;\n box-sizing: border-box;\n }\n\n .comments-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .comments-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .submit-feedback-btn[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n\n \n\n @media (max-width: 1400px) {\n .stats-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (max-width: 1200px) {\n .filter-bar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n\n .filter-left[_ngcontent-%COMP%], .filter-right[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .table-header[_ngcontent-%COMP%], .table-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 120px 100px 100px 80px;\n }\n\n .col-eval[_ngcontent-%COMP%], .col-time[_ngcontent-%COMP%] {\n display: none;\n }\n }\n\n @media (max-width: 768px) {\n .stats-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .detail-panel[_ngcontent-%COMP%] {\n width: 100vw;\n max-width: 100vw;\n }\n }"], changeDetection: 0 });
|
|
741
|
+
} }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i2.TestStatusBadgeComponent, i2.ScoreIndicatorComponent, i2.CostDisplayComponent, i2.EvaluationBadgeComponent, i2.ExecutionContextComponent, i4.LoadingComponent, i5.AsyncPipe], styles: ["\n\n\n\n\n .runs-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n position: relative;\n }\n\n \n\n .page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n }\n\n .header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 22px;\n color: var(--mj-brand-primary);\n }\n\n .header-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n }\n\n \n\n .btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border: none;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n .btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n }\n\n .btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .spinning[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n }\n\n @keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n \n\n .filter-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n margin-bottom: 20px;\n padding: 14px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .filter-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .filter-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n background: var(--mj-bg-surface-sunken);\n border: 2px solid transparent;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n }\n\n .chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"running\"][_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"passed\"][_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n border-color: var(--mj-status-success);\n }\n\n .chip.active[data-status=\"failed\"][_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n .chip.active[data-status=\"error\"][_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n }\n\n .result-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n white-space: nowrap;\n }\n\n .filter-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .time-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n }\n\n .time-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n min-width: 220px;\n transition: border-color 0.2s ease;\n }\n\n .search-box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n }\n\n .search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 13px;\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .clear-search[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n }\n\n .clear-search[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n }\n\n \n\n .stats-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 14px;\n margin-bottom: 20px;\n }\n\n .stat-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .stat-icon[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n }\n\n .stat-icon.total[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.pass[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n .stat-icon.duration[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.cost[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n .stat-body[_ngcontent-%COMP%] {\n flex: 1;\n }\n\n .stat-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n }\n\n .stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-top: 2px;\n }\n\n \n\n .runs-table-wrapper[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .table-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .table-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: background 0.15s ease;\n align-items: center;\n }\n\n .table-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .table-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n }\n\n .table-row.is-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .table-row.is-running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n }\n\n .table-row.is-running[_ngcontent-%COMP%] .test-name-link[_ngcontent-%COMP%]::after {\n content: '';\n display: inline-block;\n width: 8px;\n height: 8px;\n background: var(--mj-brand-primary);\n border-radius: 50%;\n margin-left: 8px;\n animation: _ngcontent-%COMP%_pulse-dot 1.5s infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse-dot {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n\n .col[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n font-size: 13px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n }\n\n .test-name-link[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .test-name-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n }\n\n .col-actions[_ngcontent-%COMP%] {\n gap: 6px;\n justify-content: flex-end;\n }\n\n .icon-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 8px;\n font-size: 13px;\n transition: all 0.2s ease;\n }\n\n .icon-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n \n\n .table-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 80px 40px;\n }\n\n .table-empty[_ngcontent-%COMP%] {\n padding: 80px 40px;\n text-align: center;\n }\n\n .table-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-strong);\n margin-bottom: 16px;\n }\n\n .table-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-muted);\n margin: 0 0 8px 0;\n }\n\n .empty-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .detail-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n }\n\n \n\n .detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 520px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_slideIn 0.25s ease-out;\n }\n\n @keyframes _ngcontent-%COMP%_slideIn {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n\n .detail-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n }\n\n .detail-title-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .detail-title-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .close-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n margin-left: 12px;\n transition: all 0.15s ease;\n }\n\n .close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .detail-panel-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px 24px;\n }\n\n .detail-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n margin-bottom: 24px;\n }\n\n .detail-metric[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .dm-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .dm-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n }\n\n .detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n \n\n .existing-feedback[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 16px;\n align-items: center;\n padding: 14px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 8px;\n font-size: 13px;\n }\n\n .feedback-label[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .feedback-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n }\n\n .feedback-comments[_ngcontent-%COMP%] {\n width: 100%;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-style: italic;\n }\n\n .feedback-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .feedback-form[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .rating-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n }\n\n .rating-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .rating-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .rating-btn.selected[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .toggle-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .toggle-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .toggle-btn.active[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .comments-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n resize: vertical;\n box-sizing: border-box;\n }\n\n .comments-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .comments-row[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .submit-feedback-btn[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n\n \n\n @media (max-width: 1400px) {\n .stats-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (max-width: 1200px) {\n .filter-bar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n\n .filter-left[_ngcontent-%COMP%], .filter-right[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .table-header[_ngcontent-%COMP%], .table-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 120px 100px 100px 80px;\n }\n\n .col-eval[_ngcontent-%COMP%], .col-time[_ngcontent-%COMP%] {\n display: none;\n }\n }\n\n @media (max-width: 768px) {\n .stats-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .detail-panel[_ngcontent-%COMP%] {\n width: 100vw;\n max-width: 100vw;\n }\n }\n\n @media (max-width: 480px) {\n .table-header[_ngcontent-%COMP%], .table-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 80px 60px;\n }\n\n .col-score[_ngcontent-%COMP%], .col-duration[_ngcontent-%COMP%] {\n display: none;\n }\n\n .chip[_ngcontent-%COMP%] {\n min-height: 44px;\n padding: 8px 14px;\n }\n\n .table-row[_ngcontent-%COMP%] {\n min-height: 44px;\n }\n }"], changeDetection: 0 });
|
|
740
742
|
}
|
|
741
743
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingRunsComponent, [{
|
|
742
744
|
type: Component,
|
|
@@ -1054,7 +1056,7 @@ export class TestingRunsComponent {
|
|
|
1054
1056
|
</div>
|
|
1055
1057
|
}
|
|
1056
1058
|
</div>
|
|
1057
|
-
`, styles: ["\n /* ==========================================\n Testing Runs Component\n ========================================== */\n\n .runs-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n position: relative;\n }\n\n /* Page Header */\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title i {\n font-size: 22px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .header-actions {\n display: flex;\n gap: 10px;\n }\n\n /* Buttons */\n .btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border: none;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n .btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .spinning {\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n /* Filter Bar */\n .filter-bar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n margin-bottom: 20px;\n padding: 14px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .filter-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .filter-chips {\n display: flex;\n gap: 6px;\n }\n\n .chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n background: var(--mj-bg-surface-sunken);\n border: 2px solid transparent;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .chip:hover {\n background: var(--mj-border-default);\n }\n\n .chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"running\"] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"passed\"] {\n background: var(--mj-status-success);\n border-color: var(--mj-status-success);\n }\n\n .chip.active[data-status=\"failed\"] {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n .chip.active[data-status=\"error\"] {\n background: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n }\n\n .result-count {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n white-space: nowrap;\n }\n\n .filter-right {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .time-select {\n padding: 8px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n }\n\n .time-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .search-box {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n min-width: 220px;\n transition: border-color 0.2s ease;\n }\n\n .search-box:focus-within {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n }\n\n .search-box i {\n color: var(--mj-text-disabled);\n font-size: 13px;\n }\n\n .search-box input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .search-box input::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .clear-search {\n border: none;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n }\n\n .clear-search:hover {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n }\n\n /* Stats Row */\n .stats-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 14px;\n margin-bottom: 20px;\n }\n\n .stat-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .stat-icon {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n }\n\n .stat-icon.total { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.pass { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n .stat-icon.duration { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.cost { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n .stat-body {\n flex: 1;\n }\n\n .stat-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n }\n\n .stat-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-top: 2px;\n }\n\n /* Runs Table */\n .runs-table-wrapper {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .table-header {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .table-row {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: background 0.15s ease;\n align-items: center;\n }\n\n .table-row:last-child {\n border-bottom: none;\n }\n\n .table-row:hover {\n background: var(--mj-bg-surface-card);\n }\n\n .table-row.is-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .table-row.is-running {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n }\n\n .table-row.is-running .test-name-link::after {\n content: '';\n display: inline-block;\n width: 8px;\n height: 8px;\n background: var(--mj-brand-primary);\n border-radius: 50%;\n margin-left: 8px;\n animation: pulse-dot 1.5s infinite;\n }\n\n @keyframes pulse-dot {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n\n .col {\n display: flex;\n align-items: center;\n font-size: 13px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n }\n\n .test-name-link {\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .test-name-link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n }\n\n .col-actions {\n gap: 6px;\n justify-content: flex-end;\n }\n\n .icon-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 8px;\n font-size: 13px;\n transition: all 0.2s ease;\n }\n\n .icon-btn:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n /* Table states */\n .table-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 80px 40px;\n }\n\n .table-empty {\n padding: 80px 40px;\n text-align: center;\n }\n\n .table-empty i {\n font-size: 48px;\n color: var(--mj-border-strong);\n margin-bottom: 16px;\n }\n\n .table-empty p {\n font-size: 16px;\n color: var(--mj-text-muted);\n margin: 0 0 8px 0;\n }\n\n .empty-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n /* Detail Panel Overlay */\n .detail-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n }\n\n /* Detail Panel */\n .detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 520px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n animation: slideIn 0.25s ease-out;\n }\n\n @keyframes slideIn {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n\n .detail-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n }\n\n .detail-title-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .detail-title-section h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .close-btn {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n margin-left: 12px;\n transition: all 0.15s ease;\n }\n\n .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .detail-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px 24px;\n }\n\n .detail-metrics {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n margin-bottom: 24px;\n }\n\n .detail-metric {\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .dm-label {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .dm-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .detail-section {\n margin-bottom: 24px;\n }\n\n .detail-section h4 {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .detail-section h4 i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n /* Feedback Section */\n .existing-feedback {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 16px;\n align-items: center;\n padding: 14px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 8px;\n font-size: 13px;\n }\n\n .feedback-label {\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .feedback-value {\n color: var(--mj-text-primary);\n font-weight: 500;\n }\n\n .feedback-comments {\n width: 100%;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-style: italic;\n }\n\n .feedback-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .feedback-form label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .rating-buttons {\n display: flex;\n gap: 4px;\n }\n\n .rating-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .rating-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .rating-btn.selected {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .toggle-group {\n display: flex;\n gap: 8px;\n }\n\n .toggle-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .toggle-btn.active {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .comments-row textarea {\n width: 100%;\n padding: 10px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n resize: vertical;\n box-sizing: border-box;\n }\n\n .comments-row textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .comments-row textarea::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .submit-feedback-btn {\n align-self: flex-start;\n }\n\n /* Responsive */\n @media (max-width: 1400px) {\n .stats-row {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (max-width: 1200px) {\n .filter-bar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .filter-left, .filter-right {\n justify-content: center;\n }\n\n .table-header, .table-row {\n grid-template-columns: 2fr 120px 100px 100px 80px;\n }\n\n .col-eval, .col-time {\n display: none;\n }\n }\n\n @media (max-width: 768px) {\n .stats-row {\n grid-template-columns: 1fr;\n }\n\n .detail-panel {\n width: 100vw;\n max-width: 100vw;\n }\n }\n "] }]
|
|
1059
|
+
`, styles: ["\n /* ==========================================\n Testing Runs Component\n ========================================== */\n\n .runs-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n position: relative;\n }\n\n /* Page Header */\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title i {\n font-size: 22px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .header-actions {\n display: flex;\n gap: 10px;\n }\n\n /* Buttons */\n .btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border: none;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n .btn-secondary {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .spinning {\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n /* Filter Bar */\n .filter-bar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n margin-bottom: 20px;\n padding: 14px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .filter-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .filter-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n background: var(--mj-bg-surface-sunken);\n border: 2px solid transparent;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n }\n\n .chip:hover {\n background: var(--mj-border-default);\n }\n\n .chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"running\"] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .chip.active[data-status=\"passed\"] {\n background: var(--mj-status-success);\n border-color: var(--mj-status-success);\n }\n\n .chip.active[data-status=\"failed\"] {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n .chip.active[data-status=\"error\"] {\n background: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n }\n\n .result-count {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n white-space: nowrap;\n }\n\n .filter-right {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .time-select {\n padding: 8px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n }\n\n .time-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .search-box {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n min-width: 220px;\n transition: border-color 0.2s ease;\n }\n\n .search-box:focus-within {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n }\n\n .search-box i {\n color: var(--mj-text-disabled);\n font-size: 13px;\n }\n\n .search-box input {\n flex: 1;\n border: none;\n background: transparent;\n outline: none;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .search-box input::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .clear-search {\n border: none;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n padding: 2px 4px;\n border-radius: 4px;\n }\n\n .clear-search:hover {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n }\n\n /* Stats Row */\n .stats-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 14px;\n margin-bottom: 20px;\n }\n\n .stat-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .stat-icon {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n }\n\n .stat-icon.total { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.pass { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n .stat-icon.duration { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n .stat-icon.cost { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n .stat-body {\n flex: 1;\n }\n\n .stat-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n }\n\n .stat-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-top: 2px;\n }\n\n /* Runs Table */\n .runs-table-wrapper {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n }\n\n .table-header {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .table-row {\n display: grid;\n grid-template-columns: 2fr 140px 120px 100px 100px 120px 90px;\n gap: 12px;\n padding: 14px 24px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: background 0.15s ease;\n align-items: center;\n }\n\n .table-row:last-child {\n border-bottom: none;\n }\n\n .table-row:hover {\n background: var(--mj-bg-surface-card);\n }\n\n .table-row.is-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .table-row.is-running {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n }\n\n .table-row.is-running .test-name-link::after {\n content: '';\n display: inline-block;\n width: 8px;\n height: 8px;\n background: var(--mj-brand-primary);\n border-radius: 50%;\n margin-left: 8px;\n animation: pulse-dot 1.5s infinite;\n }\n\n @keyframes pulse-dot {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n\n .col {\n display: flex;\n align-items: center;\n font-size: 13px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n }\n\n .test-name-link {\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .test-name-link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n }\n\n .col-actions {\n gap: 6px;\n justify-content: flex-end;\n }\n\n .icon-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 8px;\n font-size: 13px;\n transition: all 0.2s ease;\n }\n\n .icon-btn:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n }\n\n /* Table states */\n .table-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 80px 40px;\n }\n\n .table-empty {\n padding: 80px 40px;\n text-align: center;\n }\n\n .table-empty i {\n font-size: 48px;\n color: var(--mj-border-strong);\n margin-bottom: 16px;\n }\n\n .table-empty p {\n font-size: 16px;\n color: var(--mj-text-muted);\n margin: 0 0 8px 0;\n }\n\n .empty-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n /* Detail Panel Overlay */\n .detail-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n }\n\n /* Detail Panel */\n .detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 520px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n animation: slideIn 0.25s ease-out;\n }\n\n @keyframes slideIn {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n\n .detail-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n }\n\n .detail-title-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex: 1;\n min-width: 0;\n }\n\n .detail-title-section h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .close-btn {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n margin-left: 12px;\n transition: all 0.15s ease;\n }\n\n .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .detail-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px 24px;\n }\n\n .detail-metrics {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n margin-bottom: 24px;\n }\n\n .detail-metric {\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n border-left: 3px solid var(--mj-brand-primary);\n }\n\n .dm-label {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .dm-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .detail-section {\n margin-bottom: 24px;\n }\n\n .detail-section h4 {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n margin: 0 0 12px 0;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .detail-section h4 i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n\n /* Feedback Section */\n .existing-feedback {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 16px;\n align-items: center;\n padding: 14px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 8px;\n font-size: 13px;\n }\n\n .feedback-label {\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .feedback-value {\n color: var(--mj-text-primary);\n font-weight: 500;\n }\n\n .feedback-comments {\n width: 100%;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-bg-surface));\n font-size: 13px;\n color: var(--mj-text-secondary);\n font-style: italic;\n }\n\n .feedback-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .feedback-form label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n }\n\n .rating-buttons {\n display: flex;\n gap: 4px;\n }\n\n .rating-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .rating-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .rating-btn.selected {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .toggle-group {\n display: flex;\n gap: 8px;\n }\n\n .toggle-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .toggle-btn.active {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .comments-row textarea {\n width: 100%;\n padding: 10px 12px;\n border: 2px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n resize: vertical;\n box-sizing: border-box;\n }\n\n .comments-row textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n }\n\n .comments-row textarea::placeholder {\n color: var(--mj-text-disabled);\n }\n\n .submit-feedback-btn {\n align-self: flex-start;\n }\n\n /* Responsive */\n @media (max-width: 1400px) {\n .stats-row {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (max-width: 1200px) {\n .filter-bar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .filter-left, .filter-right {\n justify-content: center;\n }\n\n .table-header, .table-row {\n grid-template-columns: 2fr 120px 100px 100px 80px;\n }\n\n .col-eval, .col-time {\n display: none;\n }\n }\n\n @media (max-width: 768px) {\n .stats-row {\n grid-template-columns: 1fr;\n }\n\n .detail-panel {\n width: 100vw;\n max-width: 100vw;\n }\n }\n\n @media (max-width: 480px) {\n .table-header, .table-row {\n grid-template-columns: 1fr 80px 60px;\n }\n\n .col-score, .col-duration {\n display: none;\n }\n\n .chip {\n min-height: 44px;\n padding: 8px 14px;\n }\n\n .table-row {\n min-height: 44px;\n }\n }\n "] }]
|
|
1058
1060
|
}], () => [{ type: i1.TestingInstrumentationService }, { type: i2.TestingDialogService }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }], { initialState: [{
|
|
1059
1061
|
type: Input
|
|
1060
1062
|
}], stateChange: [{
|
|
@@ -1063,5 +1065,5 @@ export class TestingRunsComponent {
|
|
|
1063
1065
|
type: HostListener,
|
|
1064
1066
|
args: ['document:keydown.escape']
|
|
1065
1067
|
}] }); })();
|
|
1066
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingRunsComponent, { className: "TestingRunsComponent", filePath: "src/Testing/components/testing-runs.component.ts", lineNumber:
|
|
1068
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingRunsComponent, { className: "TestingRunsComponent", filePath: "src/Testing/components/testing-runs.component.ts", lineNumber: 1123 }); })();
|
|
1067
1069
|
//# sourceMappingURL=testing-runs.component.js.map
|