@memberjunction/ng-dashboards 6.1.3 → 6.2.0-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +6 -1
  2. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  3. package/dist/AI/components/vectors/vector-management-resource.component.js +99 -45
  4. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  5. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +4 -0
  6. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  7. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +16 -6
  8. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  9. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +4 -0
  10. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  11. package/dist/DataExplorer/data-explorer-dashboard.component.js +14 -4
  12. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  13. package/dist/DataExplorer/services/explorer-state.service.js +2 -2
  14. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  15. package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
  16. package/dist/DevTools/graphql-console.component.js +2 -0
  17. package/dist/DevTools/graphql-console.component.js.map +1 -1
  18. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  19. package/dist/Integration/components/connections/connections.component.js +2 -0
  20. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  21. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +4 -12
  22. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
  23. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +39 -78
  24. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  25. package/dist/Lists/components/lists-browse-resource.component.d.ts +3 -0
  26. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  27. package/dist/Lists/components/lists-browse-resource.component.js +7 -6
  28. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  29. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +3 -0
  30. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  31. package/dist/Lists/components/lists-my-lists-resource.component.js +7 -6
  32. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  33. package/dist/PredictiveStudio/at-risk.view-models.d.ts +41 -3
  34. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
  35. package/dist/PredictiveStudio/at-risk.view-models.js +99 -6
  36. package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
  37. package/dist/PredictiveStudio/components/ps-catalog.component.d.ts +4 -1
  38. package/dist/PredictiveStudio/components/ps-catalog.component.d.ts.map +1 -1
  39. package/dist/PredictiveStudio/components/ps-catalog.component.js +61 -37
  40. package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
  41. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +12 -0
  42. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  43. package/dist/PredictiveStudio/components/ps-experiments.component.js +426 -184
  44. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  45. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +84 -0
  46. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -0
  47. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +1397 -0
  48. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -0
  49. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +66 -34
  50. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  51. package/dist/PredictiveStudio/components/ps-pipelines.component.js +2456 -743
  52. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  53. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +194 -0
  54. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -0
  55. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +1902 -0
  56. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -0
  57. package/dist/PredictiveStudio/components/ps-production.component.d.ts +17 -1
  58. package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
  59. package/dist/PredictiveStudio/components/ps-production.component.js +653 -372
  60. package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
  61. package/dist/PredictiveStudio/components/ps-registry.component.d.ts +21 -61
  62. package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
  63. package/dist/PredictiveStudio/components/ps-registry.component.js +214 -681
  64. package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
  65. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +49 -0
  66. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +1 -0
  67. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +658 -0
  68. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +1 -0
  69. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +42 -0
  70. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -0
  71. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +90 -0
  72. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -0
  73. package/dist/PredictiveStudio/predictive-studio.view-models.d.ts +14 -2
  74. package/dist/PredictiveStudio/predictive-studio.view-models.d.ts.map +1 -1
  75. package/dist/PredictiveStudio/predictive-studio.view-models.js +41 -5
  76. package/dist/PredictiveStudio/predictive-studio.view-models.js.map +1 -1
  77. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
  78. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
  79. package/dist/PredictiveStudio/resources/ps-models-resource.component.js +178 -65
  80. package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
  81. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +9 -1
  82. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  83. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +307 -369
  84. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  85. package/dist/PredictiveStudio/resources/ps-resource-base.js +1 -1
  86. package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
  87. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +17 -1
  88. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
  89. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +309 -138
  90. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  91. package/dist/VersionHistory/components/graph-resource.component.d.ts +1 -0
  92. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  93. package/dist/VersionHistory/components/graph-resource.component.js +6 -5
  94. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  95. package/dist/predictive-studio-dashboards.module.d.ts +10 -8
  96. package/dist/predictive-studio-dashboards.module.d.ts.map +1 -1
  97. package/dist/predictive-studio-dashboards.module.js +13 -3
  98. package/dist/predictive-studio-dashboards.module.js.map +1 -1
  99. package/package.json +64 -63
@@ -4,42 +4,44 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } from '@angular/core';
7
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild, inject } from '@angular/core';
8
8
  import { RegisterClass } from '@memberjunction/global';
9
9
  import { LogError } from '@memberjunction/core';
10
- import { MJEnvironmentEntityExtended } from '@memberjunction/core-entities';
10
+ import { MJEnvironmentEntityExtended, UserInfoEngine } from '@memberjunction/core-entities';
11
11
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
12
12
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
13
13
  import { PSResourceBase } from './ps-resource-base';
14
14
  import { STUDIO_SECTIONS, sectionGroups, sectionsInGroup, sectionLabel, hasSection, routeHomeNavigate, } from '../predictive-studio.nav';
15
- import { buildStudioAgentContext, resolvePSRecord, buildPSNotFoundError } from '../predictive-studio-agent-context';
15
+ import { buildStudioAgentContext, resolvePSRecord, buildPSNotFoundError, } from '../predictive-studio-agent-context';
16
16
  import { validateStringParam } from '../../shared/agent-tool-validation';
17
17
  import * as i0 from "@angular/core";
18
18
  import * as i1 from "@memberjunction/ng-ui-components";
19
19
  import * as i2 from "@memberjunction/ng-shared-generic";
20
20
  import * as i3 from "@memberjunction/ng-conversations";
21
- import * as i4 from "../components/ps-home.component";
22
- import * as i5 from "../components/ps-catalog.component";
23
- import * as i6 from "../components/ps-pipelines.component";
24
- import * as i7 from "../components/ps-experiments.component";
25
- import * as i8 from "../components/ps-compare.component";
21
+ import * as i4 from "angular-split";
22
+ import * as i5 from "../components/ps-home.component";
23
+ import * as i6 from "../components/ps-catalog.component";
24
+ import * as i7 from "../components/ps-pipelines.component";
25
+ import * as i8 from "../components/ps-experiments.component";
26
+ import * as i9 from "../components/ps-compare.component";
27
+ const _c0 = ["pipelinesComp"];
26
28
  const _forTrack0 = ($index, $item) => $item.key;
27
29
  function PSStudioResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
28
- i0.ɵɵelement(0, "mj-loading", 2);
30
+ i0.ɵɵelement(0, "mj-loading", 3);
29
31
  } }
30
32
  function PSStudioResourceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
31
33
  const _r1 = i0.ɵɵgetCurrentView();
32
- i0.ɵɵelementStart(0, "div", 3);
33
- i0.ɵɵelement(1, "i", 5);
34
- i0.ɵɵelementStart(2, "div", 6)(3, "strong");
34
+ i0.ɵɵelementStart(0, "div", 4);
35
+ i0.ɵɵelement(1, "i", 6);
36
+ i0.ɵɵelementStart(2, "div", 7)(3, "strong");
35
37
  i0.ɵɵtext(4);
36
38
  i0.ɵɵelementEnd();
37
- i0.ɵɵelementStart(5, "span", 7);
39
+ i0.ɵɵelementStart(5, "span", 8);
38
40
  i0.ɵɵtext(6);
39
41
  i0.ɵɵelementEnd()();
40
- i0.ɵɵelementStart(7, "button", 8);
42
+ i0.ɵɵelementStart(7, "button", 9);
41
43
  i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_3_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.retryLoad()); });
42
- i0.ɵɵelement(8, "i", 9);
44
+ i0.ɵɵelement(8, "i", 10);
43
45
  i0.ɵɵtext(9, " Try again");
44
46
  i0.ɵɵelementEnd()();
45
47
  } if (rf & 2) {
@@ -49,136 +51,190 @@ function PSStudioResourceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1)
49
51
  i0.ɵɵadvance(2);
50
52
  i0.ɵɵtextInterpolate(ctx_r1.loadError);
51
53
  } }
52
- function PSStudioResourceComponent_Conditional_4_For_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
53
- i0.ɵɵelementStart(0, "div", 16);
54
+ function PSStudioResourceComponent_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
55
+ const _r4 = i0.ɵɵgetCurrentView();
56
+ i0.ɵɵelementStart(0, "div", 12)(1, "button", 21);
57
+ i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_Conditional_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleNav()); });
58
+ i0.ɵɵelement(2, "i", 22);
59
+ i0.ɵɵelementEnd();
60
+ i0.ɵɵelementStart(3, "div", 23);
61
+ i0.ɵɵelement(4, "i", 24);
62
+ i0.ɵɵtext(5, " Studio");
63
+ i0.ɵɵelementEnd()();
64
+ } }
65
+ function PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
66
+ i0.ɵɵelementStart(0, "div", 30);
54
67
  i0.ɵɵtext(1);
55
68
  i0.ɵɵelementEnd();
56
69
  } if (rf & 2) {
57
- const group_r3 = i0.ɵɵnextContext().$implicit;
70
+ const group_r6 = i0.ɵɵnextContext().$implicit;
58
71
  i0.ɵɵadvance();
59
- i0.ɵɵtextInterpolate(group_r3);
72
+ i0.ɵɵtextInterpolate(group_r6);
60
73
  } }
61
- function PSStudioResourceComponent_Conditional_4_For_3_For_2_Template(rf, ctx) { if (rf & 1) {
62
- const _r4 = i0.ɵɵgetCurrentView();
63
- i0.ɵɵelementStart(0, "button", 18);
64
- i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_For_3_For_2_Template_button_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.selectSection(item_r5.key)); });
74
+ function PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
75
+ const _r7 = i0.ɵɵgetCurrentView();
76
+ i0.ɵɵelementStart(0, "button", 32);
77
+ i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_For_2_Template_button_click_0_listener() { const item_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectSection(item_r8.key)); });
65
78
  i0.ɵɵelement(1, "i");
66
79
  i0.ɵɵelementStart(2, "span");
67
80
  i0.ɵɵtext(3);
68
81
  i0.ɵɵelementEnd()();
69
82
  } if (rf & 2) {
70
- const item_r5 = ctx.$implicit;
71
- const ctx_r1 = i0.ɵɵnextContext(3);
72
- i0.ɵɵclassProp("active", ctx_r1.activeSection === item_r5.key);
73
- i0.ɵɵattribute("data-testid", "ps-nav-" + item_r5.key);
83
+ const item_r8 = ctx.$implicit;
84
+ const ctx_r1 = i0.ɵɵnextContext(4);
85
+ i0.ɵɵclassProp("active", ctx_r1.activeSection === item_r8.key);
86
+ i0.ɵɵattribute("data-testid", "ps-nav-" + item_r8.key);
74
87
  i0.ɵɵadvance();
75
- i0.ɵɵclassMap(item_r5.icon);
88
+ i0.ɵɵclassMap(item_r8.icon);
76
89
  i0.ɵɵadvance(2);
77
- i0.ɵɵtextInterpolate(item_r5.label);
90
+ i0.ɵɵtextInterpolate(item_r8.label);
78
91
  } }
79
- function PSStudioResourceComponent_Conditional_4_For_3_Template(rf, ctx) { if (rf & 1) {
80
- i0.ɵɵconditionalCreate(0, PSStudioResourceComponent_Conditional_4_For_3_Conditional_0_Template, 2, 1, "div", 16);
81
- i0.ɵɵrepeaterCreate(1, PSStudioResourceComponent_Conditional_4_For_3_For_2_Template, 4, 6, "button", 17, _forTrack0);
92
+ function PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_Template(rf, ctx) { if (rf & 1) {
93
+ i0.ɵɵconditionalCreate(0, PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_Conditional_0_Template, 2, 1, "div", 30);
94
+ i0.ɵɵrepeaterCreate(1, PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_For_2_Template, 4, 6, "button", 31, _forTrack0);
82
95
  } if (rf & 2) {
83
- const group_r3 = ctx.$implicit;
84
- const ctx_r1 = i0.ɵɵnextContext(2);
85
- i0.ɵɵconditional(group_r3 ? 0 : -1);
96
+ const group_r6 = ctx.$implicit;
97
+ const ctx_r1 = i0.ɵɵnextContext(3);
98
+ i0.ɵɵconditional(group_r6 ? 0 : -1);
86
99
  i0.ɵɵadvance();
87
- i0.ɵɵrepeater(ctx_r1.itemsForGroup(group_r3));
100
+ i0.ɵɵrepeater(ctx_r1.itemsForGroup(group_r6));
101
+ } }
102
+ function PSStudioResourceComponent_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
103
+ const _r5 = i0.ɵɵgetCurrentView();
104
+ i0.ɵɵelementStart(0, "as-split-area", 14)(1, "aside", 25)(2, "div", 26)(3, "span", 27);
105
+ i0.ɵɵtext(4, "Studio");
106
+ i0.ɵɵelementEnd();
107
+ i0.ɵɵelementStart(5, "button", 28);
108
+ i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleNav()); });
109
+ i0.ɵɵelement(6, "i", 29);
110
+ i0.ɵɵelementEnd()();
111
+ i0.ɵɵrepeaterCreate(7, PSStudioResourceComponent_Conditional_4_Conditional_3_For_8_Template, 3, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
112
+ i0.ɵɵelementEnd()();
113
+ } if (rf & 2) {
114
+ const ctx_r1 = i0.ɵɵnextContext(2);
115
+ i0.ɵɵproperty("size", ctx_r1.navSizePct)("minSize", 10)("maxSize", 30);
116
+ i0.ɵɵadvance(7);
117
+ i0.ɵɵrepeater(ctx_r1.groups);
88
118
  } }
89
- function PSStudioResourceComponent_Conditional_4_Case_5_Template(rf, ctx) { if (rf & 1) {
90
- const _r6 = i0.ɵɵgetCurrentView();
91
- i0.ɵɵelementStart(0, "ps-home", 19);
92
- i0.ɵɵlistener("navigate", function PSStudioResourceComponent_Conditional_4_Case_5_Template_ps_home_navigate_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.mapNavigate($event)); })("askAgent", function PSStudioResourceComponent_Conditional_4_Case_5_Template_ps_home_askAgent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAskAgent($event)); });
119
+ function PSStudioResourceComponent_Conditional_4_Case_9_Template(rf, ctx) { if (rf & 1) {
120
+ const _r9 = i0.ɵɵgetCurrentView();
121
+ i0.ɵɵelementStart(0, "ps-home", 33);
122
+ i0.ɵɵlistener("navigate", function PSStudioResourceComponent_Conditional_4_Case_9_Template_ps_home_navigate_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.mapNavigate($event)); })("askAgent", function PSStudioResourceComponent_Conditional_4_Case_9_Template_ps_home_askAgent_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAskAgent($event)); });
93
123
  i0.ɵɵelementEnd();
94
124
  } if (rf & 2) {
95
125
  const ctx_r1 = i0.ɵɵnextContext(2);
96
126
  i0.ɵɵproperty("engine", ctx_r1.engine)("provider", ctx_r1.ProviderToUse)("currentUser", ctx_r1.ProviderToUse.CurrentUser);
97
127
  } }
98
- function PSStudioResourceComponent_Conditional_4_Case_6_Template(rf, ctx) { if (rf & 1) {
99
- const _r7 = i0.ɵɵgetCurrentView();
100
- i0.ɵɵelementStart(0, "ps-pipelines", 20);
101
- i0.ɵɵlistener("askAgent", function PSStudioResourceComponent_Conditional_4_Case_6_Template_ps_pipelines_askAgent_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAskAgent($event)); });
128
+ function PSStudioResourceComponent_Conditional_4_Case_10_Template(rf, ctx) { if (rf & 1) {
129
+ const _r10 = i0.ɵɵgetCurrentView();
130
+ i0.ɵɵelementStart(0, "ps-pipelines", 34, 0);
131
+ i0.ɵɵlistener("askAgent", function PSStudioResourceComponent_Conditional_4_Case_10_Template_ps_pipelines_askAgent_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAskAgent($event)); })("navigate", function PSStudioResourceComponent_Conditional_4_Case_10_Template_ps_pipelines_navigate_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.mapNavigate($event)); });
102
132
  i0.ɵɵelementEnd();
103
133
  } if (rf & 2) {
104
134
  const ctx_r1 = i0.ɵɵnextContext(2);
105
135
  i0.ɵɵproperty("engine", ctx_r1.engine)("provider", ctx_r1.ProviderToUse)("currentUser", ctx_r1.ProviderToUse.CurrentUser);
106
136
  } }
107
- function PSStudioResourceComponent_Conditional_4_Case_7_Template(rf, ctx) { if (rf & 1) {
108
- const _r8 = i0.ɵɵgetCurrentView();
109
- i0.ɵɵelementStart(0, "ps-catalog", 21);
110
- i0.ɵɵlistener("askAgent", function PSStudioResourceComponent_Conditional_4_Case_7_Template_ps_catalog_askAgent_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAskAgent($event)); });
137
+ function PSStudioResourceComponent_Conditional_4_Case_11_Template(rf, ctx) { if (rf & 1) {
138
+ const _r11 = i0.ɵɵgetCurrentView();
139
+ i0.ɵɵelementStart(0, "ps-catalog", 35);
140
+ i0.ɵɵlistener("askAgent", function PSStudioResourceComponent_Conditional_4_Case_11_Template_ps_catalog_askAgent_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAskAgent($event)); })("createPipeline", function PSStudioResourceComponent_Conditional_4_Case_11_Template_ps_catalog_createPipeline_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onCreatePipelineFromCatalog($event)); });
111
141
  i0.ɵɵelementEnd();
112
142
  } if (rf & 2) {
113
143
  const ctx_r1 = i0.ɵɵnextContext(2);
114
144
  i0.ɵɵproperty("engine", ctx_r1.engine);
115
145
  } }
116
- function PSStudioResourceComponent_Conditional_4_Case_8_Template(rf, ctx) { if (rf & 1) {
117
- i0.ɵɵelement(0, "ps-experiments", 13);
146
+ function PSStudioResourceComponent_Conditional_4_Case_12_Template(rf, ctx) { if (rf & 1) {
147
+ i0.ɵɵelement(0, "ps-experiments", 19);
118
148
  } if (rf & 2) {
119
149
  const ctx_r1 = i0.ɵɵnextContext(2);
120
150
  i0.ɵɵproperty("engine", ctx_r1.engine)("provider", ctx_r1.ProviderToUse)("currentUser", ctx_r1.ProviderToUse.CurrentUser);
121
151
  } }
122
- function PSStudioResourceComponent_Conditional_4_Case_9_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelement(0, "ps-compare", 14);
152
+ function PSStudioResourceComponent_Conditional_4_Case_13_Template(rf, ctx) { if (rf & 1) {
153
+ i0.ɵɵelement(0, "ps-compare", 20);
124
154
  } if (rf & 2) {
125
155
  const ctx_r1 = i0.ɵɵnextContext(2);
126
156
  i0.ɵɵproperty("engine", ctx_r1.engine);
127
157
  } }
128
- function PSStudioResourceComponent_Conditional_4_Conditional_10_Conditional_8_Template(rf, ctx) { if (rf & 1) {
129
- const _r10 = i0.ɵɵgetCurrentView();
130
- i0.ɵɵelementStart(0, "mj-conversation-chat-area", 30);
131
- i0.ɵɵlistener("conversationCreated", function PSStudioResourceComponent_Conditional_4_Conditional_10_Conditional_8_Template_mj_conversation_chat_area_conversationCreated_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onChatConversationCreated($event)); })("pendingMessageConsumed", function PSStudioResourceComponent_Conditional_4_Conditional_10_Conditional_8_Template_mj_conversation_chat_area_pendingMessageConsumed_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onChatPendingMessageConsumed()); });
158
+ function PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_12_Template(rf, ctx) { if (rf & 1) {
159
+ const _r13 = i0.ɵɵgetCurrentView();
160
+ i0.ɵɵelementStart(0, "mj-conversation-chat-area", 48);
161
+ i0.ɵɵlistener("conversationCreated", function PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_12_Template_mj_conversation_chat_area_conversationCreated_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onChatConversationCreated($event)); })("pendingMessageConsumed", function PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_12_Template_mj_conversation_chat_area_pendingMessageConsumed_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onChatPendingMessageConsumed()); })("navigationRequest", function PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_12_Template_mj_conversation_chat_area_navigationRequest_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onNavigationRequest($event)); });
132
162
  i0.ɵɵelementEnd();
133
163
  } if (rf & 2) {
134
164
  const ctx_r1 = i0.ɵɵnextContext(3);
135
- i0.ɵɵproperty("Provider", ctx_r1.Provider)("environmentId", ctx_r1.chatEnvironmentId)("currentUser", ctx_r1.currentUser)("conversation", ctx_r1.chatConversation)("conversationId", ctx_r1.chatConversationId)("isNewConversation", ctx_r1.chatIsNewConversation)("suppressNewConversationEmptyState", true)("allowMentions", false)("overlayMode", true)("showExportButton", false)("showShareButton", false)("showArtifactIndicator", false)("showAgentPicker", false)("showAgentModePicker", false)("defaultAgentId", ctx_r1.modelDevAgentId)("pendingMessage", ctx_r1.pendingPrompt)("applicationScope", "Application")("applicationId", ctx_r1.applicationId)("appContext", ctx_r1.chatAppContext);
165
+ i0.ɵɵproperty("Provider", ctx_r1.Provider)("environmentId", ctx_r1.chatEnvironmentId)("currentUser", ctx_r1.currentUser)("conversation", ctx_r1.chatConversation)("conversationId", ctx_r1.chatConversationId)("isNewConversation", ctx_r1.chatIsNewConversation)("suppressNewConversationEmptyState", true)("allowMentions", false)("overlayMode", false)("showExportButton", false)("showShareButton", false)("showArtifactIndicator", true)("showAgentPicker", false)("showAgentModePicker", false)("defaultAgentId", ctx_r1.modelDevAgentId)("pendingMessage", ctx_r1.pendingPrompt)("applicationScope", "Application")("applicationId", ctx_r1.applicationId)("appContext", ctx_r1.chatAppContext);
136
166
  } }
137
- function PSStudioResourceComponent_Conditional_4_Conditional_10_Conditional_9_Template(rf, ctx) { if (rf & 1) {
138
- i0.ɵɵelementStart(0, "div", 29);
139
- i0.ɵɵelement(1, "mj-loading", 31);
167
+ function PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_13_Template(rf, ctx) { if (rf & 1) {
168
+ i0.ɵɵelementStart(0, "div", 47);
169
+ i0.ɵɵelement(1, "mj-loading", 49);
140
170
  i0.ɵɵelementEnd();
141
171
  } }
142
- function PSStudioResourceComponent_Conditional_4_Conditional_10_Template(rf, ctx) { if (rf & 1) {
143
- const _r9 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "aside", 15)(1, "div", 22)(2, "div", 23);
145
- i0.ɵɵelement(3, "i", 24);
146
- i0.ɵɵtext(4, " Model Dev Agent");
172
+ function PSStudioResourceComponent_Conditional_4_Conditional_14_Template(rf, ctx) { if (rf & 1) {
173
+ const _r12 = i0.ɵɵgetCurrentView();
174
+ i0.ɵɵelementStart(0, "as-split-area", 14)(1, "aside", 36)(2, "div", 37)(3, "div", 38);
175
+ i0.ɵɵelement(4, "i", 39);
176
+ i0.ɵɵtext(5, " Model Dev Agent");
147
177
  i0.ɵɵelementEnd();
148
- i0.ɵɵelementStart(5, "button", 25);
149
- i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_Conditional_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeChat()); });
150
- i0.ɵɵelement(6, "i", 26);
151
- i0.ɵɵelementEnd()();
152
- i0.ɵɵelementStart(7, "div", 27);
153
- i0.ɵɵconditionalCreate(8, PSStudioResourceComponent_Conditional_4_Conditional_10_Conditional_8_Template, 1, 19, "mj-conversation-chat-area", 28)(9, PSStudioResourceComponent_Conditional_4_Conditional_10_Conditional_9_Template, 2, 0, "div", 29);
154
- i0.ɵɵelementEnd()();
178
+ i0.ɵɵelementStart(6, "div", 40)(7, "button", 41);
179
+ i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_Conditional_14_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleCopilotExpanded()); });
180
+ i0.ɵɵelement(8, "i", 42);
181
+ i0.ɵɵelementEnd();
182
+ i0.ɵɵelementStart(9, "button", 43);
183
+ i0.ɵɵlistener("click", function PSStudioResourceComponent_Conditional_4_Conditional_14_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeChat()); });
184
+ i0.ɵɵelement(10, "i", 44);
185
+ i0.ɵɵelementEnd()()();
186
+ i0.ɵɵelementStart(11, "div", 45);
187
+ i0.ɵɵconditionalCreate(12, PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_12_Template, 1, 19, "mj-conversation-chat-area", 46)(13, PSStudioResourceComponent_Conditional_4_Conditional_14_Conditional_13_Template, 2, 0, "div", 47);
188
+ i0.ɵɵelementEnd()()();
155
189
  } if (rf & 2) {
156
190
  const ctx_r1 = i0.ɵɵnextContext(2);
157
- i0.ɵɵadvance(8);
158
- i0.ɵɵconditional(ctx_r1.currentUser ? 8 : 9);
191
+ i0.ɵɵproperty("size", ctx_r1.copilotExpanded ? 60 : ctx_r1.copilotSizePct)("minSize", 20)("maxSize", 70);
192
+ i0.ɵɵadvance();
193
+ i0.ɵɵclassProp("expanded", ctx_r1.copilotExpanded);
194
+ i0.ɵɵadvance(6);
195
+ i0.ɵɵproperty("title", ctx_r1.copilotExpanded ? "Collapse panel" : "Expand panel");
196
+ i0.ɵɵadvance();
197
+ i0.ɵɵclassProp("fa-up-right-and-down-left-from-center", !ctx_r1.copilotExpanded)("fa-down-left-and-up-right-to-center", ctx_r1.copilotExpanded);
198
+ i0.ɵɵadvance(4);
199
+ i0.ɵɵconditional(ctx_r1.currentUser ? 12 : 13);
159
200
  } }
160
201
  function PSStudioResourceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
161
- i0.ɵɵelementStart(0, "div", 10)(1, "aside", 11);
162
- i0.ɵɵrepeaterCreate(2, PSStudioResourceComponent_Conditional_4_For_3_Template, 3, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
163
- i0.ɵɵelementEnd();
164
- i0.ɵɵelementStart(4, "section", 12);
165
- i0.ɵɵconditionalCreate(5, PSStudioResourceComponent_Conditional_4_Case_5_Template, 1, 3, "ps-home", 13)(6, PSStudioResourceComponent_Conditional_4_Case_6_Template, 1, 3, "ps-pipelines", 13)(7, PSStudioResourceComponent_Conditional_4_Case_7_Template, 1, 1, "ps-catalog", 14)(8, PSStudioResourceComponent_Conditional_4_Case_8_Template, 1, 3, "ps-experiments", 13)(9, PSStudioResourceComponent_Conditional_4_Case_9_Template, 1, 1, "ps-compare", 14);
166
- i0.ɵɵelementEnd();
167
- i0.ɵɵconditionalCreate(10, PSStudioResourceComponent_Conditional_4_Conditional_10_Template, 10, 1, "aside", 15);
168
- i0.ɵɵelementEnd();
202
+ const _r3 = i0.ɵɵgetCurrentView();
203
+ i0.ɵɵelementStart(0, "div", 11);
204
+ i0.ɵɵconditionalCreate(1, PSStudioResourceComponent_Conditional_4_Conditional_1_Template, 6, 0, "div", 12);
205
+ i0.ɵɵelementStart(2, "as-split", 13);
206
+ i0.ɵɵlistener("dragEnd", function PSStudioResourceComponent_Conditional_4_Template_as_split_dragEnd_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNavSplitDragEnd($event.sizes)); });
207
+ i0.ɵɵconditionalCreate(3, PSStudioResourceComponent_Conditional_4_Conditional_3_Template, 9, 3, "as-split-area", 14);
208
+ i0.ɵɵelementStart(4, "as-split-area", 15)(5, "div", 16)(6, "as-split", 17);
209
+ i0.ɵɵlistener("dragEnd", function PSStudioResourceComponent_Conditional_4_Template_as_split_dragEnd_6_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCopilotSplitDragEnd($event.sizes)); });
210
+ i0.ɵɵelementStart(7, "as-split-area", 15)(8, "section", 18);
211
+ i0.ɵɵconditionalCreate(9, PSStudioResourceComponent_Conditional_4_Case_9_Template, 1, 3, "ps-home", 19)(10, PSStudioResourceComponent_Conditional_4_Case_10_Template, 2, 3, "ps-pipelines", 19)(11, PSStudioResourceComponent_Conditional_4_Case_11_Template, 1, 1, "ps-catalog", 20)(12, PSStudioResourceComponent_Conditional_4_Case_12_Template, 1, 3, "ps-experiments", 19)(13, PSStudioResourceComponent_Conditional_4_Case_13_Template, 1, 1, "ps-compare", 20);
212
+ i0.ɵɵelementEnd()();
213
+ i0.ɵɵconditionalCreate(14, PSStudioResourceComponent_Conditional_4_Conditional_14_Template, 14, 11, "as-split-area", 14);
214
+ i0.ɵɵelementEnd()()()()();
169
215
  } if (rf & 2) {
170
- let tmp_5_0;
216
+ let tmp_13_0;
171
217
  const ctx_r1 = i0.ɵɵnextContext();
172
- i0.ɵɵclassProp("chat-open", ctx_r1.chatOpen);
173
- i0.ɵɵadvance(2);
174
- i0.ɵɵrepeater(ctx_r1.groups);
218
+ i0.ɵɵclassProp("nav-collapsed", ctx_r1.isNavCollapsed)("chat-open", ctx_r1.chatOpen);
219
+ i0.ɵɵadvance();
220
+ i0.ɵɵconditional(ctx_r1.isNavCollapsed ? 1 : -1);
221
+ i0.ɵɵadvance();
222
+ i0.ɵɵproperty("gutterSize", ctx_r1.isNavCollapsed ? 0 : 6);
223
+ i0.ɵɵadvance();
224
+ i0.ɵɵconditional(!ctx_r1.isNavCollapsed ? 3 : -1);
225
+ i0.ɵɵadvance();
226
+ i0.ɵɵproperty("size", ctx_r1.isNavCollapsed ? 100 : 100 - ctx_r1.navSizePct)("minSize", 60);
175
227
  i0.ɵɵadvance(2);
228
+ i0.ɵɵproperty("gutterSize", ctx_r1.chatOpen ? 6 : 0);
229
+ i0.ɵɵadvance();
230
+ i0.ɵɵproperty("size", ctx_r1.chatOpen ? ctx_r1.copilotExpanded ? 40 : ctx_r1.mainSizePct : 100)("minSize", 30);
231
+ i0.ɵɵadvance();
176
232
  i0.ɵɵclassProp("fill", ctx_r1.activeSection === "pipelines");
177
233
  i0.ɵɵattribute("data-testid", "ps-panel-" + ctx_r1.activeSection);
178
234
  i0.ɵɵadvance();
179
- i0.ɵɵconditional((tmp_5_0 = ctx_r1.activeSection) === "home" ? 5 : tmp_5_0 === "pipelines" ? 6 : tmp_5_0 === "catalog" ? 7 : tmp_5_0 === "experiments" ? 8 : tmp_5_0 === "compare" ? 9 : -1);
235
+ i0.ɵɵconditional((tmp_13_0 = ctx_r1.activeSection) === "home" ? 9 : tmp_13_0 === "pipelines" ? 10 : tmp_13_0 === "catalog" ? 11 : tmp_13_0 === "experiments" ? 12 : tmp_13_0 === "compare" ? 13 : -1);
180
236
  i0.ɵɵadvance(5);
181
- i0.ɵɵconditional(ctx_r1.chatOpen ? 10 : -1);
237
+ i0.ɵɵconditional(ctx_r1.chatOpen ? 14 : -1);
182
238
  } }
183
239
  /** Predictive Studio application ID (from `metadata/applications/.predictive-studio-application.json`). */
184
240
  const PREDICTIVE_STUDIO_APP_ID = '299C9272-8D38-40CA-85D4-0980F2C9FAD1';
@@ -202,6 +258,13 @@ let PSStudioResourceComponent = class PSStudioResourceComponent extends PSResour
202
258
  /** The active workbench section (which panel renders). Round-trips through the `section` query param. */
203
259
  activeSection = 'home';
204
260
  sections = STUDIO_SECTIONS;
261
+ pipelinesComponent;
262
+ onCreatePipelineFromCatalog(algo) {
263
+ this.selectSection('pipelines');
264
+ setTimeout(() => {
265
+ this.pipelinesComponent?.openWizard(algo.ID);
266
+ }, 50);
267
+ }
205
268
  // ── docked Model Dev Agent copilot ───────────────────────────────
206
269
  chatOpen = false;
207
270
  pendingPrompt = null;
@@ -210,11 +273,62 @@ let PSStudioResourceComponent = class PSStudioResourceComponent extends PSResour
210
273
  chatConversation = null;
211
274
  chatConversationId = null;
212
275
  chatIsNewConversation = true;
276
+ isNavCollapsed = false;
277
+ navSizePct = 14;
278
+ mainSizePct = 68;
279
+ copilotSizePct = 32;
213
280
  ngOnInit() {
214
281
  super.ngOnInit();
215
282
  const initial = this.GetQueryParams()['section'];
216
283
  if (initial && hasSection(this.sections, initial))
217
284
  this.activeSection = initial;
285
+ this.loadLayoutPrefs();
286
+ }
287
+ toggleNav() {
288
+ this.isNavCollapsed = !this.isNavCollapsed;
289
+ this.saveLayoutPrefs();
290
+ this.cdrLocal.detectChanges();
291
+ }
292
+ onNavSplitDragEnd(sizes) {
293
+ if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number') {
294
+ this.navSizePct = Math.round(sizes[0]);
295
+ this.saveLayoutPrefs();
296
+ }
297
+ }
298
+ onCopilotSplitDragEnd(sizes) {
299
+ if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {
300
+ this.mainSizePct = Math.round(sizes[0]);
301
+ this.copilotSizePct = Math.round(sizes[1]);
302
+ this.saveLayoutPrefs();
303
+ }
304
+ }
305
+ loadLayoutPrefs() {
306
+ const saved = UserInfoEngine.Instance.GetSetting('mj.predictiveStudio.studio.layout');
307
+ if (saved) {
308
+ try {
309
+ const parsed = JSON.parse(saved);
310
+ if (typeof parsed.navSizePct === 'number' && parsed.navSizePct >= 10 && parsed.navSizePct <= 35) {
311
+ this.navSizePct = parsed.navSizePct;
312
+ }
313
+ if (typeof parsed.isNavCollapsed === 'boolean') {
314
+ this.isNavCollapsed = parsed.isNavCollapsed;
315
+ }
316
+ if (typeof parsed.copilotSizePct === 'number' && parsed.copilotSizePct >= 20 && parsed.copilotSizePct <= 60) {
317
+ this.copilotSizePct = parsed.copilotSizePct;
318
+ this.mainSizePct = 100 - this.copilotSizePct;
319
+ }
320
+ }
321
+ catch { }
322
+ }
323
+ }
324
+ saveLayoutPrefs() {
325
+ const prefs = {
326
+ navSizePct: this.navSizePct,
327
+ isNavCollapsed: this.isNavCollapsed,
328
+ copilotSizePct: this.copilotSizePct,
329
+ mainSizePct: this.mainSizePct,
330
+ };
331
+ UserInfoEngine.Instance.SetSettingDebounced('mj.predictiveStudio.studio.layout', JSON.stringify(prefs));
218
332
  }
219
333
  /** React to deep-link / back-forward `section` changes after the initial mount. */
220
334
  OnQueryParamsChanged(params, _source) {
@@ -334,9 +448,23 @@ let PSStudioResourceComponent = class PSStudioResourceComponent extends PSResour
334
448
  closeChat() {
335
449
  this.chatOpen = false;
336
450
  this.pendingPrompt = null;
451
+ this.copilotExpanded = false;
337
452
  this.publishAgentContext();
338
453
  this.cdrLocal.detectChanges();
339
454
  }
455
+ copilotExpanded = false;
456
+ toggleCopilotExpanded() {
457
+ this.copilotExpanded = !this.copilotExpanded;
458
+ this.cdrLocal.detectChanges();
459
+ }
460
+ onNavigationRequest(req) {
461
+ if (req.navItemName === 'Models' || req.queryParams?.['modelId']) {
462
+ void this.navigationService.SwitchToApp(PREDICTIVE_STUDIO_APP_ID, 'Models', req.queryParams);
463
+ }
464
+ else if (req.appName) {
465
+ void this.navigationService.SwitchToApp(req.appName, req.navItemName, req.queryParams);
466
+ }
467
+ }
340
468
  /** Chat-area created its backing conversation on the first send — capture it + leave new-mode so the thread renders. */
341
469
  onChatConversationCreated(event) {
342
470
  this.pendingPrompt = event.pendingMessage ?? null;
@@ -366,10 +494,15 @@ let PSStudioResourceComponent = class PSStudioResourceComponent extends PSResour
366
494
  }
367
495
  }
368
496
  static ɵfac = /*@__PURE__*/ (() => { let ɵPSStudioResourceComponent_BaseFactory; return function PSStudioResourceComponent_Factory(__ngFactoryType__) { return (ɵPSStudioResourceComponent_BaseFactory || (ɵPSStudioResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(PSStudioResourceComponent)))(__ngFactoryType__ || PSStudioResourceComponent); }; })();
369
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSStudioResourceComponent, selectors: [["mj-ps-studio-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 5, consts: [[3, "Title", "Subtitle"], [3, "Flex", "Padding"], ["text", "Loading Studio\u2026", "size", "medium"], ["data-testid", "ps-load-error", "role", "alert", 1, "ps-load-error"], ["data-testid", "ps-studio-shell", 1, "ps-studio-host", 3, "chat-open"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "ps-load-error-text"], [1, "ps-load-error-detail"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-rotate-right"], ["data-testid", "ps-studio-shell", 1, "ps-studio-host"], [1, "ps-leftnav"], [1, "ps-content"], [3, "engine", "provider", "currentUser"], [3, "engine"], ["data-testid", "ps-studio-copilot", 1, "ps-copilot"], [1, "ps-nav-group"], [1, "ps-nav-item", 3, "active"], [1, "ps-nav-item", 3, "click"], [3, "navigate", "askAgent", "engine", "provider", "currentUser"], [3, "askAgent", "engine", "provider", "currentUser"], [3, "askAgent", "engine"], [1, "ps-copilot-head"], [1, "ps-copilot-title"], [1, "fa-solid", "fa-robot"], ["aria-label", "Close agent chat", 1, "ps-copilot-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "ps-copilot-body"], [3, "Provider", "environmentId", "currentUser", "conversation", "conversationId", "isNewConversation", "suppressNewConversationEmptyState", "allowMentions", "overlayMode", "showExportButton", "showShareButton", "showArtifactIndicator", "showAgentPicker", "showAgentModePicker", "defaultAgentId", "pendingMessage", "applicationScope", "applicationId", "appContext"], [1, "ps-copilot-empty"], [3, "conversationCreated", "pendingMessageConsumed", "Provider", "environmentId", "currentUser", "conversation", "conversationId", "isNewConversation", "suppressNewConversationEmptyState", "allowMentions", "overlayMode", "showExportButton", "showShareButton", "showArtifactIndicator", "showAgentPicker", "showAgentModePicker", "defaultAgentId", "pendingMessage", "applicationScope", "applicationId", "appContext"], ["text", "Connecting\u2026", "size", "small"]], template: function PSStudioResourceComponent_Template(rf, ctx) { if (rf & 1) {
370
- i0.ɵɵelement(0, "mj-page-header-interior", 0);
371
- i0.ɵɵelementStart(1, "mj-page-body-interior", 1);
372
- i0.ɵɵconditionalCreate(2, PSStudioResourceComponent_Conditional_2_Template, 1, 0, "mj-loading", 2)(3, PSStudioResourceComponent_Conditional_3_Template, 10, 2, "div", 3)(4, PSStudioResourceComponent_Conditional_4_Template, 11, 7, "div", 4);
497
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PSStudioResourceComponent, selectors: [["mj-ps-studio-resource"]], viewQuery: function PSStudioResourceComponent_Query(rf, ctx) { if (rf & 1) {
498
+ i0.ɵɵviewQuery(_c0, 5);
499
+ } if (rf & 2) {
500
+ let _t;
501
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pipelinesComponent = _t.first);
502
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 5, consts: [["pipelinesComp", ""], [3, "Title", "Subtitle"], [3, "Flex", "Padding"], ["text", "Loading Studio\u2026", "size", "medium"], ["data-testid", "ps-load-error", "role", "alert", 1, "ps-load-error"], ["data-testid", "ps-studio-shell", 1, "ps-studio-host", 3, "nav-collapsed", "chat-open"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "ps-load-error-text"], [1, "ps-load-error-detail"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-rotate-right"], ["data-testid", "ps-studio-shell", 1, "ps-studio-host"], ["role", "region", "aria-label", "Studio navigation (collapsed)", 1, "ps-nav-collapsed-strip"], ["direction", "horizontal", "unit", "percent", 1, "studio-outer-splitter", 3, "dragEnd", "gutterSize"], [3, "size", "minSize", "maxSize"], [3, "size", "minSize"], [1, "ps-studio-workspace"], ["direction", "horizontal", "unit", "percent", 1, "studio-copilot-splitter", 3, "dragEnd", "gutterSize"], [1, "ps-content"], [3, "engine", "provider", "currentUser"], [3, "engine"], ["type", "button", "aria-label", "Expand studio navigation", "title", "Expand navigation", 1, "ps-nav-rail-collapse", 3, "click"], [1, "fa-solid", "fa-chevron-right"], [1, "ps-nav-collapsed-strip-label"], [1, "fa-solid", "fa-flask-vial"], [1, "ps-leftnav"], [1, "ps-leftnav-header"], [1, "ps-leftnav-title"], ["type", "button", "title", "Collapse navigation", "aria-label", "Collapse navigation", 1, "ps-leftnav-collapse-btn", 3, "click"], [1, "fa-solid", "fa-chevron-left"], [1, "ps-nav-group"], [1, "ps-nav-item", 3, "active"], [1, "ps-nav-item", 3, "click"], [3, "navigate", "askAgent", "engine", "provider", "currentUser"], [3, "askAgent", "navigate", "engine", "provider", "currentUser"], [3, "askAgent", "createPipeline", "engine"], ["data-testid", "ps-studio-copilot", 1, "ps-copilot"], [1, "ps-copilot-head"], [1, "ps-copilot-title"], [1, "fa-solid", "fa-robot"], [1, "ps-copilot-actions"], [1, "ps-copilot-btn", 3, "click", "title"], [1, "fa-solid"], ["aria-label", "Close agent chat", 1, "ps-copilot-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "ps-copilot-body"], [3, "Provider", "environmentId", "currentUser", "conversation", "conversationId", "isNewConversation", "suppressNewConversationEmptyState", "allowMentions", "overlayMode", "showExportButton", "showShareButton", "showArtifactIndicator", "showAgentPicker", "showAgentModePicker", "defaultAgentId", "pendingMessage", "applicationScope", "applicationId", "appContext"], [1, "ps-copilot-empty"], [3, "conversationCreated", "pendingMessageConsumed", "navigationRequest", "Provider", "environmentId", "currentUser", "conversation", "conversationId", "isNewConversation", "suppressNewConversationEmptyState", "allowMentions", "overlayMode", "showExportButton", "showShareButton", "showArtifactIndicator", "showAgentPicker", "showAgentModePicker", "defaultAgentId", "pendingMessage", "applicationScope", "applicationId", "appContext"], ["text", "Connecting\u2026", "size", "small"]], template: function PSStudioResourceComponent_Template(rf, ctx) { if (rf & 1) {
503
+ i0.ɵɵelement(0, "mj-page-header-interior", 1);
504
+ i0.ɵɵelementStart(1, "mj-page-body-interior", 2);
505
+ i0.ɵɵconditionalCreate(2, PSStudioResourceComponent_Conditional_2_Template, 1, 0, "mj-loading", 3)(3, PSStudioResourceComponent_Conditional_3_Template, 10, 2, "div", 4)(4, PSStudioResourceComponent_Conditional_4_Template, 15, 17, "div", 5);
373
506
  i0.ɵɵelementEnd();
374
507
  } if (rf & 2) {
375
508
  i0.ɵɵproperty("Title", ctx.activeLabel)("Subtitle", ctx.activeSubtitle);
@@ -377,7 +510,7 @@ let PSStudioResourceComponent = class PSStudioResourceComponent extends PSResour
377
510
  i0.ɵɵproperty("Flex", true)("Padding", false);
378
511
  i0.ɵɵadvance();
379
512
  i0.ɵɵconditional(ctx.isLoading ? 2 : ctx.loadError ? 3 : 4);
380
- } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderInteriorComponent, i1.MJPageBodyInteriorComponent, i2.LoadingComponent, i3.ConversationChatAreaComponent, i4.PSHomeComponent, i5.PSCatalogComponent, i6.PSPipelinesComponent, i7.PSExperimentsComponent, i8.PSCompareComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; }\n .ps-studio-host[_ngcontent-%COMP%] { display: flex; flex: 1; min-height: 0; overflow: hidden; }\n .ps-leftnav[_ngcontent-%COMP%] { width: 210px; flex: none; border-right: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card); overflow-y: auto; padding: 10px 8px; display: flex; flex-direction: column; gap: 2px; }\n .ps-nav-group[_ngcontent-%COMP%] { font-size: var(--mj-text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--mj-text-muted); padding: 12px 10px 4px; }\n .ps-nav-item[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border: none; background: transparent; border-radius: var(--mj-radius-md); cursor: pointer; color: var(--mj-text-secondary); font-size: var(--mj-text-sm); font-weight: 500; transition: background .12s, color .12s; }\n .ps-nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { width: 18px; text-align: center; color: var(--mj-text-muted); }\n .ps-nav-item[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .ps-nav-item.active[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); font-weight: 600; }\n .ps-nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .ps-content[_ngcontent-%COMP%] { flex: 1; min-width: 0; overflow-y: auto; padding: 8px 14px 24px; }\n \n\n .ps-content.fill[_ngcontent-%COMP%] { overflow: hidden; display: flex; flex-direction: column; padding-bottom: 14px; }\n .ps-content.fill[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n .ps-copilot[_ngcontent-%COMP%] { width: 420px; max-width: 42vw; flex: none; border-left: 1px solid var(--mj-border-default); background: var(--mj-bg-surface); display: flex; flex-direction: column; min-height: 0; }\n .ps-copilot-head[_ngcontent-%COMP%] { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid var(--mj-border-default); }\n .ps-copilot-title[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 8px; font-weight: 600; color: var(--mj-text-primary); }\n .ps-copilot-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .ps-copilot-close[_ngcontent-%COMP%] { background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 6px; color: var(--mj-text-muted); }\n .ps-copilot-close[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-secondary); }\n .ps-copilot-body[_ngcontent-%COMP%] { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; }\n .ps-copilot-body[_ngcontent-%COMP%] mj-conversation-chat-area[_ngcontent-%COMP%] { flex: 1; min-height: 0; display: block; }\n .ps-copilot-empty[_ngcontent-%COMP%] { display: flex; align-items: center; justify-content: center; flex: 1; }\n .ps-load-error[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 14px; max-width: 620px; margin: 32px auto; padding: 18px 20px; border: 1px solid var(--mj-status-error-border); background: var(--mj-status-error-bg); border-radius: var(--mj-radius-lg); }\n .ps-load-error[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { font-size: 24px; color: var(--mj-status-error); }\n .ps-load-error-text[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n .ps-load-error-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { color: var(--mj-text-primary); }\n .ps-load-error-detail[_ngcontent-%COMP%] { color: var(--mj-text-secondary); font-size: var(--mj-text-sm); word-break: break-word; }\n @media (max-width: 1100px) { .ps-studio-host.chat-open[_ngcontent-%COMP%] .ps-content[_ngcontent-%COMP%], .ps-studio-host.chat-open[_ngcontent-%COMP%] .ps-leftnav[_ngcontent-%COMP%] { display: none; } .ps-copilot[_ngcontent-%COMP%] { width: 100%; max-width: none; border-left: none; } }"], changeDetection: 0 });
513
+ } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderInteriorComponent, i1.MJPageBodyInteriorComponent, i2.LoadingComponent, i3.ConversationChatAreaComponent, i4.SplitComponent, i4.SplitAreaComponent, i5.PSHomeComponent, i6.PSCatalogComponent, i7.PSPipelinesComponent, i8.PSExperimentsComponent, i9.PSCompareComponent], styles: ["[_nghost-%COMP%] { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; }\n .ps-studio-host[_ngcontent-%COMP%] { display: flex; flex: 1; min-height: 0; overflow: hidden; width: 100%; height: 100%; }\n .studio-outer-splitter[_ngcontent-%COMP%] { flex: 1; width: 100%; height: 100%; min-height: 0; min-width: 0; background: transparent; }\n .studio-outer-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%] { background: transparent; transition: background-color 0.15s ease; position: relative; }\n .studio-outer-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%]:hover { background-color: var(--mj-brand-primary, #6366f1); }\n .studio-outer-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%]::after { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2px; height: 24px; border-radius: 1px; background: var(--mj-border-strong, #cbd5e1); }\n .studio-outer-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%]:hover::after { background: #ffffff; }\n\n .ps-nav-collapsed-strip[_ngcontent-%COMP%] { width: 44px; min-width: 44px; max-width: 44px; flex: none; background: var(--mj-bg-surface); border-right: 1px solid var(--mj-border-default); display: flex; flex-direction: column; align-items: center; padding: 10px 0; gap: 14px; z-index: 2; }\n .ps-nav-rail-collapse[_ngcontent-%COMP%] { background: var(--mj-bg-surface-subtle); border: 1px solid var(--mj-border-default); border-radius: 6px; color: var(--mj-text-secondary); cursor: pointer; display: grid; place-items: center; width: 28px; height: 28px; padding: 0; font-size: 11px; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease; }\n .ps-nav-rail-collapse[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); border-color: var(--mj-border-strong); }\n .ps-nav-collapsed-strip-label[_ngcontent-%COMP%] { writing-mode: vertical-rl; transform: rotate(180deg); font-size: 11px; font-weight: 600; letter-spacing: 0.04em; color: var(--mj-text-muted); display: flex; align-items: center; gap: 8px; text-transform: uppercase; }\n\n .ps-leftnav[_ngcontent-%COMP%] { width: 100%; height: 100%; border-right: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card); overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 2px; box-sizing: border-box; }\n .ps-leftnav-header[_ngcontent-%COMP%] { display: flex; align-items: center; justify-content: space-between; padding: 4px 6px 8px; border-bottom: 1px solid var(--mj-border-subtle); margin-bottom: 4px; }\n .ps-leftnav-title[_ngcontent-%COMP%] { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--mj-text-muted); }\n .ps-leftnav-collapse-btn[_ngcontent-%COMP%] { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 6px; border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface); color: var(--mj-text-muted); cursor: pointer; transition: all 0.15s ease; padding: 0; }\n .ps-leftnav-collapse-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); border-color: var(--mj-border-strong); }\n\n .ps-nav-group[_ngcontent-%COMP%] { font-size: var(--mj-text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--mj-text-muted); padding: 10px 8px 4px; }\n .ps-nav-item[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border: none; background: transparent; border-radius: var(--mj-radius-md); cursor: pointer; color: var(--mj-text-secondary); font-size: var(--mj-text-sm); font-weight: 500; transition: background .12s, color .12s; }\n .ps-nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { width: 18px; text-align: center; color: var(--mj-text-muted); }\n .ps-nav-item[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .ps-nav-item.active[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); font-weight: 600; }\n .ps-nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n .ps-studio-workspace[_ngcontent-%COMP%] { display: flex; flex: 1; width: 100%; height: 100%; min-height: 0; min-width: 0; overflow: hidden; }\n .studio-copilot-splitter[_ngcontent-%COMP%] { flex: 1; width: 100%; height: 100%; min-height: 0; min-width: 0; }\n .studio-copilot-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%] { background: transparent; transition: background-color 0.15s ease; position: relative; }\n .studio-copilot-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%]:hover { background-color: var(--mj-brand-primary, #6366f1); }\n .studio-copilot-splitter[_ngcontent-%COMP%] .as-split-gutter[_ngcontent-%COMP%]::after { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2px; height: 24px; border-radius: 1px; background: var(--mj-border-strong, #cbd5e1); }\n .ps-content[_ngcontent-%COMP%] { width: 100%; height: 100%; flex: 1; min-width: 0; overflow-y: auto; padding: 8px 14px 24px; }\n \n\n .ps-content.fill[_ngcontent-%COMP%] { overflow: hidden; display: flex; flex-direction: column; padding-bottom: 14px; }\n .ps-content.fill[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n .ps-copilot[_ngcontent-%COMP%] { width: 100%; height: 100%; max-width: none; flex: 1; border-left: 1px solid var(--mj-border-default); background: var(--mj-bg-surface); display: flex; flex-direction: column; min-height: 0; }\n .ps-copilot-head[_ngcontent-%COMP%] { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid var(--mj-border-default); }\n .ps-copilot-title[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 8px; font-weight: 600; color: var(--mj-text-primary); }\n .ps-copilot-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .ps-copilot-actions[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n .ps-copilot-btn[_ngcontent-%COMP%] { background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 6px; color: var(--mj-text-muted); }\n .ps-copilot-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-secondary); }\n .ps-copilot-close[_ngcontent-%COMP%] { background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 6px; color: var(--mj-text-muted); }\n .ps-copilot-close[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-secondary); }\n .ps-copilot-body[_ngcontent-%COMP%] { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; }\n .ps-copilot-body[_ngcontent-%COMP%] mj-conversation-chat-area[_ngcontent-%COMP%] { flex: 1; min-height: 0; display: block; }\n .ps-copilot-empty[_ngcontent-%COMP%] { display: flex; align-items: center; justify-content: center; flex: 1; }\n .ps-load-error[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 14px; max-width: 620px; margin: 32px auto; padding: 18px 20px; border: 1px solid var(--mj-status-error-border); background: var(--mj-status-error-bg); border-radius: var(--mj-radius-lg); }\n .ps-load-error[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { font-size: 24px; color: var(--mj-status-error); }\n .ps-load-error-text[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n .ps-load-error-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { color: var(--mj-text-primary); }\n .ps-load-error-detail[_ngcontent-%COMP%] { color: var(--mj-text-secondary); font-size: var(--mj-text-sm); word-break: break-word; }\n @media (max-width: 1100px) { .ps-studio-host.chat-open[_ngcontent-%COMP%] .ps-content[_ngcontent-%COMP%], .ps-studio-host.chat-open[_ngcontent-%COMP%] .ps-leftnav[_ngcontent-%COMP%] { display: none; } .ps-copilot[_ngcontent-%COMP%] { width: 100%; max-width: none; border-left: none; } }"], changeDetection: 0 });
381
514
  };
382
515
  PSStudioResourceComponent = __decorate([
383
516
  RegisterClass(BaseResourceComponent, 'PredictiveStudioStudioResource')
@@ -401,58 +534,96 @@ export { PSStudioResourceComponent };
401
534
  <button mjButton variant="secondary" size="sm" (click)="retryLoad()"><i class="fa-solid fa-rotate-right"></i> Try again</button>
402
535
  </div>
403
536
  } @else {
404
- <div class="ps-studio-host" [class.chat-open]="chatOpen" data-testid="ps-studio-shell">
405
- <aside class="ps-leftnav">
406
- @for (group of groups; track group) {
407
- @if (group) { <div class="ps-nav-group">{{ group }}</div> }
408
- @for (item of itemsForGroup(group); track item.key) {
409
- <button class="ps-nav-item" [class.active]="activeSection === item.key"
410
- [attr.data-testid]="'ps-nav-' + item.key" (click)="selectSection(item.key)">
411
- <i [class]="item.icon"></i> <span>{{ item.label }}</span>
412
- </button>
413
- }
414
- }
415
- </aside>
537
+ <div class="ps-studio-host" [class.nav-collapsed]="isNavCollapsed" [class.chat-open]="chatOpen" data-testid="ps-studio-shell">
538
+ @if (isNavCollapsed) {
539
+ <div class="ps-nav-collapsed-strip" role="region" aria-label="Studio navigation (collapsed)">
540
+ <button class="ps-nav-rail-collapse" type="button" (click)="toggleNav()" aria-label="Expand studio navigation" title="Expand navigation">
541
+ <i class="fa-solid fa-chevron-right"></i>
542
+ </button>
543
+ <div class="ps-nav-collapsed-strip-label"><i class="fa-solid fa-flask-vial"></i> Studio</div>
544
+ </div>
545
+ }
416
546
 
417
- <section class="ps-content" [class.fill]="activeSection === 'pipelines'" [attr.data-testid]="'ps-panel-' + activeSection">
418
- @switch (activeSection) {
419
- @case ('home') { <ps-home [engine]="engine" [provider]="ProviderToUse" [currentUser]="ProviderToUse.CurrentUser" (navigate)="mapNavigate($event)" (askAgent)="onAskAgent($event)"></ps-home> }
420
- @case ('pipelines') { <ps-pipelines [engine]="engine" [provider]="ProviderToUse" [currentUser]="ProviderToUse.CurrentUser" (askAgent)="onAskAgent($event)"></ps-pipelines> }
421
- @case ('catalog') { <ps-catalog [engine]="engine" (askAgent)="onAskAgent($event)"></ps-catalog> }
422
- @case ('experiments') { <ps-experiments [engine]="engine" [provider]="ProviderToUse" [currentUser]="ProviderToUse.CurrentUser"></ps-experiments> }
423
- @case ('compare') { <ps-compare [engine]="engine"></ps-compare> }
547
+ <as-split direction="horizontal" class="studio-outer-splitter" unit="percent" [gutterSize]="isNavCollapsed ? 0 : 6" (dragEnd)="onNavSplitDragEnd($event.sizes)">
548
+ @if (!isNavCollapsed) {
549
+ <as-split-area [size]="navSizePct" [minSize]="10" [maxSize]="30">
550
+ <aside class="ps-leftnav">
551
+ <div class="ps-leftnav-header">
552
+ <span class="ps-leftnav-title">Studio</span>
553
+ <button class="ps-leftnav-collapse-btn" type="button" (click)="toggleNav()" title="Collapse navigation" aria-label="Collapse navigation">
554
+ <i class="fa-solid fa-chevron-left"></i>
555
+ </button>
556
+ </div>
557
+ @for (group of groups; track group) {
558
+ @if (group) { <div class="ps-nav-group">{{ group }}</div> }
559
+ @for (item of itemsForGroup(group); track item.key) {
560
+ <button class="ps-nav-item" [class.active]="activeSection === item.key"
561
+ [attr.data-testid]="'ps-nav-' + item.key" (click)="selectSection(item.key)">
562
+ <i [class]="item.icon"></i> <span>{{ item.label }}</span>
563
+ </button>
564
+ }
565
+ }
566
+ </aside>
567
+ </as-split-area>
424
568
  }
425
- </section>
426
569
 
427
- @if (chatOpen) {
428
- <aside class="ps-copilot" data-testid="ps-studio-copilot">
429
- <div class="ps-copilot-head">
430
- <div class="ps-copilot-title"><i class="fa-solid fa-robot"></i> Model Dev Agent</div>
431
- <button class="ps-copilot-close" (click)="closeChat()" aria-label="Close agent chat"><i class="fa-solid fa-xmark"></i></button>
432
- </div>
433
- <div class="ps-copilot-body">
434
- @if (currentUser) {
435
- <mj-conversation-chat-area
436
- [Provider]="Provider" [environmentId]="chatEnvironmentId" [currentUser]="currentUser"
437
- [conversation]="chatConversation" [conversationId]="chatConversationId" [isNewConversation]="chatIsNewConversation"
438
- [suppressNewConversationEmptyState]="true" [allowMentions]="false" [overlayMode]="true"
439
- [showExportButton]="false" [showShareButton]="false" [showArtifactIndicator]="false"
440
- [showAgentPicker]="false" [showAgentModePicker]="false"
441
- [defaultAgentId]="modelDevAgentId" [pendingMessage]="pendingPrompt"
442
- [applicationScope]="'Application'" [applicationId]="applicationId" [appContext]="chatAppContext"
443
- (conversationCreated)="onChatConversationCreated($event)"
444
- (pendingMessageConsumed)="onChatPendingMessageConsumed()">
445
- </mj-conversation-chat-area>
446
- } @else { <div class="ps-copilot-empty"><mj-loading text="Connecting…" size="small"></mj-loading></div> }
570
+ <as-split-area [size]="isNavCollapsed ? 100 : (100 - navSizePct)" [minSize]="60">
571
+ <div class="ps-studio-workspace">
572
+ <as-split direction="horizontal" class="studio-copilot-splitter" unit="percent" [gutterSize]="chatOpen ? 6 : 0" (dragEnd)="onCopilotSplitDragEnd($event.sizes)">
573
+ <as-split-area [size]="chatOpen ? (copilotExpanded ? 40 : mainSizePct) : 100" [minSize]="30">
574
+ <section class="ps-content" [class.fill]="activeSection === 'pipelines'" [attr.data-testid]="'ps-panel-' + activeSection">
575
+ @switch (activeSection) {
576
+ @case ('home') { <ps-home [engine]="engine" [provider]="ProviderToUse" [currentUser]="ProviderToUse.CurrentUser" (navigate)="mapNavigate($event)" (askAgent)="onAskAgent($event)"></ps-home> }
577
+ @case ('pipelines') { <ps-pipelines #pipelinesComp [engine]="engine" [provider]="ProviderToUse" [currentUser]="ProviderToUse.CurrentUser" (askAgent)="onAskAgent($event)" (navigate)="mapNavigate($event)"></ps-pipelines> }
578
+ @case ('catalog') { <ps-catalog [engine]="engine" (askAgent)="onAskAgent($event)" (createPipeline)="onCreatePipelineFromCatalog($event)"></ps-catalog> }
579
+ @case ('experiments') { <ps-experiments [engine]="engine" [provider]="ProviderToUse" [currentUser]="ProviderToUse.CurrentUser"></ps-experiments> }
580
+ @case ('compare') { <ps-compare [engine]="engine"></ps-compare> }
581
+ }
582
+ </section>
583
+ </as-split-area>
584
+
585
+ @if (chatOpen) {
586
+ <as-split-area [size]="copilotExpanded ? 60 : copilotSizePct" [minSize]="20" [maxSize]="70">
587
+ <aside class="ps-copilot" [class.expanded]="copilotExpanded" data-testid="ps-studio-copilot">
588
+ <div class="ps-copilot-head">
589
+ <div class="ps-copilot-title"><i class="fa-solid fa-robot"></i> Model Dev Agent</div>
590
+ <div class="ps-copilot-actions">
591
+ <button class="ps-copilot-btn" (click)="toggleCopilotExpanded()" [title]="copilotExpanded ? 'Collapse panel' : 'Expand panel'"><i class="fa-solid" [class.fa-up-right-and-down-left-from-center]="!copilotExpanded" [class.fa-down-left-and-up-right-to-center]="copilotExpanded"></i></button>
592
+ <button class="ps-copilot-close" (click)="closeChat()" aria-label="Close agent chat"><i class="fa-solid fa-xmark"></i></button>
593
+ </div>
594
+ </div>
595
+ <div class="ps-copilot-body">
596
+ @if (currentUser) {
597
+ <mj-conversation-chat-area
598
+ [Provider]="Provider" [environmentId]="chatEnvironmentId" [currentUser]="currentUser"
599
+ [conversation]="chatConversation" [conversationId]="chatConversationId" [isNewConversation]="chatIsNewConversation"
600
+ [suppressNewConversationEmptyState]="true" [allowMentions]="false" [overlayMode]="false"
601
+ [showExportButton]="false" [showShareButton]="false" [showArtifactIndicator]="true"
602
+ [showAgentPicker]="false" [showAgentModePicker]="false"
603
+ [defaultAgentId]="modelDevAgentId" [pendingMessage]="pendingPrompt"
604
+ [applicationScope]="'Application'" [applicationId]="applicationId" [appContext]="chatAppContext"
605
+ (conversationCreated)="onChatConversationCreated($event)"
606
+ (pendingMessageConsumed)="onChatPendingMessageConsumed()"
607
+ (navigationRequest)="onNavigationRequest($event)">
608
+ </mj-conversation-chat-area>
609
+ } @else { <div class="ps-copilot-empty"><mj-loading text="Connecting…" size="small"></mj-loading></div> }
610
+ </div>
611
+ </aside>
612
+ </as-split-area>
613
+ }
614
+ </as-split>
447
615
  </div>
448
- </aside>
449
- }
616
+ </as-split-area>
617
+ </as-split>
450
618
  </div>
451
619
  }
452
620
  </mj-page-body-interior>
453
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n :host { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; }\n .ps-studio-host { display: flex; flex: 1; min-height: 0; overflow: hidden; }\n .ps-leftnav { width: 210px; flex: none; border-right: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card); overflow-y: auto; padding: 10px 8px; display: flex; flex-direction: column; gap: 2px; }\n .ps-nav-group { font-size: var(--mj-text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--mj-text-muted); padding: 12px 10px 4px; }\n .ps-nav-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border: none; background: transparent; border-radius: var(--mj-radius-md); cursor: pointer; color: var(--mj-text-secondary); font-size: var(--mj-text-sm); font-weight: 500; transition: background .12s, color .12s; }\n .ps-nav-item i { width: 18px; text-align: center; color: var(--mj-text-muted); }\n .ps-nav-item:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .ps-nav-item.active { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); font-weight: 600; }\n .ps-nav-item.active i { color: var(--mj-brand-primary); }\n .ps-content { flex: 1; min-width: 0; overflow-y: auto; padding: 8px 14px 24px; }\n /* Fill mode (pipelines): the section stops page-scrolling so the panel's inner\n columns (canvas / inspector) can each own their scrollbar. */\n .ps-content.fill { overflow: hidden; display: flex; flex-direction: column; padding-bottom: 14px; }\n .ps-content.fill > * { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n .ps-copilot { width: 420px; max-width: 42vw; flex: none; border-left: 1px solid var(--mj-border-default); background: var(--mj-bg-surface); display: flex; flex-direction: column; min-height: 0; }\n .ps-copilot-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid var(--mj-border-default); }\n .ps-copilot-title { display: flex; align-items: center; gap: 8px; font-weight: 600; color: var(--mj-text-primary); }\n .ps-copilot-title i { color: var(--mj-brand-primary); }\n .ps-copilot-close { background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 6px; color: var(--mj-text-muted); }\n .ps-copilot-close:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-secondary); }\n .ps-copilot-body { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; }\n .ps-copilot-body mj-conversation-chat-area { flex: 1; min-height: 0; display: block; }\n .ps-copilot-empty { display: flex; align-items: center; justify-content: center; flex: 1; }\n .ps-load-error { display: flex; align-items: center; gap: 14px; max-width: 620px; margin: 32px auto; padding: 18px 20px; border: 1px solid var(--mj-status-error-border); background: var(--mj-status-error-bg); border-radius: var(--mj-radius-lg); }\n .ps-load-error > i { font-size: 24px; color: var(--mj-status-error); }\n .ps-load-error-text { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n .ps-load-error-text strong { color: var(--mj-text-primary); }\n .ps-load-error-detail { color: var(--mj-text-secondary); font-size: var(--mj-text-sm); word-break: break-word; }\n @media (max-width: 1100px) { .ps-studio-host.chat-open .ps-content, .ps-studio-host.chat-open .ps-leftnav { display: none; } .ps-copilot { width: 100%; max-width: none; border-left: none; } }\n "] }]
454
- }], null, null); })();
455
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSStudioResourceComponent, { className: "PSStudioResourceComponent", filePath: "src/PredictiveStudio/resources/ps-studio-resource.component.ts", lineNumber: 141 }); })();
621
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n :host { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; }\n .ps-studio-host { display: flex; flex: 1; min-height: 0; overflow: hidden; width: 100%; height: 100%; }\n .studio-outer-splitter { flex: 1; width: 100%; height: 100%; min-height: 0; min-width: 0; background: transparent; }\n .studio-outer-splitter .as-split-gutter { background: transparent; transition: background-color 0.15s ease; position: relative; }\n .studio-outer-splitter .as-split-gutter:hover { background-color: var(--mj-brand-primary, #6366f1); }\n .studio-outer-splitter .as-split-gutter::after { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2px; height: 24px; border-radius: 1px; background: var(--mj-border-strong, #cbd5e1); }\n .studio-outer-splitter .as-split-gutter:hover::after { background: #ffffff; }\n\n .ps-nav-collapsed-strip { width: 44px; min-width: 44px; max-width: 44px; flex: none; background: var(--mj-bg-surface); border-right: 1px solid var(--mj-border-default); display: flex; flex-direction: column; align-items: center; padding: 10px 0; gap: 14px; z-index: 2; }\n .ps-nav-rail-collapse { background: var(--mj-bg-surface-subtle); border: 1px solid var(--mj-border-default); border-radius: 6px; color: var(--mj-text-secondary); cursor: pointer; display: grid; place-items: center; width: 28px; height: 28px; padding: 0; font-size: 11px; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease; }\n .ps-nav-rail-collapse:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); border-color: var(--mj-border-strong); }\n .ps-nav-collapsed-strip-label { writing-mode: vertical-rl; transform: rotate(180deg); font-size: 11px; font-weight: 600; letter-spacing: 0.04em; color: var(--mj-text-muted); display: flex; align-items: center; gap: 8px; text-transform: uppercase; }\n\n .ps-leftnav { width: 100%; height: 100%; border-right: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-card); overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 2px; box-sizing: border-box; }\n .ps-leftnav-header { display: flex; align-items: center; justify-content: space-between; padding: 4px 6px 8px; border-bottom: 1px solid var(--mj-border-subtle); margin-bottom: 4px; }\n .ps-leftnav-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--mj-text-muted); }\n .ps-leftnav-collapse-btn { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 6px; border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface); color: var(--mj-text-muted); cursor: pointer; transition: all 0.15s ease; padding: 0; }\n .ps-leftnav-collapse-btn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); border-color: var(--mj-border-strong); }\n\n .ps-nav-group { font-size: var(--mj-text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--mj-text-muted); padding: 10px 8px 4px; }\n .ps-nav-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 8px 10px; border: none; background: transparent; border-radius: var(--mj-radius-md); cursor: pointer; color: var(--mj-text-secondary); font-size: var(--mj-text-sm); font-weight: 500; transition: background .12s, color .12s; }\n .ps-nav-item i { width: 18px; text-align: center; color: var(--mj-text-muted); }\n .ps-nav-item:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .ps-nav-item.active { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); font-weight: 600; }\n .ps-nav-item.active i { color: var(--mj-brand-primary); }\n\n .ps-studio-workspace { display: flex; flex: 1; width: 100%; height: 100%; min-height: 0; min-width: 0; overflow: hidden; }\n .studio-copilot-splitter { flex: 1; width: 100%; height: 100%; min-height: 0; min-width: 0; }\n .studio-copilot-splitter .as-split-gutter { background: transparent; transition: background-color 0.15s ease; position: relative; }\n .studio-copilot-splitter .as-split-gutter:hover { background-color: var(--mj-brand-primary, #6366f1); }\n .studio-copilot-splitter .as-split-gutter::after { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2px; height: 24px; border-radius: 1px; background: var(--mj-border-strong, #cbd5e1); }\n .ps-content { width: 100%; height: 100%; flex: 1; min-width: 0; overflow-y: auto; padding: 8px 14px 24px; }\n /* Fill mode (pipelines): the section stops page-scrolling so the panel's inner\n columns (canvas / inspector) can each own their scrollbar. */\n .ps-content.fill { overflow: hidden; display: flex; flex-direction: column; padding-bottom: 14px; }\n .ps-content.fill > * { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n .ps-copilot { width: 100%; height: 100%; max-width: none; flex: 1; border-left: 1px solid var(--mj-border-default); background: var(--mj-bg-surface); display: flex; flex-direction: column; min-height: 0; }\n .ps-copilot-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid var(--mj-border-default); }\n .ps-copilot-title { display: flex; align-items: center; gap: 8px; font-weight: 600; color: var(--mj-text-primary); }\n .ps-copilot-title i { color: var(--mj-brand-primary); }\n .ps-copilot-actions { display: flex; align-items: center; gap: 4px; }\n .ps-copilot-btn { background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 6px; color: var(--mj-text-muted); }\n .ps-copilot-btn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-secondary); }\n .ps-copilot-close { background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 6px; color: var(--mj-text-muted); }\n .ps-copilot-close:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-secondary); }\n .ps-copilot-body { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; }\n .ps-copilot-body mj-conversation-chat-area { flex: 1; min-height: 0; display: block; }\n .ps-copilot-empty { display: flex; align-items: center; justify-content: center; flex: 1; }\n .ps-load-error { display: flex; align-items: center; gap: 14px; max-width: 620px; margin: 32px auto; padding: 18px 20px; border: 1px solid var(--mj-status-error-border); background: var(--mj-status-error-bg); border-radius: var(--mj-radius-lg); }\n .ps-load-error > i { font-size: 24px; color: var(--mj-status-error); }\n .ps-load-error-text { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }\n .ps-load-error-text strong { color: var(--mj-text-primary); }\n .ps-load-error-detail { color: var(--mj-text-secondary); font-size: var(--mj-text-sm); word-break: break-word; }\n @media (max-width: 1100px) { .ps-studio-host.chat-open .ps-content, .ps-studio-host.chat-open .ps-leftnav { display: none; } .ps-copilot { width: 100%; max-width: none; border-left: none; } }\n "] }]
622
+ }], null, { pipelinesComponent: [{
623
+ type: ViewChild,
624
+ args: ['pipelinesComp']
625
+ }] }); })();
626
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PSStudioResourceComponent, { className: "PSStudioResourceComponent", filePath: "src/PredictiveStudio/resources/ps-studio-resource.component.ts", lineNumber: 207 }); })();
456
627
  /** Tree-shaking prevention — called from the subpath module so the @RegisterClass survives bundling. */
457
628
  export function LoadPSStudioResource() {
458
629
  // intentionally empty