@memberjunction/ng-dashboards 6.2.0-edge.4 → 6.2.0-edge.6
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 +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +15 -7
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +209 -57
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +28 -16
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +30 -6
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +15 -7
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.d.ts +58 -0
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -0
- package/dist/AI/components/vectors/sensitive-fields.js +251 -0
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts +139 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-document-rules.js +182 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +83 -14
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +546 -271
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
- package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-store-selection.js +57 -0
- package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +236 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +374 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +195 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +2910 -0
- package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +3 -0
- package/dist/ChiefOfStaff/index.d.ts.map +1 -0
- package/dist/ChiefOfStaff/index.js +3 -0
- package/dist/ChiefOfStaff/index.js.map +1 -0
- package/dist/Communication/communication-agent-context.d.ts +11 -1
- package/dist/Communication/communication-agent-context.d.ts.map +1 -1
- package/dist/Communication/communication-agent-context.js +15 -0
- package/dist/Communication/communication-agent-context.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +5 -0
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +2 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +23 -18
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +27 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +722 -78
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +11 -10
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +49 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +220 -55
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +1 -0
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.d.ts.map +1 -1
- package/dist/DevTools/class-registry.component.js +1 -0
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.d.ts.map +1 -1
- package/dist/DevTools/event-monitor.component.js +2 -0
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/grid-width-lab.component.d.ts.map +1 -1
- package/dist/DevTools/grid-width-lab.component.js +1 -0
- package/dist/DevTools/grid-width-lab.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +1 -0
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +1 -0
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.d.ts.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +1 -0
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/DevTools/tab-strip-lab.component.d.ts.map +1 -1
- package/dist/DevTools/tab-strip-lab.component.js +1 -0
- package/dist/DevTools/tab-strip-lab.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +5 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +8 -5
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +2 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts +11 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js +24 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipeline.engine.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +16 -2
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +87 -33
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-inspector.component.d.ts +130 -0
- package/dist/LoginStudio/login-studio-inspector.component.d.ts.map +1 -0
- package/dist/LoginStudio/login-studio-inspector.component.js +781 -0
- package/dist/LoginStudio/login-studio-inspector.component.js.map +1 -0
- package/dist/LoginStudio/login-studio-resource.component.d.ts +161 -0
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -0
- package/dist/LoginStudio/login-studio-resource.component.js +890 -0
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -0
- package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +118 -65
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
- package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +256 -521
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +122 -249
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +335 -326
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +51 -2
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +185 -103
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/Workflows/components/workflow-runs-resource.component.js +4 -4
- package/dist/Workflows/components/workflow-runs-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +22 -21
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +8 -2
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +2 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +11 -3
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +72 -69
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
- package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
|
@@ -2,13 +2,11 @@ import { ChangeDetectorRef, Component, Input, ViewEncapsulation, inject } from '
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { MJButtonDirective } from '@memberjunction/ng-ui-components';
|
|
4
4
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
5
|
-
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
|
-
import { Metadata, RunView } from '@memberjunction/core';
|
|
7
|
-
import {
|
|
5
|
+
import { EscapeSQLString, UUIDsEqual } from '@memberjunction/global';
|
|
6
|
+
import { LogError, Metadata, RunView } from '@memberjunction/core';
|
|
7
|
+
import { ExperimentSessions } from '@memberjunction/predictive-studio-core';
|
|
8
8
|
import { ArtifactsModule } from '@memberjunction/ng-artifacts';
|
|
9
9
|
import { DeriveLeaderboard, GroupIterationsToKanban, } from '../predictive-studio.view-models';
|
|
10
|
-
import { PSConfirmModalComponent } from './ps-confirm-modal.component';
|
|
11
|
-
import { PSRunExperimentModalComponent } from './ps-run-experiment-modal.component';
|
|
12
10
|
import * as i0 from "@angular/core";
|
|
13
11
|
import * as i1 from "@angular/common";
|
|
14
12
|
import * as i2 from "@memberjunction/ng-artifacts";
|
|
@@ -17,444 +15,404 @@ const _forTrack0 = ($index, $item) => $item.rank;
|
|
|
17
15
|
const _forTrack1 = ($index, $item) => $item.Iteration;
|
|
18
16
|
const _forTrack2 = ($index, $item) => $item.ID;
|
|
19
17
|
const _forTrack3 = ($index, $item) => $item.label;
|
|
18
|
+
function PSExperimentsComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelementStart(0, "p", 6);
|
|
20
|
+
i0.ɵɵtext(1);
|
|
21
|
+
i0.ɵɵelementEnd();
|
|
22
|
+
} if (rf & 2) {
|
|
23
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
24
|
+
i0.ɵɵadvance();
|
|
25
|
+
i0.ɵɵtextInterpolate(ctx_r0.SessionsDisabledReason);
|
|
26
|
+
} }
|
|
20
27
|
function PSExperimentsComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
-
|
|
22
|
-
i0.ɵɵ
|
|
23
|
-
i0.ɵɵelement(2, "i", 7);
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "span", 4);
|
|
29
|
+
i0.ɵɵelement(2, "i", 5);
|
|
24
30
|
i0.ɵɵelementEnd();
|
|
25
31
|
i0.ɵɵelementStart(3, "h3");
|
|
26
32
|
i0.ɵɵtext(4, "No experiment sessions yet");
|
|
27
33
|
i0.ɵɵelementEnd();
|
|
28
|
-
i0.ɵɵ
|
|
29
|
-
i0.ɵɵtext(6, "Launch an experiment to watch the Model Dev Agent search algorithms and feature sets in waves, or configure a manual multi-algorithm tournament.");
|
|
34
|
+
i0.ɵɵconditionalCreate(5, PSExperimentsComponent_Conditional_1_Conditional_5_Template, 2, 1, "p", 6);
|
|
30
35
|
i0.ɵɵelementEnd();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
i0.ɵɵ
|
|
34
|
-
i0.ɵɵ
|
|
35
|
-
i0.ɵɵelementEnd()()();
|
|
36
|
+
} if (rf & 2) {
|
|
37
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
38
|
+
i0.ɵɵadvance(5);
|
|
39
|
+
i0.ɵɵconditional(!ctx_r0.SessionsEnabled ? 5 : -1);
|
|
36
40
|
} }
|
|
37
41
|
function PSExperimentsComponent_Conditional_2_Conditional_5_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
-
i0.ɵɵelementStart(0, "option",
|
|
42
|
+
i0.ɵɵelementStart(0, "option", 36);
|
|
39
43
|
i0.ɵɵtext(1);
|
|
40
44
|
i0.ɵɵelementEnd();
|
|
41
45
|
} if (rf & 2) {
|
|
42
|
-
const
|
|
43
|
-
i0.ɵɵproperty("value",
|
|
46
|
+
const s_r4 = ctx.$implicit;
|
|
47
|
+
i0.ɵɵproperty("value", s_r4.ID);
|
|
44
48
|
i0.ɵɵadvance();
|
|
45
|
-
i0.ɵɵtextInterpolate2("",
|
|
49
|
+
i0.ɵɵtextInterpolate2("", s_r4.Name, " (", s_r4.Status, ")");
|
|
46
50
|
} }
|
|
47
51
|
function PSExperimentsComponent_Conditional_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
-
const
|
|
49
|
-
i0.ɵɵelementStart(0, "span",
|
|
52
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
53
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
50
54
|
i0.ɵɵtext(1, "\u00B7 Switch:");
|
|
51
55
|
i0.ɵɵelementEnd();
|
|
52
|
-
i0.ɵɵelementStart(2, "select",
|
|
53
|
-
i0.ɵɵlistener("change", function PSExperimentsComponent_Conditional_2_Conditional_5_Template_select_change_2_listener($event) { i0.ɵɵrestoreView(
|
|
54
|
-
i0.ɵɵrepeaterCreate(3, PSExperimentsComponent_Conditional_2_Conditional_5_For_4_Template, 2, 3, "option",
|
|
56
|
+
i0.ɵɵelementStart(2, "select", 35);
|
|
57
|
+
i0.ɵɵlistener("change", function PSExperimentsComponent_Conditional_2_Conditional_5_Template_select_change_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selectSession($event.target.value)); });
|
|
58
|
+
i0.ɵɵrepeaterCreate(3, PSExperimentsComponent_Conditional_2_Conditional_5_For_4_Template, 2, 3, "option", 36, _forTrack2);
|
|
55
59
|
i0.ɵɵelementEnd();
|
|
56
60
|
} if (rf & 2) {
|
|
57
|
-
const
|
|
61
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
58
62
|
i0.ɵɵadvance(2);
|
|
59
|
-
i0.ɵɵproperty("value",
|
|
63
|
+
i0.ɵɵproperty("value", ctx_r0.sessionId);
|
|
60
64
|
i0.ɵɵadvance();
|
|
61
|
-
i0.ɵɵrepeater(
|
|
62
|
-
} }
|
|
63
|
-
function PSExperimentsComponent_Conditional_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
-
const _r6 = i0.ɵɵgetCurrentView();
|
|
65
|
-
i0.ɵɵelementStart(0, "button", 44);
|
|
66
|
-
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Conditional_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.requestControl("pause")); });
|
|
67
|
-
i0.ɵɵelement(1, "i", 45);
|
|
68
|
-
i0.ɵɵtext(2, " Pause");
|
|
69
|
-
i0.ɵɵelementEnd();
|
|
70
|
-
} }
|
|
71
|
-
function PSExperimentsComponent_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
72
|
-
const _r7 = i0.ɵɵgetCurrentView();
|
|
73
|
-
i0.ɵɵelementStart(0, "button", 46);
|
|
74
|
-
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Conditional_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.requestControl("resume")); });
|
|
75
|
-
i0.ɵɵelement(1, "i", 47);
|
|
76
|
-
i0.ɵɵtext(2, " Resume");
|
|
77
|
-
i0.ɵɵelementEnd();
|
|
65
|
+
i0.ɵɵrepeater(ctx_r0.sessions);
|
|
78
66
|
} }
|
|
79
|
-
function
|
|
80
|
-
|
|
81
|
-
i0.ɵɵ
|
|
82
|
-
i0.ɵɵ
|
|
83
|
-
i0.ɵɵ
|
|
84
|
-
i0.ɵɵ
|
|
85
|
-
|
|
67
|
+
function PSExperimentsComponent_Conditional_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
69
|
+
i0.ɵɵelement(1, "i", 37);
|
|
70
|
+
i0.ɵɵelementStart(2, "div", 38);
|
|
71
|
+
i0.ɵɵtext(3);
|
|
72
|
+
i0.ɵɵelementEnd()();
|
|
73
|
+
} if (rf & 2) {
|
|
74
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
75
|
+
i0.ɵɵadvance(3);
|
|
76
|
+
i0.ɵɵtextInterpolate(ctx_r0.SessionsDisabledReason);
|
|
86
77
|
} }
|
|
87
|
-
function
|
|
88
|
-
i0.ɵɵelementStart(0, "span",
|
|
78
|
+
function PSExperimentsComponent_Conditional_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
89
80
|
i0.ɵɵtext(1, "No scored iterations yet.");
|
|
90
81
|
i0.ɵɵelementEnd();
|
|
91
82
|
} }
|
|
92
|
-
function
|
|
93
|
-
i0.ɵɵelementStart(0, "div",
|
|
83
|
+
function PSExperimentsComponent_Conditional_2_For_28_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "span", 40);
|
|
94
85
|
i0.ɵɵtext(2);
|
|
95
86
|
i0.ɵɵelementEnd();
|
|
96
|
-
i0.ɵɵelementStart(3, "span",
|
|
87
|
+
i0.ɵɵelementStart(3, "span", 41);
|
|
97
88
|
i0.ɵɵelement(4, "i");
|
|
98
89
|
i0.ɵɵelementEnd();
|
|
99
|
-
i0.ɵɵelementStart(5, "div")(6, "div",
|
|
90
|
+
i0.ɵɵelementStart(5, "div")(6, "div", 42);
|
|
100
91
|
i0.ɵɵtext(7);
|
|
101
92
|
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵelementStart(8, "div",
|
|
93
|
+
i0.ɵɵelementStart(8, "div", 43);
|
|
103
94
|
i0.ɵɵtext(9);
|
|
104
95
|
i0.ɵɵelementEnd()();
|
|
105
|
-
i0.ɵɵelementStart(10, "span",
|
|
96
|
+
i0.ɵɵelementStart(10, "span", 44);
|
|
106
97
|
i0.ɵɵtext(11);
|
|
107
98
|
i0.ɵɵpipe(12, "number");
|
|
108
99
|
i0.ɵɵelementEnd()();
|
|
109
100
|
} if (rf & 2) {
|
|
110
|
-
const
|
|
111
|
-
i0.ɵɵclassProp("best",
|
|
101
|
+
const lp_r5 = ctx.$implicit;
|
|
102
|
+
i0.ɵɵclassProp("best", lp_r5.best)("pruned", lp_r5.pruned);
|
|
112
103
|
i0.ɵɵadvance();
|
|
113
|
-
i0.ɵɵclassProp("gold",
|
|
104
|
+
i0.ɵɵclassProp("gold", lp_r5.best);
|
|
114
105
|
i0.ɵɵadvance();
|
|
115
|
-
i0.ɵɵtextInterpolate(
|
|
106
|
+
i0.ɵɵtextInterpolate(lp_r5.rank);
|
|
116
107
|
i0.ɵɵadvance();
|
|
117
|
-
i0.ɵɵstyleProp("background",
|
|
108
|
+
i0.ɵɵstyleProp("background", lp_r5.algorithmColor);
|
|
118
109
|
i0.ɵɵadvance();
|
|
119
|
-
i0.ɵɵclassMap(
|
|
110
|
+
i0.ɵɵclassMap(lp_r5.algorithmIcon);
|
|
120
111
|
i0.ɵɵadvance(3);
|
|
121
|
-
i0.ɵɵtextInterpolate(
|
|
112
|
+
i0.ɵɵtextInterpolate(lp_r5.algorithm);
|
|
122
113
|
i0.ɵɵadvance(2);
|
|
123
|
-
i0.ɵɵtextInterpolate(
|
|
114
|
+
i0.ɵɵtextInterpolate(lp_r5.features);
|
|
124
115
|
i0.ɵɵadvance();
|
|
125
|
-
i0.ɵɵclassProp("win",
|
|
116
|
+
i0.ɵɵclassProp("win", lp_r5.best);
|
|
126
117
|
i0.ɵɵadvance();
|
|
127
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 16,
|
|
118
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 16, lp_r5.auc, "1.3-3"));
|
|
128
119
|
} }
|
|
129
|
-
function
|
|
130
|
-
i0.ɵɵelementStart(0, "div",
|
|
120
|
+
function PSExperimentsComponent_Conditional_2_Conditional_29_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
121
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "div", 47)(2, "span", 48);
|
|
131
122
|
i0.ɵɵtext(3);
|
|
132
123
|
i0.ɵɵelementEnd()();
|
|
133
|
-
i0.ɵɵelementStart(4, "div",
|
|
124
|
+
i0.ɵɵelementStart(4, "div", 49)(5, "div", 50);
|
|
134
125
|
i0.ɵɵtext(6);
|
|
135
126
|
i0.ɵɵelementEnd();
|
|
136
|
-
i0.ɵɵelementStart(7, "div",
|
|
127
|
+
i0.ɵɵelementStart(7, "div", 51)(8, "strong");
|
|
137
128
|
i0.ɵɵtext(9);
|
|
138
129
|
i0.ɵɵelementEnd();
|
|
139
|
-
i0.ɵɵelementStart(10, "span",
|
|
130
|
+
i0.ɵɵelementStart(10, "span", 52);
|
|
140
131
|
i0.ɵɵtext(11);
|
|
141
132
|
i0.ɵɵelementEnd()();
|
|
142
|
-
i0.ɵɵelementStart(12, "div",
|
|
133
|
+
i0.ɵɵelementStart(12, "div", 53);
|
|
143
134
|
i0.ɵɵelement(13, "span");
|
|
144
135
|
i0.ɵɵelementEnd()()();
|
|
145
136
|
} if (rf & 2) {
|
|
146
|
-
const
|
|
137
|
+
const b_r6 = ctx.$implicit;
|
|
147
138
|
i0.ɵɵadvance();
|
|
148
|
-
i0.ɵɵstyleProp("--ps-p",
|
|
139
|
+
i0.ɵɵstyleProp("--ps-p", b_r6.fillPct)("--ps-gauge-color", b_r6.color);
|
|
149
140
|
i0.ɵɵadvance(2);
|
|
150
|
-
i0.ɵɵtextInterpolate(
|
|
141
|
+
i0.ɵɵtextInterpolate(b_r6.centerText);
|
|
151
142
|
i0.ɵɵadvance(3);
|
|
152
|
-
i0.ɵɵtextInterpolate(
|
|
143
|
+
i0.ɵɵtextInterpolate(b_r6.label);
|
|
153
144
|
i0.ɵɵadvance(3);
|
|
154
|
-
i0.ɵɵtextInterpolate(
|
|
145
|
+
i0.ɵɵtextInterpolate(b_r6.value);
|
|
155
146
|
i0.ɵɵadvance(2);
|
|
156
|
-
i0.ɵɵtextInterpolate1("/ ",
|
|
147
|
+
i0.ɵɵtextInterpolate1("/ ", b_r6.cap);
|
|
157
148
|
i0.ɵɵadvance(2);
|
|
158
|
-
i0.ɵɵstyleProp("width",
|
|
149
|
+
i0.ɵɵstyleProp("width", b_r6.fillPct, "%")("background", b_r6.color);
|
|
159
150
|
} }
|
|
160
|
-
function
|
|
161
|
-
i0.ɵɵelementStart(0, "div",
|
|
162
|
-
i0.ɵɵrepeaterCreate(2,
|
|
151
|
+
function PSExperimentsComponent_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
152
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 45);
|
|
153
|
+
i0.ɵɵrepeaterCreate(2, PSExperimentsComponent_Conditional_2_Conditional_29_For_3_Template, 14, 12, "div", 46, _forTrack3);
|
|
163
154
|
i0.ɵɵelementEnd()();
|
|
164
155
|
} if (rf & 2) {
|
|
165
|
-
const
|
|
156
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
166
157
|
i0.ɵɵadvance(2);
|
|
167
|
-
i0.ɵɵrepeater(
|
|
158
|
+
i0.ɵɵrepeater(ctx_r0.budget);
|
|
168
159
|
} }
|
|
169
|
-
function
|
|
170
|
-
i0.ɵɵelementContainer(0,
|
|
160
|
+
function PSExperimentsComponent_Conditional_2_For_40_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
i0.ɵɵelementContainer(0, 29);
|
|
171
162
|
} if (rf & 2) {
|
|
172
|
-
const
|
|
163
|
+
const c_r7 = ctx.$implicit;
|
|
173
164
|
i0.ɵɵnextContext();
|
|
174
|
-
const
|
|
175
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
165
|
+
const iterCard_r8 = i0.ɵɵreference(65);
|
|
166
|
+
i0.ɵɵproperty("ngTemplateOutlet", iterCard_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, c_r7));
|
|
176
167
|
} }
|
|
177
|
-
function
|
|
178
|
-
i0.ɵɵelementStart(0, "span",
|
|
168
|
+
function PSExperimentsComponent_Conditional_2_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
179
170
|
i0.ɵɵtext(1, "No running iterations.");
|
|
180
171
|
i0.ɵɵelementEnd();
|
|
181
172
|
} }
|
|
182
|
-
function
|
|
183
|
-
i0.ɵɵelementContainer(0,
|
|
173
|
+
function PSExperimentsComponent_Conditional_2_For_51_Template(rf, ctx) { if (rf & 1) {
|
|
174
|
+
i0.ɵɵelementContainer(0, 29);
|
|
184
175
|
} if (rf & 2) {
|
|
185
|
-
const
|
|
176
|
+
const c_r9 = ctx.$implicit;
|
|
186
177
|
i0.ɵɵnextContext();
|
|
187
|
-
const
|
|
188
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
178
|
+
const iterCard_r8 = i0.ɵɵreference(65);
|
|
179
|
+
i0.ɵɵproperty("ngTemplateOutlet", iterCard_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, c_r9));
|
|
189
180
|
} }
|
|
190
|
-
function
|
|
191
|
-
i0.ɵɵelementStart(0, "span",
|
|
181
|
+
function PSExperimentsComponent_Conditional_2_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
182
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
192
183
|
i0.ɵɵtext(1, "No completed iterations.");
|
|
193
184
|
i0.ɵɵelementEnd();
|
|
194
185
|
} }
|
|
195
|
-
function
|
|
196
|
-
i0.ɵɵelementContainer(0,
|
|
186
|
+
function PSExperimentsComponent_Conditional_2_For_62_Template(rf, ctx) { if (rf & 1) {
|
|
187
|
+
i0.ɵɵelementContainer(0, 29);
|
|
197
188
|
} if (rf & 2) {
|
|
198
|
-
const
|
|
189
|
+
const c_r10 = ctx.$implicit;
|
|
199
190
|
i0.ɵɵnextContext();
|
|
200
|
-
const
|
|
201
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
191
|
+
const iterCard_r8 = i0.ɵɵreference(65);
|
|
192
|
+
i0.ɵɵproperty("ngTemplateOutlet", iterCard_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, c_r10));
|
|
202
193
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵelementStart(0, "span",
|
|
194
|
+
function PSExperimentsComponent_Conditional_2_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
195
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
205
196
|
i0.ɵɵtext(1, "Nothing pruned.");
|
|
206
197
|
i0.ɵɵelementEnd();
|
|
207
198
|
} }
|
|
208
|
-
function
|
|
209
|
-
i0.ɵɵelementStart(0, "span",
|
|
199
|
+
function PSExperimentsComponent_Conditional_2_ng_template_64_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
200
|
+
i0.ɵɵelementStart(0, "span", 58);
|
|
210
201
|
i0.ɵɵtext(1);
|
|
211
202
|
i0.ɵɵelementEnd();
|
|
212
203
|
} if (rf & 2) {
|
|
213
|
-
const
|
|
204
|
+
const f_r11 = ctx.$implicit;
|
|
214
205
|
i0.ɵɵadvance();
|
|
215
|
-
i0.ɵɵtextInterpolate(
|
|
206
|
+
i0.ɵɵtextInterpolate(f_r11);
|
|
216
207
|
} }
|
|
217
|
-
function
|
|
218
|
-
i0.ɵɵelementStart(0, "div",
|
|
208
|
+
function PSExperimentsComponent_Conditional_2_ng_template_64_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
i0.ɵɵelementStart(0, "div", 59)(1, "div", 64);
|
|
219
210
|
i0.ɵɵelement(2, "span");
|
|
220
211
|
i0.ɵɵelementEnd();
|
|
221
|
-
i0.ɵɵelementStart(3, "div",
|
|
212
|
+
i0.ɵɵelementStart(3, "div", 65)(4, "span", 52);
|
|
222
213
|
i0.ɵɵtext(5);
|
|
223
214
|
i0.ɵɵelementEnd()()();
|
|
224
215
|
} if (rf & 2) {
|
|
225
|
-
const
|
|
216
|
+
const c_r12 = i0.ɵɵnextContext().c;
|
|
226
217
|
i0.ɵɵadvance(2);
|
|
227
|
-
i0.ɵɵstyleProp("width",
|
|
218
|
+
i0.ɵɵstyleProp("width", c_r12.Progress, "%");
|
|
228
219
|
i0.ɵɵadvance(3);
|
|
229
|
-
i0.ɵɵtextInterpolate(
|
|
220
|
+
i0.ɵɵtextInterpolate(c_r12.ProgressDetail);
|
|
230
221
|
} }
|
|
231
|
-
function
|
|
232
|
-
i0.ɵɵelementStart(0, "div",
|
|
222
|
+
function PSExperimentsComponent_Conditional_2_ng_template_64_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "div", 60)(1, "span", 66);
|
|
233
224
|
i0.ɵɵtext(2);
|
|
234
225
|
i0.ɵɵpipe(3, "number");
|
|
235
226
|
i0.ɵɵelementEnd();
|
|
236
|
-
i0.ɵɵelementStart(4, "span",
|
|
227
|
+
i0.ɵɵelementStart(4, "span", 67);
|
|
237
228
|
i0.ɵɵtext(5);
|
|
238
229
|
i0.ɵɵelementEnd()();
|
|
239
230
|
} if (rf & 2) {
|
|
240
|
-
const
|
|
231
|
+
const c_r12 = i0.ɵɵnextContext().c;
|
|
241
232
|
i0.ɵɵadvance();
|
|
242
|
-
i0.ɵɵclassProp("green",
|
|
233
|
+
i0.ɵɵclassProp("green", c_r12.status === "Best");
|
|
243
234
|
i0.ɵɵadvance();
|
|
244
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 4,
|
|
235
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 4, c_r12.score, "1.3-3"));
|
|
245
236
|
i0.ɵɵadvance(3);
|
|
246
|
-
i0.ɵɵtextInterpolate1("score \u00B7 ",
|
|
237
|
+
i0.ɵɵtextInterpolate1("score \u00B7 ", c_r12.ScoreDelta);
|
|
247
238
|
} }
|
|
248
|
-
function
|
|
249
|
-
i0.ɵɵelementStart(0, "div",
|
|
239
|
+
function PSExperimentsComponent_Conditional_2_ng_template_64_Template(rf, ctx) { if (rf & 1) {
|
|
240
|
+
i0.ɵɵelementStart(0, "div", 54)(1, "div", 55)(2, "span", 41);
|
|
250
241
|
i0.ɵɵelement(3, "i");
|
|
251
242
|
i0.ɵɵelementEnd();
|
|
252
|
-
i0.ɵɵelementStart(4, "div")(5, "div",
|
|
243
|
+
i0.ɵɵelementStart(4, "div")(5, "div", 42);
|
|
253
244
|
i0.ɵɵtext(6);
|
|
254
245
|
i0.ɵɵelementEnd();
|
|
255
|
-
i0.ɵɵelementStart(7, "div",
|
|
246
|
+
i0.ɵɵelementStart(7, "div", 56);
|
|
256
247
|
i0.ɵɵtext(8);
|
|
257
248
|
i0.ɵɵelementEnd()();
|
|
258
|
-
i0.ɵɵelement(9, "span",
|
|
259
|
-
i0.ɵɵelementStart(10, "span",
|
|
249
|
+
i0.ɵɵelement(9, "span", 11);
|
|
250
|
+
i0.ɵɵelementStart(10, "span", 9);
|
|
260
251
|
i0.ɵɵtext(11);
|
|
261
252
|
i0.ɵɵelementEnd()();
|
|
262
|
-
i0.ɵɵelementStart(12, "div",
|
|
263
|
-
i0.ɵɵrepeaterCreate(13,
|
|
253
|
+
i0.ɵɵelementStart(12, "div", 57);
|
|
254
|
+
i0.ɵɵrepeaterCreate(13, PSExperimentsComponent_Conditional_2_ng_template_64_For_14_Template, 2, 1, "span", 58, i0.ɵɵrepeaterTrackByIdentity);
|
|
264
255
|
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵconditionalCreate(15,
|
|
266
|
-
i0.ɵɵelementStart(17, "div",
|
|
267
|
-
i0.ɵɵelement(18, "i",
|
|
268
|
-
i0.ɵɵelementStart(19, "span",
|
|
256
|
+
i0.ɵɵconditionalCreate(15, PSExperimentsComponent_Conditional_2_ng_template_64_Conditional_15_Template, 6, 3, "div", 59)(16, PSExperimentsComponent_Conditional_2_ng_template_64_Conditional_16_Template, 6, 7, "div", 60);
|
|
257
|
+
i0.ɵɵelementStart(17, "div", 61);
|
|
258
|
+
i0.ɵɵelement(18, "i", 62);
|
|
259
|
+
i0.ɵɵelementStart(19, "span", 63);
|
|
269
260
|
i0.ɵɵtext(20);
|
|
270
261
|
i0.ɵɵelementEnd()()();
|
|
271
262
|
} if (rf & 2) {
|
|
272
|
-
const
|
|
273
|
-
const
|
|
274
|
-
i0.ɵɵclassProp("best",
|
|
263
|
+
const c_r12 = ctx.c;
|
|
264
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
265
|
+
i0.ɵɵclassProp("best", c_r12.status === "Best")("running", c_r12.status === "Running")("pruned", c_r12.status === "Pruned");
|
|
275
266
|
i0.ɵɵadvance(2);
|
|
276
|
-
i0.ɵɵstyleProp("background",
|
|
267
|
+
i0.ɵɵstyleProp("background", c_r12.algorithmColor);
|
|
277
268
|
i0.ɵɵadvance();
|
|
278
|
-
i0.ɵɵclassMap(
|
|
269
|
+
i0.ɵɵclassMap(c_r12.algorithmIcon);
|
|
279
270
|
i0.ɵɵadvance(3);
|
|
280
|
-
i0.ɵɵtextInterpolate(
|
|
271
|
+
i0.ɵɵtextInterpolate(c_r12.algorithm);
|
|
281
272
|
i0.ɵɵadvance(2);
|
|
282
|
-
i0.ɵɵtextInterpolate(
|
|
273
|
+
i0.ɵɵtextInterpolate(c_r12.iteration);
|
|
283
274
|
i0.ɵɵadvance(2);
|
|
284
|
-
i0.ɵɵclassMap(
|
|
275
|
+
i0.ɵɵclassMap(ctx_r0.statusBadgeClass(c_r12.status));
|
|
285
276
|
i0.ɵɵadvance();
|
|
286
|
-
i0.ɵɵtextInterpolate(
|
|
277
|
+
i0.ɵɵtextInterpolate(ctx_r0.statusLabel(c_r12.status));
|
|
287
278
|
i0.ɵɵadvance(2);
|
|
288
|
-
i0.ɵɵrepeater(
|
|
279
|
+
i0.ɵɵrepeater(c_r12.features);
|
|
289
280
|
i0.ɵɵadvance(2);
|
|
290
|
-
i0.ɵɵconditional(
|
|
281
|
+
i0.ɵɵconditional(c_r12.status === "Running" ? 15 : 16);
|
|
291
282
|
i0.ɵɵadvance(5);
|
|
292
|
-
i0.ɵɵtextInterpolate(
|
|
283
|
+
i0.ɵɵtextInterpolate(c_r12.rationale);
|
|
293
284
|
} }
|
|
294
285
|
function PSExperimentsComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
295
|
-
const
|
|
296
|
-
i0.ɵɵelementStart(0, "div",
|
|
286
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
287
|
+
i0.ɵɵelementStart(0, "div", 7)(1, "div")(2, "div", 8)(3, "span");
|
|
297
288
|
i0.ɵɵtext(4, "Experiment session");
|
|
298
289
|
i0.ɵɵelementEnd();
|
|
299
290
|
i0.ɵɵconditionalCreate(5, PSExperimentsComponent_Conditional_2_Conditional_5_Template, 5, 1);
|
|
300
291
|
i0.ɵɵelementEnd();
|
|
301
292
|
i0.ɵɵelementStart(6, "h2");
|
|
302
293
|
i0.ɵɵtext(7);
|
|
303
|
-
i0.ɵɵelementStart(8, "span",
|
|
304
|
-
i0.ɵɵelement(9, "span",
|
|
294
|
+
i0.ɵɵelementStart(8, "span", 9);
|
|
295
|
+
i0.ɵɵelement(9, "span", 10);
|
|
305
296
|
i0.ɵɵtext(10);
|
|
306
297
|
i0.ɵɵelementEnd()()();
|
|
307
|
-
i0.ɵɵelement(11, "span",
|
|
308
|
-
i0.ɵɵelementStart(12, "span",
|
|
298
|
+
i0.ɵɵelement(11, "span", 11);
|
|
299
|
+
i0.ɵɵelementStart(12, "span", 12);
|
|
309
300
|
i0.ɵɵtext(13);
|
|
310
301
|
i0.ɵɵelementEnd();
|
|
311
|
-
i0.ɵɵelementStart(14, "button",
|
|
312
|
-
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(
|
|
313
|
-
i0.ɵɵelement(15, "i",
|
|
302
|
+
i0.ɵɵelementStart(14, "button", 13);
|
|
303
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.viewResultsArtifact()); });
|
|
304
|
+
i0.ɵɵelement(15, "i", 14);
|
|
314
305
|
i0.ɵɵtext(16);
|
|
306
|
+
i0.ɵɵelementEnd()();
|
|
307
|
+
i0.ɵɵconditionalCreate(17, PSExperimentsComponent_Conditional_2_Conditional_17_Template, 4, 1, "div", 15);
|
|
308
|
+
i0.ɵɵelementStart(18, "div", 16)(19, "div", 17)(20, "div", 18)(21, "div", 19);
|
|
309
|
+
i0.ɵɵelement(22, "i", 20);
|
|
310
|
+
i0.ɵɵtext(23, " Leaderboard");
|
|
315
311
|
i0.ɵɵelementEnd();
|
|
316
|
-
i0.ɵɵelementStart(
|
|
317
|
-
i0.ɵɵ
|
|
318
|
-
i0.ɵɵelement(18, "i", 19);
|
|
319
|
-
i0.ɵɵtext(19, " New Experiment ");
|
|
320
|
-
i0.ɵɵelementEnd();
|
|
321
|
-
i0.ɵɵconditionalCreate(20, PSExperimentsComponent_Conditional_2_Conditional_20_Template, 3, 0, "button", 20);
|
|
322
|
-
i0.ɵɵconditionalCreate(21, PSExperimentsComponent_Conditional_2_Conditional_21_Template, 3, 0, "button", 21);
|
|
323
|
-
i0.ɵɵconditionalCreate(22, PSExperimentsComponent_Conditional_2_Conditional_22_Template, 3, 0, "button", 22);
|
|
324
|
-
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵelementStart(23, "div", 23)(24, "div", 24)(25, "div", 25)(26, "div", 26);
|
|
326
|
-
i0.ɵɵelement(27, "i", 27);
|
|
327
|
-
i0.ɵɵtext(28, " Leaderboard");
|
|
328
|
-
i0.ɵɵelementEnd();
|
|
329
|
-
i0.ɵɵelementStart(29, "div", 15);
|
|
330
|
-
i0.ɵɵtext(30);
|
|
312
|
+
i0.ɵɵelementStart(24, "div", 12);
|
|
313
|
+
i0.ɵɵtext(25);
|
|
331
314
|
i0.ɵɵelementEnd()();
|
|
332
|
-
i0.ɵɵconditionalCreate(
|
|
333
|
-
i0.ɵɵrepeaterCreate(
|
|
315
|
+
i0.ɵɵconditionalCreate(26, PSExperimentsComponent_Conditional_2_Conditional_26_Template, 2, 0, "span", 12);
|
|
316
|
+
i0.ɵɵrepeaterCreate(27, PSExperimentsComponent_Conditional_2_For_28_Template, 13, 19, "div", 21, _forTrack0);
|
|
334
317
|
i0.ɵɵelementEnd()();
|
|
335
|
-
i0.ɵɵconditionalCreate(
|
|
336
|
-
i0.ɵɵelementStart(
|
|
337
|
-
i0.ɵɵelement(
|
|
338
|
-
i0.ɵɵelementStart(
|
|
339
|
-
i0.ɵɵtext(
|
|
340
|
-
i0.ɵɵelementEnd();
|
|
341
|
-
i0.ɵɵelementStart(
|
|
342
|
-
i0.ɵɵtext(
|
|
318
|
+
i0.ɵɵconditionalCreate(29, PSExperimentsComponent_Conditional_2_Conditional_29_Template, 4, 0, "div", 22);
|
|
319
|
+
i0.ɵɵelementStart(30, "div", 23)(31, "div", 24)(32, "div", 25);
|
|
320
|
+
i0.ɵɵelement(33, "i", 26);
|
|
321
|
+
i0.ɵɵelementStart(34, "h3");
|
|
322
|
+
i0.ɵɵtext(35, "Running");
|
|
323
|
+
i0.ɵɵelementEnd();
|
|
324
|
+
i0.ɵɵelementStart(36, "span", 27);
|
|
325
|
+
i0.ɵɵtext(37);
|
|
343
326
|
i0.ɵɵelementEnd()();
|
|
344
|
-
i0.ɵɵelementStart(
|
|
345
|
-
i0.ɵɵrepeaterCreate(
|
|
346
|
-
i0.ɵɵconditionalCreate(
|
|
327
|
+
i0.ɵɵelementStart(38, "div", 28);
|
|
328
|
+
i0.ɵɵrepeaterCreate(39, PSExperimentsComponent_Conditional_2_For_40_Template, 1, 4, "ng-container", 29, _forTrack1);
|
|
329
|
+
i0.ɵɵconditionalCreate(41, PSExperimentsComponent_Conditional_2_Conditional_41_Template, 2, 0, "span", 12);
|
|
347
330
|
i0.ɵɵelementEnd()();
|
|
348
|
-
i0.ɵɵelementStart(
|
|
349
|
-
i0.ɵɵelement(
|
|
350
|
-
i0.ɵɵelementStart(
|
|
351
|
-
i0.ɵɵtext(
|
|
331
|
+
i0.ɵɵelementStart(42, "div", 30)(43, "div", 25);
|
|
332
|
+
i0.ɵɵelement(44, "i", 31);
|
|
333
|
+
i0.ɵɵelementStart(45, "h3");
|
|
334
|
+
i0.ɵɵtext(46, "Completed");
|
|
352
335
|
i0.ɵɵelementEnd();
|
|
353
|
-
i0.ɵɵelementStart(
|
|
354
|
-
i0.ɵɵtext(
|
|
336
|
+
i0.ɵɵelementStart(47, "span", 27);
|
|
337
|
+
i0.ɵɵtext(48);
|
|
355
338
|
i0.ɵɵelementEnd()();
|
|
356
|
-
i0.ɵɵelementStart(
|
|
357
|
-
i0.ɵɵrepeaterCreate(
|
|
358
|
-
i0.ɵɵconditionalCreate(
|
|
339
|
+
i0.ɵɵelementStart(49, "div", 28);
|
|
340
|
+
i0.ɵɵrepeaterCreate(50, PSExperimentsComponent_Conditional_2_For_51_Template, 1, 4, "ng-container", 29, _forTrack1);
|
|
341
|
+
i0.ɵɵconditionalCreate(52, PSExperimentsComponent_Conditional_2_Conditional_52_Template, 2, 0, "span", 12);
|
|
359
342
|
i0.ɵɵelementEnd()();
|
|
360
|
-
i0.ɵɵelementStart(
|
|
361
|
-
i0.ɵɵelement(
|
|
362
|
-
i0.ɵɵelementStart(
|
|
363
|
-
i0.ɵɵtext(
|
|
343
|
+
i0.ɵɵelementStart(53, "div", 32)(54, "div", 25);
|
|
344
|
+
i0.ɵɵelement(55, "i", 33);
|
|
345
|
+
i0.ɵɵelementStart(56, "h3");
|
|
346
|
+
i0.ɵɵtext(57, "Pruned");
|
|
364
347
|
i0.ɵɵelementEnd();
|
|
365
|
-
i0.ɵɵelementStart(
|
|
366
|
-
i0.ɵɵtext(
|
|
348
|
+
i0.ɵɵelementStart(58, "span", 27);
|
|
349
|
+
i0.ɵɵtext(59);
|
|
367
350
|
i0.ɵɵelementEnd()();
|
|
368
|
-
i0.ɵɵelementStart(
|
|
369
|
-
i0.ɵɵrepeaterCreate(
|
|
370
|
-
i0.ɵɵconditionalCreate(
|
|
351
|
+
i0.ɵɵelementStart(60, "div", 28);
|
|
352
|
+
i0.ɵɵrepeaterCreate(61, PSExperimentsComponent_Conditional_2_For_62_Template, 1, 4, "ng-container", 29, _forTrack1);
|
|
353
|
+
i0.ɵɵconditionalCreate(63, PSExperimentsComponent_Conditional_2_Conditional_63_Template, 2, 0, "span", 12);
|
|
371
354
|
i0.ɵɵelementEnd()()();
|
|
372
|
-
i0.ɵɵtemplate(
|
|
355
|
+
i0.ɵɵtemplate(64, PSExperimentsComponent_Conditional_2_ng_template_64_Template, 21, 17, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
373
356
|
} if (rf & 2) {
|
|
374
|
-
const
|
|
357
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
375
358
|
i0.ɵɵadvance(5);
|
|
376
|
-
i0.ɵɵconditional(
|
|
359
|
+
i0.ɵɵconditional(ctx_r0.sessions.length > 1 ? 5 : -1);
|
|
377
360
|
i0.ɵɵadvance(2);
|
|
378
|
-
i0.ɵɵtextInterpolate1("",
|
|
361
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.session.Name, " ");
|
|
379
362
|
i0.ɵɵadvance();
|
|
380
|
-
i0.ɵɵclassMap(
|
|
363
|
+
i0.ɵɵclassMap(ctx_r0.sessionBadgeClass);
|
|
381
364
|
i0.ɵɵadvance();
|
|
382
|
-
i0.ɵɵstyleProp("background",
|
|
365
|
+
i0.ɵɵstyleProp("background", ctx_r0.sessionDotColor);
|
|
383
366
|
i0.ɵɵadvance();
|
|
384
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
367
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.session.Status);
|
|
385
368
|
i0.ɵɵadvance(3);
|
|
386
|
-
i0.ɵɵtextInterpolate(
|
|
369
|
+
i0.ɵɵtextInterpolate(ctx_r0.iterationCountLabel);
|
|
387
370
|
i0.ɵɵadvance();
|
|
388
|
-
i0.ɵɵproperty("disabled",
|
|
371
|
+
i0.ɵɵproperty("disabled", ctx_r0.artifactLoading);
|
|
389
372
|
i0.ɵɵadvance(2);
|
|
390
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
391
|
-
i0.ɵɵadvance(4);
|
|
392
|
-
i0.ɵɵconditional(ctx_r1.canPause ? 20 : -1);
|
|
393
|
-
i0.ɵɵadvance();
|
|
394
|
-
i0.ɵɵconditional(ctx_r1.canResume ? 21 : -1);
|
|
373
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.artifactLoading ? "Loading\u2026" : "View Results Artifact", " ");
|
|
395
374
|
i0.ɵɵadvance();
|
|
396
|
-
i0.ɵɵconditional(
|
|
375
|
+
i0.ɵɵconditional(!ctx_r0.SessionsEnabled ? 17 : -1);
|
|
397
376
|
i0.ɵɵadvance(8);
|
|
398
|
-
i0.ɵɵtextInterpolate1("",
|
|
377
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.leaderboard.length, " scored \u00B7 by metric");
|
|
399
378
|
i0.ɵɵadvance();
|
|
400
|
-
i0.ɵɵconditional(
|
|
379
|
+
i0.ɵɵconditional(ctx_r0.leaderboard.length === 0 ? 26 : -1);
|
|
401
380
|
i0.ɵɵadvance();
|
|
402
|
-
i0.ɵɵrepeater(
|
|
381
|
+
i0.ɵɵrepeater(ctx_r0.leaderboard);
|
|
403
382
|
i0.ɵɵadvance(2);
|
|
404
|
-
i0.ɵɵconditional(
|
|
383
|
+
i0.ɵɵconditional(ctx_r0.budget.length > 0 ? 29 : -1);
|
|
405
384
|
i0.ɵɵadvance(8);
|
|
406
|
-
i0.ɵɵtextInterpolate(
|
|
385
|
+
i0.ɵɵtextInterpolate(ctx_r0.kanban.Running.length);
|
|
407
386
|
i0.ɵɵadvance(2);
|
|
408
|
-
i0.ɵɵrepeater(
|
|
387
|
+
i0.ɵɵrepeater(ctx_r0.kanban.Running);
|
|
409
388
|
i0.ɵɵadvance(2);
|
|
410
|
-
i0.ɵɵconditional(
|
|
389
|
+
i0.ɵɵconditional(ctx_r0.kanban.Running.length === 0 ? 41 : -1);
|
|
411
390
|
i0.ɵɵadvance(7);
|
|
412
|
-
i0.ɵɵtextInterpolate(
|
|
391
|
+
i0.ɵɵtextInterpolate(ctx_r0.kanban.Completed.length);
|
|
413
392
|
i0.ɵɵadvance(2);
|
|
414
|
-
i0.ɵɵrepeater(
|
|
393
|
+
i0.ɵɵrepeater(ctx_r0.kanban.Completed);
|
|
415
394
|
i0.ɵɵadvance(2);
|
|
416
|
-
i0.ɵɵconditional(
|
|
395
|
+
i0.ɵɵconditional(ctx_r0.kanban.Completed.length === 0 ? 52 : -1);
|
|
417
396
|
i0.ɵɵadvance(7);
|
|
418
|
-
i0.ɵɵtextInterpolate(
|
|
397
|
+
i0.ɵɵtextInterpolate(ctx_r0.kanban.Pruned.length);
|
|
419
398
|
i0.ɵɵadvance(2);
|
|
420
|
-
i0.ɵɵrepeater(
|
|
399
|
+
i0.ɵɵrepeater(ctx_r0.kanban.Pruned);
|
|
421
400
|
i0.ɵɵadvance(2);
|
|
422
|
-
i0.ɵɵconditional(
|
|
401
|
+
i0.ɵɵconditional(ctx_r0.kanban.Pruned.length === 0 ? 63 : -1);
|
|
423
402
|
} }
|
|
424
403
|
function PSExperimentsComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
425
|
-
const
|
|
426
|
-
i0.ɵɵelementStart(0, "
|
|
427
|
-
i0.ɵɵlistener("
|
|
428
|
-
i0.ɵɵ
|
|
429
|
-
i0.ɵɵ
|
|
430
|
-
|
|
431
|
-
const
|
|
432
|
-
i0.ɵɵproperty("title", ctx_r1.pendingTitle)("icon", ctx_r1.pendingIcon)("confirmIcon", ctx_r1.pendingIcon)("confirmLabel", ctx_r1.pendingConfirmLabel)("variant", ctx_r1.pendingAction === "cancel" ? "danger" : "warn")("busy", ctx_r1.busy);
|
|
433
|
-
i0.ɵɵadvance();
|
|
434
|
-
i0.ɵɵproperty("innerHTML", ctx_r1.pendingMessage, i0.ɵɵsanitizeHtml);
|
|
435
|
-
} }
|
|
436
|
-
function PSExperimentsComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
437
|
-
const _r18 = i0.ɵɵgetCurrentView();
|
|
438
|
-
i0.ɵɵelementStart(0, "div", 81);
|
|
439
|
-
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_4_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeArtifactModal()); });
|
|
440
|
-
i0.ɵɵelementStart(1, "div", 82);
|
|
441
|
-
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_4_Template_div_click_1_listener($event) { return $event.stopPropagation(); });
|
|
442
|
-
i0.ɵɵelementStart(2, "div", 83)(3, "mj-artifact-viewer-panel", 84);
|
|
443
|
-
i0.ɵɵlistener("closed", function PSExperimentsComponent_Conditional_4_Template_mj_artifact_viewer_panel_closed_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeArtifactModal()); });
|
|
404
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
405
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
406
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_3_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeArtifactModal()); });
|
|
407
|
+
i0.ɵɵelementStart(1, "div", 69);
|
|
408
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_3_Template_div_click_1_listener($event) { return $event.stopPropagation(); });
|
|
409
|
+
i0.ɵɵelementStart(2, "div", 70)(3, "mj-artifact-viewer-panel", 71);
|
|
410
|
+
i0.ɵɵlistener("closed", function PSExperimentsComponent_Conditional_3_Template_mj_artifact_viewer_panel_closed_3_listener() { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeArtifactModal()); });
|
|
444
411
|
i0.ɵɵelementEnd()()()();
|
|
445
412
|
} if (rf & 2) {
|
|
446
|
-
const
|
|
413
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
447
414
|
i0.ɵɵadvance(3);
|
|
448
|
-
i0.ɵɵproperty("artifactId",
|
|
449
|
-
} }
|
|
450
|
-
function PSExperimentsComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
451
|
-
const _r19 = i0.ɵɵgetCurrentView();
|
|
452
|
-
i0.ɵɵelementStart(0, "ps-run-experiment-modal", 85);
|
|
453
|
-
i0.ɵɵlistener("started", function PSExperimentsComponent_Conditional_5_Template_ps_run_experiment_modal_started_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onExperimentStarted($event)); })("closed", function PSExperimentsComponent_Conditional_5_Template_ps_run_experiment_modal_closed_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeNewExperimentModal()); });
|
|
454
|
-
i0.ɵɵelementEnd();
|
|
455
|
-
} if (rf & 2) {
|
|
456
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
457
|
-
i0.ɵɵproperty("engine", ctx_r1.engine)("provider", ctx_r1.provider)("currentUser", ctx_r1.currentUser);
|
|
415
|
+
i0.ɵɵproperty("artifactId", ctx_r0.activeArtifactId)("currentUser", ctx_r0.currentUser)("showCloseButton", true);
|
|
458
416
|
} }
|
|
459
417
|
/**
|
|
460
418
|
* Experiments panel: a kanban of iteration cards in Running / Completed / Pruned columns, a leaderboard
|
|
@@ -466,14 +424,16 @@ function PSExperimentsComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
|
466
424
|
* ranked by score) via the pure {@link groupIterationsToKanban} / {@link deriveLeaderboard} helpers.
|
|
467
425
|
* - **Budget gauges** combine the session's budget JSON caps with actual iteration spend (compute
|
|
468
426
|
* cost, iteration count).
|
|
469
|
-
* -
|
|
470
|
-
* behind a confirmation; on success the engine refreshes.
|
|
427
|
+
* - Sessions are switched off: the panel shows earlier sessions and offers no start or control action.
|
|
471
428
|
*
|
|
472
429
|
* Empty state when there are no sessions. 100% entity-agnostic.
|
|
473
430
|
*/
|
|
474
431
|
export class PSExperimentsComponent {
|
|
432
|
+
/** Whether experiment sessions can run, and why not when they cannot: one source shared with the server refusal. */
|
|
433
|
+
SessionsEnabled = ExperimentSessions.Enabled;
|
|
434
|
+
SessionsDisabledReason = ExperimentSessions.DisabledReason;
|
|
475
435
|
engine;
|
|
476
|
-
/** Provider
|
|
436
|
+
/** Provider the panel reads and writes through (multi-provider correctness); the global provider when unset. */
|
|
477
437
|
provider = null;
|
|
478
438
|
/** Acting user for the engine refresh after a mutation. */
|
|
479
439
|
CurrentUser = null;
|
|
@@ -516,35 +476,6 @@ export class PSExperimentsComponent {
|
|
|
516
476
|
set budget(value) {
|
|
517
477
|
this.Budget = value;
|
|
518
478
|
}
|
|
519
|
-
/** Pending control action awaiting confirmation (null when no modal is open). */
|
|
520
|
-
PendingAction = null;
|
|
521
|
-
/** @deprecated Use {@link PendingAction}. */
|
|
522
|
-
get pendingAction() {
|
|
523
|
-
return this.PendingAction;
|
|
524
|
-
}
|
|
525
|
-
/** @deprecated Use {@link PendingAction}. */
|
|
526
|
-
set pendingAction(value) {
|
|
527
|
-
this.PendingAction = value;
|
|
528
|
-
}
|
|
529
|
-
/** Remote Op in flight. */
|
|
530
|
-
Busy = false;
|
|
531
|
-
/** @deprecated Use {@link Busy}. */
|
|
532
|
-
get busy() {
|
|
533
|
-
return this.Busy;
|
|
534
|
-
}
|
|
535
|
-
/** @deprecated Use {@link Busy}. */
|
|
536
|
-
set busy(value) {
|
|
537
|
-
this.Busy = value;
|
|
538
|
-
}
|
|
539
|
-
ShowNewExperimentModal = false;
|
|
540
|
-
/** @deprecated Use {@link ShowNewExperimentModal}. */
|
|
541
|
-
get showNewExperimentModal() {
|
|
542
|
-
return this.ShowNewExperimentModal;
|
|
543
|
-
}
|
|
544
|
-
/** @deprecated Use {@link ShowNewExperimentModal}. */
|
|
545
|
-
set showNewExperimentModal(value) {
|
|
546
|
-
this.ShowNewExperimentModal = value;
|
|
547
|
-
}
|
|
548
479
|
ShowArtifactModal = false;
|
|
549
480
|
/** @deprecated Use {@link ShowArtifactModal}. */
|
|
550
481
|
get showArtifactModal() {
|
|
@@ -588,31 +519,6 @@ export class PSExperimentsComponent {
|
|
|
588
519
|
selectSession(id) {
|
|
589
520
|
return this.SelectSession(id);
|
|
590
521
|
}
|
|
591
|
-
OpenNewExperimentModal() {
|
|
592
|
-
this.ShowNewExperimentModal = true;
|
|
593
|
-
}
|
|
594
|
-
/** @deprecated Use {@link OpenNewExperimentModal}. */
|
|
595
|
-
openNewExperimentModal() {
|
|
596
|
-
return this.OpenNewExperimentModal();
|
|
597
|
-
}
|
|
598
|
-
CloseNewExperimentModal() {
|
|
599
|
-
this.ShowNewExperimentModal = false;
|
|
600
|
-
}
|
|
601
|
-
/** @deprecated Use {@link CloseNewExperimentModal}. */
|
|
602
|
-
closeNewExperimentModal() {
|
|
603
|
-
return this.CloseNewExperimentModal();
|
|
604
|
-
}
|
|
605
|
-
async OnExperimentStarted(newSessionId) {
|
|
606
|
-
this.CloseNewExperimentModal();
|
|
607
|
-
await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);
|
|
608
|
-
this.sessionId = newSessionId;
|
|
609
|
-
this.rebuild();
|
|
610
|
-
this.cdr.detectChanges();
|
|
611
|
-
}
|
|
612
|
-
/** @deprecated Use {@link OnExperimentStarted}. */
|
|
613
|
-
async onExperimentStarted(newSessionId) {
|
|
614
|
-
return this.OnExperimentStarted(newSessionId);
|
|
615
|
-
}
|
|
616
522
|
CloseArtifactModal() {
|
|
617
523
|
this.ShowArtifactModal = false;
|
|
618
524
|
this.ActiveArtifactId = null;
|
|
@@ -628,11 +534,14 @@ export class PSExperimentsComponent {
|
|
|
628
534
|
this.ArtifactLoading = true;
|
|
629
535
|
try {
|
|
630
536
|
const p = this.provider ?? Metadata.Provider;
|
|
631
|
-
|
|
632
|
-
const
|
|
537
|
+
// The artifact this button generated earlier carries this exact comment; matched exactly, not by substring.
|
|
538
|
+
const sessionComment = `Auto-generated for Experiment Session ${s.ID}`;
|
|
539
|
+
const res = await RunView.FromMetadataProvider(p).RunView({
|
|
633
540
|
EntityName: 'MJ: Artifacts',
|
|
634
|
-
ExtraFilter: `
|
|
635
|
-
|
|
541
|
+
ExtraFilter: `Comments = '${EscapeSQLString(sessionComment)}'`,
|
|
542
|
+
Fields: ['ID'],
|
|
543
|
+
MaxRows: 1,
|
|
544
|
+
ResultType: 'simple',
|
|
636
545
|
}, this.currentUser ?? undefined);
|
|
637
546
|
if (res.Success && res.Results && res.Results.length > 0) {
|
|
638
547
|
this.ActiveArtifactId = res.Results[0].ID;
|
|
@@ -643,7 +552,7 @@ export class PSExperimentsComponent {
|
|
|
643
552
|
art.Name = `${s.Name} — Results`;
|
|
644
553
|
art.Description = `Modeling results, leaderboard, and winning model metrics for ${s.Name}.`;
|
|
645
554
|
art.TypeID = 'D41AB707-58F1-4413-8725-9DF31C95F4C5';
|
|
646
|
-
art.Comments =
|
|
555
|
+
art.Comments = sessionComment;
|
|
647
556
|
const saved = await art.Save();
|
|
648
557
|
if (!saved) {
|
|
649
558
|
this.notifications.CreateSimpleNotification('Could not generate artifact record.', 'error', 5000);
|
|
@@ -679,7 +588,16 @@ export class PSExperimentsComponent {
|
|
|
679
588
|
this.leaderboard.map(l => `- **#${l.rank} ${l.algorithm}**: Score ${l.auc.toFixed(3)} (${l.features})`).join('\n'),
|
|
680
589
|
};
|
|
681
590
|
ver.Content = JSON.stringify(payload);
|
|
682
|
-
await ver.Save()
|
|
591
|
+
if (!(await ver.Save())) {
|
|
592
|
+
const message = ver.LatestResult?.CompleteMessage ?? 'unknown error';
|
|
593
|
+
LogError(`PSExperimentsComponent.ViewResultsArtifact: artifact version save failed: ${message}`);
|
|
594
|
+
// Remove the empty artifact, so the next click generates it again instead of finding an artifact with no content.
|
|
595
|
+
if (!(await art.Delete())) {
|
|
596
|
+
LogError(`PSExperimentsComponent.ViewResultsArtifact: could not remove the empty artifact ${art.ID}: ${art.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
597
|
+
}
|
|
598
|
+
this.notifications.CreateSimpleNotification(`Could not save the results artifact: ${message}`, 'error', 5000);
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
683
601
|
this.ActiveArtifactId = art.ID;
|
|
684
602
|
this.ShowArtifactModal = true;
|
|
685
603
|
}
|
|
@@ -842,173 +760,28 @@ export class PSExperimentsComponent {
|
|
|
842
760
|
statusLabel(status) {
|
|
843
761
|
return this.StatusLabel(status);
|
|
844
762
|
}
|
|
845
|
-
// ---- control availability ----
|
|
846
|
-
get CanPause() {
|
|
847
|
-
return this.Session?.Status === 'Running';
|
|
848
|
-
}
|
|
849
|
-
/** @deprecated Use {@link CanPause}. */
|
|
850
|
-
get canPause() {
|
|
851
|
-
return this.CanPause;
|
|
852
|
-
}
|
|
853
|
-
get CanResume() {
|
|
854
|
-
return this.Session?.Status === 'Paused';
|
|
855
|
-
}
|
|
856
|
-
/** @deprecated Use {@link CanResume}. */
|
|
857
|
-
get canResume() {
|
|
858
|
-
return this.CanResume;
|
|
859
|
-
}
|
|
860
|
-
get CanCancel() {
|
|
861
|
-
const s = this.Session?.Status;
|
|
862
|
-
return s === 'Running' || s === 'Paused' || s === 'AwaitingApproval';
|
|
863
|
-
}
|
|
864
|
-
/** @deprecated Use {@link CanCancel}. */
|
|
865
|
-
get canCancel() {
|
|
866
|
-
return this.CanCancel;
|
|
867
|
-
}
|
|
868
|
-
// ---- control flow (Remote Op) ----
|
|
869
|
-
RequestControl(action) {
|
|
870
|
-
if (!this.Session)
|
|
871
|
-
return;
|
|
872
|
-
this.PendingAction = action;
|
|
873
|
-
}
|
|
874
|
-
/** @deprecated Use {@link RequestControl}. */
|
|
875
|
-
requestControl(action) {
|
|
876
|
-
return this.RequestControl(action);
|
|
877
|
-
}
|
|
878
|
-
CancelControl() {
|
|
879
|
-
if (this.Busy)
|
|
880
|
-
return;
|
|
881
|
-
this.PendingAction = null;
|
|
882
|
-
}
|
|
883
|
-
/** @deprecated Use {@link CancelControl}. */
|
|
884
|
-
cancelControl() {
|
|
885
|
-
return this.CancelControl();
|
|
886
|
-
}
|
|
887
|
-
get PendingTitle() {
|
|
888
|
-
switch (this.PendingAction) {
|
|
889
|
-
case 'pause': return 'Pause experiment';
|
|
890
|
-
case 'resume': return 'Resume experiment';
|
|
891
|
-
case 'cancel': return 'Cancel experiment';
|
|
892
|
-
default: return '';
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
/** @deprecated Use {@link PendingTitle}. */
|
|
896
|
-
get pendingTitle() {
|
|
897
|
-
return this.PendingTitle;
|
|
898
|
-
}
|
|
899
|
-
get PendingIcon() {
|
|
900
|
-
switch (this.PendingAction) {
|
|
901
|
-
case 'pause': return 'fa-solid fa-pause';
|
|
902
|
-
case 'resume': return 'fa-solid fa-play';
|
|
903
|
-
case 'cancel': return 'fa-solid fa-stop';
|
|
904
|
-
default: return 'fa-solid fa-check';
|
|
905
|
-
}
|
|
906
|
-
}
|
|
907
|
-
/** @deprecated Use {@link PendingIcon}. */
|
|
908
|
-
get pendingIcon() {
|
|
909
|
-
return this.PendingIcon;
|
|
910
|
-
}
|
|
911
|
-
get PendingConfirmLabel() {
|
|
912
|
-
switch (this.PendingAction) {
|
|
913
|
-
case 'pause': return 'Pause';
|
|
914
|
-
case 'resume': return 'Resume';
|
|
915
|
-
case 'cancel': return 'Cancel run';
|
|
916
|
-
default: return 'Confirm';
|
|
917
|
-
}
|
|
918
|
-
}
|
|
919
|
-
/** @deprecated Use {@link PendingConfirmLabel}. */
|
|
920
|
-
get pendingConfirmLabel() {
|
|
921
|
-
return this.PendingConfirmLabel;
|
|
922
|
-
}
|
|
923
|
-
get PendingMessage() {
|
|
924
|
-
const name = escapeHtml(this.Session?.Name ?? 'this session');
|
|
925
|
-
switch (this.PendingAction) {
|
|
926
|
-
case 'pause':
|
|
927
|
-
return `Pause <strong>${name}</strong>? The orchestrator stops at the next wave checkpoint; in-flight iterations finish. You can resume later.`;
|
|
928
|
-
case 'resume':
|
|
929
|
-
return `Resume <strong>${name}</strong>? The orchestrator continues searching from where it paused.`;
|
|
930
|
-
case 'cancel':
|
|
931
|
-
return `Cancel <strong>${name}</strong>? This stops the search at the next checkpoint. Completed iterations and the leaderboard are kept, but the session cannot be resumed.`;
|
|
932
|
-
default:
|
|
933
|
-
return '';
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
/** @deprecated Use {@link PendingMessage}. */
|
|
937
|
-
get pendingMessage() {
|
|
938
|
-
return this.PendingMessage;
|
|
939
|
-
}
|
|
940
|
-
/** Run the control Remote Op, then refresh the engine + close on success. */
|
|
941
|
-
async ConfirmControl() {
|
|
942
|
-
if (!this.PendingAction || !this.Session || this.Busy)
|
|
943
|
-
return;
|
|
944
|
-
this.Busy = true;
|
|
945
|
-
const action = this.PendingAction;
|
|
946
|
-
const sessionId = this.Session.ID;
|
|
947
|
-
const name = this.Session.Name;
|
|
948
|
-
try {
|
|
949
|
-
const op = new PredictiveStudioControlExperimentSessionOperation();
|
|
950
|
-
const result = await op.Execute({ sessionId, action }, { provider: this.provider ?? undefined, user: this.CurrentUser ?? undefined });
|
|
951
|
-
if (result.Success) {
|
|
952
|
-
this.notifications.CreateSimpleNotification(`${name} → ${result.Output?.status ?? action}`, 'success', 3500);
|
|
953
|
-
await this.refreshAfterMutation();
|
|
954
|
-
this.PendingAction = null;
|
|
955
|
-
}
|
|
956
|
-
else {
|
|
957
|
-
this.notifications.CreateSimpleNotification(result.ErrorMessage || `Could not ${action} ${name}.`, 'error', 5000);
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
catch (e) {
|
|
961
|
-
this.notifications.CreateSimpleNotification(`${action} failed: ${e instanceof Error ? e.message : String(e)}`, 'error', 5000);
|
|
962
|
-
}
|
|
963
|
-
finally {
|
|
964
|
-
this.Busy = false;
|
|
965
|
-
this.cdr.detectChanges();
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
/** @deprecated Use {@link ConfirmControl}. */
|
|
969
|
-
async confirmControl() {
|
|
970
|
-
return this.ConfirmControl();
|
|
971
|
-
}
|
|
972
|
-
/** Force-refresh the engine's cached sessions/iterations, then rebuild. */
|
|
973
|
-
async refreshAfterMutation() {
|
|
974
|
-
await this.engine.Config(true, this.CurrentUser ?? undefined, this.provider ?? undefined);
|
|
975
|
-
this.selectActiveSession();
|
|
976
|
-
this.rebuild();
|
|
977
|
-
this.cdr.detectChanges();
|
|
978
|
-
}
|
|
979
763
|
static ɵfac = function PSExperimentsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PSExperimentsComponent)(); };
|
|
980
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSExperimentsComponent, selectors: [["ps-experiments"]], inputs: { engine: "engine", provider: "provider", CurrentUser: "CurrentUser", currentUser: "currentUser" }, decls:
|
|
764
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSExperimentsComponent, selectors: [["ps-experiments"]], inputs: { engine: "engine", provider: "provider", CurrentUser: "CurrentUser", currentUser: "currentUser" }, decls: 4, vars: 2, consts: [["iterCard", ""], ["data-testid", "ps-experiments-panel", 1, "ps-panel", "ps-experiments"], ["data-testid", "ps-experiments-empty", 1, "ps-empty"], [1, "ps-modal-backdrop"], [1, "ps-empty-ico"], [1, "fa-solid", "fa-flask"], ["data-testid", "ps-experiments-disabled-reason"], [1, "sess-head"], [1, "ps-small", "ps-muted", 2, "display", "flex", "align-items", "center", "gap", "8px"], [1, "ps-badge"], [1, "ps-dot"], [1, "ps-spacer"], [1, "ps-small", "ps-muted"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-experiments-view-artifact", 3, "click", "disabled"], [1, "fa-solid", "fa-flask-vial"], ["data-testid", "ps-experiments-unavailable", 1, "ps-callout", "warn"], ["data-testid", "ps-experiments-leaderboard", 1, "ps-card"], [1, "ps-card-body", "lead-strip"], [1, "lead-lbl"], [1, "t"], [1, "fa-solid", "fa-trophy", 2, "color", "var(--mj-status-warning)"], [1, "lp", 3, "best", "pruned"], [1, "ps-card"], ["data-testid", "ps-experiments-kanban", 1, "kanban"], ["data-testid", "ps-kanban-col-running", 1, "kcol", "run"], [1, "kcol-head"], [1, "fa-solid", "fa-spinner"], [1, "cnt"], [1, "kbody"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["data-testid", "ps-kanban-col-completed", 1, "kcol", "done"], [1, "fa-solid", "fa-circle-check"], ["data-testid", "ps-kanban-col-pruned", 1, "kcol", "prune"], [1, "fa-solid", "fa-scissors"], [1, "ps-muted"], [1, "mj-input", 2, "padding", "2px 6px", "font-size", "12px", "height", "26px", 3, "change", "value"], [3, "value"], [1, "fa-solid", "fa-circle-info"], ["data-testid", "ps-experiments-unavailable-reason"], [1, "lp"], [1, "ps-rank"], [1, "algo-ic"], [1, "nm"], [1, "fs", "ps-muted", "ps-small"], [1, "auc"], [1, "ps-card-body", "budget-rail"], [1, "bud"], [1, "ps-gauge"], [1, "g-val"], [2, "flex", "1"], [1, "ps-section-title"], [1, "b-val"], [1, "ps-muted", "ps-small"], [1, "ps-bar", 2, "margin-top", "6px", "max-width", "150px"], [1, "icard"], [1, "ic-top"], [1, "it", "ps-muted", "ps-small"], [1, "feat-chips"], [1, "ps-tag"], [1, "ic-prog"], [1, "ic-score"], [1, "rationale"], [1, "fa-solid", "fa-robot"], [1, "ps-small"], [1, "ps-bar", "run"], [1, "meta"], [1, "v"], [1, "lbl", "ps-muted", "ps-small"], [1, "ps-modal-backdrop", 3, "click"], [1, "ps-modal-dialog", 2, "max-width", "960px", "width", "92vw", "height", "85vh", "display", "flex", "flex-direction", "column", "padding", "0", "overflow", "hidden", 3, "click"], [2, "flex", "1", "min-height", "0", "display", "flex", "flex-direction", "column"], [3, "closed", "artifactId", "currentUser", "showCloseButton"]], template: function PSExperimentsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
981
765
|
i0.ɵɵelementStart(0, "div", 1);
|
|
982
|
-
i0.ɵɵconditionalCreate(1, PSExperimentsComponent_Conditional_1_Template,
|
|
983
|
-
i0.ɵɵconditionalCreate(3, PSExperimentsComponent_Conditional_3_Template,
|
|
984
|
-
i0.ɵɵconditionalCreate(4, PSExperimentsComponent_Conditional_4_Template, 4, 3, "div", 4);
|
|
985
|
-
i0.ɵɵconditionalCreate(5, PSExperimentsComponent_Conditional_5_Template, 1, 3, "ps-run-experiment-modal", 5);
|
|
766
|
+
i0.ɵɵconditionalCreate(1, PSExperimentsComponent_Conditional_1_Template, 6, 1, "div", 2)(2, PSExperimentsComponent_Conditional_2_Template, 66, 20);
|
|
767
|
+
i0.ɵɵconditionalCreate(3, PSExperimentsComponent_Conditional_3_Template, 4, 3, "div", 3);
|
|
986
768
|
i0.ɵɵelementEnd();
|
|
987
769
|
} if (rf & 2) {
|
|
988
770
|
i0.ɵɵadvance();
|
|
989
771
|
i0.ɵɵconditional(!ctx.session ? 1 : 2);
|
|
990
772
|
i0.ɵɵadvance(2);
|
|
991
|
-
i0.ɵɵconditional(ctx.
|
|
992
|
-
i0.ɵɵadvance();
|
|
993
|
-
i0.ɵɵconditional(ctx.showArtifactModal && ctx.activeArtifactId ? 4 : -1);
|
|
994
|
-
i0.ɵɵadvance();
|
|
995
|
-
i0.ɵɵconditional(ctx.showNewExperimentModal ? 5 : -1);
|
|
996
|
-
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, MJButtonDirective, PSConfirmModalComponent, PSRunExperimentModalComponent, ArtifactsModule, i2.ArtifactViewerPanelComponent, i1.DecimalPipe], styles: ["/* ============================================================================\n Predictive Studio \u2014 shared panel styles (design-token compliant)\n Maps the mockup design system onto MemberJunction semantic --mj-* tokens.\n Loaded by every PS panel component (styleUrls) under ViewEncapsulation.None,\n so the class names are global within the PS dashboard subtree.\n No hardcoded colors except the intentional categorical node/algorithm palette\n (declared once as --ps-* custom props below) which must stay distinct across\n light/dark to remain readable as diagram accents.\n ============================================================================ */\n\n/* Categorical accents for DAG node types + algorithm chips. These are\n data-visualization colors that must remain distinct regardless of theme\n (allowed exception #3 in the design-token rules). */\n.ps-panel {\n --ps-node-source: #6b7280;\n --ps-node-feature: #2050c8;\n --ps-node-embedding: #7b3ff0;\n --ps-node-target: #1f9d57;\n --ps-node-algorithm: #d98213;\n /* budget-gauge categorical accents (reuse the node palette so light/dark stay distinct) */\n --ps-gauge-cost: var(--ps-node-algorithm);\n --ps-gauge-iterations: var(--ps-node-feature);\n}\n\n.ps-panel {\n display: block;\n height: 100%;\n}\n\n/* ---- generic layout helpers ---- */\n.ps-row { display: flex; gap: 16px; }\n.ps-col { display: flex; flex-direction: column; gap: 16px; }\n.ps-wrap { flex-wrap: wrap; }\n.ps-spacer { flex: 1; }\n.ps-muted { color: var(--mj-text-muted); }\n.ps-small { font-size: 12.5px; }\n.ps-mono { font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size: 12.5px; }\n.ps-section-title {\n font-size: 12px; text-transform: uppercase; letter-spacing: .06em;\n color: var(--mj-text-muted); margin: 4px 0 2px; font-weight: 700;\n}\n\n/* ---- cards ---- */\n.ps-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n.ps-card-head {\n display: flex; align-items: center; gap: 10px;\n padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle);\n}\n.ps-card-head h3 { font-size: 14.5px; margin: 0; font-weight: 650; color: var(--mj-text-primary); }\n.ps-card-body { padding: 16px; }\n\n/* ---- KPI tiles ---- */\n.ps-kpi {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: 8px; padding: 16px 18px;\n}\n.ps-kpi .label { font-size: 12px; color: var(--mj-text-muted); font-weight: 600; }\n.ps-kpi .val { font-size: 26px; font-weight: 720; letter-spacing: -.02em; margin-top: 2px; color: var(--mj-text-primary); }\n\n/* ---- badges ---- */\n.ps-badge {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 2px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 650; line-height: 1.7;\n}\n.ps-badge.gray { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.ps-badge.blue { background: var(--mj-status-info-bg); color: var(--mj-status-info-text); }\n.ps-badge.green { background: var(--mj-status-success-bg); color: var(--mj-status-success-text); }\n.ps-badge.amber { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.ps-badge.red { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.ps-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }\n\n/* recommendation-level chips (the ranking matrix payoff) */\n.ps-lvl {\n display: inline-flex; align-items: center; justify-content: center;\n min-width: 92px; padding: 4px 10px; border-radius: 7px;\n font-weight: 650; font-size: 11.5px; color: var(--mj-text-inverse);\n}\n.ps-lvl-Primary { background: var(--mj-status-success); }\n.ps-lvl-Strong { background: var(--mj-status-info); }\n.ps-lvl-Viable { background: var(--mj-status-warning); }\n.ps-lvl-Weak { background: var(--mj-text-disabled); }\n.ps-lvl-NotRecommended { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n/* ---- tags ---- */\n.ps-tag {\n display: inline-block; padding: 2px 8px; border-radius: 6px;\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary);\n font-size: 11.5px; font-weight: 600;\n}\n.ps-tag.muted { opacity: .6; }\n.ps-divider { height: 1px; background: var(--mj-border-subtle); margin: 8px 0; }\n\n/* ---- tables ---- */\n.ps-table { width: 100%; border-collapse: collapse; font-size: 13px; }\n.ps-table th {\n text-align: left; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700; padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n.ps-table td { padding: 11px 12px; border-bottom: 1px solid var(--mj-border-subtle); color: var(--mj-text-primary); }\n.ps-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.ps-table .num { text-align: right; font-variant-numeric: tabular-nums; }\n\n.ps-rank {\n width: 22px; height: 22px; border-radius: 6px; background: var(--mj-bg-surface-sunken);\n display: inline-grid; place-items: center; font-weight: 700; font-size: 11.5px; color: var(--mj-text-secondary);\n}\n.ps-rank.gold { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n\n/* ---- progress bars ---- */\n.ps-bar { height: 8px; border-radius: 999px; background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--mj-brand-primary); }\n.ps-bar.warn > span { background: var(--mj-status-warning); }\n.ps-bar.run > span { background: var(--mj-brand-primary); }\n\n.ps-fbar { display: grid; grid-template-columns: minmax(150px, 1.3fr) 2fr 56px; align-items: center; gap: 14px; padding: 8px 0; }\n.ps-fbar + .ps-fbar { border-top: 1px solid var(--mj-border-subtle); }\n.ps-fbar .track { height: 10px; border-radius: var(--mj-radius-full); background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-fbar .track > span { display: block; height: 100%; border-radius: var(--mj-radius-full); background: var(--mj-brand-primary); }\n.ps-fbar .track > span.warn { background: var(--mj-status-warning); }\n.ps-fbar .name { color: var(--mj-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-fbar > .ps-mono { text-align: right; color: var(--mj-text-secondary); font-variant-numeric: tabular-nums; }\n\n/* gauge */\n.ps-gauge {\n position: relative; width: 64px; height: 64px; border-radius: 50%; flex: 0 0 auto;\n background: conic-gradient(var(--ps-gauge-color, var(--mj-brand-primary)) calc(var(--ps-p, 40) * 1%), var(--mj-bg-surface-sunken) 0);\n display: grid; place-items: center;\n}\n.ps-gauge::after { content: ''; position: absolute; inset: 9px; background: var(--mj-bg-surface); border-radius: 50%; }\n.ps-gauge .g-val { position: relative; font-weight: 720; font-size: 14px; color: var(--mj-text-primary); }\n\n/* warning / info callouts */\n.ps-callout { display: flex; gap: 11px; padding: 12px 14px; border-radius: 10px; border: 1px solid; }\n.ps-callout.warn { background: var(--mj-status-warning-bg); border-color: var(--mj-status-warning-border); color: var(--mj-status-warning-text); }\n.ps-callout.info { background: var(--mj-status-info-bg); border-color: var(--mj-status-info-border); color: var(--mj-status-info-text); }\n.ps-callout.success { background: var(--mj-status-success-bg); border-color: var(--mj-status-success-border); color: var(--mj-status-success-text); }\n.ps-callout i { font-size: 16px; margin-top: 1px; }\n\n/* lifecycle stepper */\n.ps-stepper { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }\n.ps-step { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.ps-step .pip {\n width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--mj-border-strong);\n display: grid; place-items: center; font-size: 11px;\n}\n.ps-step.done { color: var(--mj-status-success-text); }\n.ps-step.done .pip { background: var(--mj-status-success); border-color: var(--mj-status-success); color: var(--mj-text-inverse); }\n.ps-step.curr { color: var(--mj-brand-primary); }\n.ps-step.curr .pip { border-color: var(--mj-brand-primary); color: var(--mj-brand-primary); }\n.ps-step .ln { width: 26px; height: 2px; background: var(--mj-border-strong); }\n\n/* ---- DAG flow canvas ---- */\n.ps-flow {\n position: relative;\n background:\n linear-gradient(var(--mj-border-subtle) 1px, transparent 1px) 0 0 / 22px 22px,\n linear-gradient(90deg, var(--mj-border-subtle) 1px, transparent 1px) 0 0 / 22px 22px,\n var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default); border-radius: 10px;\n min-height: 620px; overflow: hidden;\n}\n.ps-node {\n position: absolute; width: 190px; background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong); border-left-width: 3px; border-radius: 8px;\n cursor: pointer;\n}\n.ps-node .nh {\n display: flex; align-items: center; gap: 8px; padding: 9px 11px;\n border-bottom: 1px solid var(--mj-border-subtle); font-weight: 650; font-size: 12.5px; color: var(--mj-text-primary);\n}\n.ps-node .nh i.tile {\n width: 24px; height: 24px; border-radius: 6px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 12px; flex: 0 0 auto;\n}\n.ps-node .nh .ps-tag { margin-left: auto; }\n.ps-node .nb { padding: 9px 11px; font-size: 12px; color: var(--mj-text-secondary); }\n.ps-node .nb-row { display: flex; justify-content: space-between; gap: 8px; padding: 2px 0; }\n.ps-node .nb-row .k { color: var(--mj-text-muted); }\n.ps-node.src { border-left-color: var(--ps-node-source); }\n.ps-node.src .nh i.tile { background: var(--ps-node-source); }\n.ps-node.feat { border-left-color: var(--ps-node-feature); }\n.ps-node.feat .nh i.tile { background: var(--ps-node-feature); }\n.ps-node.emb { border-left-color: var(--ps-node-embedding); }\n.ps-node.emb .nh i.tile { background: var(--ps-node-embedding); }\n.ps-node.target { border-left-color: var(--ps-node-target); }\n.ps-node.target .nh i.tile { background: var(--ps-node-target); }\n.ps-node.algo { border-left-color: var(--ps-node-algorithm); }\n.ps-node.algo .nh i.tile { background: var(--ps-node-algorithm); }\n.ps-node.output { border-left-color: var(--mj-status-success); }\n.ps-node.output .nh i.tile { background: var(--mj-status-success); }\n.ps-node.selected {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n}\n.ps-node .port {\n position: absolute; width: 11px; height: 11px; border-radius: 50%;\n background: var(--mj-bg-surface); border: 2px solid var(--mj-brand-primary);\n top: 50%; transform: translateY(-50%);\n}\n.ps-node .port.in { left: -6px; }\n.ps-node .port.out { right: -6px; }\nsvg.ps-edges { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }\nsvg.ps-edges path { stroke: color-mix(in srgb, var(--mj-brand-primary) 45%, transparent); stroke-width: 2; fill: none; }\n\n/* palette chips */\n.ps-pchip {\n display: inline-flex; align-items: center; gap: 7px; padding: 6px 11px; border-radius: 8px;\n border: 1px dashed var(--mj-border-strong); background: var(--mj-bg-surface);\n font-size: 12.5px; font-weight: 600; color: var(--mj-text-secondary); cursor: grab;\n}\n.ps-pchip i { font-size: 12px; color: var(--mj-text-inverse); width: 20px; height: 20px; border-radius: 5px; display: grid; place-items: center; }\n.ps-pchip.s i { background: var(--ps-node-source); }\n.ps-pchip.f i { background: var(--ps-node-feature); }\n.ps-pchip.e i { background: var(--ps-node-embedding); }\n.ps-pchip.t i { background: var(--ps-node-target); }\n.ps-pchip.a i { background: var(--ps-node-algorithm); }\n\n/* segmented control */\n.ps-seg { display: inline-flex; border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden; }\n.ps-seg button {\n border: none; background: var(--mj-bg-surface); color: var(--mj-text-secondary);\n padding: 6px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer;\n border-right: 1px solid var(--mj-border-default);\n}\n.ps-seg button:last-child { border-right: none; }\n.ps-seg button.on { background: var(--mj-brand-primary); color: var(--mj-text-inverse); }\n\n/* field control */\n.ps-field { margin-bottom: 14px; }\n.ps-field > label {\n display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700; margin-bottom: 6px;\n}\n.ps-input {\n width: 100%; padding: 8px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; background: var(--mj-bg-surface); color: var(--mj-text-primary);\n box-sizing: border-box;\n}\n.ps-input:focus { outline: none; border-color: var(--mj-brand-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n\n/* loading container */\n.ps-loading { display: flex; align-items: center; justify-content: center; padding: 60px 0; }\n\n/* ---- empty / prompt states ---- */\n.ps-empty {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n text-align: center; gap: 10px; padding: 56px 24px; color: var(--mj-text-muted);\n}\n.ps-empty .ps-empty-ico {\n width: 60px; height: 60px; border-radius: 16px; display: grid; place-items: center;\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-disabled); font-size: 24px;\n}\n.ps-empty h3 { margin: 4px 0 0; font-size: 16px; font-weight: 650; color: var(--mj-text-secondary); }\n.ps-empty p { margin: 0; max-width: 420px; font-size: 13px; line-height: 1.5; }\n\n/* ---- confirm modal ---- */\n.ps-modal-backdrop {\n position: fixed; inset: 0; z-index: 1000;\n background: var(--mj-bg-overlay);\n display: flex; align-items: center; justify-content: center; padding: 24px;\n}\n.ps-modal {\n width: 100%; max-width: 480px; background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default); border-radius: 14px;\n box-shadow: var(--mj-shadow-lg, var(--mj-shadow-sm)); overflow: hidden;\n}\n.ps-modal-head {\n display: flex; align-items: center; gap: 12px; padding: 18px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.ps-modal-head .ico {\n width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center;\n font-size: 16px; flex: 0 0 auto;\n background: var(--mj-status-info-bg); color: var(--mj-status-info-text);\n}\n.ps-modal-head.warn .ico { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.ps-modal-head.danger .ico { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.ps-modal-head h3 { margin: 0; font-size: 15.5px; font-weight: 650; color: var(--mj-text-primary); }\n.ps-modal-body { padding: 18px 20px; font-size: 13.5px; line-height: 1.55; color: var(--mj-text-secondary); }\n.ps-modal-body .ps-field { margin-top: 14px; margin-bottom: 0; }\n.ps-modal-foot {\n display: flex; align-items: center; gap: 10px; padding: 14px 20px;\n border-top: 1px solid var(--mj-border-subtle); background: var(--mj-bg-surface-card);\n}\n.ps-modal-foot .ps-spacer { flex: 1; }\n", ".ps-experiments { display: flex; flex-direction: column; gap: 16px; }\n\n.ps-experiments .sess-head { display: flex; align-items: center; gap: 12px; }\n.ps-experiments .sess-head h2 { font-size: 18px; color: var(--mj-text-primary); display: flex; align-items: center; gap: 10px; }\n\n/* leaderboard strip */\n.ps-experiments .lead-strip { display: flex; gap: 10px; align-items: center; overflow-x: auto; }\n.ps-experiments .lead-lbl { padding-right: 14px; border-right: 1px solid var(--mj-border-default); flex: 0 0 auto; }\n.ps-experiments .lead-lbl .t { display: flex; align-items: center; gap: 7px; font-weight: 650; color: var(--mj-text-primary); }\n.ps-experiments .lp {\n display: flex; align-items: center; gap: 9px; flex: 0 0 auto; padding: 8px 12px;\n border: 1px solid var(--mj-border-default); border-radius: 9px; background: var(--mj-bg-surface);\n}\n.ps-experiments .lp.best { background: var(--mj-status-warning-bg); border-color: var(--mj-status-warning-border); }\n.ps-experiments .lp.pruned { opacity: .55; }\n.ps-experiments .algo-ic {\n width: 26px; height: 26px; border-radius: 7px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 12px; flex: 0 0 auto;\n}\n.ps-experiments .lp .nm { font-size: 12.5px; font-weight: 600; color: var(--mj-text-primary); }\n.ps-experiments .lp .auc { font-weight: 740; font-variant-numeric: tabular-nums; color: var(--mj-text-primary); }\n.ps-experiments .lp .auc.win { color: var(--mj-status-success-text); }\n\n/* budget rail */\n.ps-experiments .budget-rail { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\n@media (max-width: 880px) { .ps-experiments .budget-rail { grid-template-columns: 1fr; } }\n.ps-experiments .bud { display: flex; align-items: center; gap: 13px; }\n.ps-experiments .b-val { font-size: 15px; color: var(--mj-text-primary); margin-top: 2px; }\n\n/* kanban */\n.ps-experiments .kanban { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; align-items: start; }\n@media (max-width: 980px) { .ps-experiments .kanban { grid-template-columns: 1fr; } }\n.ps-experiments .kcol { background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 10px; overflow: hidden; }\n.ps-experiments .kcol-head {\n display: flex; align-items: center; gap: 9px; padding: 12px 14px; border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 650; color: var(--mj-text-primary);\n}\n.ps-experiments .kcol-head h3 { font-size: 13.5px; margin: 0; flex: 1; }\n.ps-experiments .kcol.run .kcol-head { border-top: 3px solid var(--mj-brand-primary); }\n.ps-experiments .kcol.done .kcol-head { border-top: 3px solid var(--mj-status-success); }\n.ps-experiments .kcol.prune .kcol-head { border-top: 3px solid var(--mj-text-disabled); }\n.ps-experiments .kcol.run .kcol-head i { color: var(--mj-brand-primary); }\n.ps-experiments .kcol.done .kcol-head i { color: var(--mj-status-success); }\n.ps-experiments .kcol.prune .kcol-head i { color: var(--mj-text-muted); }\n.ps-experiments .cnt {\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary);\n border-radius: 999px; padding: 1px 9px; font-size: 12px; font-weight: 700;\n}\n.ps-experiments .kbody { padding: 11px; display: flex; flex-direction: column; gap: 11px; }\n\n.ps-experiments .icard {\n border: 1px solid var(--mj-border-default); border-radius: 9px; padding: 11px;\n background: var(--mj-bg-surface-card); display: flex; flex-direction: column; gap: 9px;\n}\n.ps-experiments .icard.running { border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default)); }\n.ps-experiments .icard.best { border-left: 3px solid var(--mj-status-warning); }\n.ps-experiments .icard.pruned { opacity: .78; }\n.ps-experiments .ic-top { display: flex; align-items: center; gap: 9px; }\n.ps-experiments .ic-top .algo-ic { width: 30px; height: 30px; }\n.ps-experiments .ic-top .nm { font-weight: 600; color: var(--mj-text-primary); font-size: 13px; }\n.ps-experiments .feat-chips { display: flex; gap: 6px; flex-wrap: wrap; }\n.ps-experiments .ic-prog .meta { display: flex; justify-content: space-between; margin-top: 5px; }\n.ps-experiments .ic-score { display: flex; align-items: baseline; gap: 8px; }\n.ps-experiments .ic-score .v { font-size: 21px; font-weight: 720; color: var(--mj-text-primary); font-variant-numeric: tabular-nums; }\n.ps-experiments .ic-score .v.green { color: var(--mj-status-success-text); }\n.ps-experiments .rationale {\n display: flex; gap: 8px; padding-top: 8px; border-top: 1px solid var(--mj-border-subtle); color: var(--mj-text-secondary);\n}\n.ps-experiments .rationale i { color: var(--mj-brand-primary); margin-top: 2px; }\n"], encapsulation: 2 });
|
|
773
|
+
i0.ɵɵconditional(ctx.showArtifactModal && ctx.activeArtifactId ? 3 : -1);
|
|
774
|
+
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, MJButtonDirective, ArtifactsModule, i2.ArtifactViewerPanelComponent, i1.DecimalPipe], styles: ["/* ============================================================================\n Predictive Studio \u2014 shared panel styles (design-token compliant)\n Maps the mockup design system onto MemberJunction semantic --mj-* tokens.\n Loaded by every PS panel component (styleUrls) under ViewEncapsulation.None,\n so the class names are global within the PS dashboard subtree.\n No hardcoded colors except the intentional categorical node/algorithm palette\n (declared once as --ps-* custom props below) which must stay distinct across\n light/dark to remain readable as diagram accents.\n ============================================================================ */\n\n/* Categorical accents for DAG node types + algorithm chips. These are\n data-visualization colors that must remain distinct regardless of theme\n (allowed exception #3 in the design-token rules). */\n.ps-panel {\n --ps-node-source: #6b7280;\n --ps-node-feature: #2050c8;\n --ps-node-embedding: #7b3ff0;\n --ps-node-target: #1f9d57;\n --ps-node-algorithm: #d98213;\n /* budget-gauge categorical accents (reuse the node palette so light/dark stay distinct) */\n --ps-gauge-cost: var(--ps-node-algorithm);\n --ps-gauge-iterations: var(--ps-node-feature);\n}\n\n.ps-panel {\n display: block;\n height: 100%;\n}\n\n/* ---- generic layout helpers ---- */\n.ps-row { display: flex; gap: 16px; }\n.ps-col { display: flex; flex-direction: column; gap: 16px; }\n.ps-wrap { flex-wrap: wrap; }\n.ps-spacer { flex: 1; }\n.ps-muted { color: var(--mj-text-muted); }\n.ps-small { font-size: 12.5px; }\n.ps-mono { font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size: 12.5px; }\n.ps-section-title {\n font-size: 12px; text-transform: uppercase; letter-spacing: .06em;\n color: var(--mj-text-muted); margin: 4px 0 2px; font-weight: 700;\n}\n\n/* ---- cards ---- */\n.ps-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n.ps-card-head {\n display: flex; align-items: center; gap: 10px;\n padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle);\n}\n.ps-card-head h3 { font-size: 14.5px; margin: 0; font-weight: 650; color: var(--mj-text-primary); }\n.ps-card-body { padding: 16px; }\n\n/* ---- KPI tiles ---- */\n.ps-kpi {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: 8px; padding: 16px 18px;\n}\n.ps-kpi .label { font-size: 12px; color: var(--mj-text-muted); font-weight: 600; }\n.ps-kpi .val { font-size: 26px; font-weight: 720; letter-spacing: -.02em; margin-top: 2px; color: var(--mj-text-primary); }\n\n/* ---- badges ---- */\n.ps-badge {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 2px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 650; line-height: 1.7;\n}\n.ps-badge.gray { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.ps-badge.blue { background: var(--mj-status-info-bg); color: var(--mj-status-info-text); }\n.ps-badge.green { background: var(--mj-status-success-bg); color: var(--mj-status-success-text); }\n.ps-badge.amber { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.ps-badge.red { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.ps-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }\n\n/* recommendation-level chips (the ranking matrix payoff) */\n.ps-lvl {\n display: inline-flex; align-items: center; justify-content: center;\n min-width: 92px; padding: 4px 10px; border-radius: 7px;\n font-weight: 650; font-size: 11.5px; color: var(--mj-text-inverse);\n}\n.ps-lvl-Primary { background: var(--mj-status-success); }\n.ps-lvl-Strong { background: var(--mj-status-info); }\n.ps-lvl-Viable { background: var(--mj-status-warning); }\n.ps-lvl-Weak { background: var(--mj-text-disabled); }\n.ps-lvl-NotRecommended { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n/* ---- tags ---- */\n.ps-tag {\n display: inline-block; padding: 2px 8px; border-radius: 6px;\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary);\n font-size: 11.5px; font-weight: 600;\n}\n.ps-tag.muted { opacity: .6; }\n.ps-divider { height: 1px; background: var(--mj-border-subtle); margin: 8px 0; }\n\n/* ---- tables ---- */\n.ps-table { width: 100%; border-collapse: collapse; font-size: 13px; }\n.ps-table th {\n text-align: left; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700; padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n.ps-table td { padding: 11px 12px; border-bottom: 1px solid var(--mj-border-subtle); color: var(--mj-text-primary); }\n.ps-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.ps-table .num { text-align: right; font-variant-numeric: tabular-nums; }\n\n.ps-rank {\n width: 22px; height: 22px; border-radius: 6px; background: var(--mj-bg-surface-sunken);\n display: inline-grid; place-items: center; font-weight: 700; font-size: 11.5px; color: var(--mj-text-secondary);\n}\n.ps-rank.gold { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n\n/* ---- progress bars ---- */\n.ps-bar { height: 8px; border-radius: 999px; background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--mj-brand-primary); }\n.ps-bar.warn > span { background: var(--mj-status-warning); }\n.ps-bar.run > span { background: var(--mj-brand-primary); }\n\n.ps-fbar { display: grid; grid-template-columns: minmax(150px, 1.3fr) 2fr 56px; align-items: center; gap: 14px; padding: 8px 0; }\n.ps-fbar + .ps-fbar { border-top: 1px solid var(--mj-border-subtle); }\n.ps-fbar .track { height: 10px; border-radius: var(--mj-radius-full); background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-fbar .track > span { display: block; height: 100%; border-radius: var(--mj-radius-full); background: var(--mj-brand-primary); }\n.ps-fbar .track > span.warn { background: var(--mj-status-warning); }\n.ps-fbar .name { color: var(--mj-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-fbar > .ps-mono { text-align: right; color: var(--mj-text-secondary); font-variant-numeric: tabular-nums; }\n\n/* gauge */\n.ps-gauge {\n position: relative; width: 64px; height: 64px; border-radius: 50%; flex: 0 0 auto;\n background: conic-gradient(var(--ps-gauge-color, var(--mj-brand-primary)) calc(var(--ps-p, 40) * 1%), var(--mj-bg-surface-sunken) 0);\n display: grid; place-items: center;\n}\n.ps-gauge::after { content: ''; position: absolute; inset: 9px; background: var(--mj-bg-surface); border-radius: 50%; }\n.ps-gauge .g-val { position: relative; font-weight: 720; font-size: 14px; color: var(--mj-text-primary); }\n\n/* warning / info callouts */\n.ps-callout { display: flex; gap: 11px; padding: 12px 14px; border-radius: 10px; border: 1px solid; }\n.ps-callout.warn { background: var(--mj-status-warning-bg); border-color: var(--mj-status-warning-border); color: var(--mj-status-warning-text); }\n.ps-callout.info { background: var(--mj-status-info-bg); border-color: var(--mj-status-info-border); color: var(--mj-status-info-text); }\n.ps-callout.success { background: var(--mj-status-success-bg); border-color: var(--mj-status-success-border); color: var(--mj-status-success-text); }\n.ps-callout i { font-size: 16px; margin-top: 1px; }\n\n/* lifecycle stepper */\n.ps-stepper { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }\n.ps-step { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.ps-step .pip {\n width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--mj-border-strong);\n display: grid; place-items: center; font-size: 11px;\n}\n.ps-step.done { color: var(--mj-status-success-text); }\n.ps-step.done .pip { background: var(--mj-status-success); border-color: var(--mj-status-success); color: var(--mj-text-inverse); }\n.ps-step.curr { color: var(--mj-brand-primary); }\n.ps-step.curr .pip { border-color: var(--mj-brand-primary); color: var(--mj-brand-primary); }\n.ps-step .ln { width: 26px; height: 2px; background: var(--mj-border-strong); }\n\n/* ---- DAG flow canvas ---- */\n.ps-flow {\n position: relative;\n background:\n linear-gradient(var(--mj-border-subtle) 1px, transparent 1px) 0 0 / 22px 22px,\n linear-gradient(90deg, var(--mj-border-subtle) 1px, transparent 1px) 0 0 / 22px 22px,\n var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default); border-radius: 10px;\n min-height: 620px; overflow: hidden;\n}\n.ps-node {\n position: absolute; width: 190px; background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong); border-left-width: 3px; border-radius: 8px;\n cursor: pointer;\n}\n.ps-node .nh {\n display: flex; align-items: center; gap: 8px; padding: 9px 11px;\n border-bottom: 1px solid var(--mj-border-subtle); font-weight: 650; font-size: 12.5px; color: var(--mj-text-primary);\n}\n.ps-node .nh i.tile {\n width: 24px; height: 24px; border-radius: 6px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 12px; flex: 0 0 auto;\n}\n.ps-node .nh .ps-tag { margin-left: auto; }\n.ps-node .nb { padding: 9px 11px; font-size: 12px; color: var(--mj-text-secondary); }\n.ps-node .nb-row { display: flex; justify-content: space-between; gap: 8px; padding: 2px 0; }\n.ps-node .nb-row .k { color: var(--mj-text-muted); }\n.ps-node.src { border-left-color: var(--ps-node-source); }\n.ps-node.src .nh i.tile { background: var(--ps-node-source); }\n.ps-node.feat { border-left-color: var(--ps-node-feature); }\n.ps-node.feat .nh i.tile { background: var(--ps-node-feature); }\n.ps-node.emb { border-left-color: var(--ps-node-embedding); }\n.ps-node.emb .nh i.tile { background: var(--ps-node-embedding); }\n.ps-node.target { border-left-color: var(--ps-node-target); }\n.ps-node.target .nh i.tile { background: var(--ps-node-target); }\n.ps-node.algo { border-left-color: var(--ps-node-algorithm); }\n.ps-node.algo .nh i.tile { background: var(--ps-node-algorithm); }\n.ps-node.output { border-left-color: var(--mj-status-success); }\n.ps-node.output .nh i.tile { background: var(--mj-status-success); }\n.ps-node.selected {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n}\n.ps-node .port {\n position: absolute; width: 11px; height: 11px; border-radius: 50%;\n background: var(--mj-bg-surface); border: 2px solid var(--mj-brand-primary);\n top: 50%; transform: translateY(-50%);\n}\n.ps-node .port.in { left: -6px; }\n.ps-node .port.out { right: -6px; }\nsvg.ps-edges { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }\nsvg.ps-edges path { stroke: color-mix(in srgb, var(--mj-brand-primary) 45%, transparent); stroke-width: 2; fill: none; }\n\n/* palette chips */\n.ps-pchip {\n display: inline-flex; align-items: center; gap: 7px; padding: 6px 11px; border-radius: 8px;\n border: 1px dashed var(--mj-border-strong); background: var(--mj-bg-surface);\n font-size: 12.5px; font-weight: 600; color: var(--mj-text-secondary); cursor: grab;\n}\n.ps-pchip i { font-size: 12px; color: var(--mj-text-inverse); width: 20px; height: 20px; border-radius: 5px; display: grid; place-items: center; }\n.ps-pchip.s i { background: var(--ps-node-source); }\n.ps-pchip.f i { background: var(--ps-node-feature); }\n.ps-pchip.e i { background: var(--ps-node-embedding); }\n.ps-pchip.t i { background: var(--ps-node-target); }\n.ps-pchip.a i { background: var(--ps-node-algorithm); }\n\n/* segmented control */\n.ps-seg { display: inline-flex; border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden; }\n.ps-seg button {\n border: none; background: var(--mj-bg-surface); color: var(--mj-text-secondary);\n padding: 6px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer;\n border-right: 1px solid var(--mj-border-default);\n}\n.ps-seg button:last-child { border-right: none; }\n.ps-seg button.on { background: var(--mj-brand-primary); color: var(--mj-text-inverse); }\n\n/* field control */\n.ps-field { margin-bottom: 14px; }\n.ps-field > label {\n display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700; margin-bottom: 6px;\n}\n.ps-input {\n width: 100%; padding: 8px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; background: var(--mj-bg-surface); color: var(--mj-text-primary);\n box-sizing: border-box;\n}\n.ps-input:focus { outline: none; border-color: var(--mj-brand-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n\n/* loading container */\n.ps-loading { display: flex; align-items: center; justify-content: center; padding: 60px 0; }\n\n/* ---- empty / prompt states ---- */\n.ps-empty {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n text-align: center; gap: 10px; padding: 56px 24px; color: var(--mj-text-muted);\n}\n.ps-empty .ps-empty-ico {\n width: 60px; height: 60px; border-radius: 16px; display: grid; place-items: center;\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-disabled); font-size: 24px;\n}\n.ps-empty h3 { margin: 4px 0 0; font-size: 16px; font-weight: 650; color: var(--mj-text-secondary); }\n.ps-empty p { margin: 0; max-width: 420px; font-size: 13px; line-height: 1.5; }\n\n/* ---- confirm modal ---- */\n.ps-modal-backdrop {\n position: fixed; inset: 0; z-index: 1000;\n background: var(--mj-bg-overlay);\n display: flex; align-items: center; justify-content: center; padding: 24px;\n}\n.ps-modal {\n width: 100%; max-width: 480px; background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default); border-radius: 14px;\n box-shadow: var(--mj-shadow-lg, var(--mj-shadow-sm)); overflow: hidden;\n}\n.ps-modal-head {\n display: flex; align-items: center; gap: 12px; padding: 18px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.ps-modal-head .ico {\n width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center;\n font-size: 16px; flex: 0 0 auto;\n background: var(--mj-status-info-bg); color: var(--mj-status-info-text);\n}\n.ps-modal-head.warn .ico { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.ps-modal-head.danger .ico { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.ps-modal-head h3 { margin: 0; font-size: 15.5px; font-weight: 650; color: var(--mj-text-primary); }\n.ps-modal-body { padding: 18px 20px; font-size: 13.5px; line-height: 1.55; color: var(--mj-text-secondary); }\n.ps-modal-body .ps-field { margin-top: 14px; margin-bottom: 0; }\n.ps-modal-foot {\n display: flex; align-items: center; gap: 10px; padding: 14px 20px;\n border-top: 1px solid var(--mj-border-subtle); background: var(--mj-bg-surface-card);\n}\n.ps-modal-foot .ps-spacer { flex: 1; }\n", ".ps-experiments { display: flex; flex-direction: column; gap: 16px; }\n\n.ps-experiments .sess-head { display: flex; align-items: center; gap: 12px; }\n.ps-experiments .sess-head h2 { font-size: 18px; color: var(--mj-text-primary); display: flex; align-items: center; gap: 10px; }\n\n/* leaderboard strip */\n.ps-experiments .lead-strip { display: flex; gap: 10px; align-items: center; overflow-x: auto; }\n.ps-experiments .lead-lbl { padding-right: 14px; border-right: 1px solid var(--mj-border-default); flex: 0 0 auto; }\n.ps-experiments .lead-lbl .t { display: flex; align-items: center; gap: 7px; font-weight: 650; color: var(--mj-text-primary); }\n.ps-experiments .lp {\n display: flex; align-items: center; gap: 9px; flex: 0 0 auto; padding: 8px 12px;\n border: 1px solid var(--mj-border-default); border-radius: 9px; background: var(--mj-bg-surface);\n}\n.ps-experiments .lp.best { background: var(--mj-status-warning-bg); border-color: var(--mj-status-warning-border); }\n.ps-experiments .lp.pruned { opacity: .55; }\n.ps-experiments .algo-ic {\n width: 26px; height: 26px; border-radius: 7px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 12px; flex: 0 0 auto;\n}\n.ps-experiments .lp .nm { font-size: 12.5px; font-weight: 600; color: var(--mj-text-primary); }\n.ps-experiments .lp .auc { font-weight: 740; font-variant-numeric: tabular-nums; color: var(--mj-text-primary); }\n.ps-experiments .lp .auc.win { color: var(--mj-status-success-text); }\n\n/* budget rail */\n.ps-experiments .budget-rail { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\n@media (max-width: 880px) { .ps-experiments .budget-rail { grid-template-columns: 1fr; } }\n.ps-experiments .bud { display: flex; align-items: center; gap: 13px; }\n.ps-experiments .b-val { font-size: 15px; color: var(--mj-text-primary); margin-top: 2px; }\n\n/* kanban */\n.ps-experiments .kanban { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; align-items: start; }\n@media (max-width: 980px) { .ps-experiments .kanban { grid-template-columns: 1fr; } }\n.ps-experiments .kcol { background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 10px; overflow: hidden; }\n.ps-experiments .kcol-head {\n display: flex; align-items: center; gap: 9px; padding: 12px 14px; border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 650; color: var(--mj-text-primary);\n}\n.ps-experiments .kcol-head h3 { font-size: 13.5px; margin: 0; flex: 1; }\n.ps-experiments .kcol.run .kcol-head { border-top: 3px solid var(--mj-brand-primary); }\n.ps-experiments .kcol.done .kcol-head { border-top: 3px solid var(--mj-status-success); }\n.ps-experiments .kcol.prune .kcol-head { border-top: 3px solid var(--mj-text-disabled); }\n.ps-experiments .kcol.run .kcol-head i { color: var(--mj-brand-primary); }\n.ps-experiments .kcol.done .kcol-head i { color: var(--mj-status-success); }\n.ps-experiments .kcol.prune .kcol-head i { color: var(--mj-text-muted); }\n.ps-experiments .cnt {\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary);\n border-radius: 999px; padding: 1px 9px; font-size: 12px; font-weight: 700;\n}\n.ps-experiments .kbody { padding: 11px; display: flex; flex-direction: column; gap: 11px; }\n\n.ps-experiments .icard {\n border: 1px solid var(--mj-border-default); border-radius: 9px; padding: 11px;\n background: var(--mj-bg-surface-card); display: flex; flex-direction: column; gap: 9px;\n}\n.ps-experiments .icard.running { border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default)); }\n.ps-experiments .icard.best { border-left: 3px solid var(--mj-status-warning); }\n.ps-experiments .icard.pruned { opacity: .78; }\n.ps-experiments .ic-top { display: flex; align-items: center; gap: 9px; }\n.ps-experiments .ic-top .algo-ic { width: 30px; height: 30px; }\n.ps-experiments .ic-top .nm { font-weight: 600; color: var(--mj-text-primary); font-size: 13px; }\n.ps-experiments .feat-chips { display: flex; gap: 6px; flex-wrap: wrap; }\n.ps-experiments .ic-prog .meta { display: flex; justify-content: space-between; margin-top: 5px; }\n.ps-experiments .ic-score { display: flex; align-items: baseline; gap: 8px; }\n.ps-experiments .ic-score .v { font-size: 21px; font-weight: 720; color: var(--mj-text-primary); font-variant-numeric: tabular-nums; }\n.ps-experiments .ic-score .v.green { color: var(--mj-status-success-text); }\n.ps-experiments .rationale {\n display: flex; gap: 8px; padding-top: 8px; border-top: 1px solid var(--mj-border-subtle); color: var(--mj-text-secondary);\n}\n.ps-experiments .rationale i { color: var(--mj-brand-primary); margin-top: 2px; }\n"], encapsulation: 2 });
|
|
997
775
|
}
|
|
998
776
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PSExperimentsComponent, [{
|
|
999
777
|
type: Component,
|
|
1000
|
-
args: [{ standalone: true, selector: 'ps-experiments', imports: [CommonModule, MJButtonDirective,
|
|
778
|
+
args: [{ standalone: true, selector: 'ps-experiments', imports: [CommonModule, MJButtonDirective, ArtifactsModule], encapsulation: ViewEncapsulation.None, template: `
|
|
1001
779
|
<div class="ps-panel ps-experiments" data-testid="ps-experiments-panel">
|
|
1002
780
|
@if (!session) {
|
|
1003
781
|
<div class="ps-empty" data-testid="ps-experiments-empty">
|
|
1004
782
|
<span class="ps-empty-ico"><i class="fa-solid fa-flask"></i></span>
|
|
1005
783
|
<h3>No experiment sessions yet</h3>
|
|
1006
|
-
|
|
1007
|
-
<div style="margin-top: 12px; display: flex; gap: 8px;">
|
|
1008
|
-
<button mjButton variant="primary" size="sm" data-testid="ps-experiments-new-btn-empty" (click)="openNewExperimentModal()">
|
|
1009
|
-
<i class="fa-solid fa-flask"></i> New Experiment
|
|
1010
|
-
</button>
|
|
1011
|
-
</div>
|
|
784
|
+
@if (!SessionsEnabled) { <p data-testid="ps-experiments-disabled-reason">{{ SessionsDisabledReason }}</p> }
|
|
1012
785
|
</div>
|
|
1013
786
|
} @else {
|
|
1014
787
|
<!-- session header strip -->
|
|
@@ -1033,19 +806,13 @@ export class PSExperimentsComponent {
|
|
|
1033
806
|
<button mjButton variant="secondary" size="sm" data-testid="ps-experiments-view-artifact" [disabled]="artifactLoading" (click)="viewResultsArtifact()">
|
|
1034
807
|
<i class="fa-solid fa-flask-vial"></i> {{ artifactLoading ? 'Loading…' : 'View Results Artifact' }}
|
|
1035
808
|
</button>
|
|
1036
|
-
<button mjButton variant="primary" size="sm" data-testid="ps-experiments-new-btn" (click)="openNewExperimentModal()">
|
|
1037
|
-
<i class="fa-solid fa-plus"></i> New Experiment
|
|
1038
|
-
</button>
|
|
1039
|
-
@if (canPause) {
|
|
1040
|
-
<button mjButton variant="secondary" size="sm" data-testid="ps-experiments-pause" (click)="requestControl('pause')"><i class="fa-solid fa-pause"></i> Pause</button>
|
|
1041
|
-
}
|
|
1042
|
-
@if (canResume) {
|
|
1043
|
-
<button mjButton variant="secondary" size="sm" data-testid="ps-experiments-resume" (click)="requestControl('resume')"><i class="fa-solid fa-play"></i> Resume</button>
|
|
1044
|
-
}
|
|
1045
|
-
@if (canCancel) {
|
|
1046
|
-
<button mjButton variant="danger" size="sm" data-testid="ps-experiments-cancel" (click)="requestControl('cancel')"><i class="fa-solid fa-stop"></i> Cancel</button>
|
|
1047
|
-
}
|
|
1048
809
|
</div>
|
|
810
|
+
@if (!SessionsEnabled) {
|
|
811
|
+
<div class="ps-callout warn" data-testid="ps-experiments-unavailable">
|
|
812
|
+
<i class="fa-solid fa-circle-info"></i>
|
|
813
|
+
<div data-testid="ps-experiments-unavailable-reason">{{ SessionsDisabledReason }}</div>
|
|
814
|
+
</div>
|
|
815
|
+
}
|
|
1049
816
|
|
|
1050
817
|
<!-- Leaderboard strip -->
|
|
1051
818
|
<div class="ps-card" data-testid="ps-experiments-leaderboard">
|
|
@@ -1146,20 +913,6 @@ export class PSExperimentsComponent {
|
|
|
1146
913
|
</ng-template>
|
|
1147
914
|
}
|
|
1148
915
|
|
|
1149
|
-
@if (pendingAction) {
|
|
1150
|
-
<ps-confirm-modal
|
|
1151
|
-
[title]="pendingTitle"
|
|
1152
|
-
[icon]="pendingIcon"
|
|
1153
|
-
[confirmIcon]="pendingIcon"
|
|
1154
|
-
[confirmLabel]="pendingConfirmLabel"
|
|
1155
|
-
[variant]="pendingAction === 'cancel' ? 'danger' : 'warn'"
|
|
1156
|
-
[busy]="busy"
|
|
1157
|
-
(confirmed)="confirmControl()"
|
|
1158
|
-
(cancelled)="cancelControl()">
|
|
1159
|
-
<div [innerHTML]="pendingMessage"></div>
|
|
1160
|
-
</ps-confirm-modal>
|
|
1161
|
-
}
|
|
1162
|
-
|
|
1163
916
|
@if (showArtifactModal && activeArtifactId) {
|
|
1164
917
|
<div class="ps-modal-backdrop" (click)="closeArtifactModal()">
|
|
1165
918
|
<div class="ps-modal-dialog" style="max-width: 960px; width: 92vw; height: 85vh; display: flex; flex-direction: column; padding: 0; overflow: hidden;"
|
|
@@ -1175,16 +928,6 @@ export class PSExperimentsComponent {
|
|
|
1175
928
|
</div>
|
|
1176
929
|
</div>
|
|
1177
930
|
}
|
|
1178
|
-
|
|
1179
|
-
@if (showNewExperimentModal) {
|
|
1180
|
-
<ps-run-experiment-modal
|
|
1181
|
-
[engine]="engine"
|
|
1182
|
-
[provider]="provider"
|
|
1183
|
-
[currentUser]="currentUser"
|
|
1184
|
-
(started)="onExperimentStarted($event)"
|
|
1185
|
-
(closed)="closeNewExperimentModal()">
|
|
1186
|
-
</ps-run-experiment-modal>
|
|
1187
|
-
}
|
|
1188
931
|
</div>
|
|
1189
932
|
`, styles: ["/* ============================================================================\n Predictive Studio \u2014 shared panel styles (design-token compliant)\n Maps the mockup design system onto MemberJunction semantic --mj-* tokens.\n Loaded by every PS panel component (styleUrls) under ViewEncapsulation.None,\n so the class names are global within the PS dashboard subtree.\n No hardcoded colors except the intentional categorical node/algorithm palette\n (declared once as --ps-* custom props below) which must stay distinct across\n light/dark to remain readable as diagram accents.\n ============================================================================ */\n\n/* Categorical accents for DAG node types + algorithm chips. These are\n data-visualization colors that must remain distinct regardless of theme\n (allowed exception #3 in the design-token rules). */\n.ps-panel {\n --ps-node-source: #6b7280;\n --ps-node-feature: #2050c8;\n --ps-node-embedding: #7b3ff0;\n --ps-node-target: #1f9d57;\n --ps-node-algorithm: #d98213;\n /* budget-gauge categorical accents (reuse the node palette so light/dark stay distinct) */\n --ps-gauge-cost: var(--ps-node-algorithm);\n --ps-gauge-iterations: var(--ps-node-feature);\n}\n\n.ps-panel {\n display: block;\n height: 100%;\n}\n\n/* ---- generic layout helpers ---- */\n.ps-row { display: flex; gap: 16px; }\n.ps-col { display: flex; flex-direction: column; gap: 16px; }\n.ps-wrap { flex-wrap: wrap; }\n.ps-spacer { flex: 1; }\n.ps-muted { color: var(--mj-text-muted); }\n.ps-small { font-size: 12.5px; }\n.ps-mono { font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size: 12.5px; }\n.ps-section-title {\n font-size: 12px; text-transform: uppercase; letter-spacing: .06em;\n color: var(--mj-text-muted); margin: 4px 0 2px; font-weight: 700;\n}\n\n/* ---- cards ---- */\n.ps-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n.ps-card-head {\n display: flex; align-items: center; gap: 10px;\n padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle);\n}\n.ps-card-head h3 { font-size: 14.5px; margin: 0; font-weight: 650; color: var(--mj-text-primary); }\n.ps-card-body { padding: 16px; }\n\n/* ---- KPI tiles ---- */\n.ps-kpi {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-radius: 8px; padding: 16px 18px;\n}\n.ps-kpi .label { font-size: 12px; color: var(--mj-text-muted); font-weight: 600; }\n.ps-kpi .val { font-size: 26px; font-weight: 720; letter-spacing: -.02em; margin-top: 2px; color: var(--mj-text-primary); }\n\n/* ---- badges ---- */\n.ps-badge {\n display: inline-flex; align-items: center; gap: 5px;\n padding: 2px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 650; line-height: 1.7;\n}\n.ps-badge.gray { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.ps-badge.blue { background: var(--mj-status-info-bg); color: var(--mj-status-info-text); }\n.ps-badge.green { background: var(--mj-status-success-bg); color: var(--mj-status-success-text); }\n.ps-badge.amber { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.ps-badge.red { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.ps-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }\n\n/* recommendation-level chips (the ranking matrix payoff) */\n.ps-lvl {\n display: inline-flex; align-items: center; justify-content: center;\n min-width: 92px; padding: 4px 10px; border-radius: 7px;\n font-weight: 650; font-size: 11.5px; color: var(--mj-text-inverse);\n}\n.ps-lvl-Primary { background: var(--mj-status-success); }\n.ps-lvl-Strong { background: var(--mj-status-info); }\n.ps-lvl-Viable { background: var(--mj-status-warning); }\n.ps-lvl-Weak { background: var(--mj-text-disabled); }\n.ps-lvl-NotRecommended { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n/* ---- tags ---- */\n.ps-tag {\n display: inline-block; padding: 2px 8px; border-radius: 6px;\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary);\n font-size: 11.5px; font-weight: 600;\n}\n.ps-tag.muted { opacity: .6; }\n.ps-divider { height: 1px; background: var(--mj-border-subtle); margin: 8px 0; }\n\n/* ---- tables ---- */\n.ps-table { width: 100%; border-collapse: collapse; font-size: 13px; }\n.ps-table th {\n text-align: left; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700; padding: 9px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n.ps-table td { padding: 11px 12px; border-bottom: 1px solid var(--mj-border-subtle); color: var(--mj-text-primary); }\n.ps-table tr:hover td { background: var(--mj-bg-surface-hover); }\n.ps-table .num { text-align: right; font-variant-numeric: tabular-nums; }\n\n.ps-rank {\n width: 22px; height: 22px; border-radius: 6px; background: var(--mj-bg-surface-sunken);\n display: inline-grid; place-items: center; font-weight: 700; font-size: 11.5px; color: var(--mj-text-secondary);\n}\n.ps-rank.gold { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n\n/* ---- progress bars ---- */\n.ps-bar { height: 8px; border-radius: 999px; background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--mj-brand-primary); }\n.ps-bar.warn > span { background: var(--mj-status-warning); }\n.ps-bar.run > span { background: var(--mj-brand-primary); }\n\n.ps-fbar { display: grid; grid-template-columns: minmax(150px, 1.3fr) 2fr 56px; align-items: center; gap: 14px; padding: 8px 0; }\n.ps-fbar + .ps-fbar { border-top: 1px solid var(--mj-border-subtle); }\n.ps-fbar .track { height: 10px; border-radius: var(--mj-radius-full); background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-fbar .track > span { display: block; height: 100%; border-radius: var(--mj-radius-full); background: var(--mj-brand-primary); }\n.ps-fbar .track > span.warn { background: var(--mj-status-warning); }\n.ps-fbar .name { color: var(--mj-text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-fbar > .ps-mono { text-align: right; color: var(--mj-text-secondary); font-variant-numeric: tabular-nums; }\n\n/* gauge */\n.ps-gauge {\n position: relative; width: 64px; height: 64px; border-radius: 50%; flex: 0 0 auto;\n background: conic-gradient(var(--ps-gauge-color, var(--mj-brand-primary)) calc(var(--ps-p, 40) * 1%), var(--mj-bg-surface-sunken) 0);\n display: grid; place-items: center;\n}\n.ps-gauge::after { content: ''; position: absolute; inset: 9px; background: var(--mj-bg-surface); border-radius: 50%; }\n.ps-gauge .g-val { position: relative; font-weight: 720; font-size: 14px; color: var(--mj-text-primary); }\n\n/* warning / info callouts */\n.ps-callout { display: flex; gap: 11px; padding: 12px 14px; border-radius: 10px; border: 1px solid; }\n.ps-callout.warn { background: var(--mj-status-warning-bg); border-color: var(--mj-status-warning-border); color: var(--mj-status-warning-text); }\n.ps-callout.info { background: var(--mj-status-info-bg); border-color: var(--mj-status-info-border); color: var(--mj-status-info-text); }\n.ps-callout.success { background: var(--mj-status-success-bg); border-color: var(--mj-status-success-border); color: var(--mj-status-success-text); }\n.ps-callout i { font-size: 16px; margin-top: 1px; }\n\n/* lifecycle stepper */\n.ps-stepper { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }\n.ps-step { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.ps-step .pip {\n width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--mj-border-strong);\n display: grid; place-items: center; font-size: 11px;\n}\n.ps-step.done { color: var(--mj-status-success-text); }\n.ps-step.done .pip { background: var(--mj-status-success); border-color: var(--mj-status-success); color: var(--mj-text-inverse); }\n.ps-step.curr { color: var(--mj-brand-primary); }\n.ps-step.curr .pip { border-color: var(--mj-brand-primary); color: var(--mj-brand-primary); }\n.ps-step .ln { width: 26px; height: 2px; background: var(--mj-border-strong); }\n\n/* ---- DAG flow canvas ---- */\n.ps-flow {\n position: relative;\n background:\n linear-gradient(var(--mj-border-subtle) 1px, transparent 1px) 0 0 / 22px 22px,\n linear-gradient(90deg, var(--mj-border-subtle) 1px, transparent 1px) 0 0 / 22px 22px,\n var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default); border-radius: 10px;\n min-height: 620px; overflow: hidden;\n}\n.ps-node {\n position: absolute; width: 190px; background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong); border-left-width: 3px; border-radius: 8px;\n cursor: pointer;\n}\n.ps-node .nh {\n display: flex; align-items: center; gap: 8px; padding: 9px 11px;\n border-bottom: 1px solid var(--mj-border-subtle); font-weight: 650; font-size: 12.5px; color: var(--mj-text-primary);\n}\n.ps-node .nh i.tile {\n width: 24px; height: 24px; border-radius: 6px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 12px; flex: 0 0 auto;\n}\n.ps-node .nh .ps-tag { margin-left: auto; }\n.ps-node .nb { padding: 9px 11px; font-size: 12px; color: var(--mj-text-secondary); }\n.ps-node .nb-row { display: flex; justify-content: space-between; gap: 8px; padding: 2px 0; }\n.ps-node .nb-row .k { color: var(--mj-text-muted); }\n.ps-node.src { border-left-color: var(--ps-node-source); }\n.ps-node.src .nh i.tile { background: var(--ps-node-source); }\n.ps-node.feat { border-left-color: var(--ps-node-feature); }\n.ps-node.feat .nh i.tile { background: var(--ps-node-feature); }\n.ps-node.emb { border-left-color: var(--ps-node-embedding); }\n.ps-node.emb .nh i.tile { background: var(--ps-node-embedding); }\n.ps-node.target { border-left-color: var(--ps-node-target); }\n.ps-node.target .nh i.tile { background: var(--ps-node-target); }\n.ps-node.algo { border-left-color: var(--ps-node-algorithm); }\n.ps-node.algo .nh i.tile { background: var(--ps-node-algorithm); }\n.ps-node.output { border-left-color: var(--mj-status-success); }\n.ps-node.output .nh i.tile { background: var(--mj-status-success); }\n.ps-node.selected {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n}\n.ps-node .port {\n position: absolute; width: 11px; height: 11px; border-radius: 50%;\n background: var(--mj-bg-surface); border: 2px solid var(--mj-brand-primary);\n top: 50%; transform: translateY(-50%);\n}\n.ps-node .port.in { left: -6px; }\n.ps-node .port.out { right: -6px; }\nsvg.ps-edges { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }\nsvg.ps-edges path { stroke: color-mix(in srgb, var(--mj-brand-primary) 45%, transparent); stroke-width: 2; fill: none; }\n\n/* palette chips */\n.ps-pchip {\n display: inline-flex; align-items: center; gap: 7px; padding: 6px 11px; border-radius: 8px;\n border: 1px dashed var(--mj-border-strong); background: var(--mj-bg-surface);\n font-size: 12.5px; font-weight: 600; color: var(--mj-text-secondary); cursor: grab;\n}\n.ps-pchip i { font-size: 12px; color: var(--mj-text-inverse); width: 20px; height: 20px; border-radius: 5px; display: grid; place-items: center; }\n.ps-pchip.s i { background: var(--ps-node-source); }\n.ps-pchip.f i { background: var(--ps-node-feature); }\n.ps-pchip.e i { background: var(--ps-node-embedding); }\n.ps-pchip.t i { background: var(--ps-node-target); }\n.ps-pchip.a i { background: var(--ps-node-algorithm); }\n\n/* segmented control */\n.ps-seg { display: inline-flex; border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden; }\n.ps-seg button {\n border: none; background: var(--mj-bg-surface); color: var(--mj-text-secondary);\n padding: 6px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer;\n border-right: 1px solid var(--mj-border-default);\n}\n.ps-seg button:last-child { border-right: none; }\n.ps-seg button.on { background: var(--mj-brand-primary); color: var(--mj-text-inverse); }\n\n/* field control */\n.ps-field { margin-bottom: 14px; }\n.ps-field > label {\n display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .04em;\n color: var(--mj-text-muted); font-weight: 700; margin-bottom: 6px;\n}\n.ps-input {\n width: 100%; padding: 8px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; background: var(--mj-bg-surface); color: var(--mj-text-primary);\n box-sizing: border-box;\n}\n.ps-input:focus { outline: none; border-color: var(--mj-brand-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n\n/* loading container */\n.ps-loading { display: flex; align-items: center; justify-content: center; padding: 60px 0; }\n\n/* ---- empty / prompt states ---- */\n.ps-empty {\n display: flex; flex-direction: column; align-items: center; justify-content: center;\n text-align: center; gap: 10px; padding: 56px 24px; color: var(--mj-text-muted);\n}\n.ps-empty .ps-empty-ico {\n width: 60px; height: 60px; border-radius: 16px; display: grid; place-items: center;\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-disabled); font-size: 24px;\n}\n.ps-empty h3 { margin: 4px 0 0; font-size: 16px; font-weight: 650; color: var(--mj-text-secondary); }\n.ps-empty p { margin: 0; max-width: 420px; font-size: 13px; line-height: 1.5; }\n\n/* ---- confirm modal ---- */\n.ps-modal-backdrop {\n position: fixed; inset: 0; z-index: 1000;\n background: var(--mj-bg-overlay);\n display: flex; align-items: center; justify-content: center; padding: 24px;\n}\n.ps-modal {\n width: 100%; max-width: 480px; background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default); border-radius: 14px;\n box-shadow: var(--mj-shadow-lg, var(--mj-shadow-sm)); overflow: hidden;\n}\n.ps-modal-head {\n display: flex; align-items: center; gap: 12px; padding: 18px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.ps-modal-head .ico {\n width: 38px; height: 38px; border-radius: 10px; display: grid; place-items: center;\n font-size: 16px; flex: 0 0 auto;\n background: var(--mj-status-info-bg); color: var(--mj-status-info-text);\n}\n.ps-modal-head.warn .ico { background: var(--mj-status-warning-bg); color: var(--mj-status-warning-text); }\n.ps-modal-head.danger .ico { background: var(--mj-status-error-bg); color: var(--mj-status-error-text); }\n.ps-modal-head h3 { margin: 0; font-size: 15.5px; font-weight: 650; color: var(--mj-text-primary); }\n.ps-modal-body { padding: 18px 20px; font-size: 13.5px; line-height: 1.55; color: var(--mj-text-secondary); }\n.ps-modal-body .ps-field { margin-top: 14px; margin-bottom: 0; }\n.ps-modal-foot {\n display: flex; align-items: center; gap: 10px; padding: 14px 20px;\n border-top: 1px solid var(--mj-border-subtle); background: var(--mj-bg-surface-card);\n}\n.ps-modal-foot .ps-spacer { flex: 1; }\n", ".ps-experiments { display: flex; flex-direction: column; gap: 16px; }\n\n.ps-experiments .sess-head { display: flex; align-items: center; gap: 12px; }\n.ps-experiments .sess-head h2 { font-size: 18px; color: var(--mj-text-primary); display: flex; align-items: center; gap: 10px; }\n\n/* leaderboard strip */\n.ps-experiments .lead-strip { display: flex; gap: 10px; align-items: center; overflow-x: auto; }\n.ps-experiments .lead-lbl { padding-right: 14px; border-right: 1px solid var(--mj-border-default); flex: 0 0 auto; }\n.ps-experiments .lead-lbl .t { display: flex; align-items: center; gap: 7px; font-weight: 650; color: var(--mj-text-primary); }\n.ps-experiments .lp {\n display: flex; align-items: center; gap: 9px; flex: 0 0 auto; padding: 8px 12px;\n border: 1px solid var(--mj-border-default); border-radius: 9px; background: var(--mj-bg-surface);\n}\n.ps-experiments .lp.best { background: var(--mj-status-warning-bg); border-color: var(--mj-status-warning-border); }\n.ps-experiments .lp.pruned { opacity: .55; }\n.ps-experiments .algo-ic {\n width: 26px; height: 26px; border-radius: 7px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 12px; flex: 0 0 auto;\n}\n.ps-experiments .lp .nm { font-size: 12.5px; font-weight: 600; color: var(--mj-text-primary); }\n.ps-experiments .lp .auc { font-weight: 740; font-variant-numeric: tabular-nums; color: var(--mj-text-primary); }\n.ps-experiments .lp .auc.win { color: var(--mj-status-success-text); }\n\n/* budget rail */\n.ps-experiments .budget-rail { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\n@media (max-width: 880px) { .ps-experiments .budget-rail { grid-template-columns: 1fr; } }\n.ps-experiments .bud { display: flex; align-items: center; gap: 13px; }\n.ps-experiments .b-val { font-size: 15px; color: var(--mj-text-primary); margin-top: 2px; }\n\n/* kanban */\n.ps-experiments .kanban { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; align-items: start; }\n@media (max-width: 980px) { .ps-experiments .kanban { grid-template-columns: 1fr; } }\n.ps-experiments .kcol { background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 10px; overflow: hidden; }\n.ps-experiments .kcol-head {\n display: flex; align-items: center; gap: 9px; padding: 12px 14px; border-bottom: 1px solid var(--mj-border-subtle);\n font-weight: 650; color: var(--mj-text-primary);\n}\n.ps-experiments .kcol-head h3 { font-size: 13.5px; margin: 0; flex: 1; }\n.ps-experiments .kcol.run .kcol-head { border-top: 3px solid var(--mj-brand-primary); }\n.ps-experiments .kcol.done .kcol-head { border-top: 3px solid var(--mj-status-success); }\n.ps-experiments .kcol.prune .kcol-head { border-top: 3px solid var(--mj-text-disabled); }\n.ps-experiments .kcol.run .kcol-head i { color: var(--mj-brand-primary); }\n.ps-experiments .kcol.done .kcol-head i { color: var(--mj-status-success); }\n.ps-experiments .kcol.prune .kcol-head i { color: var(--mj-text-muted); }\n.ps-experiments .cnt {\n background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary);\n border-radius: 999px; padding: 1px 9px; font-size: 12px; font-weight: 700;\n}\n.ps-experiments .kbody { padding: 11px; display: flex; flex-direction: column; gap: 11px; }\n\n.ps-experiments .icard {\n border: 1px solid var(--mj-border-default); border-radius: 9px; padding: 11px;\n background: var(--mj-bg-surface-card); display: flex; flex-direction: column; gap: 9px;\n}\n.ps-experiments .icard.running { border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default)); }\n.ps-experiments .icard.best { border-left: 3px solid var(--mj-status-warning); }\n.ps-experiments .icard.pruned { opacity: .78; }\n.ps-experiments .ic-top { display: flex; align-items: center; gap: 9px; }\n.ps-experiments .ic-top .algo-ic { width: 30px; height: 30px; }\n.ps-experiments .ic-top .nm { font-weight: 600; color: var(--mj-text-primary); font-size: 13px; }\n.ps-experiments .feat-chips { display: flex; gap: 6px; flex-wrap: wrap; }\n.ps-experiments .ic-prog .meta { display: flex; justify-content: space-between; margin-top: 5px; }\n.ps-experiments .ic-score { display: flex; align-items: baseline; gap: 8px; }\n.ps-experiments .ic-score .v { font-size: 21px; font-weight: 720; color: var(--mj-text-primary); font-variant-numeric: tabular-nums; }\n.ps-experiments .ic-score .v.green { color: var(--mj-status-success-text); }\n.ps-experiments .rationale {\n display: flex; gap: 8px; padding-top: 8px; border-top: 1px solid var(--mj-border-subtle); color: var(--mj-text-secondary);\n}\n.ps-experiments .rationale i { color: var(--mj-brand-primary); margin-top: 2px; }\n"] }]
|
|
1190
933
|
}], null, { engine: [{
|
|
@@ -1196,13 +939,5 @@ export class PSExperimentsComponent {
|
|
|
1196
939
|
}], currentUser: [{
|
|
1197
940
|
type: Input
|
|
1198
941
|
}] }); })();
|
|
1199
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSExperimentsComponent, { className: "PSExperimentsComponent", filePath: "src/PredictiveStudio/components/ps-experiments.component.ts", lineNumber:
|
|
1200
|
-
/** Minimal HTML-escape for interpolating session names into the modal's innerHTML message. */
|
|
1201
|
-
function escapeHtml(value) {
|
|
1202
|
-
return value
|
|
1203
|
-
.replace(/&/g, '&')
|
|
1204
|
-
.replace(/</g, '<')
|
|
1205
|
-
.replace(/>/g, '>')
|
|
1206
|
-
.replace(/"/g, '"');
|
|
1207
|
-
}
|
|
942
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSExperimentsComponent, { className: "PSExperimentsComponent", filePath: "src/PredictiveStudio/components/ps-experiments.component.ts", lineNumber: 208 }); })();
|
|
1208
943
|
//# sourceMappingURL=ps-experiments.component.js.map
|