@memberjunction/ng-dashboards 5.45.1 → 5.47.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.
Files changed (50) hide show
  1. package/dist/PredictiveStudio/at-risk.view-models.d.ts +33 -0
  2. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
  3. package/dist/PredictiveStudio/at-risk.view-models.js +69 -2
  4. package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
  5. package/dist/PredictiveStudio/components/ps-catalog.component.js +2 -2
  6. package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
  7. package/dist/PredictiveStudio/components/ps-compare.component.js +2 -2
  8. package/dist/PredictiveStudio/components/ps-compare.component.js.map +1 -1
  9. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +2 -2
  10. package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +1 -1
  11. package/dist/PredictiveStudio/components/ps-experiments.component.js +2 -2
  12. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  13. package/dist/PredictiveStudio/components/ps-home.component.js +2 -2
  14. package/dist/PredictiveStudio/components/ps-home.component.js.map +1 -1
  15. package/dist/PredictiveStudio/components/ps-operate-dialog.component.js +2 -2
  16. package/dist/PredictiveStudio/components/ps-operate-dialog.component.js.map +1 -1
  17. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  18. package/dist/PredictiveStudio/components/ps-pipelines.component.js +306 -297
  19. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  20. package/dist/PredictiveStudio/components/ps-production.component.js +2 -2
  21. package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
  22. package/dist/PredictiveStudio/components/ps-registry.component.d.ts +1 -1
  23. package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
  24. package/dist/PredictiveStudio/components/ps-registry.component.js +15 -9
  25. package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
  26. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +115 -0
  27. package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -0
  28. package/dist/PredictiveStudio/predictive-studio-agent-context.js +119 -0
  29. package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -0
  30. package/dist/PredictiveStudio/predictive-studio-copilot.view-models.d.ts +36 -0
  31. package/dist/PredictiveStudio/predictive-studio-copilot.view-models.d.ts.map +1 -0
  32. package/dist/PredictiveStudio/predictive-studio-copilot.view-models.js +52 -0
  33. package/dist/PredictiveStudio/predictive-studio-copilot.view-models.js.map +1 -0
  34. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
  35. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
  36. package/dist/PredictiveStudio/resources/ps-models-resource.component.js +133 -56
  37. package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
  38. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +50 -1
  39. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  40. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +591 -165
  41. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  42. package/dist/PredictiveStudio/resources/ps-resource-base.d.ts +17 -0
  43. package/dist/PredictiveStudio/resources/ps-resource-base.d.ts.map +1 -1
  44. package/dist/PredictiveStudio/resources/ps-resource-base.js +27 -1
  45. package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
  46. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +11 -1
  47. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
  48. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +199 -99
  49. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  50. package/package.json +59 -59
@@ -30,31 +30,34 @@ function PSPipelinesComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
30
30
  } }
31
31
  function PSPipelinesComponent_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
32
32
  const _r4 = i0.ɵɵgetCurrentView();
33
- i0.ɵɵelementStart(0, "button", 62);
33
+ i0.ɵɵelementStart(0, "button", 63);
34
34
  i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_For_2_Template_button_click_0_listener() { const p_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectPipeline(p_r5.ID)); });
35
35
  i0.ɵɵelement(1, "i", 3);
36
- i0.ɵɵtext(2);
37
- i0.ɵɵelementStart(3, "span", 63);
38
- i0.ɵɵtext(4);
36
+ i0.ɵɵelementStart(2, "span", 64);
37
+ i0.ɵɵtext(3);
38
+ i0.ɵɵelementEnd();
39
+ i0.ɵɵelementStart(4, "span", 65);
40
+ i0.ɵɵtext(5);
39
41
  i0.ɵɵelementEnd()();
40
42
  } if (rf & 2) {
41
43
  const p_r5 = ctx.$implicit;
42
44
  const ctx_r1 = i0.ɵɵnextContext(2);
43
45
  i0.ɵɵclassProp("on", ctx_r1.isSelectedPipeline(p_r5));
44
- i0.ɵɵadvance(2);
45
- i0.ɵɵtextInterpolate1(" ", p_r5.Name, " ");
46
+ i0.ɵɵproperty("title", p_r5.Name);
47
+ i0.ɵɵadvance(3);
48
+ i0.ɵɵtextInterpolate(p_r5.Name);
46
49
  i0.ɵɵadvance();
47
50
  i0.ɵɵclassMap(ctx_r1.statusClass(p_r5.Status));
48
51
  i0.ɵɵadvance();
49
52
  i0.ɵɵtextInterpolate(p_r5.Status);
50
53
  } }
51
- function PSPipelinesComponent_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
52
- i0.ɵɵelementStart(0, "span", 9);
53
- i0.ɵɵelement(1, "i", 64);
54
+ function PSPipelinesComponent_Conditional_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "span", 18);
56
+ i0.ɵɵelement(1, "i", 66);
54
57
  i0.ɵɵtext(2, " Unsaved");
55
58
  i0.ɵɵelementEnd();
56
59
  } }
57
- function PSPipelinesComponent_Conditional_2_For_35_Template(rf, ctx) { if (rf & 1) {
60
+ function PSPipelinesComponent_Conditional_2_For_36_Template(rf, ctx) { if (rf & 1) {
58
61
  i0.ɵɵnamespaceSVG();
59
62
  i0.ɵɵelement(0, "path");
60
63
  } if (rf & 2) {
@@ -62,8 +65,8 @@ function PSPipelinesComponent_Conditional_2_For_35_Template(rf, ctx) { if (rf &
62
65
  const ctx_r1 = i0.ɵɵnextContext(2);
63
66
  i0.ɵɵattribute("d", ctx_r1.edgePath(edge_r6));
64
67
  } }
65
- function PSPipelinesComponent_Conditional_2_For_37_Conditional_5_Template(rf, ctx) { if (rf & 1) {
66
- i0.ɵɵelementStart(0, "span", 67);
68
+ function PSPipelinesComponent_Conditional_2_For_38_Conditional_5_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelementStart(0, "span", 69);
67
70
  i0.ɵɵtext(1);
68
71
  i0.ɵɵelementEnd();
69
72
  } if (rf & 2) {
@@ -71,8 +74,8 @@ function PSPipelinesComponent_Conditional_2_For_37_Conditional_5_Template(rf, ct
71
74
  i0.ɵɵadvance();
72
75
  i0.ɵɵtextInterpolate(node_r8.tag);
73
76
  } }
74
- function PSPipelinesComponent_Conditional_2_For_37_For_8_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelementStart(0, "div", 69)(1, "span", 72);
77
+ function PSPipelinesComponent_Conditional_2_For_38_For_8_Template(rf, ctx) { if (rf & 1) {
78
+ i0.ɵɵelementStart(0, "div", 71)(1, "span", 74);
76
79
  i0.ɵɵtext(2);
77
80
  i0.ɵɵelementEnd();
78
81
  i0.ɵɵelementStart(3, "span");
@@ -85,28 +88,28 @@ function PSPipelinesComponent_Conditional_2_For_37_For_8_Template(rf, ctx) { if
85
88
  i0.ɵɵadvance(2);
86
89
  i0.ɵɵtextInterpolate(row_r9.v);
87
90
  } }
88
- function PSPipelinesComponent_Conditional_2_For_37_Conditional_9_Template(rf, ctx) { if (rf & 1) {
89
- i0.ɵɵelement(0, "span", 70);
91
+ function PSPipelinesComponent_Conditional_2_For_38_Conditional_9_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelement(0, "span", 72);
90
93
  } }
91
- function PSPipelinesComponent_Conditional_2_For_37_Conditional_10_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelement(0, "span", 71);
94
+ function PSPipelinesComponent_Conditional_2_For_38_Conditional_10_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelement(0, "span", 73);
93
96
  } }
94
- function PSPipelinesComponent_Conditional_2_For_37_Template(rf, ctx) { if (rf & 1) {
97
+ function PSPipelinesComponent_Conditional_2_For_38_Template(rf, ctx) { if (rf & 1) {
95
98
  const _r7 = i0.ɵɵgetCurrentView();
96
- i0.ɵɵelementStart(0, "div", 65);
97
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_For_37_Template_div_click_0_listener() { const node_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectNode(node_r8.id)); });
98
- i0.ɵɵelementStart(1, "div", 66);
99
- i0.ɵɵelement(2, "i", 41);
99
+ i0.ɵɵelementStart(0, "div", 67);
100
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_For_38_Template_div_click_0_listener() { const node_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectNode(node_r8.id)); });
101
+ i0.ɵɵelementStart(1, "div", 68);
102
+ i0.ɵɵelement(2, "i", 42);
100
103
  i0.ɵɵelementStart(3, "span");
101
104
  i0.ɵɵtext(4);
102
105
  i0.ɵɵelementEnd();
103
- i0.ɵɵconditionalCreate(5, PSPipelinesComponent_Conditional_2_For_37_Conditional_5_Template, 2, 1, "span", 67);
106
+ i0.ɵɵconditionalCreate(5, PSPipelinesComponent_Conditional_2_For_38_Conditional_5_Template, 2, 1, "span", 69);
104
107
  i0.ɵɵelementEnd();
105
- i0.ɵɵelementStart(6, "div", 68);
106
- i0.ɵɵrepeaterCreate(7, PSPipelinesComponent_Conditional_2_For_37_For_8_Template, 5, 2, "div", 69, _forTrack3);
108
+ i0.ɵɵelementStart(6, "div", 70);
109
+ i0.ɵɵrepeaterCreate(7, PSPipelinesComponent_Conditional_2_For_38_For_8_Template, 5, 2, "div", 71, _forTrack3);
107
110
  i0.ɵɵelementEnd();
108
- i0.ɵɵconditionalCreate(9, PSPipelinesComponent_Conditional_2_For_37_Conditional_9_Template, 1, 0, "span", 70);
109
- i0.ɵɵconditionalCreate(10, PSPipelinesComponent_Conditional_2_For_37_Conditional_10_Template, 1, 0, "span", 71);
111
+ i0.ɵɵconditionalCreate(9, PSPipelinesComponent_Conditional_2_For_38_Conditional_9_Template, 1, 0, "span", 72);
112
+ i0.ɵɵconditionalCreate(10, PSPipelinesComponent_Conditional_2_For_38_Conditional_10_Template, 1, 0, "span", 73);
110
113
  i0.ɵɵelementEnd();
111
114
  } if (rf & 2) {
112
115
  const node_r8 = ctx.$implicit;
@@ -128,15 +131,15 @@ function PSPipelinesComponent_Conditional_2_For_37_Template(rf, ctx) { if (rf &
128
131
  i0.ɵɵadvance();
129
132
  i0.ɵɵconditional(node_r8.hasOut ? 10 : -1);
130
133
  } }
131
- function PSPipelinesComponent_Conditional_2_Conditional_64_Template(rf, ctx) { if (rf & 1) {
134
+ function PSPipelinesComponent_Conditional_2_Conditional_65_Template(rf, ctx) { if (rf & 1) {
132
135
  const _r10 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "button", 73);
134
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Conditional_64_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.deleteSelected()); });
135
- i0.ɵɵelement(1, "i", 74);
136
+ i0.ɵɵelementStart(0, "button", 75);
137
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Conditional_65_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.deleteSelected()); });
138
+ i0.ɵɵelement(1, "i", 76);
136
139
  i0.ɵɵelementEnd();
137
140
  } }
138
- function PSPipelinesComponent_Conditional_2_Conditional_66_For_5_Template(rf, ctx) { if (rf & 1) {
139
- i0.ɵɵelementStart(0, "option", 75);
141
+ function PSPipelinesComponent_Conditional_2_Conditional_67_For_5_Template(rf, ctx) { if (rf & 1) {
142
+ i0.ɵɵelementStart(0, "option", 77);
140
143
  i0.ɵɵtext(1);
141
144
  i0.ɵɵelementEnd();
142
145
  } if (rf & 2) {
@@ -145,26 +148,26 @@ function PSPipelinesComponent_Conditional_2_Conditional_66_For_5_Template(rf, ct
145
148
  i0.ɵɵadvance();
146
149
  i0.ɵɵtextInterpolate(k_r12);
147
150
  } }
148
- function PSPipelinesComponent_Conditional_2_Conditional_66_Template(rf, ctx) { if (rf & 1) {
151
+ function PSPipelinesComponent_Conditional_2_Conditional_67_Template(rf, ctx) { if (rf & 1) {
149
152
  const _r11 = i0.ɵɵgetCurrentView();
150
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
153
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
151
154
  i0.ɵɵtext(2, "Kind");
152
155
  i0.ɵɵelementEnd();
153
- i0.ɵɵelementStart(3, "select", 53);
154
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_66_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setSourceKind($event.target.value)); });
155
- i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_66_For_5_Template, 2, 2, "option", 75, i0.ɵɵrepeaterTrackByIdentity);
156
+ i0.ɵɵelementStart(3, "select", 54);
157
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_67_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setSourceKind($event.target.value)); });
158
+ i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_67_For_5_Template, 2, 2, "option", 77, i0.ɵɵrepeaterTrackByIdentity);
156
159
  i0.ɵɵelementEnd()();
157
- i0.ɵɵelementStart(6, "div", 49)(7, "label");
160
+ i0.ɵɵelementStart(6, "div", 50)(7, "label");
158
161
  i0.ɵɵtext(8, "Reference (entity / query / id)");
159
162
  i0.ɵɵelementEnd();
160
- i0.ɵɵelementStart(9, "input", 50);
161
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_66_Template_input_input_9_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setSourceRef($event.target.value)); });
163
+ i0.ɵɵelementStart(9, "input", 51);
164
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Template_input_input_9_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setSourceRef($event.target.value)); });
162
165
  i0.ɵɵelementEnd()();
163
- i0.ɵɵelementStart(10, "div", 49)(11, "label");
166
+ i0.ɵɵelementStart(10, "div", 50)(11, "label");
164
167
  i0.ɵɵtext(12, "Alias (optional)");
165
168
  i0.ɵɵelementEnd();
166
- i0.ɵɵelementStart(13, "input", 50);
167
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_66_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setSourceAlias($event.target.value)); });
169
+ i0.ɵɵelementStart(13, "input", 51);
170
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setSourceAlias($event.target.value)); });
168
171
  i0.ɵɵelementEnd()();
169
172
  } if (rf & 2) {
170
173
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -177,8 +180,8 @@ function PSPipelinesComponent_Conditional_2_Conditional_66_Template(rf, ctx) { i
177
180
  i0.ɵɵadvance(4);
178
181
  i0.ɵɵproperty("value", ctx_r1.selectedSource.Alias || "");
179
182
  } }
180
- function PSPipelinesComponent_Conditional_2_Conditional_67_For_5_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementStart(0, "option", 75);
183
+ function PSPipelinesComponent_Conditional_2_Conditional_68_For_5_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "option", 77);
182
185
  i0.ɵɵtext(1);
183
186
  i0.ɵɵelementEnd();
184
187
  } if (rf & 2) {
@@ -187,34 +190,34 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_For_5_Template(rf, ct
187
190
  i0.ɵɵadvance();
188
191
  i0.ɵɵtextInterpolate(k_r14);
189
192
  } }
190
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_10_Template(rf, ctx) { if (rf & 1) {
193
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_10_Template(rf, ctx) { if (rf & 1) {
191
194
  const _r15 = i0.ɵɵgetCurrentView();
192
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
195
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
193
196
  i0.ɵɵtext(2, "Columns (comma-separated)");
194
197
  i0.ɵɵelementEnd();
195
- i0.ɵɵelementStart(3, "input", 50);
196
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_10_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setColumns($event.target.value)); });
198
+ i0.ɵɵelementStart(3, "input", 51);
199
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_10_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setColumns($event.target.value)); });
197
200
  i0.ɵɵelementEnd()();
198
201
  } if (rf & 2) {
199
202
  const ctx_r1 = i0.ɵɵnextContext(3);
200
203
  i0.ɵɵadvance(3);
201
204
  i0.ɵɵproperty("value", ctx_r1.columnsText);
202
205
  } }
203
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_11_Template(rf, ctx) { if (rf & 1) {
206
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_11_Template(rf, ctx) { if (rf & 1) {
204
207
  const _r16 = i0.ɵɵgetCurrentView();
205
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
208
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
206
209
  i0.ɵɵtext(2, "Columns (comma-separated)");
207
210
  i0.ɵɵelementEnd();
208
- i0.ɵɵelementStart(3, "input", 50);
209
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_11_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setColumns($event.target.value)); });
211
+ i0.ɵɵelementStart(3, "input", 51);
212
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_11_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setColumns($event.target.value)); });
210
213
  i0.ɵɵelementEnd()();
211
214
  } if (rf & 2) {
212
215
  const ctx_r1 = i0.ɵɵnextContext(3);
213
216
  i0.ɵɵadvance(3);
214
217
  i0.ɵɵproperty("value", ctx_r1.columnsText);
215
218
  } }
216
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_For_9_Template(rf, ctx) { if (rf & 1) {
217
- i0.ɵɵelementStart(0, "option", 75);
219
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_12_For_9_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelementStart(0, "option", 77);
218
221
  i0.ɵɵtext(1);
219
222
  i0.ɵɵelementEnd();
220
223
  } if (rf & 2) {
@@ -223,20 +226,20 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_For_9_Templat
223
226
  i0.ɵɵadvance();
224
227
  i0.ɵɵtextInterpolate(s_r18);
225
228
  } }
226
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_Template(rf, ctx) { if (rf & 1) {
229
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_12_Template(rf, ctx) { if (rf & 1) {
227
230
  const _r17 = i0.ɵɵgetCurrentView();
228
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
231
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
229
232
  i0.ɵɵtext(2, "Column");
230
233
  i0.ɵɵelementEnd();
231
- i0.ɵɵelementStart(3, "input", 50);
232
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Column", $event.target.value)); });
234
+ i0.ɵɵelementStart(3, "input", 51);
235
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_12_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Column", $event.target.value)); });
233
236
  i0.ɵɵelementEnd()();
234
- i0.ɵɵelementStart(4, "div", 49)(5, "label");
237
+ i0.ɵɵelementStart(4, "div", 50)(5, "label");
235
238
  i0.ɵɵtext(6, "Strategy");
236
239
  i0.ɵɵelementEnd();
237
- i0.ɵɵelementStart(7, "select", 53);
238
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_Template_select_change_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Strategy", $event.target.value)); });
239
- i0.ɵɵrepeaterCreate(8, PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_For_9_Template, 2, 2, "option", 75, i0.ɵɵrepeaterTrackByIdentity);
240
+ i0.ɵɵelementStart(7, "select", 54);
241
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_12_Template_select_change_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Strategy", $event.target.value)); });
242
+ i0.ɵɵrepeaterCreate(8, PSPipelinesComponent_Conditional_2_Conditional_68_Case_12_For_9_Template, 2, 2, "option", 77, i0.ɵɵrepeaterTrackByIdentity);
240
243
  i0.ɵɵelementEnd()();
241
244
  } if (rf & 2) {
242
245
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -247,32 +250,32 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_Template(rf,
247
250
  i0.ɵɵadvance();
248
251
  i0.ɵɵrepeater(ctx_r1.imputeStrategies);
249
252
  } }
250
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_13_Template(rf, ctx) { if (rf & 1) {
253
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_13_Template(rf, ctx) { if (rf & 1) {
251
254
  const _r19 = i0.ɵɵgetCurrentView();
252
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
255
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
253
256
  i0.ɵɵtext(2, "Column");
254
257
  i0.ɵɵelementEnd();
255
- i0.ɵɵelementStart(3, "input", 50);
256
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_13_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Column", $event.target.value)); });
258
+ i0.ɵɵelementStart(3, "input", 51);
259
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_13_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Column", $event.target.value)); });
257
260
  i0.ɵɵelementEnd()();
258
261
  } if (rf & 2) {
259
262
  const ctx_r1 = i0.ɵɵnextContext(3);
260
263
  i0.ɵɵadvance(3);
261
264
  i0.ɵɵproperty("value", ctx_r1.stepField("Column"));
262
265
  } }
263
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_14_Template(rf, ctx) { if (rf & 1) {
266
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_14_Template(rf, ctx) { if (rf & 1) {
264
267
  const _r20 = i0.ɵɵgetCurrentView();
265
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
268
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
266
269
  i0.ɵɵtext(2, "Column");
267
270
  i0.ɵɵelementEnd();
268
- i0.ɵɵelementStart(3, "input", 50);
269
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_14_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Column", $event.target.value)); });
271
+ i0.ɵɵelementStart(3, "input", 51);
272
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_14_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Column", $event.target.value)); });
270
273
  i0.ɵɵelementEnd()();
271
- i0.ɵɵelementStart(4, "div", 49)(5, "label");
274
+ i0.ɵɵelementStart(4, "div", 50)(5, "label");
272
275
  i0.ɵɵtext(6, "Bins");
273
276
  i0.ɵɵelementEnd();
274
- i0.ɵɵelementStart(7, "input", 76);
275
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_14_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepNum("Bins", $event.target.value)); });
277
+ i0.ɵɵelementStart(7, "input", 78);
278
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_14_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepNum("Bins", $event.target.value)); });
276
279
  i0.ɵɵelementEnd()();
277
280
  } if (rf & 2) {
278
281
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -281,25 +284,25 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Case_14_Template(rf,
281
284
  i0.ɵɵadvance(4);
282
285
  i0.ɵɵproperty("value", ctx_r1.stepField("Bins"));
283
286
  } }
284
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_15_Template(rf, ctx) { if (rf & 1) {
287
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_15_Template(rf, ctx) { if (rf & 1) {
285
288
  const _r21 = i0.ɵɵgetCurrentView();
286
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
289
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
287
290
  i0.ɵɵtext(2, "Entity");
288
291
  i0.ɵɵelementEnd();
289
- i0.ɵɵelementStart(3, "input", 50);
290
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_15_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Entity", $event.target.value)); });
292
+ i0.ɵɵelementStart(3, "input", 51);
293
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_15_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("Entity", $event.target.value)); });
291
294
  i0.ɵɵelementEnd()();
292
- i0.ɵɵelementStart(4, "div", 49)(5, "label");
295
+ i0.ɵɵelementStart(4, "div", 50)(5, "label");
293
296
  i0.ɵɵtext(6, "Embedding model ref");
294
297
  i0.ɵɵelementEnd();
295
- i0.ɵɵelementStart(7, "input", 50);
296
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_15_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("EmbeddingModelRef", $event.target.value)); });
298
+ i0.ɵɵelementStart(7, "input", 51);
299
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_15_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("EmbeddingModelRef", $event.target.value)); });
297
300
  i0.ɵɵelementEnd()();
298
- i0.ɵɵelementStart(8, "div", 49)(9, "label");
301
+ i0.ɵɵelementStart(8, "div", 50)(9, "label");
299
302
  i0.ɵɵtext(10, "Dimensions");
300
303
  i0.ɵɵelementEnd();
301
- i0.ɵɵelementStart(11, "input", 76);
302
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_15_Template_input_input_11_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepNum("Dims", $event.target.value)); });
304
+ i0.ɵɵelementStart(11, "input", 78);
305
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_15_Template_input_input_11_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepNum("Dims", $event.target.value)); });
303
306
  i0.ɵɵelementEnd()();
304
307
  } if (rf & 2) {
305
308
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -310,49 +313,49 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Case_15_Template(rf,
310
313
  i0.ɵɵadvance(4);
311
314
  i0.ɵɵproperty("value", ctx_r1.stepField("Dims"));
312
315
  } }
313
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_16_Template(rf, ctx) { if (rf & 1) {
316
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_16_Template(rf, ctx) { if (rf & 1) {
314
317
  const _r22 = i0.ɵɵgetCurrentView();
315
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
318
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
316
319
  i0.ɵɵtext(2, "Feature Pipeline ref");
317
320
  i0.ɵɵelementEnd();
318
- i0.ɵɵelementStart(3, "input", 50);
319
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_16_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("FeaturePipelineRef", $event.target.value)); });
321
+ i0.ɵɵelementStart(3, "input", 51);
322
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_16_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("FeaturePipelineRef", $event.target.value)); });
320
323
  i0.ɵɵelementEnd()();
321
324
  } if (rf & 2) {
322
325
  const ctx_r1 = i0.ɵɵnextContext(3);
323
326
  i0.ɵɵadvance(3);
324
327
  i0.ɵɵproperty("value", ctx_r1.stepField("FeaturePipelineRef"));
325
328
  } }
326
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_17_Template(rf, ctx) { if (rf & 1) {
329
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_17_Template(rf, ctx) { if (rf & 1) {
327
330
  const _r23 = i0.ɵɵgetCurrentView();
328
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
331
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
329
332
  i0.ɵɵtext(2, "Flow Agent ref");
330
333
  i0.ɵɵelementEnd();
331
- i0.ɵɵelementStart(3, "input", 50);
332
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_17_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("FlowAgentRef", $event.target.value)); });
334
+ i0.ɵɵelementStart(3, "input", 51);
335
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_17_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("FlowAgentRef", $event.target.value)); });
333
336
  i0.ɵɵelementEnd()();
334
337
  } if (rf & 2) {
335
338
  const ctx_r1 = i0.ɵɵnextContext(3);
336
339
  i0.ɵɵadvance(3);
337
340
  i0.ɵɵproperty("value", ctx_r1.stepField("FlowAgentRef"));
338
341
  } }
339
- function PSPipelinesComponent_Conditional_2_Conditional_67_Case_18_Template(rf, ctx) { if (rf & 1) {
342
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Case_18_Template(rf, ctx) { if (rf & 1) {
340
343
  const _r24 = i0.ɵɵgetCurrentView();
341
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
344
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
342
345
  i0.ɵɵtext(2, "Image column");
343
346
  i0.ɵɵelementEnd();
344
- i0.ɵɵelementStart(3, "input", 50);
345
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Case_18_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("ImageColumn", $event.target.value)); });
347
+ i0.ɵɵelementStart(3, "input", 51);
348
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Case_18_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.setStepStr("ImageColumn", $event.target.value)); });
346
349
  i0.ɵɵelementEnd()();
347
350
  } if (rf & 2) {
348
351
  const ctx_r1 = i0.ɵɵnextContext(3);
349
352
  i0.ɵɵadvance(3);
350
353
  i0.ɵɵproperty("value", ctx_r1.stepField("ImageColumn"));
351
354
  } }
352
- function PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_For_5_Template(rf, ctx) { if (rf & 1) {
355
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Conditional_19_For_5_Template(rf, ctx) { if (rf & 1) {
353
356
  const _r25 = i0.ɵɵgetCurrentView();
354
- i0.ɵɵelementStart(0, "label", 78)(1, "input", 80);
355
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_For_5_Template_input_change_1_listener() { const s_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleInput(s_r26.Id)); });
357
+ i0.ɵɵelementStart(0, "label", 80)(1, "input", 82);
358
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_68_Conditional_19_For_5_Template_input_change_1_listener() { const s_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleInput(s_r26.Id)); });
356
359
  i0.ɵɵelementEnd();
357
360
  i0.ɵɵtext(2);
358
361
  i0.ɵɵelementEnd();
@@ -364,14 +367,14 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_For_5_
364
367
  i0.ɵɵadvance();
365
368
  i0.ɵɵtextInterpolate1(" ", s_r26.Label || s_r26.Kind);
366
369
  } }
367
- function PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_Template(rf, ctx) { if (rf & 1) {
368
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
370
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Conditional_19_Template(rf, ctx) { if (rf & 1) {
371
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
369
372
  i0.ɵɵtext(2, "Inputs (upstream steps)");
370
373
  i0.ɵɵelementEnd();
371
- i0.ɵɵelementStart(3, "div", 77);
372
- i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_For_5_Template, 3, 2, "label", 78, _forTrack4);
374
+ i0.ɵɵelementStart(3, "div", 79);
375
+ i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_68_Conditional_19_For_5_Template, 3, 2, "label", 80, _forTrack4);
373
376
  i0.ɵɵelementEnd();
374
- i0.ɵɵelementStart(6, "div", 79);
377
+ i0.ɵɵelementStart(6, "div", 81);
375
378
  i0.ɵɵtext(7, "No inputs = a root step fed directly by the sources.");
376
379
  i0.ɵɵelementEnd()();
377
380
  } if (rf & 2) {
@@ -379,23 +382,23 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_Templa
379
382
  i0.ɵɵadvance(4);
380
383
  i0.ɵɵrepeater(ctx_r1.otherSteps);
381
384
  } }
382
- function PSPipelinesComponent_Conditional_2_Conditional_67_Template(rf, ctx) { if (rf & 1) {
385
+ function PSPipelinesComponent_Conditional_2_Conditional_68_Template(rf, ctx) { if (rf & 1) {
383
386
  const _r13 = i0.ɵɵgetCurrentView();
384
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
387
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
385
388
  i0.ɵɵtext(2, "Kind");
386
389
  i0.ɵɵelementEnd();
387
- i0.ɵɵelementStart(3, "select", 53);
388
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_67_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setStepKind($event.target.value)); });
389
- i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_67_For_5_Template, 2, 2, "option", 75, i0.ɵɵrepeaterTrackByIdentity);
390
+ i0.ɵɵelementStart(3, "select", 54);
391
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_68_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setStepKind($event.target.value)); });
392
+ i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_68_For_5_Template, 2, 2, "option", 77, i0.ɵɵrepeaterTrackByIdentity);
390
393
  i0.ɵɵelementEnd()();
391
- i0.ɵɵelementStart(6, "div", 49)(7, "label");
394
+ i0.ɵɵelementStart(6, "div", 50)(7, "label");
392
395
  i0.ɵɵtext(8, "Label");
393
396
  i0.ɵɵelementEnd();
394
- i0.ɵɵelementStart(9, "input", 50);
395
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_67_Template_input_input_9_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setStepLabel($event.target.value)); });
397
+ i0.ɵɵelementStart(9, "input", 51);
398
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Template_input_input_9_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setStepLabel($event.target.value)); });
396
399
  i0.ɵɵelementEnd()();
397
- i0.ɵɵconditionalCreate(10, PSPipelinesComponent_Conditional_2_Conditional_67_Case_10_Template, 4, 1, "div", 49)(11, PSPipelinesComponent_Conditional_2_Conditional_67_Case_11_Template, 4, 1, "div", 49)(12, PSPipelinesComponent_Conditional_2_Conditional_67_Case_12_Template, 10, 2)(13, PSPipelinesComponent_Conditional_2_Conditional_67_Case_13_Template, 4, 1, "div", 49)(14, PSPipelinesComponent_Conditional_2_Conditional_67_Case_14_Template, 8, 2)(15, PSPipelinesComponent_Conditional_2_Conditional_67_Case_15_Template, 12, 3)(16, PSPipelinesComponent_Conditional_2_Conditional_67_Case_16_Template, 4, 1, "div", 49)(17, PSPipelinesComponent_Conditional_2_Conditional_67_Case_17_Template, 4, 1, "div", 49)(18, PSPipelinesComponent_Conditional_2_Conditional_67_Case_18_Template, 4, 1, "div", 49);
398
- i0.ɵɵconditionalCreate(19, PSPipelinesComponent_Conditional_2_Conditional_67_Conditional_19_Template, 8, 0, "div", 49);
400
+ i0.ɵɵconditionalCreate(10, PSPipelinesComponent_Conditional_2_Conditional_68_Case_10_Template, 4, 1, "div", 50)(11, PSPipelinesComponent_Conditional_2_Conditional_68_Case_11_Template, 4, 1, "div", 50)(12, PSPipelinesComponent_Conditional_2_Conditional_68_Case_12_Template, 10, 2)(13, PSPipelinesComponent_Conditional_2_Conditional_68_Case_13_Template, 4, 1, "div", 50)(14, PSPipelinesComponent_Conditional_2_Conditional_68_Case_14_Template, 8, 2)(15, PSPipelinesComponent_Conditional_2_Conditional_68_Case_15_Template, 12, 3)(16, PSPipelinesComponent_Conditional_2_Conditional_68_Case_16_Template, 4, 1, "div", 50)(17, PSPipelinesComponent_Conditional_2_Conditional_68_Case_17_Template, 4, 1, "div", 50)(18, PSPipelinesComponent_Conditional_2_Conditional_68_Case_18_Template, 4, 1, "div", 50);
401
+ i0.ɵɵconditionalCreate(19, PSPipelinesComponent_Conditional_2_Conditional_68_Conditional_19_Template, 8, 0, "div", 50);
399
402
  } if (rf & 2) {
400
403
  let tmp_5_0;
401
404
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -410,8 +413,8 @@ function PSPipelinesComponent_Conditional_2_Conditional_67_Template(rf, ctx) { i
410
413
  i0.ɵɵadvance(9);
411
414
  i0.ɵɵconditional(ctx_r1.otherSteps.length > 0 ? 19 : -1);
412
415
  } }
413
- function PSPipelinesComponent_Conditional_2_Conditional_68_For_9_Template(rf, ctx) { if (rf & 1) {
414
- i0.ɵɵelementStart(0, "option", 75);
416
+ function PSPipelinesComponent_Conditional_2_Conditional_69_For_9_Template(rf, ctx) { if (rf & 1) {
417
+ i0.ɵɵelementStart(0, "option", 77);
415
418
  i0.ɵɵtext(1);
416
419
  i0.ɵɵelementEnd();
417
420
  } if (rf & 2) {
@@ -420,20 +423,20 @@ function PSPipelinesComponent_Conditional_2_Conditional_68_For_9_Template(rf, ct
420
423
  i0.ɵɵadvance();
421
424
  i0.ɵɵtextInterpolate(pt_r28);
422
425
  } }
423
- function PSPipelinesComponent_Conditional_2_Conditional_68_Template(rf, ctx) { if (rf & 1) {
426
+ function PSPipelinesComponent_Conditional_2_Conditional_69_Template(rf, ctx) { if (rf & 1) {
424
427
  const _r27 = i0.ɵɵgetCurrentView();
425
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
428
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
426
429
  i0.ɵɵtext(2, "Target variable");
427
430
  i0.ɵɵelementEnd();
428
- i0.ɵɵelementStart(3, "input", 50);
429
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_68_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setTargetVariable($event.target.value)); });
431
+ i0.ɵɵelementStart(3, "input", 51);
432
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_69_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setTargetVariable($event.target.value)); });
430
433
  i0.ɵɵelementEnd()();
431
- i0.ɵɵelementStart(4, "div", 49)(5, "label");
434
+ i0.ɵɵelementStart(4, "div", 50)(5, "label");
432
435
  i0.ɵɵtext(6, "Problem type");
433
436
  i0.ɵɵelementEnd();
434
- i0.ɵɵelementStart(7, "select", 53);
435
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_68_Template_select_change_7_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setProblemType($event.target.value)); });
436
- i0.ɵɵrepeaterCreate(8, PSPipelinesComponent_Conditional_2_Conditional_68_For_9_Template, 2, 2, "option", 75, i0.ɵɵrepeaterTrackByIdentity);
437
+ i0.ɵɵelementStart(7, "select", 54);
438
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_69_Template_select_change_7_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setProblemType($event.target.value)); });
439
+ i0.ɵɵrepeaterCreate(8, PSPipelinesComponent_Conditional_2_Conditional_69_For_9_Template, 2, 2, "option", 77, i0.ɵɵrepeaterTrackByIdentity);
437
440
  i0.ɵɵelementEnd()();
438
441
  } if (rf & 2) {
439
442
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -444,8 +447,8 @@ function PSPipelinesComponent_Conditional_2_Conditional_68_Template(rf, ctx) { i
444
447
  i0.ɵɵadvance();
445
448
  i0.ɵɵrepeater(ctx_r1.problemTypes);
446
449
  } }
447
- function PSPipelinesComponent_Conditional_2_Conditional_69_For_5_Template(rf, ctx) { if (rf & 1) {
448
- i0.ɵɵelementStart(0, "option", 75);
450
+ function PSPipelinesComponent_Conditional_2_Conditional_70_For_5_Template(rf, ctx) { if (rf & 1) {
451
+ i0.ɵɵelementStart(0, "option", 77);
449
452
  i0.ɵɵtext(1);
450
453
  i0.ɵɵelementEnd();
451
454
  } if (rf & 2) {
@@ -454,20 +457,20 @@ function PSPipelinesComponent_Conditional_2_Conditional_69_For_5_Template(rf, ct
454
457
  i0.ɵɵadvance();
455
458
  i0.ɵɵtextInterpolate(a_r30.Name);
456
459
  } }
457
- function PSPipelinesComponent_Conditional_2_Conditional_69_Template(rf, ctx) { if (rf & 1) {
460
+ function PSPipelinesComponent_Conditional_2_Conditional_70_Template(rf, ctx) { if (rf & 1) {
458
461
  const _r29 = i0.ɵɵgetCurrentView();
459
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
462
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
460
463
  i0.ɵɵtext(2, "Algorithm");
461
464
  i0.ɵɵelementEnd();
462
- i0.ɵɵelementStart(3, "select", 53);
463
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_69_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setAlgorithm($event.target.value)); });
464
- i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_69_For_5_Template, 2, 2, "option", 75, _forTrack0);
465
+ i0.ɵɵelementStart(3, "select", 54);
466
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Conditional_70_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setAlgorithm($event.target.value)); });
467
+ i0.ɵɵrepeaterCreate(4, PSPipelinesComponent_Conditional_2_Conditional_70_For_5_Template, 2, 2, "option", 77, _forTrack0);
465
468
  i0.ɵɵelementEnd()();
466
- i0.ɵɵelementStart(6, "div", 49)(7, "label");
469
+ i0.ɵɵelementStart(6, "div", 50)(7, "label");
467
470
  i0.ɵɵtext(8, "Hyperparameters (JSON)");
468
471
  i0.ɵɵelementEnd();
469
- i0.ɵɵelementStart(9, "textarea", 81);
470
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_69_Template_textarea_input_9_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setHyperparams($event.target.value)); });
472
+ i0.ɵɵelementStart(9, "textarea", 83);
473
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_70_Template_textarea_input_9_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setHyperparams($event.target.value)); });
471
474
  i0.ɵɵelementEnd()();
472
475
  } if (rf & 2) {
473
476
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -478,8 +481,8 @@ function PSPipelinesComponent_Conditional_2_Conditional_69_Template(rf, ctx) { i
478
481
  i0.ɵɵadvance(5);
479
482
  i0.ɵɵproperty("value", ctx_r1.editHyperparams);
480
483
  } }
481
- function PSPipelinesComponent_Conditional_2_Conditional_70_Template(rf, ctx) { if (rf & 1) {
482
- i0.ɵɵelementStart(0, "div", 26);
484
+ function PSPipelinesComponent_Conditional_2_Conditional_71_Template(rf, ctx) { if (rf & 1) {
485
+ i0.ɵɵelementStart(0, "div", 27);
483
486
  i0.ɵɵtext(1, "The trained model artifact. Run ");
484
487
  i0.ɵɵelementStart(2, "strong");
485
488
  i0.ɵɵtext(3, "Train");
@@ -487,52 +490,52 @@ function PSPipelinesComponent_Conditional_2_Conditional_70_Template(rf, ctx) { i
487
490
  i0.ɵɵtext(4, " to produce a new versioned model from this pipeline.");
488
491
  i0.ɵɵelementEnd();
489
492
  } }
490
- function PSPipelinesComponent_Conditional_2_Conditional_101_Template(rf, ctx) { if (rf & 1) {
493
+ function PSPipelinesComponent_Conditional_2_Conditional_102_Template(rf, ctx) { if (rf & 1) {
491
494
  const _r31 = i0.ɵɵgetCurrentView();
492
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
495
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
493
496
  i0.ɵɵtext(2, "Decision-date column");
494
497
  i0.ɵɵelementEnd();
495
- i0.ɵɵelementStart(3, "input", 50);
496
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_101_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setAsOfColumn($event.target.value)); });
498
+ i0.ɵɵelementStart(3, "input", 51);
499
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_102_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setAsOfColumn($event.target.value)); });
497
500
  i0.ɵɵelementEnd()();
498
501
  } if (rf & 2) {
499
502
  const ctx_r1 = i0.ɵɵnextContext(2);
500
503
  i0.ɵɵadvance(3);
501
504
  i0.ɵɵproperty("value", ctx_r1.editAsOf.Column || "");
502
505
  } }
503
- function PSPipelinesComponent_Conditional_2_Conditional_102_Template(rf, ctx) { if (rf & 1) {
506
+ function PSPipelinesComponent_Conditional_2_Conditional_103_Template(rf, ctx) { if (rf & 1) {
504
507
  const _r32 = i0.ɵɵgetCurrentView();
505
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
508
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
506
509
  i0.ɵɵtext(2, "Offset days before label");
507
510
  i0.ɵɵelementEnd();
508
- i0.ɵɵelementStart(3, "input", 76);
509
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_102_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setAsOfOffset($event.target.value)); });
511
+ i0.ɵɵelementStart(3, "input", 78);
512
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_103_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setAsOfOffset($event.target.value)); });
510
513
  i0.ɵɵelementEnd()();
511
514
  } if (rf & 2) {
512
515
  const ctx_r1 = i0.ɵɵnextContext(2);
513
516
  i0.ɵɵadvance(3);
514
517
  i0.ɵɵproperty("value", ctx_r1.editAsOf.OffsetDays ?? 0);
515
518
  } }
516
- function PSPipelinesComponent_Conditional_2_Conditional_119_Template(rf, ctx) { if (rf & 1) {
519
+ function PSPipelinesComponent_Conditional_2_Conditional_120_Template(rf, ctx) { if (rf & 1) {
517
520
  const _r33 = i0.ɵɵgetCurrentView();
518
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
521
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
519
522
  i0.ɵɵtext(2, "Test size");
520
523
  i0.ɵɵelementEnd();
521
- i0.ɵɵelementStart(3, "input", 61);
522
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_119_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setTestSize($event.target.value)); });
524
+ i0.ɵɵelementStart(3, "input", 62);
525
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_120_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setTestSize($event.target.value)); });
523
526
  i0.ɵɵelementEnd()();
524
527
  } if (rf & 2) {
525
528
  const ctx_r1 = i0.ɵɵnextContext(2);
526
529
  i0.ɵɵadvance(3);
527
530
  i0.ɵɵproperty("value", ctx_r1.editValidation.TestSize ?? 0.2);
528
531
  } }
529
- function PSPipelinesComponent_Conditional_2_Conditional_120_Template(rf, ctx) { if (rf & 1) {
532
+ function PSPipelinesComponent_Conditional_2_Conditional_121_Template(rf, ctx) { if (rf & 1) {
530
533
  const _r34 = i0.ɵɵgetCurrentView();
531
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
534
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
532
535
  i0.ɵɵtext(2, "Folds (k)");
533
536
  i0.ɵɵelementEnd();
534
- i0.ɵɵelementStart(3, "input", 76);
535
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_120_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setK($event.target.value)); });
537
+ i0.ɵɵelementStart(3, "input", 78);
538
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Conditional_121_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setK($event.target.value)); });
536
539
  i0.ɵɵelementEnd()();
537
540
  } if (rf & 2) {
538
541
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -542,171 +545,173 @@ function PSPipelinesComponent_Conditional_2_Conditional_120_Template(rf, ctx) {
542
545
  function PSPipelinesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
543
546
  const _r3 = i0.ɵɵgetCurrentView();
544
547
  i0.ɵɵelementStart(0, "div", 6);
545
- i0.ɵɵrepeaterCreate(1, PSPipelinesComponent_Conditional_2_For_2_Template, 5, 6, "button", 7, _forTrack0);
546
- i0.ɵɵelement(3, "span", 8);
547
- i0.ɵɵconditionalCreate(4, PSPipelinesComponent_Conditional_2_Conditional_4_Template, 3, 0, "span", 9);
548
- i0.ɵɵelementStart(5, "button", 10);
549
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.save()); });
550
- i0.ɵɵelement(6, "i", 11);
551
- i0.ɵɵtext(7, " Save ");
552
- i0.ɵɵelementEnd();
553
- i0.ɵɵelementStart(8, "button", 12);
554
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.validate()); });
555
- i0.ɵɵelement(9, "i", 13);
556
- i0.ɵɵtext(10, " Validate ");
557
- i0.ɵɵelementEnd();
558
- i0.ɵɵelementStart(11, "button", 14);
559
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.train()); });
560
- i0.ɵɵelement(12, "i", 15);
561
- i0.ɵɵtext(13, " Train ");
562
- i0.ɵɵelementEnd();
563
- i0.ɵɵelementStart(14, "button", 16);
564
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refine()); });
565
- i0.ɵɵelement(15, "i", 17);
566
- i0.ɵɵtext(16, " Agent ");
567
- i0.ɵɵelementEnd()();
568
- i0.ɵɵelementStart(17, "div", 18)(18, "div", 19)(19, "div", 20)(20, "span", 21);
569
- i0.ɵɵtext(21, "Add:");
570
- i0.ɵɵelementEnd();
571
- i0.ɵɵelementStart(22, "button", 22);
572
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addSource()); });
573
- i0.ɵɵelement(23, "i", 23);
574
- i0.ɵɵtext(24, " Source");
575
- i0.ɵɵelementEnd();
576
- i0.ɵɵelementStart(25, "button", 24);
577
- i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addStep()); });
578
- i0.ɵɵelement(26, "i", 25);
579
- i0.ɵɵtext(27, " Feature step");
580
- i0.ɵɵelementEnd();
581
- i0.ɵɵelement(28, "span", 8);
582
- i0.ɵɵelementStart(29, "span", 26);
583
- i0.ɵɵelement(30, "i", 27);
584
- i0.ɵɵtext(31);
548
+ i0.ɵɵrepeaterCreate(1, PSPipelinesComponent_Conditional_2_For_2_Template, 6, 7, "button", 7, _forTrack0);
549
+ i0.ɵɵelementEnd();
550
+ i0.ɵɵelementStart(3, "div", 8)(4, "button", 9);
551
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.save()); });
552
+ i0.ɵɵelement(5, "i", 10);
553
+ i0.ɵɵtext(6, " Save ");
554
+ i0.ɵɵelementEnd();
555
+ i0.ɵɵelementStart(7, "button", 11);
556
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.validate()); });
557
+ i0.ɵɵelement(8, "i", 12);
558
+ i0.ɵɵtext(9, " Validate ");
559
+ i0.ɵɵelementEnd();
560
+ i0.ɵɵelementStart(10, "button", 13);
561
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.train()); });
562
+ i0.ɵɵelement(11, "i", 14);
563
+ i0.ɵɵtext(12, " Train ");
564
+ i0.ɵɵelementEnd();
565
+ i0.ɵɵelementStart(13, "button", 15);
566
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refine()); });
567
+ i0.ɵɵelement(14, "i", 16);
568
+ i0.ɵɵtext(15, " Agent ");
569
+ i0.ɵɵelementEnd();
570
+ i0.ɵɵelement(16, "span", 17);
571
+ i0.ɵɵconditionalCreate(17, PSPipelinesComponent_Conditional_2_Conditional_17_Template, 3, 0, "span", 18);
572
+ i0.ɵɵelementEnd();
573
+ i0.ɵɵelementStart(18, "div", 19)(19, "div", 20)(20, "div", 21)(21, "span", 22);
574
+ i0.ɵɵtext(22, "Add:");
575
+ i0.ɵɵelementEnd();
576
+ i0.ɵɵelementStart(23, "button", 23);
577
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addSource()); });
578
+ i0.ɵɵelement(24, "i", 24);
579
+ i0.ɵɵtext(25, " Source");
580
+ i0.ɵɵelementEnd();
581
+ i0.ɵɵelementStart(26, "button", 25);
582
+ i0.ɵɵlistener("click", function PSPipelinesComponent_Conditional_2_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addStep()); });
583
+ i0.ɵɵelement(27, "i", 26);
584
+ i0.ɵɵtext(28, " Feature step");
585
+ i0.ɵɵelementEnd();
586
+ i0.ɵɵelement(29, "span", 17);
587
+ i0.ɵɵelementStart(30, "span", 27);
588
+ i0.ɵɵelement(31, "i", 28);
589
+ i0.ɵɵtext(32);
585
590
  i0.ɵɵelementEnd()();
586
- i0.ɵɵelementStart(32, "div", 28);
591
+ i0.ɵɵelementStart(33, "div", 29);
587
592
  i0.ɵɵnamespaceSVG();
588
- i0.ɵɵelementStart(33, "svg", 29);
589
- i0.ɵɵrepeaterCreate(34, PSPipelinesComponent_Conditional_2_For_35_Template, 1, 1, ":svg:path", null, _forTrack1);
593
+ i0.ɵɵelementStart(34, "svg", 30);
594
+ i0.ɵɵrepeaterCreate(35, PSPipelinesComponent_Conditional_2_For_36_Template, 1, 1, ":svg:path", null, _forTrack1);
590
595
  i0.ɵɵelementEnd();
591
- i0.ɵɵrepeaterCreate(36, PSPipelinesComponent_Conditional_2_For_37_Template, 11, 13, "div", 30, _forTrack2);
596
+ i0.ɵɵrepeaterCreate(37, PSPipelinesComponent_Conditional_2_For_38_Template, 11, 13, "div", 31, _forTrack2);
592
597
  i0.ɵɵelementEnd();
593
598
  i0.ɵɵnamespaceHTML();
594
- i0.ɵɵelementStart(38, "div", 31)(39, "div", 32)(40, "span");
595
- i0.ɵɵelement(41, "i", 33);
596
- i0.ɵɵtext(42, " Source");
599
+ i0.ɵɵelementStart(39, "div", 32)(40, "div", 33)(41, "span");
600
+ i0.ɵɵelement(42, "i", 34);
601
+ i0.ɵɵtext(43, " Source");
597
602
  i0.ɵɵelementEnd();
598
- i0.ɵɵelementStart(43, "span");
599
- i0.ɵɵelement(44, "i", 34);
600
- i0.ɵɵtext(45, " Feature");
603
+ i0.ɵɵelementStart(44, "span");
604
+ i0.ɵɵelement(45, "i", 35);
605
+ i0.ɵɵtext(46, " Feature");
601
606
  i0.ɵɵelementEnd();
602
- i0.ɵɵelementStart(46, "span");
603
- i0.ɵɵelement(47, "i", 35);
604
- i0.ɵɵtext(48, " Embedding");
607
+ i0.ɵɵelementStart(47, "span");
608
+ i0.ɵɵelement(48, "i", 36);
609
+ i0.ɵɵtext(49, " Embedding");
605
610
  i0.ɵɵelementEnd();
606
- i0.ɵɵelementStart(49, "span");
607
- i0.ɵɵelement(50, "i", 36);
608
- i0.ɵɵtext(51, " Target");
611
+ i0.ɵɵelementStart(50, "span");
612
+ i0.ɵɵelement(51, "i", 37);
613
+ i0.ɵɵtext(52, " Target");
609
614
  i0.ɵɵelementEnd();
610
- i0.ɵɵelementStart(52, "span");
611
- i0.ɵɵelement(53, "i", 37);
612
- i0.ɵɵtext(54, " Algorithm");
615
+ i0.ɵɵelementStart(53, "span");
616
+ i0.ɵɵelement(54, "i", 38);
617
+ i0.ɵɵtext(55, " Algorithm");
613
618
  i0.ɵɵelementEnd()()()();
614
- i0.ɵɵelementStart(55, "div", 38)(56, "div", 39)(57, "div", 40);
615
- i0.ɵɵelement(58, "i", 41);
616
- i0.ɵɵelementStart(59, "div", 42)(60, "h3", 43);
617
- i0.ɵɵtext(61);
619
+ i0.ɵɵelementStart(56, "div", 39)(57, "div", 40)(58, "div", 41);
620
+ i0.ɵɵelement(59, "i", 42);
621
+ i0.ɵɵelementStart(60, "div", 43)(61, "h3", 44);
622
+ i0.ɵɵtext(62);
618
623
  i0.ɵɵelementEnd();
619
- i0.ɵɵelementStart(62, "div", 26);
620
- i0.ɵɵtext(63);
624
+ i0.ɵɵelementStart(63, "div", 27);
625
+ i0.ɵɵtext(64);
621
626
  i0.ɵɵelementEnd()();
622
- i0.ɵɵconditionalCreate(64, PSPipelinesComponent_Conditional_2_Conditional_64_Template, 2, 0, "button", 44);
627
+ i0.ɵɵconditionalCreate(65, PSPipelinesComponent_Conditional_2_Conditional_65_Template, 2, 0, "button", 45);
623
628
  i0.ɵɵelementEnd();
624
- i0.ɵɵelementStart(65, "div", 45);
625
- i0.ɵɵconditionalCreate(66, PSPipelinesComponent_Conditional_2_Conditional_66_Template, 14, 3);
626
- i0.ɵɵconditionalCreate(67, PSPipelinesComponent_Conditional_2_Conditional_67_Template, 20, 4);
627
- i0.ɵɵconditionalCreate(68, PSPipelinesComponent_Conditional_2_Conditional_68_Template, 10, 2);
629
+ i0.ɵɵelementStart(66, "div", 46);
630
+ i0.ɵɵconditionalCreate(67, PSPipelinesComponent_Conditional_2_Conditional_67_Template, 14, 3);
631
+ i0.ɵɵconditionalCreate(68, PSPipelinesComponent_Conditional_2_Conditional_68_Template, 20, 4);
628
632
  i0.ɵɵconditionalCreate(69, PSPipelinesComponent_Conditional_2_Conditional_69_Template, 10, 2);
629
- i0.ɵɵconditionalCreate(70, PSPipelinesComponent_Conditional_2_Conditional_70_Template, 5, 0, "div", 26);
633
+ i0.ɵɵconditionalCreate(70, PSPipelinesComponent_Conditional_2_Conditional_70_Template, 10, 2);
634
+ i0.ɵɵconditionalCreate(71, PSPipelinesComponent_Conditional_2_Conditional_71_Template, 5, 0, "div", 27);
630
635
  i0.ɵɵelementEnd()();
631
- i0.ɵɵelementStart(71, "div", 46)(72, "div", 47);
632
- i0.ɵɵelement(73, "i", 48);
633
- i0.ɵɵelementStart(74, "h3");
634
- i0.ɵɵtext(75, "Leakage guard");
636
+ i0.ɵɵelementStart(72, "div", 47)(73, "div", 48);
637
+ i0.ɵɵelement(74, "i", 49);
638
+ i0.ɵɵelementStart(75, "h3");
639
+ i0.ɵɵtext(76, "Leakage guard");
635
640
  i0.ɵɵelementEnd()();
636
- i0.ɵɵelementStart(76, "div", 45)(77, "div", 49)(78, "label");
637
- i0.ɵɵtext(79, "Deny-list columns (comma-separated)");
641
+ i0.ɵɵelementStart(77, "div", 46)(78, "div", 50)(79, "label");
642
+ i0.ɵɵtext(80, "Deny-list columns (comma-separated)");
638
643
  i0.ɵɵelementEnd();
639
- i0.ɵɵelementStart(80, "input", 50);
640
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Template_input_input_80_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setDeny($event.target.value)); });
644
+ i0.ɵɵelementStart(81, "input", 51);
645
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Template_input_input_81_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setDeny($event.target.value)); });
641
646
  i0.ɵɵelementEnd()();
642
- i0.ɵɵelementStart(81, "div", 49)(82, "label");
643
- i0.ɵɵtext(83, "Single-feature dominance threshold");
647
+ i0.ɵɵelementStart(82, "div", 50)(83, "label");
648
+ i0.ɵɵtext(84, "Single-feature dominance threshold");
644
649
  i0.ɵɵelementEnd();
645
- i0.ɵɵelementStart(84, "input", 51);
646
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Template_input_input_84_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setThreshold($event.target.value)); });
650
+ i0.ɵɵelementStart(85, "input", 52);
651
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Template_input_input_85_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setThreshold($event.target.value)); });
647
652
  i0.ɵɵelementEnd()()()();
648
- i0.ɵɵelementStart(85, "div", 46)(86, "div", 47);
649
- i0.ɵɵelement(87, "i", 52);
650
- i0.ɵɵelementStart(88, "h3");
651
- i0.ɵɵtext(89, "As-of strategy");
653
+ i0.ɵɵelementStart(86, "div", 47)(87, "div", 48);
654
+ i0.ɵɵelement(88, "i", 53);
655
+ i0.ɵɵelementStart(89, "h3");
656
+ i0.ɵɵtext(90, "As-of strategy");
652
657
  i0.ɵɵelementEnd()();
653
- i0.ɵɵelementStart(90, "div", 45)(91, "div", 49)(92, "label");
654
- i0.ɵɵtext(93, "Mode");
658
+ i0.ɵɵelementStart(91, "div", 46)(92, "div", 50)(93, "label");
659
+ i0.ɵɵtext(94, "Mode");
655
660
  i0.ɵɵelementEnd();
656
- i0.ɵɵelementStart(94, "select", 53);
657
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Template_select_change_94_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setAsOfMode($event.target.value)); });
658
- i0.ɵɵelementStart(95, "option", 54);
659
- i0.ɵɵtext(96, "none");
661
+ i0.ɵɵelementStart(95, "select", 54);
662
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Template_select_change_95_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setAsOfMode($event.target.value)); });
663
+ i0.ɵɵelementStart(96, "option", 55);
664
+ i0.ɵɵtext(97, "none");
660
665
  i0.ɵɵelementEnd();
661
- i0.ɵɵelementStart(97, "option", 55);
662
- i0.ɵɵtext(98, "column");
666
+ i0.ɵɵelementStart(98, "option", 56);
667
+ i0.ɵɵtext(99, "column");
663
668
  i0.ɵɵelementEnd();
664
- i0.ɵɵelementStart(99, "option", 56);
665
- i0.ɵɵtext(100, "offset");
669
+ i0.ɵɵelementStart(100, "option", 57);
670
+ i0.ɵɵtext(101, "offset");
666
671
  i0.ɵɵelementEnd()()();
667
- i0.ɵɵconditionalCreate(101, PSPipelinesComponent_Conditional_2_Conditional_101_Template, 4, 1, "div", 49);
668
- i0.ɵɵconditionalCreate(102, PSPipelinesComponent_Conditional_2_Conditional_102_Template, 4, 1, "div", 49);
672
+ i0.ɵɵconditionalCreate(102, PSPipelinesComponent_Conditional_2_Conditional_102_Template, 4, 1, "div", 50);
673
+ i0.ɵɵconditionalCreate(103, PSPipelinesComponent_Conditional_2_Conditional_103_Template, 4, 1, "div", 50);
669
674
  i0.ɵɵelementEnd()();
670
- i0.ɵɵelementStart(103, "div", 46)(104, "div", 47);
671
- i0.ɵɵelement(105, "i", 57);
672
- i0.ɵɵelementStart(106, "h3");
673
- i0.ɵɵtext(107, "Validation");
675
+ i0.ɵɵelementStart(104, "div", 47)(105, "div", 48);
676
+ i0.ɵɵelement(106, "i", 58);
677
+ i0.ɵɵelementStart(107, "h3");
678
+ i0.ɵɵtext(108, "Validation");
674
679
  i0.ɵɵelementEnd()();
675
- i0.ɵɵelementStart(108, "div", 45)(109, "div", 49)(110, "label");
676
- i0.ɵɵtext(111, "Strategy");
680
+ i0.ɵɵelementStart(109, "div", 46)(110, "div", 50)(111, "label");
681
+ i0.ɵɵtext(112, "Strategy");
677
682
  i0.ɵɵelementEnd();
678
- i0.ɵɵelementStart(112, "select", 53);
679
- i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Template_select_change_112_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setValStrategy($event.target.value)); });
680
- i0.ɵɵelementStart(113, "option", 58);
681
- i0.ɵɵtext(114, "train_test_split");
683
+ i0.ɵɵelementStart(113, "select", 54);
684
+ i0.ɵɵlistener("change", function PSPipelinesComponent_Conditional_2_Template_select_change_113_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setValStrategy($event.target.value)); });
685
+ i0.ɵɵelementStart(114, "option", 59);
686
+ i0.ɵɵtext(115, "train_test_split");
682
687
  i0.ɵɵelementEnd();
683
- i0.ɵɵelementStart(115, "option", 59);
684
- i0.ɵɵtext(116, "kfold");
688
+ i0.ɵɵelementStart(116, "option", 60);
689
+ i0.ɵɵtext(117, "kfold");
685
690
  i0.ɵɵelementEnd();
686
- i0.ɵɵelementStart(117, "option", 60);
687
- i0.ɵɵtext(118, "holdout");
691
+ i0.ɵɵelementStart(118, "option", 61);
692
+ i0.ɵɵtext(119, "holdout");
688
693
  i0.ɵɵelementEnd()()();
689
- i0.ɵɵconditionalCreate(119, PSPipelinesComponent_Conditional_2_Conditional_119_Template, 4, 1, "div", 49);
690
- i0.ɵɵconditionalCreate(120, PSPipelinesComponent_Conditional_2_Conditional_120_Template, 4, 1, "div", 49);
691
- i0.ɵɵelementStart(121, "div", 49)(122, "label");
692
- i0.ɵɵtext(123, "Locked holdout fraction");
694
+ i0.ɵɵconditionalCreate(120, PSPipelinesComponent_Conditional_2_Conditional_120_Template, 4, 1, "div", 50);
695
+ i0.ɵɵconditionalCreate(121, PSPipelinesComponent_Conditional_2_Conditional_121_Template, 4, 1, "div", 50);
696
+ i0.ɵɵelementStart(122, "div", 50)(123, "label");
697
+ i0.ɵɵtext(124, "Locked holdout fraction");
693
698
  i0.ɵɵelementEnd();
694
- i0.ɵɵelementStart(124, "input", 61);
695
- i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Template_input_input_124_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setHoldout($event.target.value)); });
699
+ i0.ɵɵelementStart(125, "input", 62);
700
+ i0.ɵɵlistener("input", function PSPipelinesComponent_Conditional_2_Template_input_input_125_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setHoldout($event.target.value)); });
696
701
  i0.ɵɵelementEnd()()()()()();
697
702
  } if (rf & 2) {
698
703
  const ctx_r1 = i0.ɵɵnextContext();
699
704
  i0.ɵɵadvance();
700
705
  i0.ɵɵrepeater(ctx_r1.pipelines);
701
706
  i0.ɵɵadvance(3);
702
- i0.ɵɵconditional(ctx_r1.dirty ? 4 : -1);
703
- i0.ɵɵadvance();
704
707
  i0.ɵɵproperty("disabled", !ctx_r1.dirty || ctx_r1.busy);
705
708
  i0.ɵɵadvance(3);
706
709
  i0.ɵɵproperty("disabled", ctx_r1.busy);
707
710
  i0.ɵɵadvance(3);
708
711
  i0.ɵɵproperty("disabled", ctx_r1.busy || ctx_r1.dirty);
709
- i0.ɵɵadvance(20);
712
+ i0.ɵɵadvance(7);
713
+ i0.ɵɵconditional(ctx_r1.dirty ? 17 : -1);
714
+ i0.ɵɵadvance(15);
710
715
  i0.ɵɵtextInterpolate2(" ", ctx_r1.nodes.length, " nodes \u00B7 ", ctx_r1.edges.length, " edges");
711
716
  i0.ɵɵadvance();
712
717
  i0.ɵɵstyleProp("width", ctx_r1.canvasW, "px")("height", ctx_r1.canvasH, "px");
@@ -724,17 +729,17 @@ function PSPipelinesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
724
729
  i0.ɵɵadvance(2);
725
730
  i0.ɵɵtextInterpolate1("", ctx_r1.nodeTypeLabel(ctx_r1.selectedNode.type), " \u00B7 selected");
726
731
  i0.ɵɵadvance();
727
- i0.ɵɵconditional(ctx_r1.selectedNode.type === "src" || ctx_r1.selectedNode.type === "feat" || ctx_r1.selectedNode.type === "emb" ? 64 : -1);
732
+ i0.ɵɵconditional(ctx_r1.selectedNode.type === "src" || ctx_r1.selectedNode.type === "feat" || ctx_r1.selectedNode.type === "emb" ? 65 : -1);
728
733
  i0.ɵɵadvance(2);
729
- i0.ɵɵconditional(ctx_r1.selectedSource ? 66 : -1);
734
+ i0.ɵɵconditional(ctx_r1.selectedSource ? 67 : -1);
730
735
  i0.ɵɵadvance();
731
- i0.ɵɵconditional(ctx_r1.selectedStep ? 67 : -1);
736
+ i0.ɵɵconditional(ctx_r1.selectedStep ? 68 : -1);
732
737
  i0.ɵɵadvance();
733
- i0.ɵɵconditional(ctx_r1.selectedNode.type === "target" ? 68 : -1);
738
+ i0.ɵɵconditional(ctx_r1.selectedNode.type === "target" ? 69 : -1);
734
739
  i0.ɵɵadvance();
735
- i0.ɵɵconditional(ctx_r1.selectedNode.type === "algo" ? 69 : -1);
740
+ i0.ɵɵconditional(ctx_r1.selectedNode.type === "algo" ? 70 : -1);
736
741
  i0.ɵɵadvance();
737
- i0.ɵɵconditional(ctx_r1.selectedNode.type === "output" ? 70 : -1);
742
+ i0.ɵɵconditional(ctx_r1.selectedNode.type === "output" ? 71 : -1);
738
743
  i0.ɵɵadvance(10);
739
744
  i0.ɵɵproperty("value", ctx_r1.denyText);
740
745
  i0.ɵɵadvance(4);
@@ -742,15 +747,15 @@ function PSPipelinesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
742
747
  i0.ɵɵadvance(10);
743
748
  i0.ɵɵproperty("value", ctx_r1.editAsOf.Mode);
744
749
  i0.ɵɵadvance(7);
745
- i0.ɵɵconditional(ctx_r1.editAsOf.Mode === "column" ? 101 : -1);
750
+ i0.ɵɵconditional(ctx_r1.editAsOf.Mode === "column" ? 102 : -1);
746
751
  i0.ɵɵadvance();
747
- i0.ɵɵconditional(ctx_r1.editAsOf.Mode === "offset" ? 102 : -1);
752
+ i0.ɵɵconditional(ctx_r1.editAsOf.Mode === "offset" ? 103 : -1);
748
753
  i0.ɵɵadvance(10);
749
754
  i0.ɵɵproperty("value", ctx_r1.editValidation.Strategy);
750
755
  i0.ɵɵadvance(7);
751
- i0.ɵɵconditional(ctx_r1.editValidation.Strategy === "train_test_split" ? 119 : -1);
756
+ i0.ɵɵconditional(ctx_r1.editValidation.Strategy === "train_test_split" ? 120 : -1);
752
757
  i0.ɵɵadvance();
753
- i0.ɵɵconditional(ctx_r1.editValidation.Strategy === "kfold" ? 120 : -1);
758
+ i0.ɵɵconditional(ctx_r1.editValidation.Strategy === "kfold" ? 121 : -1);
754
759
  i0.ɵɵadvance(4);
755
760
  i0.ɵɵproperty("value", ctx_r1.editValidation.LockedHoldoutFraction);
756
761
  } }
@@ -1350,14 +1355,14 @@ export class PSPipelinesComponent {
1350
1355
  return `M ${sx} ${sy} C ${c1x} ${sy}, ${c2x} ${ty}, ${tx} ${ty}`;
1351
1356
  }
1352
1357
  static ɵfac = function PSPipelinesComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PSPipelinesComponent)(); };
1353
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSPipelinesComponent, selectors: [["ps-pipelines"]], inputs: { engine: "engine", provider: "provider", currentUser: "currentUser" }, outputs: { askAgent: "askAgent" }, decls: 3, vars: 1, consts: [["data-testid", "ps-pipelines-panel", 1, "ps-panel", "ps-pipelines"], ["data-testid", "ps-pipelines-empty", 1, "ps-empty"], [1, "ps-empty-ico"], [1, "fa-solid", "fa-diagram-project"], ["mjButton", "", "variant", "primary", "size", "sm", "data-testid", "ps-pipelines-ask-agent", 3, "click"], [1, "fa-solid", "fa-robot"], ["data-testid", "ps-pipelines-picker", 1, "pl-bar"], ["data-testid", "ps-pipelines-pill", 1, "pl-pill", 3, "on"], [1, "ps-spacer"], ["data-testid", "ps-pipelines-dirty", 1, "ps-tag", "amber"], ["mjButton", "", "variant", "primary", "size", "sm", "data-testid", "ps-pipelines-save", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-validate", 3, "click", "disabled"], [1, "fa-solid", "fa-circle-check"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-train", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "builder"], [1, "canvas-wrap"], [1, "canvas-bar"], [1, "ps-small", "ps-muted", 2, "font-weight", "600"], ["data-testid", "ps-pipelines-add-source", 1, "ps-pchip", "s", 3, "click"], [1, "fa-solid", "fa-database"], ["data-testid", "ps-pipelines-add-step", 1, "ps-pchip", "f", 3, "click"], [1, "fa-solid", "fa-sliders"], [1, "ps-small", "ps-muted"], [1, "fa-solid", "fa-circle-nodes"], ["data-testid", "ps-pipelines-canvas", 1, "ps-flow", "big"], ["data-testid", "ps-pipelines-edges", 1, "ps-edges"], ["data-testid", "ps-pipelines-node", 1, "ps-node", 3, "ngClass", "selected", "left", "top"], [1, "flow-toolbar"], [1, "legend"], [1, "sw", "src"], [1, "sw", "feat"], [1, "sw", "emb"], [1, "sw", "target"], [1, "sw", "algo"], ["data-testid", "ps-pipelines-inspector", 1, "ps-col", "inspector"], [1, "ps-card", "insp"], [1, "ihead"], [1, "tile", 3, "ngClass"], [2, "flex", "1"], ["data-testid", "ps-pipelines-inspector-title"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-delete"], [1, "ps-card-body"], [1, "ps-card"], [1, "ps-card-head"], [1, "fa-solid", "fa-shield-halved", 2, "color", "var(--mj-status-warning)"], [1, "ps-field"], ["type", "text", 1, "mj-input", 3, "input", "value"], ["type", "number", "step", "0.05", "min", "0", "max", "1", 1, "mj-input", 3, "input", "value"], [1, "fa-solid", "fa-clock-rotate-left", 2, "color", "var(--mj-brand-primary)"], [1, "mj-input", 3, "change", "value"], ["value", "none"], ["value", "column"], ["value", "offset"], [1, "fa-solid", "fa-scissors", 2, "color", "var(--mj-brand-primary)"], ["value", "train_test_split"], ["value", "kfold"], ["value", "holdout"], ["type", "number", "step", "0.05", 1, "mj-input", 3, "input", "value"], ["data-testid", "ps-pipelines-pill", 1, "pl-pill", 3, "click"], [1, "ps-badge"], [1, "fa-solid", "fa-pen"], ["data-testid", "ps-pipelines-node", 1, "ps-node", 3, "click", "ngClass"], [1, "nh"], [1, "ps-tag"], [1, "nb"], [1, "nb-row"], [1, "port", "in"], [1, "port", "out"], [1, "k"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-delete", 3, "click"], [1, "fa-solid", "fa-trash"], [3, "value"], ["type", "number", 1, "mj-input", 3, "input", "value"], [1, "inputs-list"], [1, "inp-row"], [1, "ps-small", "ps-muted", 2, "margin-top", "4px"], ["type", "checkbox", 3, "change", "checked"], ["rows", "4", 1, "mj-textarea", 3, "input", "value"]], template: function PSPipelinesComponent_Template(rf, ctx) { if (rf & 1) {
1358
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSPipelinesComponent, selectors: [["ps-pipelines"]], inputs: { engine: "engine", provider: "provider", currentUser: "currentUser" }, outputs: { askAgent: "askAgent" }, decls: 3, vars: 1, consts: [["data-testid", "ps-pipelines-panel", 1, "ps-panel", "ps-pipelines"], ["data-testid", "ps-pipelines-empty", 1, "ps-empty"], [1, "ps-empty-ico"], [1, "fa-solid", "fa-diagram-project"], ["mjButton", "", "variant", "primary", "size", "sm", "data-testid", "ps-pipelines-ask-agent", 3, "click"], [1, "fa-solid", "fa-robot"], ["data-testid", "ps-pipelines-picker", 1, "pl-picker"], ["data-testid", "ps-pipelines-pill", 1, "pl-pill", 3, "on", "title"], [1, "pl-toolbar"], ["mjButton", "", "variant", "primary", "size", "sm", "data-testid", "ps-pipelines-save", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-validate", 3, "click", "disabled"], [1, "fa-solid", "fa-circle-check"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-train", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "ps-spacer"], ["data-testid", "ps-pipelines-dirty", 1, "ps-tag", "amber"], [1, "builder"], [1, "canvas-wrap"], [1, "canvas-bar"], [1, "ps-small", "ps-muted", 2, "font-weight", "600"], ["data-testid", "ps-pipelines-add-source", 1, "ps-pchip", "s", 3, "click"], [1, "fa-solid", "fa-database"], ["data-testid", "ps-pipelines-add-step", 1, "ps-pchip", "f", 3, "click"], [1, "fa-solid", "fa-sliders"], [1, "ps-small", "ps-muted"], [1, "fa-solid", "fa-circle-nodes"], ["data-testid", "ps-pipelines-canvas", 1, "ps-flow", "big"], ["data-testid", "ps-pipelines-edges", 1, "ps-edges"], ["data-testid", "ps-pipelines-node", 1, "ps-node", 3, "ngClass", "selected", "left", "top"], [1, "flow-toolbar"], [1, "legend"], [1, "sw", "src"], [1, "sw", "feat"], [1, "sw", "emb"], [1, "sw", "target"], [1, "sw", "algo"], ["data-testid", "ps-pipelines-inspector", 1, "ps-col", "inspector"], [1, "ps-card", "insp"], [1, "ihead"], [1, "tile", 3, "ngClass"], [2, "flex", "1"], ["data-testid", "ps-pipelines-inspector-title"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-delete"], [1, "ps-card-body"], [1, "ps-card"], [1, "ps-card-head"], [1, "fa-solid", "fa-shield-halved", 2, "color", "var(--mj-status-warning)"], [1, "ps-field"], ["type", "text", 1, "mj-input", 3, "input", "value"], ["type", "number", "step", "0.05", "min", "0", "max", "1", 1, "mj-input", 3, "input", "value"], [1, "fa-solid", "fa-clock-rotate-left", 2, "color", "var(--mj-brand-primary)"], [1, "mj-input", 3, "change", "value"], ["value", "none"], ["value", "column"], ["value", "offset"], [1, "fa-solid", "fa-scissors", 2, "color", "var(--mj-brand-primary)"], ["value", "train_test_split"], ["value", "kfold"], ["value", "holdout"], ["type", "number", "step", "0.05", 1, "mj-input", 3, "input", "value"], ["data-testid", "ps-pipelines-pill", 1, "pl-pill", 3, "click", "title"], [1, "pl-pill-name"], [1, "ps-badge"], [1, "fa-solid", "fa-pen"], ["data-testid", "ps-pipelines-node", 1, "ps-node", 3, "click", "ngClass"], [1, "nh"], [1, "ps-tag"], [1, "nb"], [1, "nb-row"], [1, "port", "in"], [1, "port", "out"], [1, "k"], ["mjButton", "", "variant", "secondary", "size", "sm", "data-testid", "ps-pipelines-delete", 3, "click"], [1, "fa-solid", "fa-trash"], [3, "value"], ["type", "number", 1, "mj-input", 3, "input", "value"], [1, "inputs-list"], [1, "inp-row"], [1, "ps-small", "ps-muted", 2, "margin-top", "4px"], ["type", "checkbox", 3, "change", "checked"], ["rows", "4", 1, "mj-textarea", 3, "input", "value"]], template: function PSPipelinesComponent_Template(rf, ctx) { if (rf & 1) {
1354
1359
  i0.ɵɵelementStart(0, "div", 0);
1355
- i0.ɵɵconditionalCreate(1, PSPipelinesComponent_Conditional_1_Template, 10, 0, "div", 1)(2, PSPipelinesComponent_Conditional_2_Template, 125, 32);
1360
+ i0.ɵɵconditionalCreate(1, PSPipelinesComponent_Conditional_1_Template, 10, 0, "div", 1)(2, PSPipelinesComponent_Conditional_2_Template, 126, 32);
1356
1361
  i0.ɵɵelementEnd();
1357
1362
  } if (rf & 2) {
1358
1363
  i0.ɵɵadvance();
1359
1364
  i0.ɵɵconditional(ctx.pipelines.length === 0 ? 1 : 2);
1360
- } }, dependencies: [CommonModule, i1.NgClass, MJButtonDirective], 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: 10px;\n box-shadow: var(--mj-shadow-sm);\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: 10px; padding: 16px 18px; box-shadow: var(--mj-shadow-sm);\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: 150px 1fr 48px; align-items: center; gap: 10px; padding: 5px 0; }\n.ps-fbar .track { height: 14px; border-radius: 5px; background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-fbar .track > span { display: block; height: 100%; background: var(--mj-brand-primary); }\n.ps-fbar .track > span.warn { background: var(--mj-status-warning); }\n.ps-fbar .name { color: var(--mj-text-secondary); }\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: 10px;\n box-shadow: var(--mj-shadow-sm); 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", "// Training Pipelines \u2014 real visual DAG builder driven by each pipeline's persisted spec.\n\n.ps-pipelines { display: flex; flex-direction: column; gap: 14px; }\n\n// Pipeline picker bar\n.ps-pipelines .pl-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n.ps-pipelines .pl-pill {\n display: inline-flex; align-items: center; gap: 8px; cursor: pointer;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary); border-radius: 999px; padding: 6px 12px; font-size: 13px;\n}\n.ps-pipelines .pl-pill:hover { background: var(--mj-bg-surface-hover); }\n.ps-pipelines .pl-pill.on {\n border-color: var(--mj-brand-primary); color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.ps-pipelines .builder { display: grid; grid-template-columns: 1fr 320px; gap: 16px; align-items: start; }\n@media (max-width: 1080px) { .ps-pipelines .builder { grid-template-columns: 1fr; } }\n\n.ps-pipelines .canvas-wrap { display: flex; flex-direction: column; min-width: 0; }\n.ps-pipelines .canvas-bar {\n display: flex; align-items: center; gap: 10px; flex-wrap: wrap;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-bottom: none; border-radius: 10px 10px 0 0; padding: 12px 14px;\n}\n/* The DAG canvas is sized in px by the layered layout (inline width/height) and\n may exceed the 1fr column width, so allow it to scroll rather than clip the\n right-most layers. min-height keeps an empty/short graph from collapsing. */\n.ps-pipelines .ps-flow.big {\n border-radius: 0;\n min-height: 460px;\n max-width: 100%;\n overflow: auto;\n}\n/* Pin every node to a fixed height so its port (top:50%) lines up exactly with\n the SVG edge anchor (node.y + NODE_H/2). NODE_H in the component = 86. */\n.ps-pipelines .ps-flow.big .ps-node {\n height: 86px;\n display: flex;\n flex-direction: column;\n}\n.ps-pipelines .ps-flow.big .ps-node .nb { flex: 1; min-height: 0; }\n.ps-pipelines .flow-toolbar {\n display: flex; align-items: center; gap: 8px;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-top: none; border-radius: 0 0 10px 10px; padding: 10px 14px;\n}\n.ps-pipelines .legend { display: flex; align-items: center; gap: 14px; font-size: 12px; color: var(--mj-text-secondary); flex-wrap: wrap; }\n.ps-pipelines .legend span { display: inline-flex; align-items: center; gap: 6px; }\n.ps-pipelines .legend .sw { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }\n.ps-pipelines .legend .sw.src { background: var(--ps-node-source); }\n.ps-pipelines .legend .sw.feat { background: var(--ps-node-feature); }\n.ps-pipelines .legend .sw.emb { background: var(--ps-node-embedding); }\n.ps-pipelines .legend .sw.target { background: var(--ps-node-target); }\n.ps-pipelines .legend .sw.algo { background: var(--ps-node-algorithm); }\n\n/* inspector */\n.ps-pipelines .inspector .insp { position: sticky; top: 0; }\n.ps-pipelines .ihead { display: flex; align-items: center; gap: 11px; padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n.ps-pipelines .ihead h3 { font-size: 14px; color: var(--mj-text-primary); margin: 0; }\n.ps-pipelines .ihead .tile {\n width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 13px; flex: 0 0 auto; background: var(--ps-node-feature);\n}\n.ps-pipelines .ihead .tile[data-type='src'] { background: var(--ps-node-source); }\n.ps-pipelines .ihead .tile[data-type='emb'] { background: var(--ps-node-embedding); }\n.ps-pipelines .ihead .tile[data-type='target'] { background: var(--ps-node-target); }\n.ps-pipelines .ihead .tile[data-type='algo'] { background: var(--ps-node-algorithm); }\n.ps-pipelines .ihead .tile[data-type='output'] { background: var(--mj-status-success); }\n\n// Palette chips are interactive buttons in the editor\n.ps-pipelines .canvas-bar .ps-pchip { cursor: pointer; border: none; }\n.ps-pipelines .canvas-bar .ps-pchip:hover { filter: brightness(1.08); }\n\n// Inspector edit fields\n.ps-pipelines .ps-field { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.ps-pipelines .ps-field > label { font-size: 12px; font-weight: 650; color: var(--mj-text-muted); }\n.ps-pipelines .inputs-list { display: flex; flex-direction: column; gap: 4px; }\n.ps-pipelines .inp-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--mj-text-secondary); cursor: pointer; }\n\n// Empty-state CTA spacing\n.ps-pipelines .ps-empty button { margin-top: 16px; }\n"], encapsulation: 2 });
1365
+ } }, dependencies: [CommonModule, i1.NgClass, MJButtonDirective], 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", "/* Training Pipelines \u2014 real visual DAG builder driven by each pipeline's persisted spec. */\n\n.ps-pipelines { display: flex; flex-direction: column; gap: 14px; height: 100%; min-height: 0; }\n\n/* Pipeline picker bar */\n.ps-pipelines .pl-picker { display: flex; align-items: center; gap: 8px; overflow-x: auto; padding-bottom: 6px; }\n.ps-pipelines .pl-toolbar { display: flex; align-items: center; gap: 8px; margin: 8px 0 12px; padding-bottom: 12px; border-bottom: 1px solid var(--mj-border-subtle); }\n.ps-pipelines .pl-pill {\n display: inline-flex; align-items: center; gap: 8px; cursor: pointer; flex: 0 0 auto; max-width: 260px;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary); border-radius: 999px; padding: 6px 12px; font-size: 13px;\n}\n.ps-pipelines .pl-pill .pl-pill-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-pipelines .pl-pill:hover { background: var(--mj-bg-surface-hover); }\n.ps-pipelines .pl-pill.on {\n border-color: var(--mj-brand-primary); color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n/* The builder fills the remaining panel height; each column scrolls on its own. */\n.ps-pipelines .builder {\n flex: 1; min-height: 0;\n display: grid; grid-template-columns: 1fr 320px; grid-template-rows: minmax(0, 1fr); gap: 16px;\n}\n@media (max-width: 1080px) {\n .ps-pipelines .builder { grid-template-columns: 1fr; grid-template-rows: minmax(0, 1.4fr) minmax(0, 1fr); }\n}\n\n.ps-pipelines .canvas-wrap { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n.ps-pipelines .canvas-bar {\n display: flex; align-items: center; gap: 10px; flex-wrap: wrap;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-bottom: none; border-radius: 10px 10px 0 0; padding: 12px 14px;\n}\n/* The DAG canvas is sized in px by the layered layout (inline width/height) and\n may exceed the column, so it scrolls internally (both axes) while the column\n itself stays put. flex:1 makes it absorb the remaining column height. */\n.ps-pipelines .ps-flow.big {\n border-radius: 0;\n flex: 1 1 auto;\n min-height: 0;\n max-width: 100%;\n overflow: auto;\n}\n/* Pin every node to a fixed height so its port (top:50%) lines up exactly with\n the SVG edge anchor (node.y + NODE_H/2). NODE_H in the component = 86. */\n.ps-pipelines .ps-flow.big .ps-node {\n height: 86px;\n display: flex;\n flex-direction: column;\n}\n.ps-pipelines .ps-flow.big .ps-node .nb { flex: 1; min-height: 0; }\n.ps-pipelines .flow-toolbar {\n display: flex; align-items: center; gap: 8px;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-top: none; border-radius: 0 0 10px 10px; padding: 10px 14px;\n}\n.ps-pipelines .legend { display: flex; align-items: center; gap: 14px; font-size: 12px; color: var(--mj-text-secondary); flex-wrap: wrap; }\n.ps-pipelines .legend span { display: inline-flex; align-items: center; gap: 6px; }\n.ps-pipelines .legend .sw { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }\n.ps-pipelines .legend .sw.src { background: var(--ps-node-source); }\n.ps-pipelines .legend .sw.feat { background: var(--ps-node-feature); }\n.ps-pipelines .legend .sw.emb { background: var(--ps-node-embedding); }\n.ps-pipelines .legend .sw.target { background: var(--ps-node-target); }\n.ps-pipelines .legend .sw.algo { background: var(--ps-node-algorithm); }\n\n/* inspector \u2014 its own scroll column, independent of the canvas. NOTE: .inspector is\n also a .ps-col (display:flex column), so its card children ARE flex items \u2014 without\n flex-shrink:0 they compress to fit (scrollHeight == clientHeight, verified live) and\n the column never scrolls. These child rules are load-bearing, not decorative. */\n.ps-pipelines .inspector {\n min-height: 0;\n overflow-y: auto;\n}\n.ps-pipelines .inspector > * { flex: 0 0 auto; }\n.ps-pipelines .inspector .insp { position: static; }\n.ps-pipelines .ihead { display: flex; align-items: center; gap: 11px; padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n.ps-pipelines .ihead h3 { font-size: 14px; color: var(--mj-text-primary); margin: 0; }\n.ps-pipelines .ihead .tile {\n width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 13px; flex: 0 0 auto; background: var(--ps-node-feature);\n}\n.ps-pipelines .ihead .tile[data-type='src'] { background: var(--ps-node-source); }\n.ps-pipelines .ihead .tile[data-type='emb'] { background: var(--ps-node-embedding); }\n.ps-pipelines .ihead .tile[data-type='target'] { background: var(--ps-node-target); }\n.ps-pipelines .ihead .tile[data-type='algo'] { background: var(--ps-node-algorithm); }\n.ps-pipelines .ihead .tile[data-type='output'] { background: var(--mj-status-success); }\n\n/* Palette chips are interactive buttons in the editor */\n.ps-pipelines .canvas-bar .ps-pchip { cursor: pointer; border: none; }\n.ps-pipelines .canvas-bar .ps-pchip:hover { filter: brightness(1.08); }\n\n/* Inspector edit fields */\n.ps-pipelines .ps-field { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.ps-pipelines .ps-field > label { font-size: 12px; font-weight: 650; color: var(--mj-text-muted); }\n.ps-pipelines .inputs-list { display: flex; flex-direction: column; gap: 4px; }\n.ps-pipelines .inp-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--mj-text-secondary); cursor: pointer; }\n\n/* Empty-state CTA spacing */\n.ps-pipelines .ps-empty button { margin-top: 16px; }\n"], encapsulation: 2 });
1361
1366
  }
1362
1367
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PSPipelinesComponent, [{
1363
1368
  type: Component,
@@ -1378,17 +1383,19 @@ export class PSPipelinesComponent {
1378
1383
  </button>
1379
1384
  </div>
1380
1385
  } @else {
1381
- <!-- Pipeline picker + toolbar -->
1382
- <div class="pl-bar" data-testid="ps-pipelines-picker">
1386
+ <!-- Pipeline picker (its own scrollable row) -->
1387
+ <div class="pl-picker" data-testid="ps-pipelines-picker">
1383
1388
  @for (p of pipelines; track p.ID) {
1384
1389
  <button class="pl-pill" [class.on]="isSelectedPipeline(p)"
1385
- data-testid="ps-pipelines-pill" (click)="selectPipeline(p.ID)">
1386
- <i class="fa-solid fa-diagram-project"></i> {{ p.Name }}
1390
+ data-testid="ps-pipelines-pill" (click)="selectPipeline(p.ID)" [title]="p.Name">
1391
+ <i class="fa-solid fa-diagram-project"></i> <span class="pl-pill-name">{{ p.Name }}</span>
1387
1392
  <span class="ps-badge" [class]="statusClass(p.Status)">{{ p.Status }}</span>
1388
1393
  </button>
1389
1394
  }
1390
- <span class="ps-spacer"></span>
1391
- @if (dirty) { <span class="ps-tag amber" data-testid="ps-pipelines-dirty"><i class="fa-solid fa-pen"></i> Unsaved</span> }
1395
+ </div>
1396
+
1397
+ <!-- Toolbar for the selected pipeline (its own row) -->
1398
+ <div class="pl-toolbar">
1392
1399
  <button mjButton variant="primary" size="sm" data-testid="ps-pipelines-save" [disabled]="!dirty || busy" (click)="save()">
1393
1400
  <i class="fa-solid fa-floppy-disk"></i> Save
1394
1401
  </button>
@@ -1401,6 +1408,8 @@ export class PSPipelinesComponent {
1401
1408
  <button mjButton variant="secondary" size="sm" (click)="refine()">
1402
1409
  <i class="fa-solid fa-wand-magic-sparkles"></i> Agent
1403
1410
  </button>
1411
+ <span class="ps-spacer"></span>
1412
+ @if (dirty) { <span class="ps-tag amber" data-testid="ps-pipelines-dirty"><i class="fa-solid fa-pen"></i> Unsaved</span> }
1404
1413
  </div>
1405
1414
 
1406
1415
  <div class="builder">
@@ -1574,7 +1583,7 @@ export class PSPipelinesComponent {
1574
1583
  </div>
1575
1584
  }
1576
1585
  </div>
1577
- `, 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: 10px;\n box-shadow: var(--mj-shadow-sm);\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: 10px; padding: 16px 18px; box-shadow: var(--mj-shadow-sm);\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: 150px 1fr 48px; align-items: center; gap: 10px; padding: 5px 0; }\n.ps-fbar .track { height: 14px; border-radius: 5px; background: var(--mj-bg-surface-sunken); overflow: hidden; }\n.ps-fbar .track > span { display: block; height: 100%; background: var(--mj-brand-primary); }\n.ps-fbar .track > span.warn { background: var(--mj-status-warning); }\n.ps-fbar .name { color: var(--mj-text-secondary); }\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: 10px;\n box-shadow: var(--mj-shadow-sm); 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", "// Training Pipelines \u2014 real visual DAG builder driven by each pipeline's persisted spec.\n\n.ps-pipelines { display: flex; flex-direction: column; gap: 14px; }\n\n// Pipeline picker bar\n.ps-pipelines .pl-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n.ps-pipelines .pl-pill {\n display: inline-flex; align-items: center; gap: 8px; cursor: pointer;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary); border-radius: 999px; padding: 6px 12px; font-size: 13px;\n}\n.ps-pipelines .pl-pill:hover { background: var(--mj-bg-surface-hover); }\n.ps-pipelines .pl-pill.on {\n border-color: var(--mj-brand-primary); color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.ps-pipelines .builder { display: grid; grid-template-columns: 1fr 320px; gap: 16px; align-items: start; }\n@media (max-width: 1080px) { .ps-pipelines .builder { grid-template-columns: 1fr; } }\n\n.ps-pipelines .canvas-wrap { display: flex; flex-direction: column; min-width: 0; }\n.ps-pipelines .canvas-bar {\n display: flex; align-items: center; gap: 10px; flex-wrap: wrap;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-bottom: none; border-radius: 10px 10px 0 0; padding: 12px 14px;\n}\n/* The DAG canvas is sized in px by the layered layout (inline width/height) and\n may exceed the 1fr column width, so allow it to scroll rather than clip the\n right-most layers. min-height keeps an empty/short graph from collapsing. */\n.ps-pipelines .ps-flow.big {\n border-radius: 0;\n min-height: 460px;\n max-width: 100%;\n overflow: auto;\n}\n/* Pin every node to a fixed height so its port (top:50%) lines up exactly with\n the SVG edge anchor (node.y + NODE_H/2). NODE_H in the component = 86. */\n.ps-pipelines .ps-flow.big .ps-node {\n height: 86px;\n display: flex;\n flex-direction: column;\n}\n.ps-pipelines .ps-flow.big .ps-node .nb { flex: 1; min-height: 0; }\n.ps-pipelines .flow-toolbar {\n display: flex; align-items: center; gap: 8px;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-top: none; border-radius: 0 0 10px 10px; padding: 10px 14px;\n}\n.ps-pipelines .legend { display: flex; align-items: center; gap: 14px; font-size: 12px; color: var(--mj-text-secondary); flex-wrap: wrap; }\n.ps-pipelines .legend span { display: inline-flex; align-items: center; gap: 6px; }\n.ps-pipelines .legend .sw { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }\n.ps-pipelines .legend .sw.src { background: var(--ps-node-source); }\n.ps-pipelines .legend .sw.feat { background: var(--ps-node-feature); }\n.ps-pipelines .legend .sw.emb { background: var(--ps-node-embedding); }\n.ps-pipelines .legend .sw.target { background: var(--ps-node-target); }\n.ps-pipelines .legend .sw.algo { background: var(--ps-node-algorithm); }\n\n/* inspector */\n.ps-pipelines .inspector .insp { position: sticky; top: 0; }\n.ps-pipelines .ihead { display: flex; align-items: center; gap: 11px; padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n.ps-pipelines .ihead h3 { font-size: 14px; color: var(--mj-text-primary); margin: 0; }\n.ps-pipelines .ihead .tile {\n width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 13px; flex: 0 0 auto; background: var(--ps-node-feature);\n}\n.ps-pipelines .ihead .tile[data-type='src'] { background: var(--ps-node-source); }\n.ps-pipelines .ihead .tile[data-type='emb'] { background: var(--ps-node-embedding); }\n.ps-pipelines .ihead .tile[data-type='target'] { background: var(--ps-node-target); }\n.ps-pipelines .ihead .tile[data-type='algo'] { background: var(--ps-node-algorithm); }\n.ps-pipelines .ihead .tile[data-type='output'] { background: var(--mj-status-success); }\n\n// Palette chips are interactive buttons in the editor\n.ps-pipelines .canvas-bar .ps-pchip { cursor: pointer; border: none; }\n.ps-pipelines .canvas-bar .ps-pchip:hover { filter: brightness(1.08); }\n\n// Inspector edit fields\n.ps-pipelines .ps-field { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.ps-pipelines .ps-field > label { font-size: 12px; font-weight: 650; color: var(--mj-text-muted); }\n.ps-pipelines .inputs-list { display: flex; flex-direction: column; gap: 4px; }\n.ps-pipelines .inp-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--mj-text-secondary); cursor: pointer; }\n\n// Empty-state CTA spacing\n.ps-pipelines .ps-empty button { margin-top: 16px; }\n"] }]
1586
+ `, 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", "/* Training Pipelines \u2014 real visual DAG builder driven by each pipeline's persisted spec. */\n\n.ps-pipelines { display: flex; flex-direction: column; gap: 14px; height: 100%; min-height: 0; }\n\n/* Pipeline picker bar */\n.ps-pipelines .pl-picker { display: flex; align-items: center; gap: 8px; overflow-x: auto; padding-bottom: 6px; }\n.ps-pipelines .pl-toolbar { display: flex; align-items: center; gap: 8px; margin: 8px 0 12px; padding-bottom: 12px; border-bottom: 1px solid var(--mj-border-subtle); }\n.ps-pipelines .pl-pill {\n display: inline-flex; align-items: center; gap: 8px; cursor: pointer; flex: 0 0 auto; max-width: 260px;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary); border-radius: 999px; padding: 6px 12px; font-size: 13px;\n}\n.ps-pipelines .pl-pill .pl-pill-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-pipelines .pl-pill:hover { background: var(--mj-bg-surface-hover); }\n.ps-pipelines .pl-pill.on {\n border-color: var(--mj-brand-primary); color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n/* The builder fills the remaining panel height; each column scrolls on its own. */\n.ps-pipelines .builder {\n flex: 1; min-height: 0;\n display: grid; grid-template-columns: 1fr 320px; grid-template-rows: minmax(0, 1fr); gap: 16px;\n}\n@media (max-width: 1080px) {\n .ps-pipelines .builder { grid-template-columns: 1fr; grid-template-rows: minmax(0, 1.4fr) minmax(0, 1fr); }\n}\n\n.ps-pipelines .canvas-wrap { display: flex; flex-direction: column; min-width: 0; min-height: 0; }\n.ps-pipelines .canvas-bar {\n display: flex; align-items: center; gap: 10px; flex-wrap: wrap;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-bottom: none; border-radius: 10px 10px 0 0; padding: 12px 14px;\n}\n/* The DAG canvas is sized in px by the layered layout (inline width/height) and\n may exceed the column, so it scrolls internally (both axes) while the column\n itself stays put. flex:1 makes it absorb the remaining column height. */\n.ps-pipelines .ps-flow.big {\n border-radius: 0;\n flex: 1 1 auto;\n min-height: 0;\n max-width: 100%;\n overflow: auto;\n}\n/* Pin every node to a fixed height so its port (top:50%) lines up exactly with\n the SVG edge anchor (node.y + NODE_H/2). NODE_H in the component = 86. */\n.ps-pipelines .ps-flow.big .ps-node {\n height: 86px;\n display: flex;\n flex-direction: column;\n}\n.ps-pipelines .ps-flow.big .ps-node .nb { flex: 1; min-height: 0; }\n.ps-pipelines .flow-toolbar {\n display: flex; align-items: center; gap: 8px;\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default);\n border-top: none; border-radius: 0 0 10px 10px; padding: 10px 14px;\n}\n.ps-pipelines .legend { display: flex; align-items: center; gap: 14px; font-size: 12px; color: var(--mj-text-secondary); flex-wrap: wrap; }\n.ps-pipelines .legend span { display: inline-flex; align-items: center; gap: 6px; }\n.ps-pipelines .legend .sw { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }\n.ps-pipelines .legend .sw.src { background: var(--ps-node-source); }\n.ps-pipelines .legend .sw.feat { background: var(--ps-node-feature); }\n.ps-pipelines .legend .sw.emb { background: var(--ps-node-embedding); }\n.ps-pipelines .legend .sw.target { background: var(--ps-node-target); }\n.ps-pipelines .legend .sw.algo { background: var(--ps-node-algorithm); }\n\n/* inspector \u2014 its own scroll column, independent of the canvas. NOTE: .inspector is\n also a .ps-col (display:flex column), so its card children ARE flex items \u2014 without\n flex-shrink:0 they compress to fit (scrollHeight == clientHeight, verified live) and\n the column never scrolls. These child rules are load-bearing, not decorative. */\n.ps-pipelines .inspector {\n min-height: 0;\n overflow-y: auto;\n}\n.ps-pipelines .inspector > * { flex: 0 0 auto; }\n.ps-pipelines .inspector .insp { position: static; }\n.ps-pipelines .ihead { display: flex; align-items: center; gap: 11px; padding: 14px 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n.ps-pipelines .ihead h3 { font-size: 14px; color: var(--mj-text-primary); margin: 0; }\n.ps-pipelines .ihead .tile {\n width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center;\n color: var(--mj-text-inverse); font-size: 13px; flex: 0 0 auto; background: var(--ps-node-feature);\n}\n.ps-pipelines .ihead .tile[data-type='src'] { background: var(--ps-node-source); }\n.ps-pipelines .ihead .tile[data-type='emb'] { background: var(--ps-node-embedding); }\n.ps-pipelines .ihead .tile[data-type='target'] { background: var(--ps-node-target); }\n.ps-pipelines .ihead .tile[data-type='algo'] { background: var(--ps-node-algorithm); }\n.ps-pipelines .ihead .tile[data-type='output'] { background: var(--mj-status-success); }\n\n/* Palette chips are interactive buttons in the editor */\n.ps-pipelines .canvas-bar .ps-pchip { cursor: pointer; border: none; }\n.ps-pipelines .canvas-bar .ps-pchip:hover { filter: brightness(1.08); }\n\n/* Inspector edit fields */\n.ps-pipelines .ps-field { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.ps-pipelines .ps-field > label { font-size: 12px; font-weight: 650; color: var(--mj-text-muted); }\n.ps-pipelines .inputs-list { display: flex; flex-direction: column; gap: 4px; }\n.ps-pipelines .inp-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--mj-text-secondary); cursor: pointer; }\n\n/* Empty-state CTA spacing */\n.ps-pipelines .ps-empty button { margin-top: 16px; }\n"] }]
1578
1587
  }], null, { engine: [{
1579
1588
  type: Input
1580
1589
  }], provider: [{
@@ -1584,5 +1593,5 @@ export class PSPipelinesComponent {
1584
1593
  }], askAgent: [{
1585
1594
  type: Output
1586
1595
  }] }); })();
1587
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSPipelinesComponent, { className: "PSPipelinesComponent", filePath: "src/PredictiveStudio/components/ps-pipelines.component.ts", lineNumber: 307 }); })();
1596
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSPipelinesComponent, { className: "PSPipelinesComponent", filePath: "src/PredictiveStudio/components/ps-pipelines.component.ts", lineNumber: 311 }); })();
1588
1597
  //# sourceMappingURL=ps-pipelines.component.js.map