@memberjunction/ng-dashboards 6.1.2 → 6.2.0-edge.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +6 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +99 -45
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +4 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +16 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +4 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +14 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +2 -2
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -0
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -0
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +4 -12
- 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 +39 -78
- package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +3 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +7 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +3 -0
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +7 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +41 -3
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +99 -6
- package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.d.ts +4 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-catalog.component.js +61 -37
- package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +12 -0
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +426 -184
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +84 -0
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +1397 -0
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +66 -34
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +2456 -743
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +194 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +1902 -0
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -0
- package/dist/PredictiveStudio/components/ps-production.component.d.ts +17 -1
- package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-production.component.js +653 -372
- package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts +21 -61
- package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-registry.component.js +214 -681
- package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +49 -0
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +658 -0
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +42 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +90 -0
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -0
- package/dist/PredictiveStudio/predictive-studio.view-models.d.ts +14 -2
- package/dist/PredictiveStudio/predictive-studio.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio.view-models.js +41 -5
- package/dist/PredictiveStudio/predictive-studio.view-models.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js +178 -65
- package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +9 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +307 -369
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js +1 -1
- package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +17 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +309 -138
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts +1 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +6 -5
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/predictive-studio-dashboards.module.d.ts +10 -8
- package/dist/predictive-studio-dashboards.module.d.ts.map +1 -1
- package/dist/predictive-studio-dashboards.module.js +13 -3
- package/dist/predictive-studio-dashboards.module.js.map +1 -1
- package/package.json +64 -63
|
@@ -3,326 +3,378 @@ import { CommonModule } from '@angular/common';
|
|
|
3
3
|
import { MJButtonDirective } from '@memberjunction/ng-ui-components';
|
|
4
4
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
5
5
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
|
+
import { Metadata, RunView } from '@memberjunction/core';
|
|
6
7
|
import { PredictiveStudioControlExperimentSessionOperation, } from '@memberjunction/core-entities';
|
|
8
|
+
import { ArtifactsModule } from '@memberjunction/ng-artifacts';
|
|
7
9
|
import { deriveLeaderboard, groupIterationsToKanban, } from '../predictive-studio.view-models';
|
|
8
10
|
import { PSConfirmModalComponent } from './ps-confirm-modal.component';
|
|
11
|
+
import { PSRunExperimentModalComponent } from './ps-run-experiment-modal.component';
|
|
9
12
|
import * as i0 from "@angular/core";
|
|
10
13
|
import * as i1 from "@angular/common";
|
|
14
|
+
import * as i2 from "@memberjunction/ng-artifacts";
|
|
11
15
|
const _c0 = a0 => ({ c: a0 });
|
|
12
16
|
const _forTrack0 = ($index, $item) => $item.rank;
|
|
13
17
|
const _forTrack1 = ($index, $item) => $item.iteration;
|
|
14
|
-
const _forTrack2 = ($index, $item) => $item.
|
|
18
|
+
const _forTrack2 = ($index, $item) => $item.ID;
|
|
19
|
+
const _forTrack3 = ($index, $item) => $item.label;
|
|
15
20
|
function PSExperimentsComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
-
i0.ɵɵ
|
|
17
|
-
i0.ɵɵ
|
|
21
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
22
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "span", 6);
|
|
23
|
+
i0.ɵɵelement(2, "i", 7);
|
|
18
24
|
i0.ɵɵelementEnd();
|
|
19
25
|
i0.ɵɵelementStart(3, "h3");
|
|
20
26
|
i0.ɵɵtext(4, "No experiment sessions yet");
|
|
21
27
|
i0.ɵɵelementEnd();
|
|
22
28
|
i0.ɵɵelementStart(5, "p");
|
|
23
|
-
i0.ɵɵtext(6, "Launch an experiment to watch the Model Dev Agent search algorithms and feature sets in waves
|
|
24
|
-
i0.ɵɵelementEnd()
|
|
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.");
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
i0.ɵɵelementStart(7, "div", 8)(8, "button", 9);
|
|
32
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_1_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openNewExperimentModal()); });
|
|
33
|
+
i0.ɵɵelement(9, "i", 7);
|
|
34
|
+
i0.ɵɵtext(10, " New Experiment ");
|
|
35
|
+
i0.ɵɵelementEnd()()();
|
|
25
36
|
} }
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
i0.ɵɵ
|
|
29
|
-
i0.ɵɵ
|
|
30
|
-
|
|
37
|
+
function PSExperimentsComponent_Conditional_2_Conditional_5_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "option", 43);
|
|
39
|
+
i0.ɵɵtext(1);
|
|
40
|
+
i0.ɵɵelementEnd();
|
|
41
|
+
} if (rf & 2) {
|
|
42
|
+
const s_r5 = ctx.$implicit;
|
|
43
|
+
i0.ɵɵproperty("value", s_r5.ID);
|
|
44
|
+
i0.ɵɵadvance();
|
|
45
|
+
i0.ɵɵtextInterpolate2("", s_r5.Name, " (", s_r5.Status, ")");
|
|
46
|
+
} }
|
|
47
|
+
function PSExperimentsComponent_Conditional_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
49
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
50
|
+
i0.ɵɵtext(1, "\u00B7 Switch:");
|
|
51
|
+
i0.ɵɵelementEnd();
|
|
52
|
+
i0.ɵɵelementStart(2, "select", 42);
|
|
53
|
+
i0.ɵɵlistener("change", function PSExperimentsComponent_Conditional_2_Conditional_5_Template_select_change_2_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectSession($event.target.value)); });
|
|
54
|
+
i0.ɵɵrepeaterCreate(3, PSExperimentsComponent_Conditional_2_Conditional_5_For_4_Template, 2, 3, "option", 43, _forTrack2);
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
} if (rf & 2) {
|
|
57
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
58
|
+
i0.ɵɵadvance(2);
|
|
59
|
+
i0.ɵɵproperty("value", ctx_r1.sessionId);
|
|
60
|
+
i0.ɵɵadvance();
|
|
61
|
+
i0.ɵɵrepeater(ctx_r1.sessions);
|
|
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);
|
|
31
68
|
i0.ɵɵtext(2, " Pause");
|
|
32
69
|
i0.ɵɵelementEnd();
|
|
33
70
|
} }
|
|
34
|
-
function
|
|
35
|
-
const
|
|
36
|
-
i0.ɵɵelementStart(0, "button",
|
|
37
|
-
i0.ɵɵlistener("click", function
|
|
38
|
-
i0.ɵɵelement(1, "i",
|
|
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);
|
|
39
76
|
i0.ɵɵtext(2, " Resume");
|
|
40
77
|
i0.ɵɵelementEnd();
|
|
41
78
|
} }
|
|
42
|
-
function
|
|
43
|
-
const
|
|
44
|
-
i0.ɵɵelementStart(0, "button",
|
|
45
|
-
i0.ɵɵlistener("click", function
|
|
46
|
-
i0.ɵɵelement(1, "i",
|
|
79
|
+
function PSExperimentsComponent_Conditional_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
81
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
82
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Conditional_22_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.requestControl("cancel")); });
|
|
83
|
+
i0.ɵɵelement(1, "i", 49);
|
|
47
84
|
i0.ɵɵtext(2, " Cancel");
|
|
48
85
|
i0.ɵɵelementEnd();
|
|
49
86
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "span",
|
|
87
|
+
function PSExperimentsComponent_Conditional_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
52
89
|
i0.ɵɵtext(1, "No scored iterations yet.");
|
|
53
90
|
i0.ɵɵelementEnd();
|
|
54
91
|
} }
|
|
55
|
-
function
|
|
56
|
-
i0.ɵɵelementStart(0, "div",
|
|
92
|
+
function PSExperimentsComponent_Conditional_2_For_33_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
+
i0.ɵɵelementStart(0, "div", 50)(1, "span", 51);
|
|
57
94
|
i0.ɵɵtext(2);
|
|
58
95
|
i0.ɵɵelementEnd();
|
|
59
|
-
i0.ɵɵelementStart(3, "span",
|
|
96
|
+
i0.ɵɵelementStart(3, "span", 52);
|
|
60
97
|
i0.ɵɵelement(4, "i");
|
|
61
98
|
i0.ɵɵelementEnd();
|
|
62
|
-
i0.ɵɵelementStart(5, "div")(6, "div",
|
|
99
|
+
i0.ɵɵelementStart(5, "div")(6, "div", 53);
|
|
63
100
|
i0.ɵɵtext(7);
|
|
64
101
|
i0.ɵɵelementEnd();
|
|
65
|
-
i0.ɵɵelementStart(8, "div",
|
|
102
|
+
i0.ɵɵelementStart(8, "div", 54);
|
|
66
103
|
i0.ɵɵtext(9);
|
|
67
104
|
i0.ɵɵelementEnd()();
|
|
68
|
-
i0.ɵɵelementStart(10, "span",
|
|
105
|
+
i0.ɵɵelementStart(10, "span", 55);
|
|
69
106
|
i0.ɵɵtext(11);
|
|
70
107
|
i0.ɵɵpipe(12, "number");
|
|
71
108
|
i0.ɵɵelementEnd()();
|
|
72
109
|
} if (rf & 2) {
|
|
73
|
-
const
|
|
74
|
-
i0.ɵɵclassProp("best",
|
|
110
|
+
const lp_r9 = ctx.$implicit;
|
|
111
|
+
i0.ɵɵclassProp("best", lp_r9.best)("pruned", lp_r9.pruned);
|
|
75
112
|
i0.ɵɵadvance();
|
|
76
|
-
i0.ɵɵclassProp("gold",
|
|
113
|
+
i0.ɵɵclassProp("gold", lp_r9.best);
|
|
77
114
|
i0.ɵɵadvance();
|
|
78
|
-
i0.ɵɵtextInterpolate(
|
|
115
|
+
i0.ɵɵtextInterpolate(lp_r9.rank);
|
|
79
116
|
i0.ɵɵadvance();
|
|
80
|
-
i0.ɵɵstyleProp("background",
|
|
117
|
+
i0.ɵɵstyleProp("background", lp_r9.algorithmColor);
|
|
81
118
|
i0.ɵɵadvance();
|
|
82
|
-
i0.ɵɵclassMap(
|
|
119
|
+
i0.ɵɵclassMap(lp_r9.algorithmIcon);
|
|
83
120
|
i0.ɵɵadvance(3);
|
|
84
|
-
i0.ɵɵtextInterpolate(
|
|
121
|
+
i0.ɵɵtextInterpolate(lp_r9.algorithm);
|
|
85
122
|
i0.ɵɵadvance(2);
|
|
86
|
-
i0.ɵɵtextInterpolate(
|
|
123
|
+
i0.ɵɵtextInterpolate(lp_r9.features);
|
|
87
124
|
i0.ɵɵadvance();
|
|
88
|
-
i0.ɵɵclassProp("win",
|
|
125
|
+
i0.ɵɵclassProp("win", lp_r9.best);
|
|
89
126
|
i0.ɵɵadvance();
|
|
90
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 16,
|
|
127
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 16, lp_r9.auc, "1.3-3"));
|
|
91
128
|
} }
|
|
92
|
-
function
|
|
93
|
-
i0.ɵɵelementStart(0, "div",
|
|
129
|
+
function PSExperimentsComponent_Conditional_2_Conditional_34_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "span", 59);
|
|
94
131
|
i0.ɵɵtext(3);
|
|
95
132
|
i0.ɵɵelementEnd()();
|
|
96
|
-
i0.ɵɵelementStart(4, "div",
|
|
133
|
+
i0.ɵɵelementStart(4, "div", 60)(5, "div", 61);
|
|
97
134
|
i0.ɵɵtext(6);
|
|
98
135
|
i0.ɵɵelementEnd();
|
|
99
|
-
i0.ɵɵelementStart(7, "div",
|
|
136
|
+
i0.ɵɵelementStart(7, "div", 62)(8, "strong");
|
|
100
137
|
i0.ɵɵtext(9);
|
|
101
138
|
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵelementStart(10, "span",
|
|
139
|
+
i0.ɵɵelementStart(10, "span", 63);
|
|
103
140
|
i0.ɵɵtext(11);
|
|
104
141
|
i0.ɵɵelementEnd()();
|
|
105
|
-
i0.ɵɵelementStart(12, "div",
|
|
142
|
+
i0.ɵɵelementStart(12, "div", 64);
|
|
106
143
|
i0.ɵɵelement(13, "span");
|
|
107
144
|
i0.ɵɵelementEnd()()();
|
|
108
145
|
} if (rf & 2) {
|
|
109
|
-
const
|
|
146
|
+
const b_r10 = ctx.$implicit;
|
|
110
147
|
i0.ɵɵadvance();
|
|
111
|
-
i0.ɵɵstyleProp("--ps-p",
|
|
148
|
+
i0.ɵɵstyleProp("--ps-p", b_r10.fillPct)("--ps-gauge-color", b_r10.color);
|
|
112
149
|
i0.ɵɵadvance(2);
|
|
113
|
-
i0.ɵɵtextInterpolate(
|
|
150
|
+
i0.ɵɵtextInterpolate(b_r10.centerText);
|
|
114
151
|
i0.ɵɵadvance(3);
|
|
115
|
-
i0.ɵɵtextInterpolate(
|
|
152
|
+
i0.ɵɵtextInterpolate(b_r10.label);
|
|
116
153
|
i0.ɵɵadvance(3);
|
|
117
|
-
i0.ɵɵtextInterpolate(
|
|
154
|
+
i0.ɵɵtextInterpolate(b_r10.value);
|
|
118
155
|
i0.ɵɵadvance(2);
|
|
119
|
-
i0.ɵɵtextInterpolate1("/ ",
|
|
156
|
+
i0.ɵɵtextInterpolate1("/ ", b_r10.cap);
|
|
120
157
|
i0.ɵɵadvance(2);
|
|
121
|
-
i0.ɵɵstyleProp("width",
|
|
158
|
+
i0.ɵɵstyleProp("width", b_r10.fillPct, "%")("background", b_r10.color);
|
|
122
159
|
} }
|
|
123
|
-
function
|
|
124
|
-
i0.ɵɵelementStart(0, "div",
|
|
125
|
-
i0.ɵɵrepeaterCreate(2,
|
|
160
|
+
function PSExperimentsComponent_Conditional_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
i0.ɵɵelementStart(0, "div", 29)(1, "div", 56);
|
|
162
|
+
i0.ɵɵrepeaterCreate(2, PSExperimentsComponent_Conditional_2_Conditional_34_For_3_Template, 14, 12, "div", 57, _forTrack3);
|
|
126
163
|
i0.ɵɵelementEnd()();
|
|
127
164
|
} if (rf & 2) {
|
|
128
165
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
129
166
|
i0.ɵɵadvance(2);
|
|
130
167
|
i0.ɵɵrepeater(ctx_r1.budget);
|
|
131
168
|
} }
|
|
132
|
-
function
|
|
133
|
-
i0.ɵɵelementContainer(0,
|
|
169
|
+
function PSExperimentsComponent_Conditional_2_For_45_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
+
i0.ɵɵelementContainer(0, 36);
|
|
134
171
|
} if (rf & 2) {
|
|
135
|
-
const
|
|
172
|
+
const c_r11 = ctx.$implicit;
|
|
136
173
|
i0.ɵɵnextContext();
|
|
137
|
-
const
|
|
138
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
174
|
+
const iterCard_r12 = i0.ɵɵreference(70);
|
|
175
|
+
i0.ɵɵproperty("ngTemplateOutlet", iterCard_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, c_r11));
|
|
139
176
|
} }
|
|
140
|
-
function
|
|
141
|
-
i0.ɵɵelementStart(0, "span",
|
|
177
|
+
function PSExperimentsComponent_Conditional_2_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
178
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
142
179
|
i0.ɵɵtext(1, "No running iterations.");
|
|
143
180
|
i0.ɵɵelementEnd();
|
|
144
181
|
} }
|
|
145
|
-
function
|
|
146
|
-
i0.ɵɵelementContainer(0,
|
|
182
|
+
function PSExperimentsComponent_Conditional_2_For_56_Template(rf, ctx) { if (rf & 1) {
|
|
183
|
+
i0.ɵɵelementContainer(0, 36);
|
|
147
184
|
} if (rf & 2) {
|
|
148
|
-
const
|
|
185
|
+
const c_r13 = ctx.$implicit;
|
|
149
186
|
i0.ɵɵnextContext();
|
|
150
|
-
const
|
|
151
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
187
|
+
const iterCard_r12 = i0.ɵɵreference(70);
|
|
188
|
+
i0.ɵɵproperty("ngTemplateOutlet", iterCard_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, c_r13));
|
|
152
189
|
} }
|
|
153
|
-
function
|
|
154
|
-
i0.ɵɵelementStart(0, "span",
|
|
190
|
+
function PSExperimentsComponent_Conditional_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
191
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
155
192
|
i0.ɵɵtext(1, "No completed iterations.");
|
|
156
193
|
i0.ɵɵelementEnd();
|
|
157
194
|
} }
|
|
158
|
-
function
|
|
159
|
-
i0.ɵɵelementContainer(0,
|
|
195
|
+
function PSExperimentsComponent_Conditional_2_For_67_Template(rf, ctx) { if (rf & 1) {
|
|
196
|
+
i0.ɵɵelementContainer(0, 36);
|
|
160
197
|
} if (rf & 2) {
|
|
161
|
-
const
|
|
198
|
+
const c_r14 = ctx.$implicit;
|
|
162
199
|
i0.ɵɵnextContext();
|
|
163
|
-
const
|
|
164
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
200
|
+
const iterCard_r12 = i0.ɵɵreference(70);
|
|
201
|
+
i0.ɵɵproperty("ngTemplateOutlet", iterCard_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, c_r14));
|
|
165
202
|
} }
|
|
166
|
-
function
|
|
167
|
-
i0.ɵɵelementStart(0, "span",
|
|
203
|
+
function PSExperimentsComponent_Conditional_2_Conditional_68_Template(rf, ctx) { if (rf & 1) {
|
|
204
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
168
205
|
i0.ɵɵtext(1, "Nothing pruned.");
|
|
169
206
|
i0.ɵɵelementEnd();
|
|
170
207
|
} }
|
|
171
|
-
function
|
|
172
|
-
i0.ɵɵelementStart(0, "span",
|
|
208
|
+
function PSExperimentsComponent_Conditional_2_ng_template_69_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
i0.ɵɵelementStart(0, "span", 69);
|
|
173
210
|
i0.ɵɵtext(1);
|
|
174
211
|
i0.ɵɵelementEnd();
|
|
175
212
|
} if (rf & 2) {
|
|
176
|
-
const
|
|
213
|
+
const f_r15 = ctx.$implicit;
|
|
177
214
|
i0.ɵɵadvance();
|
|
178
|
-
i0.ɵɵtextInterpolate(
|
|
215
|
+
i0.ɵɵtextInterpolate(f_r15);
|
|
179
216
|
} }
|
|
180
|
-
function
|
|
181
|
-
i0.ɵɵelementStart(0, "div",
|
|
217
|
+
function PSExperimentsComponent_Conditional_2_ng_template_69_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
218
|
+
i0.ɵɵelementStart(0, "div", 70)(1, "div", 75);
|
|
182
219
|
i0.ɵɵelement(2, "span");
|
|
183
220
|
i0.ɵɵelementEnd();
|
|
184
|
-
i0.ɵɵelementStart(3, "div",
|
|
221
|
+
i0.ɵɵelementStart(3, "div", 76)(4, "span", 63);
|
|
185
222
|
i0.ɵɵtext(5);
|
|
186
223
|
i0.ɵɵelementEnd()()();
|
|
187
224
|
} if (rf & 2) {
|
|
188
|
-
const
|
|
225
|
+
const c_r16 = i0.ɵɵnextContext().c;
|
|
189
226
|
i0.ɵɵadvance(2);
|
|
190
|
-
i0.ɵɵstyleProp("width",
|
|
227
|
+
i0.ɵɵstyleProp("width", c_r16.progress, "%");
|
|
191
228
|
i0.ɵɵadvance(3);
|
|
192
|
-
i0.ɵɵtextInterpolate(
|
|
229
|
+
i0.ɵɵtextInterpolate(c_r16.progressDetail);
|
|
193
230
|
} }
|
|
194
|
-
function
|
|
195
|
-
i0.ɵɵelementStart(0, "div",
|
|
231
|
+
function PSExperimentsComponent_Conditional_2_ng_template_69_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
232
|
+
i0.ɵɵelementStart(0, "div", 71)(1, "span", 77);
|
|
196
233
|
i0.ɵɵtext(2);
|
|
197
234
|
i0.ɵɵpipe(3, "number");
|
|
198
235
|
i0.ɵɵelementEnd();
|
|
199
|
-
i0.ɵɵelementStart(4, "span",
|
|
236
|
+
i0.ɵɵelementStart(4, "span", 78);
|
|
200
237
|
i0.ɵɵtext(5);
|
|
201
238
|
i0.ɵɵelementEnd()();
|
|
202
239
|
} if (rf & 2) {
|
|
203
|
-
const
|
|
240
|
+
const c_r16 = i0.ɵɵnextContext().c;
|
|
204
241
|
i0.ɵɵadvance();
|
|
205
|
-
i0.ɵɵclassProp("green",
|
|
242
|
+
i0.ɵɵclassProp("green", c_r16.status === "Best");
|
|
206
243
|
i0.ɵɵadvance();
|
|
207
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 4,
|
|
244
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 4, c_r16.score, "1.3-3"));
|
|
208
245
|
i0.ɵɵadvance(3);
|
|
209
|
-
i0.ɵɵtextInterpolate1("score \u00B7 ",
|
|
246
|
+
i0.ɵɵtextInterpolate1("score \u00B7 ", c_r16.scoreDelta);
|
|
210
247
|
} }
|
|
211
|
-
function
|
|
212
|
-
i0.ɵɵelementStart(0, "div",
|
|
248
|
+
function PSExperimentsComponent_Conditional_2_ng_template_69_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
+
i0.ɵɵelementStart(0, "div", 65)(1, "div", 66)(2, "span", 52);
|
|
213
250
|
i0.ɵɵelement(3, "i");
|
|
214
251
|
i0.ɵɵelementEnd();
|
|
215
|
-
i0.ɵɵelementStart(4, "div")(5, "div",
|
|
252
|
+
i0.ɵɵelementStart(4, "div")(5, "div", 53);
|
|
216
253
|
i0.ɵɵtext(6);
|
|
217
254
|
i0.ɵɵelementEnd();
|
|
218
|
-
i0.ɵɵelementStart(7, "div",
|
|
255
|
+
i0.ɵɵelementStart(7, "div", 67);
|
|
219
256
|
i0.ɵɵtext(8);
|
|
220
257
|
i0.ɵɵelementEnd()();
|
|
221
|
-
i0.ɵɵelement(9, "span",
|
|
222
|
-
i0.ɵɵelementStart(10, "span",
|
|
258
|
+
i0.ɵɵelement(9, "span", 14);
|
|
259
|
+
i0.ɵɵelementStart(10, "span", 12);
|
|
223
260
|
i0.ɵɵtext(11);
|
|
224
261
|
i0.ɵɵelementEnd()();
|
|
225
|
-
i0.ɵɵelementStart(12, "div",
|
|
226
|
-
i0.ɵɵrepeaterCreate(13,
|
|
262
|
+
i0.ɵɵelementStart(12, "div", 68);
|
|
263
|
+
i0.ɵɵrepeaterCreate(13, PSExperimentsComponent_Conditional_2_ng_template_69_For_14_Template, 2, 1, "span", 69, i0.ɵɵrepeaterTrackByIdentity);
|
|
227
264
|
i0.ɵɵelementEnd();
|
|
228
|
-
i0.ɵɵconditionalCreate(15,
|
|
229
|
-
i0.ɵɵelementStart(17, "div",
|
|
230
|
-
i0.ɵɵelement(18, "i",
|
|
231
|
-
i0.ɵɵelementStart(19, "span",
|
|
265
|
+
i0.ɵɵconditionalCreate(15, PSExperimentsComponent_Conditional_2_ng_template_69_Conditional_15_Template, 6, 3, "div", 70)(16, PSExperimentsComponent_Conditional_2_ng_template_69_Conditional_16_Template, 6, 7, "div", 71);
|
|
266
|
+
i0.ɵɵelementStart(17, "div", 72);
|
|
267
|
+
i0.ɵɵelement(18, "i", 73);
|
|
268
|
+
i0.ɵɵelementStart(19, "span", 74);
|
|
232
269
|
i0.ɵɵtext(20);
|
|
233
270
|
i0.ɵɵelementEnd()()();
|
|
234
271
|
} if (rf & 2) {
|
|
235
|
-
const
|
|
272
|
+
const c_r16 = ctx.c;
|
|
236
273
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
237
|
-
i0.ɵɵclassProp("best",
|
|
274
|
+
i0.ɵɵclassProp("best", c_r16.status === "Best")("running", c_r16.status === "Running")("pruned", c_r16.status === "Pruned");
|
|
238
275
|
i0.ɵɵadvance(2);
|
|
239
|
-
i0.ɵɵstyleProp("background",
|
|
276
|
+
i0.ɵɵstyleProp("background", c_r16.algorithmColor);
|
|
240
277
|
i0.ɵɵadvance();
|
|
241
|
-
i0.ɵɵclassMap(
|
|
278
|
+
i0.ɵɵclassMap(c_r16.algorithmIcon);
|
|
242
279
|
i0.ɵɵadvance(3);
|
|
243
|
-
i0.ɵɵtextInterpolate(
|
|
280
|
+
i0.ɵɵtextInterpolate(c_r16.algorithm);
|
|
244
281
|
i0.ɵɵadvance(2);
|
|
245
|
-
i0.ɵɵtextInterpolate(
|
|
282
|
+
i0.ɵɵtextInterpolate(c_r16.iteration);
|
|
246
283
|
i0.ɵɵadvance(2);
|
|
247
|
-
i0.ɵɵclassMap(ctx_r1.statusBadgeClass(
|
|
284
|
+
i0.ɵɵclassMap(ctx_r1.statusBadgeClass(c_r16.status));
|
|
248
285
|
i0.ɵɵadvance();
|
|
249
|
-
i0.ɵɵtextInterpolate(ctx_r1.statusLabel(
|
|
286
|
+
i0.ɵɵtextInterpolate(ctx_r1.statusLabel(c_r16.status));
|
|
250
287
|
i0.ɵɵadvance(2);
|
|
251
|
-
i0.ɵɵrepeater(
|
|
288
|
+
i0.ɵɵrepeater(c_r16.features);
|
|
252
289
|
i0.ɵɵadvance(2);
|
|
253
|
-
i0.ɵɵconditional(
|
|
290
|
+
i0.ɵɵconditional(c_r16.status === "Running" ? 15 : 16);
|
|
254
291
|
i0.ɵɵadvance(5);
|
|
255
|
-
i0.ɵɵtextInterpolate(
|
|
292
|
+
i0.ɵɵtextInterpolate(c_r16.rationale);
|
|
256
293
|
} }
|
|
257
294
|
function PSExperimentsComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
258
|
-
|
|
259
|
-
i0.ɵɵ
|
|
295
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
296
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div")(2, "div", 11)(3, "span");
|
|
297
|
+
i0.ɵɵtext(4, "Experiment session");
|
|
260
298
|
i0.ɵɵelementEnd();
|
|
261
|
-
i0.ɵɵ
|
|
262
|
-
i0.ɵɵ
|
|
263
|
-
i0.ɵɵelementStart(6, "
|
|
264
|
-
i0.ɵɵ
|
|
265
|
-
i0.ɵɵ
|
|
299
|
+
i0.ɵɵconditionalCreate(5, PSExperimentsComponent_Conditional_2_Conditional_5_Template, 5, 1);
|
|
300
|
+
i0.ɵɵelementEnd();
|
|
301
|
+
i0.ɵɵelementStart(6, "h2");
|
|
302
|
+
i0.ɵɵtext(7);
|
|
303
|
+
i0.ɵɵelementStart(8, "span", 12);
|
|
304
|
+
i0.ɵɵelement(9, "span", 13);
|
|
305
|
+
i0.ɵɵtext(10);
|
|
266
306
|
i0.ɵɵelementEnd()()();
|
|
267
|
-
i0.ɵɵelement(
|
|
268
|
-
i0.ɵɵelementStart(
|
|
269
|
-
i0.ɵɵtext(
|
|
307
|
+
i0.ɵɵelement(11, "span", 14);
|
|
308
|
+
i0.ɵɵelementStart(12, "span", 15);
|
|
309
|
+
i0.ɵɵtext(13);
|
|
310
|
+
i0.ɵɵelementEnd();
|
|
311
|
+
i0.ɵɵelementStart(14, "button", 16);
|
|
312
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewResultsArtifact()); });
|
|
313
|
+
i0.ɵɵelement(15, "i", 17);
|
|
314
|
+
i0.ɵɵtext(16);
|
|
315
|
+
i0.ɵɵelementEnd();
|
|
316
|
+
i0.ɵɵelementStart(17, "button", 18);
|
|
317
|
+
i0.ɵɵlistener("click", function PSExperimentsComponent_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openNewExperimentModal()); });
|
|
318
|
+
i0.ɵɵelement(18, "i", 19);
|
|
319
|
+
i0.ɵɵtext(19, " New Experiment ");
|
|
270
320
|
i0.ɵɵelementEnd();
|
|
271
|
-
i0.ɵɵconditionalCreate(
|
|
272
|
-
i0.ɵɵconditionalCreate(
|
|
273
|
-
i0.ɵɵconditionalCreate(
|
|
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);
|
|
274
324
|
i0.ɵɵelementEnd();
|
|
275
|
-
i0.ɵɵelementStart(
|
|
276
|
-
i0.ɵɵelement(
|
|
277
|
-
i0.ɵɵtext(
|
|
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");
|
|
278
328
|
i0.ɵɵelementEnd();
|
|
279
|
-
i0.ɵɵelementStart(
|
|
280
|
-
i0.ɵɵtext(
|
|
329
|
+
i0.ɵɵelementStart(29, "div", 15);
|
|
330
|
+
i0.ɵɵtext(30);
|
|
281
331
|
i0.ɵɵelementEnd()();
|
|
282
|
-
i0.ɵɵconditionalCreate(
|
|
283
|
-
i0.ɵɵrepeaterCreate(
|
|
332
|
+
i0.ɵɵconditionalCreate(31, PSExperimentsComponent_Conditional_2_Conditional_31_Template, 2, 0, "span", 15);
|
|
333
|
+
i0.ɵɵrepeaterCreate(32, PSExperimentsComponent_Conditional_2_For_33_Template, 13, 19, "div", 28, _forTrack0);
|
|
284
334
|
i0.ɵɵelementEnd()();
|
|
285
|
-
i0.ɵɵconditionalCreate(
|
|
286
|
-
i0.ɵɵelementStart(
|
|
287
|
-
i0.ɵɵelement(
|
|
288
|
-
i0.ɵɵelementStart(
|
|
289
|
-
i0.ɵɵtext(
|
|
290
|
-
i0.ɵɵelementEnd();
|
|
291
|
-
i0.ɵɵelementStart(
|
|
292
|
-
i0.ɵɵtext(
|
|
335
|
+
i0.ɵɵconditionalCreate(34, PSExperimentsComponent_Conditional_2_Conditional_34_Template, 4, 0, "div", 29);
|
|
336
|
+
i0.ɵɵelementStart(35, "div", 30)(36, "div", 31)(37, "div", 32);
|
|
337
|
+
i0.ɵɵelement(38, "i", 33);
|
|
338
|
+
i0.ɵɵelementStart(39, "h3");
|
|
339
|
+
i0.ɵɵtext(40, "Running");
|
|
340
|
+
i0.ɵɵelementEnd();
|
|
341
|
+
i0.ɵɵelementStart(41, "span", 34);
|
|
342
|
+
i0.ɵɵtext(42);
|
|
293
343
|
i0.ɵɵelementEnd()();
|
|
294
|
-
i0.ɵɵelementStart(
|
|
295
|
-
i0.ɵɵrepeaterCreate(
|
|
296
|
-
i0.ɵɵconditionalCreate(
|
|
344
|
+
i0.ɵɵelementStart(43, "div", 35);
|
|
345
|
+
i0.ɵɵrepeaterCreate(44, PSExperimentsComponent_Conditional_2_For_45_Template, 1, 4, "ng-container", 36, _forTrack1);
|
|
346
|
+
i0.ɵɵconditionalCreate(46, PSExperimentsComponent_Conditional_2_Conditional_46_Template, 2, 0, "span", 15);
|
|
297
347
|
i0.ɵɵelementEnd()();
|
|
298
|
-
i0.ɵɵelementStart(
|
|
299
|
-
i0.ɵɵelement(
|
|
300
|
-
i0.ɵɵelementStart(
|
|
301
|
-
i0.ɵɵtext(
|
|
348
|
+
i0.ɵɵelementStart(47, "div", 37)(48, "div", 32);
|
|
349
|
+
i0.ɵɵelement(49, "i", 38);
|
|
350
|
+
i0.ɵɵelementStart(50, "h3");
|
|
351
|
+
i0.ɵɵtext(51, "Completed");
|
|
302
352
|
i0.ɵɵelementEnd();
|
|
303
|
-
i0.ɵɵelementStart(
|
|
304
|
-
i0.ɵɵtext(
|
|
353
|
+
i0.ɵɵelementStart(52, "span", 34);
|
|
354
|
+
i0.ɵɵtext(53);
|
|
305
355
|
i0.ɵɵelementEnd()();
|
|
306
|
-
i0.ɵɵelementStart(
|
|
307
|
-
i0.ɵɵrepeaterCreate(
|
|
308
|
-
i0.ɵɵconditionalCreate(
|
|
356
|
+
i0.ɵɵelementStart(54, "div", 35);
|
|
357
|
+
i0.ɵɵrepeaterCreate(55, PSExperimentsComponent_Conditional_2_For_56_Template, 1, 4, "ng-container", 36, _forTrack1);
|
|
358
|
+
i0.ɵɵconditionalCreate(57, PSExperimentsComponent_Conditional_2_Conditional_57_Template, 2, 0, "span", 15);
|
|
309
359
|
i0.ɵɵelementEnd()();
|
|
310
|
-
i0.ɵɵelementStart(
|
|
311
|
-
i0.ɵɵelement(
|
|
312
|
-
i0.ɵɵelementStart(
|
|
313
|
-
i0.ɵɵtext(
|
|
360
|
+
i0.ɵɵelementStart(58, "div", 39)(59, "div", 32);
|
|
361
|
+
i0.ɵɵelement(60, "i", 40);
|
|
362
|
+
i0.ɵɵelementStart(61, "h3");
|
|
363
|
+
i0.ɵɵtext(62, "Pruned");
|
|
314
364
|
i0.ɵɵelementEnd();
|
|
315
|
-
i0.ɵɵelementStart(
|
|
316
|
-
i0.ɵɵtext(
|
|
365
|
+
i0.ɵɵelementStart(63, "span", 34);
|
|
366
|
+
i0.ɵɵtext(64);
|
|
317
367
|
i0.ɵɵelementEnd()();
|
|
318
|
-
i0.ɵɵelementStart(
|
|
319
|
-
i0.ɵɵrepeaterCreate(
|
|
320
|
-
i0.ɵɵconditionalCreate(
|
|
368
|
+
i0.ɵɵelementStart(65, "div", 35);
|
|
369
|
+
i0.ɵɵrepeaterCreate(66, PSExperimentsComponent_Conditional_2_For_67_Template, 1, 4, "ng-container", 36, _forTrack1);
|
|
370
|
+
i0.ɵɵconditionalCreate(68, PSExperimentsComponent_Conditional_2_Conditional_68_Template, 2, 0, "span", 15);
|
|
321
371
|
i0.ɵɵelementEnd()()();
|
|
322
|
-
i0.ɵɵtemplate(
|
|
372
|
+
i0.ɵɵtemplate(69, PSExperimentsComponent_Conditional_2_ng_template_69_Template, 21, 17, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
323
373
|
} if (rf & 2) {
|
|
324
374
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
325
375
|
i0.ɵɵadvance(5);
|
|
376
|
+
i0.ɵɵconditional(ctx_r1.sessions.length > 1 ? 5 : -1);
|
|
377
|
+
i0.ɵɵadvance(2);
|
|
326
378
|
i0.ɵɵtextInterpolate1("", ctx_r1.session.Name, " ");
|
|
327
379
|
i0.ɵɵadvance();
|
|
328
380
|
i0.ɵɵclassMap(ctx_r1.sessionBadgeClass);
|
|
@@ -333,43 +385,47 @@ function PSExperimentsComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
333
385
|
i0.ɵɵadvance(3);
|
|
334
386
|
i0.ɵɵtextInterpolate(ctx_r1.iterationCountLabel);
|
|
335
387
|
i0.ɵɵadvance();
|
|
336
|
-
i0.ɵɵ
|
|
388
|
+
i0.ɵɵproperty("disabled", ctx_r1.artifactLoading);
|
|
389
|
+
i0.ɵɵadvance(2);
|
|
390
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.artifactLoading ? "Loading\u2026" : "View Results Artifact", " ");
|
|
391
|
+
i0.ɵɵadvance(4);
|
|
392
|
+
i0.ɵɵconditional(ctx_r1.canPause ? 20 : -1);
|
|
337
393
|
i0.ɵɵadvance();
|
|
338
|
-
i0.ɵɵconditional(ctx_r1.canResume ?
|
|
394
|
+
i0.ɵɵconditional(ctx_r1.canResume ? 21 : -1);
|
|
339
395
|
i0.ɵɵadvance();
|
|
340
|
-
i0.ɵɵconditional(ctx_r1.canCancel ?
|
|
396
|
+
i0.ɵɵconditional(ctx_r1.canCancel ? 22 : -1);
|
|
341
397
|
i0.ɵɵadvance(8);
|
|
342
398
|
i0.ɵɵtextInterpolate1("", ctx_r1.leaderboard.length, " scored \u00B7 by metric");
|
|
343
399
|
i0.ɵɵadvance();
|
|
344
|
-
i0.ɵɵconditional(ctx_r1.leaderboard.length === 0 ?
|
|
400
|
+
i0.ɵɵconditional(ctx_r1.leaderboard.length === 0 ? 31 : -1);
|
|
345
401
|
i0.ɵɵadvance();
|
|
346
402
|
i0.ɵɵrepeater(ctx_r1.leaderboard);
|
|
347
403
|
i0.ɵɵadvance(2);
|
|
348
|
-
i0.ɵɵconditional(ctx_r1.budget.length > 0 ?
|
|
404
|
+
i0.ɵɵconditional(ctx_r1.budget.length > 0 ? 34 : -1);
|
|
349
405
|
i0.ɵɵadvance(8);
|
|
350
406
|
i0.ɵɵtextInterpolate(ctx_r1.kanban.running.length);
|
|
351
407
|
i0.ɵɵadvance(2);
|
|
352
408
|
i0.ɵɵrepeater(ctx_r1.kanban.running);
|
|
353
409
|
i0.ɵɵadvance(2);
|
|
354
|
-
i0.ɵɵconditional(ctx_r1.kanban.running.length === 0 ?
|
|
410
|
+
i0.ɵɵconditional(ctx_r1.kanban.running.length === 0 ? 46 : -1);
|
|
355
411
|
i0.ɵɵadvance(7);
|
|
356
412
|
i0.ɵɵtextInterpolate(ctx_r1.kanban.completed.length);
|
|
357
413
|
i0.ɵɵadvance(2);
|
|
358
414
|
i0.ɵɵrepeater(ctx_r1.kanban.completed);
|
|
359
415
|
i0.ɵɵadvance(2);
|
|
360
|
-
i0.ɵɵconditional(ctx_r1.kanban.completed.length === 0 ?
|
|
416
|
+
i0.ɵɵconditional(ctx_r1.kanban.completed.length === 0 ? 57 : -1);
|
|
361
417
|
i0.ɵɵadvance(7);
|
|
362
418
|
i0.ɵɵtextInterpolate(ctx_r1.kanban.pruned.length);
|
|
363
419
|
i0.ɵɵadvance(2);
|
|
364
420
|
i0.ɵɵrepeater(ctx_r1.kanban.pruned);
|
|
365
421
|
i0.ɵɵadvance(2);
|
|
366
|
-
i0.ɵɵconditional(ctx_r1.kanban.pruned.length === 0 ?
|
|
422
|
+
i0.ɵɵconditional(ctx_r1.kanban.pruned.length === 0 ? 68 : -1);
|
|
367
423
|
} }
|
|
368
424
|
function PSExperimentsComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
369
|
-
const
|
|
370
|
-
i0.ɵɵelementStart(0, "ps-confirm-modal",
|
|
371
|
-
i0.ɵɵlistener("confirmed", function PSExperimentsComponent_Conditional_3_Template_ps_confirm_modal_confirmed_0_listener() { i0.ɵɵrestoreView(
|
|
372
|
-
i0.ɵɵelement(1, "div",
|
|
425
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
426
|
+
i0.ɵɵelementStart(0, "ps-confirm-modal", 79);
|
|
427
|
+
i0.ɵɵlistener("confirmed", function PSExperimentsComponent_Conditional_3_Template_ps_confirm_modal_confirmed_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.confirmControl()); })("cancelled", function PSExperimentsComponent_Conditional_3_Template_ps_confirm_modal_cancelled_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelControl()); });
|
|
428
|
+
i0.ɵɵelement(1, "div", 80);
|
|
373
429
|
i0.ɵɵelementEnd();
|
|
374
430
|
} if (rf & 2) {
|
|
375
431
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -377,6 +433,29 @@ function PSExperimentsComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
377
433
|
i0.ɵɵadvance();
|
|
378
434
|
i0.ɵɵproperty("innerHTML", ctx_r1.pendingMessage, i0.ɵɵsanitizeHtml);
|
|
379
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()); });
|
|
444
|
+
i0.ɵɵelementEnd()()()();
|
|
445
|
+
} if (rf & 2) {
|
|
446
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
447
|
+
i0.ɵɵadvance(3);
|
|
448
|
+
i0.ɵɵproperty("artifactId", ctx_r1.activeArtifactId)("currentUser", ctx_r1.currentUser)("showCloseButton", true);
|
|
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);
|
|
458
|
+
} }
|
|
380
459
|
/**
|
|
381
460
|
* Experiments panel: a kanban of iteration cards in Running / Completed / Pruned columns, a leaderboard
|
|
382
461
|
* strip ranked by score, and budget gauges — all live against `MJ: Experiment Sessions` + their
|
|
@@ -409,6 +488,115 @@ export class PSExperimentsComponent {
|
|
|
409
488
|
pendingAction = null;
|
|
410
489
|
/** Remote Op in flight. */
|
|
411
490
|
busy = false;
|
|
491
|
+
showNewExperimentModal = false;
|
|
492
|
+
showArtifactModal = false;
|
|
493
|
+
activeArtifactId = null;
|
|
494
|
+
artifactLoading = false;
|
|
495
|
+
get sessions() {
|
|
496
|
+
return this.engine?.Sessions ?? [];
|
|
497
|
+
}
|
|
498
|
+
selectSession(id) {
|
|
499
|
+
this.sessionId = id;
|
|
500
|
+
this.rebuild();
|
|
501
|
+
this.cdr.detectChanges();
|
|
502
|
+
}
|
|
503
|
+
openNewExperimentModal() {
|
|
504
|
+
this.showNewExperimentModal = true;
|
|
505
|
+
}
|
|
506
|
+
closeNewExperimentModal() {
|
|
507
|
+
this.showNewExperimentModal = false;
|
|
508
|
+
}
|
|
509
|
+
async onExperimentStarted(newSessionId) {
|
|
510
|
+
this.closeNewExperimentModal();
|
|
511
|
+
await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);
|
|
512
|
+
this.sessionId = newSessionId;
|
|
513
|
+
this.rebuild();
|
|
514
|
+
this.cdr.detectChanges();
|
|
515
|
+
}
|
|
516
|
+
closeArtifactModal() {
|
|
517
|
+
this.showArtifactModal = false;
|
|
518
|
+
this.activeArtifactId = null;
|
|
519
|
+
}
|
|
520
|
+
async viewResultsArtifact() {
|
|
521
|
+
const s = this.session;
|
|
522
|
+
if (!s || this.artifactLoading)
|
|
523
|
+
return;
|
|
524
|
+
this.artifactLoading = true;
|
|
525
|
+
try {
|
|
526
|
+
const p = this.provider ?? Metadata.Provider;
|
|
527
|
+
const rv = new RunView();
|
|
528
|
+
const res = await rv.RunView({
|
|
529
|
+
EntityName: 'MJ: Artifacts',
|
|
530
|
+
ExtraFilter: `Name LIKE '${s.Name}%' OR Comments LIKE '%${s.ID}%'`,
|
|
531
|
+
ResultType: 'entity_object',
|
|
532
|
+
}, this.currentUser ?? undefined);
|
|
533
|
+
if (res.Success && res.Results && res.Results.length > 0) {
|
|
534
|
+
this.activeArtifactId = res.Results[0].ID;
|
|
535
|
+
this.showArtifactModal = true;
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
const art = await p.GetEntityObject('MJ: Artifacts', this.currentUser ?? undefined);
|
|
539
|
+
art.Name = `${s.Name} — Results`;
|
|
540
|
+
art.Description = `Modeling results, leaderboard, and winning model metrics for ${s.Name}.`;
|
|
541
|
+
art.TypeID = 'D41AB707-58F1-4413-8725-9DF31C95F4C5';
|
|
542
|
+
art.Comments = `Auto-generated for Experiment Session ${s.ID}`;
|
|
543
|
+
const saved = await art.Save();
|
|
544
|
+
if (!saved) {
|
|
545
|
+
this.notifications.CreateSimpleNotification('Could not generate artifact record.', 'error', 5000);
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
const ver = await p.GetEntityObject('MJ: Artifact Versions', this.currentUser ?? undefined);
|
|
549
|
+
ver.ArtifactID = art.ID;
|
|
550
|
+
ver.VersionNumber = 1;
|
|
551
|
+
ver.Comments = 'Initial results artifact';
|
|
552
|
+
const planSpec = this.parsePlanSpec(s.PlanSpec);
|
|
553
|
+
const winningRow = this.leaderboard[0];
|
|
554
|
+
const winningIteration = winningRow
|
|
555
|
+
? this.engine.IterationsForSession(s.ID).find((it) => this.engine.AlgorithmForIteration(it.ID) === winningRow.algorithm && it.Score === winningRow.auc)
|
|
556
|
+
: undefined;
|
|
557
|
+
const winningRun = winningIteration ? this.engine.TrainingRuns.find((r) => UUIDsEqual(r.ExperimentSessionIterationID, winningIteration.ID)) : undefined;
|
|
558
|
+
const winningModelId = winningRun?.ResultingModelID ?? undefined;
|
|
559
|
+
const payload = {
|
|
560
|
+
Name: s.Name,
|
|
561
|
+
Goal: s.Goal || planSpec?.Goal || 'Predictive modeling experiment',
|
|
562
|
+
TargetMetric: planSpec?.TargetDefinition?.SuccessMetric || 'Score',
|
|
563
|
+
Summary: `Experiment session completed with ${this.leaderboard.length} iterations. Winning algorithm: ${winningRow?.algorithm ?? 'None'}.`,
|
|
564
|
+
Leaderboard: this.leaderboard.map((lb) => ({
|
|
565
|
+
rank: lb.rank,
|
|
566
|
+
algorithm: lb.algorithm,
|
|
567
|
+
algorithmName: lb.algorithm,
|
|
568
|
+
featureSet: lb.features,
|
|
569
|
+
score: lb.auc,
|
|
570
|
+
isWinner: lb.best,
|
|
571
|
+
})),
|
|
572
|
+
BestModelID: winningModelId,
|
|
573
|
+
BestModel: winningModelId && winningRow ? { ID: winningModelId, Name: winningRow.algorithm } : undefined,
|
|
574
|
+
Markdown: `## Experiment Session: ${s.Name}\n\n**Status:** ${s.Status}\n**Goal:** ${s.Goal || 'N/A'}\n\n### Leaderboard\n\nRanked by metric:\n` +
|
|
575
|
+
this.leaderboard.map(l => `- **#${l.rank} ${l.algorithm}**: Score ${l.auc.toFixed(3)} (${l.features})`).join('\n'),
|
|
576
|
+
};
|
|
577
|
+
ver.Content = JSON.stringify(payload);
|
|
578
|
+
await ver.Save();
|
|
579
|
+
this.activeArtifactId = art.ID;
|
|
580
|
+
this.showArtifactModal = true;
|
|
581
|
+
}
|
|
582
|
+
catch (e) {
|
|
583
|
+
this.notifications.CreateSimpleNotification(`Error: ${e instanceof Error ? e.message : String(e)}`, 'error', 5000);
|
|
584
|
+
}
|
|
585
|
+
finally {
|
|
586
|
+
this.artifactLoading = false;
|
|
587
|
+
this.cdr.detectChanges();
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
parsePlanSpec(raw) {
|
|
591
|
+
if (!raw)
|
|
592
|
+
return null;
|
|
593
|
+
try {
|
|
594
|
+
return JSON.parse(raw);
|
|
595
|
+
}
|
|
596
|
+
catch {
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
412
600
|
ngOnInit() {
|
|
413
601
|
this.selectActiveSession();
|
|
414
602
|
this.rebuild();
|
|
@@ -617,37 +805,65 @@ export class PSExperimentsComponent {
|
|
|
617
805
|
this.cdr.detectChanges();
|
|
618
806
|
}
|
|
619
807
|
static ɵfac = function PSExperimentsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PSExperimentsComponent)(); };
|
|
620
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSExperimentsComponent, selectors: [["ps-experiments"]], inputs: { engine: "engine", provider: "provider", currentUser: "currentUser" }, decls:
|
|
808
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSExperimentsComponent, selectors: [["ps-experiments"]], inputs: { engine: "engine", provider: "provider", currentUser: "currentUser" }, decls: 6, vars: 4, consts: [["iterCard", ""], ["data-testid", "ps-experiments-panel", 1, "ps-panel", "ps-experiments"], ["data-testid", "ps-experiments-empty", 1, "ps-empty"], [3, "title", "icon", "confirmIcon", "confirmLabel", "variant", "busy"], [1, "ps-modal-backdrop"], [3, "engine", "provider", "currentUser"], [1, "ps-empty-ico"], [1, "fa-solid", "fa-flask"], [2, "margin-top", "12px", "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "sm", "data-testid", "ps-experiments-new-btn-empty", 3, "click"], [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"], ["mjButton", "", "variant", "primary", "size", "sm", "data-testid", "ps-experiments-new-btn", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-experiments-pause"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-experiments-resume"], ["mjButton", "", "variant", "danger", "size", "sm", "data-testid", "ps-experiments-cancel"], ["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"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-experiments-pause", 3, "click"], [1, "fa-solid", "fa-pause"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-experiments-resume", 3, "click"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "danger", "size", "sm", "data-testid", "ps-experiments-cancel", 3, "click"], [1, "fa-solid", "fa-stop"], [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"], [3, "confirmed", "cancelled", "title", "icon", "confirmIcon", "confirmLabel", "variant", "busy"], [3, "innerHTML"], [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"], [3, "started", "closed", "engine", "provider", "currentUser"]], template: function PSExperimentsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
621
809
|
i0.ɵɵelementStart(0, "div", 1);
|
|
622
|
-
i0.ɵɵconditionalCreate(1, PSExperimentsComponent_Conditional_1_Template,
|
|
810
|
+
i0.ɵɵconditionalCreate(1, PSExperimentsComponent_Conditional_1_Template, 11, 0, "div", 2)(2, PSExperimentsComponent_Conditional_2_Template, 71, 22);
|
|
623
811
|
i0.ɵɵconditionalCreate(3, PSExperimentsComponent_Conditional_3_Template, 2, 7, "ps-confirm-modal", 3);
|
|
812
|
+
i0.ɵɵconditionalCreate(4, PSExperimentsComponent_Conditional_4_Template, 4, 3, "div", 4);
|
|
813
|
+
i0.ɵɵconditionalCreate(5, PSExperimentsComponent_Conditional_5_Template, 1, 3, "ps-run-experiment-modal", 5);
|
|
624
814
|
i0.ɵɵelementEnd();
|
|
625
815
|
} if (rf & 2) {
|
|
626
816
|
i0.ɵɵadvance();
|
|
627
817
|
i0.ɵɵconditional(!ctx.session ? 1 : 2);
|
|
628
818
|
i0.ɵɵadvance(2);
|
|
629
819
|
i0.ɵɵconditional(ctx.pendingAction ? 3 : -1);
|
|
630
|
-
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, MJButtonDirective, PSConfirmModalComponent, 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 });
|
|
820
|
+
i0.ɵɵadvance();
|
|
821
|
+
i0.ɵɵconditional(ctx.showArtifactModal && ctx.activeArtifactId ? 4 : -1);
|
|
822
|
+
i0.ɵɵadvance();
|
|
823
|
+
i0.ɵɵconditional(ctx.showNewExperimentModal ? 5 : -1);
|
|
824
|
+
} }, 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 });
|
|
631
825
|
}
|
|
632
826
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PSExperimentsComponent, [{
|
|
633
827
|
type: Component,
|
|
634
|
-
args: [{ standalone: true, selector: 'ps-experiments', imports: [CommonModule, MJButtonDirective, PSConfirmModalComponent], encapsulation: ViewEncapsulation.None, template: `
|
|
828
|
+
args: [{ standalone: true, selector: 'ps-experiments', imports: [CommonModule, MJButtonDirective, PSConfirmModalComponent, PSRunExperimentModalComponent, ArtifactsModule], encapsulation: ViewEncapsulation.None, template: `
|
|
635
829
|
<div class="ps-panel ps-experiments" data-testid="ps-experiments-panel">
|
|
636
830
|
@if (!session) {
|
|
637
831
|
<div class="ps-empty" data-testid="ps-experiments-empty">
|
|
638
832
|
<span class="ps-empty-ico"><i class="fa-solid fa-flask"></i></span>
|
|
639
833
|
<h3>No experiment sessions yet</h3>
|
|
640
|
-
<p>Launch an experiment to watch the Model Dev Agent search algorithms and feature sets in waves
|
|
834
|
+
<p>Launch an experiment to watch the Model Dev Agent search algorithms and feature sets in waves, or configure a manual multi-algorithm tournament.</p>
|
|
835
|
+
<div style="margin-top: 12px; display: flex; gap: 8px;">
|
|
836
|
+
<button mjButton variant="primary" size="sm" data-testid="ps-experiments-new-btn-empty" (click)="openNewExperimentModal()">
|
|
837
|
+
<i class="fa-solid fa-flask"></i> New Experiment
|
|
838
|
+
</button>
|
|
839
|
+
</div>
|
|
641
840
|
</div>
|
|
642
841
|
} @else {
|
|
643
842
|
<!-- session header strip -->
|
|
644
843
|
<div class="sess-head">
|
|
645
844
|
<div>
|
|
646
|
-
<div class="ps-small ps-muted"
|
|
845
|
+
<div class="ps-small ps-muted" style="display: flex; align-items: center; gap: 8px;">
|
|
846
|
+
<span>Experiment session</span>
|
|
847
|
+
@if (sessions.length > 1) {
|
|
848
|
+
<span class="ps-muted">· Switch:</span>
|
|
849
|
+
<select class="mj-input" style="padding: 2px 6px; font-size: 12px; height: 26px;"
|
|
850
|
+
[value]="sessionId" (change)="selectSession($any($event.target).value)">
|
|
851
|
+
@for (s of sessions; track s.ID) {
|
|
852
|
+
<option [value]="s.ID">{{ s.Name }} ({{ s.Status }})</option>
|
|
853
|
+
}
|
|
854
|
+
</select>
|
|
855
|
+
}
|
|
856
|
+
</div>
|
|
647
857
|
<h2>{{ session.Name }} <span class="ps-badge" [class]="sessionBadgeClass"><span class="ps-dot" [style.background]="sessionDotColor"></span> {{ session.Status }}</span></h2>
|
|
648
858
|
</div>
|
|
649
859
|
<span class="ps-spacer"></span>
|
|
650
860
|
<span class="ps-small ps-muted">{{ iterationCountLabel }}</span>
|
|
861
|
+
<button mjButton variant="secondary" size="sm" data-testid="ps-experiments-view-artifact" [disabled]="artifactLoading" (click)="viewResultsArtifact()">
|
|
862
|
+
<i class="fa-solid fa-flask-vial"></i> {{ artifactLoading ? 'Loading…' : 'View Results Artifact' }}
|
|
863
|
+
</button>
|
|
864
|
+
<button mjButton variant="primary" size="sm" data-testid="ps-experiments-new-btn" (click)="openNewExperimentModal()">
|
|
865
|
+
<i class="fa-solid fa-plus"></i> New Experiment
|
|
866
|
+
</button>
|
|
651
867
|
@if (canPause) {
|
|
652
868
|
<button mjButton variant="secondary" size="sm" data-testid="ps-experiments-pause" (click)="requestControl('pause')"><i class="fa-solid fa-pause"></i> Pause</button>
|
|
653
869
|
}
|
|
@@ -771,6 +987,32 @@ export class PSExperimentsComponent {
|
|
|
771
987
|
<div [innerHTML]="pendingMessage"></div>
|
|
772
988
|
</ps-confirm-modal>
|
|
773
989
|
}
|
|
990
|
+
|
|
991
|
+
@if (showArtifactModal && activeArtifactId) {
|
|
992
|
+
<div class="ps-modal-backdrop" (click)="closeArtifactModal()">
|
|
993
|
+
<div class="ps-modal-dialog" style="max-width: 960px; width: 92vw; height: 85vh; display: flex; flex-direction: column; padding: 0; overflow: hidden;"
|
|
994
|
+
(click)="$event.stopPropagation()">
|
|
995
|
+
<div style="flex: 1; min-height: 0; display: flex; flex-direction: column;">
|
|
996
|
+
<mj-artifact-viewer-panel
|
|
997
|
+
[artifactId]="activeArtifactId"
|
|
998
|
+
[currentUser]="currentUser!"
|
|
999
|
+
[showCloseButton]="true"
|
|
1000
|
+
(closed)="closeArtifactModal()">
|
|
1001
|
+
</mj-artifact-viewer-panel>
|
|
1002
|
+
</div>
|
|
1003
|
+
</div>
|
|
1004
|
+
</div>
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
@if (showNewExperimentModal) {
|
|
1008
|
+
<ps-run-experiment-modal
|
|
1009
|
+
[engine]="engine"
|
|
1010
|
+
[provider]="provider"
|
|
1011
|
+
[currentUser]="currentUser"
|
|
1012
|
+
(started)="onExperimentStarted($event)"
|
|
1013
|
+
(closed)="closeNewExperimentModal()">
|
|
1014
|
+
</ps-run-experiment-modal>
|
|
1015
|
+
}
|
|
774
1016
|
</div>
|
|
775
1017
|
`, 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"] }]
|
|
776
1018
|
}], null, { engine: [{
|
|
@@ -780,7 +1022,7 @@ export class PSExperimentsComponent {
|
|
|
780
1022
|
}], currentUser: [{
|
|
781
1023
|
type: Input
|
|
782
1024
|
}] }); })();
|
|
783
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSExperimentsComponent, { className: "PSExperimentsComponent", filePath: "src/PredictiveStudio/components/ps-experiments.component.ts", lineNumber:
|
|
1025
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSExperimentsComponent, { className: "PSExperimentsComponent", filePath: "src/PredictiveStudio/components/ps-experiments.component.ts", lineNumber: 248 }); })();
|
|
784
1026
|
/** Minimal HTML-escape for interpolating session names into the modal's innerHTML message. */
|
|
785
1027
|
function escapeHtml(value) {
|
|
786
1028
|
return value
|