@memberjunction/ng-dashboards 2.48.0 → 2.49.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 (92) hide show
  1. package/README.md +105 -2
  2. package/dist/AI/ai-dashboard.component.d.ts +2 -0
  3. package/dist/AI/ai-dashboard.component.d.ts.map +1 -1
  4. package/dist/AI/ai-dashboard.component.js +66 -43
  5. package/dist/AI/ai-dashboard.component.js.map +1 -1
  6. package/dist/AI/components/agents/agent-configuration.component.js +45 -58
  7. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  8. package/dist/AI/components/agents/agent-editor.component.d.ts +6 -1
  9. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  10. package/dist/AI/components/agents/agent-editor.component.js +368 -366
  11. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  12. package/dist/AI/components/agents/agent-filter-panel.component.js +83 -85
  13. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  14. package/dist/AI/components/charts/performance-heatmap.component.d.ts +66 -0
  15. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -0
  16. package/dist/AI/components/charts/performance-heatmap.component.js +428 -0
  17. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -0
  18. package/dist/AI/components/charts/time-series-chart.component.d.ts +66 -0
  19. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -0
  20. package/dist/AI/components/charts/time-series-chart.component.js +547 -0
  21. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -0
  22. package/dist/AI/components/execution-monitoring.component.d.ts +157 -5
  23. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  24. package/dist/AI/components/execution-monitoring.component.js +2032 -20
  25. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  26. package/dist/AI/components/models/model-management.component.js +211 -237
  27. package/dist/AI/components/models/model-management.component.js.map +1 -1
  28. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +208 -226
  29. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.js +97 -99
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  32. package/dist/AI/components/prompts/prompt-management.component.js +381 -424
  33. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  34. package/dist/AI/components/prompts/prompt-version-control.component.js +173 -191
  35. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  36. package/dist/AI/components/system/system-config-filter-panel.component.js +85 -87
  37. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  38. package/dist/AI/components/system/system-configuration.component.js +86 -99
  39. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  40. package/dist/AI/components/widgets/kpi-card.component.d.ts +25 -0
  41. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -0
  42. package/dist/AI/components/widgets/kpi-card.component.js +163 -0
  43. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -0
  44. package/dist/AI/components/widgets/live-execution-widget.component.d.ts +25 -0
  45. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -0
  46. package/dist/AI/components/widgets/live-execution-widget.component.js +298 -0
  47. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -0
  48. package/dist/AI/index.d.ts +7 -0
  49. package/dist/AI/index.d.ts.map +1 -0
  50. package/dist/AI/index.js +9 -0
  51. package/dist/AI/index.js.map +1 -0
  52. package/dist/AI/services/ai-instrumentation.service.d.ts +109 -0
  53. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -0
  54. package/dist/AI/services/ai-instrumentation.service.js +490 -0
  55. package/dist/AI/services/ai-instrumentation.service.js.map +1 -0
  56. package/dist/Actions/actions-management-dashboard.component.js +40 -41
  57. package/dist/Actions/actions-management-dashboard.component.js.map +1 -1
  58. package/dist/Actions/components/actions-list-view.component.js +117 -134
  59. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  60. package/dist/Actions/components/actions-overview.component.js +274 -296
  61. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  62. package/dist/Actions/components/categories-list-view.component.js +12 -14
  63. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  64. package/dist/Actions/components/code-management.component.js +12 -14
  65. package/dist/Actions/components/code-management.component.js.map +1 -1
  66. package/dist/Actions/components/entity-integration.component.js +12 -14
  67. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  68. package/dist/Actions/components/execution-monitoring.component.js +238 -256
  69. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  70. package/dist/Actions/components/executions-list-view.component.js +12 -14
  71. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  72. package/dist/Actions/components/scheduled-actions.component.js +12 -14
  73. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  74. package/dist/Actions/components/security-permissions.component.js +12 -14
  75. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  76. package/dist/EntityAdmin/components/entity-details.component.js +105 -107
  77. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
  78. package/dist/EntityAdmin/components/entity-filter-panel.component.js +100 -102
  79. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -1
  80. package/dist/EntityAdmin/components/erd-composite.component.js +84 -100
  81. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -1
  82. package/dist/EntityAdmin/components/erd-diagram.component.js +50 -50
  83. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -1
  84. package/dist/EntityAdmin/entity-admin-dashboard.component.js +45 -49
  85. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  86. package/dist/generic/base-dashboard.js +28 -40
  87. package/dist/generic/base-dashboard.js.map +1 -1
  88. package/dist/module.d.ts +16 -12
  89. package/dist/module.d.ts.map +1 -1
  90. package/dist/module.js +36 -15
  91. package/dist/module.js.map +1 -1
  92. package/package.json +6 -6
package/README.md CHANGED
@@ -191,7 +191,46 @@ interface DashboardConfig {
191
191
 
192
192
  ### State Management
193
193
 
194
- Each dashboard maintains its own state structure that can be persisted:
194
+ Each dashboard maintains its own state structure that can be persisted and restored. The state management pattern follows these principles:
195
+
196
+ 1. **State Initialization**: When a dashboard loads, the `loadData()` method checks for user state in the `Config` property and applies it
197
+ 2. **State Changes**: Components emit state changes via `UserStateChanged` events with debouncing to prevent excessive updates
198
+ 3. **State Persistence**: Parent components should listen to `UserStateChanged` events and persist the state as needed
199
+ 4. **State Restoration**: Pass previously saved state through the `Config.userState` property when initializing the dashboard
200
+
201
+ #### How State Loading Works
202
+
203
+ When a dashboard component initializes:
204
+
205
+ ```typescript
206
+ // In the dashboard's loadData() method
207
+ loadData(): void {
208
+ // Check if we have user state in the Config and apply it
209
+ if (this.Config?.userState) {
210
+ this.loadUserState(this.Config.userState);
211
+ }
212
+
213
+ // Continue with other initialization...
214
+ this.LoadingComplete.emit();
215
+ }
216
+ ```
217
+
218
+ The `loadUserState()` method then applies the saved state to the component and its sub-components:
219
+
220
+ ```typescript
221
+ // Example from AIDashboardComponent
222
+ public loadUserState(state: Partial<AIDashboardState>): void {
223
+ if (state.activeTab) {
224
+ this.activeTab = state.activeTab;
225
+ }
226
+
227
+ // Store sub-component states for when they're rendered
228
+ if (state.executionMonitoringState) {
229
+ this.executionMonitoringState = state.executionMonitoringState;
230
+ }
231
+ // ... other state properties
232
+ }
233
+ ```
195
234
 
196
235
  #### AI Dashboard State
197
236
  ```typescript
@@ -200,9 +239,29 @@ interface AIDashboardState {
200
239
  modelManagementState: any;
201
240
  promptManagementState: any;
202
241
  agentConfigurationState: any;
203
- executionMonitoringState: any;
242
+ executionMonitoringState: ExecutionMonitoringState;
204
243
  systemConfigurationState: any;
205
244
  }
245
+
246
+ // ExecutionMonitoringState includes detailed UI state
247
+ interface ExecutionMonitoringState {
248
+ selectedTimeRange: string;
249
+ refreshInterval: number;
250
+ panelStates: {
251
+ cost: boolean;
252
+ efficiency: boolean;
253
+ executions: boolean;
254
+ };
255
+ drillDownTabs: Array<{
256
+ id: string;
257
+ title: string;
258
+ type: string;
259
+ timestamp?: string;
260
+ metric?: string;
261
+ }>;
262
+ activeTabId: string;
263
+ splitterSizes?: number[];
264
+ }
206
265
  ```
207
266
 
208
267
  #### Entity Admin Dashboard State
@@ -219,6 +278,50 @@ interface DashboardState {
219
278
  }
220
279
  ```
221
280
 
281
+ #### Example: Complete State Management Implementation
282
+
283
+ ```typescript
284
+ // Parent component that uses the AI Dashboard
285
+ @Component({
286
+ template: `
287
+ <mj-ai-dashboard
288
+ [Config]="dashboardConfig"
289
+ (UserStateChanged)="onStateChanged($event)">
290
+ </mj-ai-dashboard>
291
+ `
292
+ })
293
+ export class AIManagementComponent implements OnInit {
294
+ dashboardConfig: DashboardConfig;
295
+
296
+ ngOnInit() {
297
+ // Load saved state from your persistence layer
298
+ const savedState = this.loadSavedState();
299
+
300
+ // Configure dashboard with saved state
301
+ this.dashboardConfig = {
302
+ dashboard: this.dashboardEntity,
303
+ userState: savedState // This will be applied in loadData()
304
+ };
305
+ }
306
+
307
+ onStateChanged(state: AIDashboardState) {
308
+ // Save state changes with debouncing handled by the dashboard
309
+ this.saveState(state);
310
+ }
311
+
312
+ private loadSavedState(): AIDashboardState | null {
313
+ // Load from localStorage, database, or other persistence
314
+ const saved = localStorage.getItem('ai-dashboard-state');
315
+ return saved ? JSON.parse(saved) : null;
316
+ }
317
+
318
+ private saveState(state: AIDashboardState): void {
319
+ // Save to your persistence layer
320
+ localStorage.setItem('ai-dashboard-state', JSON.stringify(state));
321
+ }
322
+ }
323
+ ```
324
+
222
325
  ## Integration with MemberJunction
223
326
 
224
327
  The dashboards are designed to work seamlessly with other MemberJunction packages:
@@ -16,6 +16,7 @@ export declare class AIDashboardComponent extends BaseDashboard implements After
16
16
  promptManagementState: any;
17
17
  agentConfigurationState: any;
18
18
  systemConfigurationState: any;
19
+ executionMonitoringState: any;
19
20
  navigationItems: string[];
20
21
  get navigationConfig(): {
21
22
  text: string;
@@ -38,6 +39,7 @@ export declare class AIDashboardComponent extends BaseDashboard implements After
38
39
  onPromptManagementStateChange(state: any): void;
39
40
  onAgentConfigurationStateChange(state: any): void;
40
41
  onSystemConfigurationStateChange(state: any): void;
42
+ onExecutionMonitoringStateChange(state: any): void;
41
43
  loadUserState(state: Partial<AIDashboardState>): void;
42
44
  onOpenEntityRecord(data: {
43
45
  entityName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/AI/ai-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAM1D,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,qBAAqB,EAAE,GAAG,CAAC;IAC3B,uBAAuB,EAAE,GAAG,CAAC;IAC7B,wBAAwB,EAAE,GAAG,CAAC;IAC9B,wBAAwB,EAAE,GAAG,CAAC;CAC/B;AAED,qBAMa,oBAAqB,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IAElF,SAAS,UAAS;IAClB,SAAS,SAAY;IACrB,aAAa,SAAK;IAGlB,qBAAqB,EAAE,GAAG,CAAQ;IAClC,uBAAuB,EAAE,GAAG,CAAQ;IACpC,wBAAwB,EAAE,GAAG,CAAQ;IAGrC,eAAe,EAAE,MAAM,EAAE,CAA2D;IAE3F,IAAW,gBAAgB;;;;QAQ1B;IAED,IAAW,wBAAwB;;;;QAQlC;IAED,OAAO,CAAC,kBAAkB,CAAmC;;IAO7D,eAAe,IAAI,IAAI;IAKvB,WAAW,IAAI,IAAI;IAIZ,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAW3C,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe;IAahB,6BAA6B,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAK/C,+BAA+B,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKjD,gCAAgC,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKlD,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IASrD,kBAAkB,CAAC,IAAI,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,KAAK,GAAG,IAAI;IAarF,aAAa,IAAI,IAAI;IAYrB,QAAQ,IAAI,IAAI;IAKT,kBAAkB,IAAI,MAAM;yCAhJxB,oBAAoB;2CAApB,oBAAoB;CAqJhC;AAED,wBAAgB,eAAe,SAE9B"}
1
+ {"version":3,"file":"ai-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/AI/ai-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAM1D,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,qBAAqB,EAAE,GAAG,CAAC;IAC3B,uBAAuB,EAAE,GAAG,CAAC;IAC7B,wBAAwB,EAAE,GAAG,CAAC;IAC9B,wBAAwB,EAAE,GAAG,CAAC;CAC/B;AAED,qBAMa,oBAAqB,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IAElF,SAAS,UAAS;IAClB,SAAS,SAAgB;IACzB,aAAa,SAAK;IAGlB,qBAAqB,EAAE,GAAG,CAAQ;IAClC,uBAAuB,EAAE,GAAG,CAAQ;IACpC,wBAAwB,EAAE,GAAG,CAAQ;IACrC,wBAAwB,EAAE,GAAG,CAAQ;IAGrC,eAAe,EAAE,MAAM,EAAE,CAA2D;IAE3F,IAAW,gBAAgB;;;;QAQ1B;IAED,IAAW,wBAAwB;;;;QAQlC;IAED,OAAO,CAAC,kBAAkB,CAAmC;;IAO7D,eAAe,IAAI,IAAI;IAKvB,WAAW,IAAI,IAAI;IAIZ,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMhC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAU3C,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe;IAahB,6BAA6B,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAK/C,+BAA+B,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKjD,gCAAgC,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKlD,gCAAgC,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKlD,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAsBrD,kBAAkB,CAAC,IAAI,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,KAAK,GAAG,IAAI;IAarF,aAAa,IAAI,IAAI;IAYrB,QAAQ,IAAI,IAAI;IAWT,kBAAkB,IAAI,MAAM;yCAvKxB,oBAAoB;2CAApB,oBAAoB;CA4KhC;AAED,wBAAgB,eAAe,SAE9B"}
@@ -27,37 +27,40 @@ function AIDashboardComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
27
27
  } }
28
28
  function AIDashboardComponent_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
29
29
  const _r1 = i0.ɵɵgetCurrentView();
30
- i0.ɵɵelementStart(0, "app-model-management", 11);
30
+ i0.ɵɵelementStart(0, "app-model-management", 12);
31
31
  i0.ɵɵlistener("openEntityRecord", function AIDashboardComponent_Conditional_2_Conditional_2_Template_app_model_management_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
32
32
  i0.ɵɵelementEnd();
33
33
  } }
34
34
  function AIDashboardComponent_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
35
35
  const _r3 = i0.ɵɵgetCurrentView();
36
- i0.ɵɵelementStart(0, "app-prompt-management", 12);
36
+ i0.ɵɵelementStart(0, "app-prompt-management", 13);
37
37
  i0.ɵɵlistener("openEntityRecord", function AIDashboardComponent_Conditional_2_Conditional_3_Template_app_prompt_management_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("stateChange", function AIDashboardComponent_Conditional_2_Conditional_3_Template_app_prompt_management_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPromptManagementStateChange($event)); });
38
38
  i0.ɵɵelementEnd();
39
39
  } }
40
40
  function AIDashboardComponent_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
41
41
  const _r4 = i0.ɵɵgetCurrentView();
42
- i0.ɵɵelementStart(0, "app-agent-configuration", 12);
42
+ i0.ɵɵelementStart(0, "app-agent-configuration", 13);
43
43
  i0.ɵɵlistener("openEntityRecord", function AIDashboardComponent_Conditional_2_Conditional_4_Template_app_agent_configuration_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("stateChange", function AIDashboardComponent_Conditional_2_Conditional_4_Template_app_agent_configuration_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAgentConfigurationStateChange($event)); });
44
44
  i0.ɵɵelementEnd();
45
45
  } }
46
46
  function AIDashboardComponent_Conditional_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
47
47
  const _r5 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "app-execution-monitoring", 11);
49
- i0.ɵɵlistener("openEntityRecord", function AIDashboardComponent_Conditional_2_Conditional_5_Template_app_execution_monitoring_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
48
+ i0.ɵɵelementStart(0, "app-execution-monitoring", 14);
49
+ i0.ɵɵlistener("openEntityRecord", function AIDashboardComponent_Conditional_2_Conditional_5_Template_app_execution_monitoring_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("stateChange", function AIDashboardComponent_Conditional_2_Conditional_5_Template_app_execution_monitoring_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onExecutionMonitoringStateChange($event)); });
50
50
  i0.ɵɵelementEnd();
51
+ } if (rf & 2) {
52
+ const ctx_r1 = i0.ɵɵnextContext(2);
53
+ i0.ɵɵproperty("initialState", ctx_r1.executionMonitoringState);
51
54
  } }
52
55
  function AIDashboardComponent_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
53
56
  const _r6 = i0.ɵɵgetCurrentView();
54
- i0.ɵɵelementStart(0, "app-system-configuration", 12);
57
+ i0.ɵɵelementStart(0, "app-system-configuration", 13);
55
58
  i0.ɵɵlistener("openEntityRecord", function AIDashboardComponent_Conditional_2_Conditional_6_Template_app_system_configuration_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("stateChange", function AIDashboardComponent_Conditional_2_Conditional_6_Template_app_system_configuration_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSystemConfigurationStateChange($event)); });
56
59
  i0.ɵɵelementEnd();
57
60
  } }
58
61
  function AIDashboardComponent_Conditional_2_For_9_Template(rf, ctx) { if (rf & 1) {
59
62
  const _r7 = i0.ɵɵgetCurrentView();
60
- i0.ɵɵelementStart(0, "div", 13);
63
+ i0.ɵɵelementStart(0, "div", 15);
61
64
  i0.ɵɵlistener("click", function AIDashboardComponent_Conditional_2_For_9_Template_div_click_0_listener() { const $index_r8 = i0.ɵɵrestoreView(_r7).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTabChange(ctx_r1.navigationItems[$index_r8])); });
62
65
  i0.ɵɵelement(1, "i");
63
66
  i0.ɵɵelementStart(2, "span");
@@ -73,10 +76,10 @@ function AIDashboardComponent_Conditional_2_For_9_Template(rf, ctx) { if (rf & 1
73
76
  } }
74
77
  function AIDashboardComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
75
78
  i0.ɵɵelementStart(0, "div", 2)(1, "div", 7);
76
- i0.ɵɵtemplate(2, AIDashboardComponent_Conditional_2_Conditional_2_Template, 1, 0, "app-model-management", 8)(3, AIDashboardComponent_Conditional_2_Conditional_3_Template, 1, 0, "app-prompt-management", 8)(4, AIDashboardComponent_Conditional_2_Conditional_4_Template, 1, 0, "app-agent-configuration", 8)(5, AIDashboardComponent_Conditional_2_Conditional_5_Template, 1, 0, "app-execution-monitoring", 8)(6, AIDashboardComponent_Conditional_2_Conditional_6_Template, 1, 0, "app-system-configuration", 8);
79
+ i0.ɵɵtemplate(2, AIDashboardComponent_Conditional_2_Conditional_2_Template, 1, 0, "app-model-management", 8)(3, AIDashboardComponent_Conditional_2_Conditional_3_Template, 1, 0, "app-prompt-management", 8)(4, AIDashboardComponent_Conditional_2_Conditional_4_Template, 1, 0, "app-agent-configuration", 8)(5, AIDashboardComponent_Conditional_2_Conditional_5_Template, 1, 1, "app-execution-monitoring", 9)(6, AIDashboardComponent_Conditional_2_Conditional_6_Template, 1, 0, "app-system-configuration", 8);
77
80
  i0.ɵɵelementEnd();
78
- i0.ɵɵelementStart(7, "div", 9);
79
- i0.ɵɵrepeaterCreate(8, AIDashboardComponent_Conditional_2_For_9_Template, 4, 5, "div", 10, i0.ɵɵrepeaterTrackByIndex);
81
+ i0.ɵɵelementStart(7, "div", 10);
82
+ i0.ɵɵrepeaterCreate(8, AIDashboardComponent_Conditional_2_For_9_Template, 4, 5, "div", 11, i0.ɵɵrepeaterTrackByIndex);
80
83
  i0.ɵɵelementEnd()();
81
84
  } if (rf & 2) {
82
85
  const ctx_r1 = i0.ɵɵnextContext();
@@ -94,36 +97,37 @@ function AIDashboardComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
94
97
  i0.ɵɵrepeater(ctx_r1.navigationConfig);
95
98
  } }
96
99
  let AIDashboardComponent = class AIDashboardComponent extends BaseDashboard {
100
+ isLoading = false;
101
+ activeTab = 'monitoring'; // Default tab changed to monitoring
102
+ selectedIndex = 0; // Track selected navigation index
103
+ // Component states
104
+ promptManagementState = null;
105
+ agentConfigurationState = null;
106
+ systemConfigurationState = null;
107
+ executionMonitoringState = null;
108
+ // Navigation items for bottom navigation - reordered with monitoring first
109
+ navigationItems = ['monitoring', 'prompts', 'agents', 'models', 'config'];
97
110
  get navigationConfig() {
98
111
  return [
99
- { text: 'Models', icon: 'fa-solid fa-microchip', selected: this.activeTab === 'models' },
112
+ { text: 'Monitor', icon: 'fa-solid fa-chart-line', selected: this.activeTab === 'monitoring' },
100
113
  { text: 'Prompts', icon: 'fa-solid fa-comment-dots', selected: this.activeTab === 'prompts' },
101
114
  { text: 'Agents', icon: 'fa-solid fa-robot', selected: this.activeTab === 'agents' },
102
- { text: 'Monitor', icon: 'fa-solid fa-chart-line', selected: this.activeTab === 'monitoring' },
115
+ { text: 'Models', icon: 'fa-solid fa-microchip', selected: this.activeTab === 'models' },
103
116
  { text: 'Config', icon: 'fa-solid fa-cogs', selected: this.activeTab === 'config' }
104
117
  ];
105
118
  }
106
119
  get navigationConfigForKendo() {
107
120
  return [
108
- { text: 'Models', icon: 'gear', selected: this.activeTab === 'models' },
121
+ { text: 'Monitor', icon: 'chart-line', selected: this.activeTab === 'monitoring' },
109
122
  { text: 'Prompts', icon: 'comment', selected: this.activeTab === 'prompts' },
110
123
  { text: 'Agents', icon: 'user', selected: this.activeTab === 'agents' },
111
- { text: 'Monitor', icon: 'chart-line', selected: this.activeTab === 'monitoring' },
124
+ { text: 'Models', icon: 'gear', selected: this.activeTab === 'models' },
112
125
  { text: 'Config', icon: 'cog', selected: this.activeTab === 'config' }
113
126
  ];
114
127
  }
128
+ stateChangeSubject = new Subject();
115
129
  constructor() {
116
130
  super();
117
- this.isLoading = false;
118
- this.activeTab = 'models'; // Default tab
119
- this.selectedIndex = 0; // Track selected navigation index
120
- // Component states
121
- this.promptManagementState = null;
122
- this.agentConfigurationState = null;
123
- this.systemConfigurationState = null;
124
- // Navigation items for bottom navigation
125
- this.navigationItems = ['models', 'prompts', 'agents', 'monitoring', 'config'];
126
- this.stateChangeSubject = new Subject();
127
131
  this.setupStateManagement();
128
132
  }
129
133
  ngAfterViewInit() {
@@ -134,7 +138,6 @@ let AIDashboardComponent = class AIDashboardComponent extends BaseDashboard {
134
138
  this.stateChangeSubject.complete();
135
139
  }
136
140
  onTabChange(tabId) {
137
- console.log('AI Dashboard: Tab changed to:', tabId);
138
141
  this.activeTab = tabId;
139
142
  this.selectedIndex = this.navigationItems.indexOf(tabId);
140
143
  this.emitStateChange();
@@ -146,7 +149,6 @@ let AIDashboardComponent = class AIDashboardComponent extends BaseDashboard {
146
149
  this.selectedIndex = index;
147
150
  this.activeTab = this.navigationItems[index];
148
151
  this.emitStateChange();
149
- console.log('AI Dashboard: Switched to tab:', this.activeTab, 'index:', index);
150
152
  }
151
153
  }
152
154
  setupStateManagement() {
@@ -161,7 +163,7 @@ let AIDashboardComponent = class AIDashboardComponent extends BaseDashboard {
161
163
  modelManagementState: {},
162
164
  promptManagementState: this.promptManagementState || {},
163
165
  agentConfigurationState: this.agentConfigurationState || {},
164
- executionMonitoringState: {},
166
+ executionMonitoringState: this.executionMonitoringState || {},
165
167
  systemConfigurationState: this.systemConfigurationState || {}
166
168
  };
167
169
  this.stateChangeSubject.next(state);
@@ -178,12 +180,28 @@ let AIDashboardComponent = class AIDashboardComponent extends BaseDashboard {
178
180
  this.systemConfigurationState = state;
179
181
  this.emitStateChange();
180
182
  }
183
+ onExecutionMonitoringStateChange(state) {
184
+ this.executionMonitoringState = state;
185
+ this.emitStateChange();
186
+ }
181
187
  loadUserState(state) {
182
188
  if (state.activeTab) {
183
189
  this.activeTab = state.activeTab;
184
190
  this.selectedIndex = this.navigationItems.indexOf(state.activeTab);
185
191
  }
186
- // Load sub-component states as they're implemented
192
+ // Store component states for when they're rendered
193
+ if (state.executionMonitoringState) {
194
+ this.executionMonitoringState = state.executionMonitoringState;
195
+ }
196
+ if (state.promptManagementState) {
197
+ this.promptManagementState = state.promptManagementState;
198
+ }
199
+ if (state.agentConfigurationState) {
200
+ this.agentConfigurationState = state.agentConfigurationState;
201
+ }
202
+ if (state.systemConfigurationState) {
203
+ this.systemConfigurationState = state.systemConfigurationState;
204
+ }
187
205
  }
188
206
  // Handle entity record opening from sub-components
189
207
  onOpenEntityRecord(data) {
@@ -213,33 +231,38 @@ let AIDashboardComponent = class AIDashboardComponent extends BaseDashboard {
213
231
  }
214
232
  loadData() {
215
233
  // Load any initial data needed for the AI dashboard
216
- // This can be expanded to load configuration data, recent activities, etc.
234
+ // Check if we have user state in the Config and apply it
235
+ if (this.Config?.userState) {
236
+ this.loadUserState(this.Config.userState);
237
+ }
238
+ // Emit loading complete event
239
+ this.LoadingComplete.emit();
217
240
  }
218
241
  getCurrentTabLabel() {
219
242
  const tabIndex = this.navigationItems.indexOf(this.activeTab);
220
- const labels = ['Models', 'Prompts', 'Agents', 'Monitor', 'Config'];
243
+ const labels = ['Monitor', 'Prompts', 'Agents', 'Models', 'Config'];
221
244
  return tabIndex >= 0 ? labels[tabIndex] : 'AI Administration';
222
245
  }
246
+ static ɵfac = function AIDashboardComponent_Factory(t) { return new (t || AIDashboardComponent)(); };
247
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIDashboardComponent, selectors: [["mj-ai-dashboard"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 4, consts: [["mjFillContainer", "", 1, "ai-dashboard-container", 3, "rightMargin", "bottomMargin"], [1, "loading-container"], [1, "dashboard-content-wrapper"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "dashboard-content"], ["mjFillContainer", ""], ["mjFillContainer", "", 3, "initialState"], [1, "ai-dashboard-nav"], [1, "nav-item", 3, "active"], ["mjFillContainer", "", 3, "openEntityRecord"], ["mjFillContainer", "", 3, "openEntityRecord", "stateChange"], ["mjFillContainer", "", 3, "openEntityRecord", "stateChange", "initialState"], [1, "nav-item", 3, "click"]], template: function AIDashboardComponent_Template(rf, ctx) { if (rf & 1) {
248
+ i0.ɵɵelementStart(0, "div", 0);
249
+ i0.ɵɵtemplate(1, AIDashboardComponent_Conditional_1_Template, 8, 0, "div", 1)(2, AIDashboardComponent_Conditional_2_Template, 10, 5, "div", 2);
250
+ i0.ɵɵelementEnd();
251
+ } if (rf & 2) {
252
+ i0.ɵɵproperty("rightMargin", 8)("bottomMargin", 8);
253
+ i0.ɵɵadvance();
254
+ i0.ɵɵconditional(ctx.isLoading ? 1 : -1);
255
+ i0.ɵɵadvance();
256
+ i0.ɵɵconditional(!ctx.isLoading ? 2 : -1);
257
+ } }, dependencies: [i1.FillContainer, i2.ModelManagementComponent, i3.PromptManagementComponent, i4.AgentConfigurationComponent, i5.ExecutionMonitoringComponent, i6.SystemConfigurationComponent], styles: [".ai-dashboard-container[_ngcontent-%COMP%] {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n }\n \n .current-tab-info {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.dashboard-content-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.dashboard-content[_ngcontent-%COMP%] {\n overflow: hidden;\n flex: 1;\n}\n\n.ai-dashboard-nav[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: flex;\n background: white;\n border-top: 1px solid #e0e0e0;\n padding: 0;\n \n .nav-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #666;\n font-size: 12px;\n border-right: 1px solid #e0e0e0;\n \n &:last-child {\n border-right: none;\n }\n \n &:hover {\n background-color: #f5f5f5;\n color: #2196f3;\n }\n \n &.active {\n background-color: #e3f2fd;\n color: #2196f3;\n font-weight: 600;\n \n i {\n color: #2196f3;\n }\n }\n \n i {\n font-size: 18px;\n margin-bottom: 4px;\n color: inherit;\n }\n \n span {\n font-size: 11px;\n text-align: center;\n line-height: 1.2;\n }\n }\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n position: relative;\n width: 60px;\n height: 60px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #666;\n font-weight: 500;\n text-align: center;\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"] });
223
258
  };
224
- AIDashboardComponent.ɵfac = function AIDashboardComponent_Factory(t) { return new (t || AIDashboardComponent)(); };
225
- AIDashboardComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIDashboardComponent, selectors: [["mj-ai-dashboard"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 4, consts: [["mjFillContainer", "", 1, "ai-dashboard-container", 3, "rightMargin", "bottomMargin"], [1, "loading-container"], [1, "dashboard-content-wrapper"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "dashboard-content"], ["mjFillContainer", ""], [1, "ai-dashboard-nav"], [1, "nav-item", 3, "active"], ["mjFillContainer", "", 3, "openEntityRecord"], ["mjFillContainer", "", 3, "openEntityRecord", "stateChange"], [1, "nav-item", 3, "click"]], template: function AIDashboardComponent_Template(rf, ctx) { if (rf & 1) {
226
- i0.ɵɵelementStart(0, "div", 0);
227
- i0.ɵɵtemplate(1, AIDashboardComponent_Conditional_1_Template, 8, 0, "div", 1)(2, AIDashboardComponent_Conditional_2_Template, 10, 5, "div", 2);
228
- i0.ɵɵelementEnd();
229
- } if (rf & 2) {
230
- i0.ɵɵproperty("rightMargin", 8)("bottomMargin", 8);
231
- i0.ɵɵadvance();
232
- i0.ɵɵconditional(ctx.isLoading ? 1 : -1);
233
- i0.ɵɵadvance();
234
- i0.ɵɵconditional(!ctx.isLoading ? 2 : -1);
235
- } }, dependencies: [i1.FillContainer, i2.ModelManagementComponent, i3.PromptManagementComponent, i4.AgentConfigurationComponent, i5.ExecutionMonitoringComponent, i6.SystemConfigurationComponent], styles: [".ai-dashboard-container[_ngcontent-%COMP%] {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n }\n \n .current-tab-info {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.dashboard-content-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.dashboard-content[_ngcontent-%COMP%] {\n overflow: hidden;\n flex: 1;\n}\n\n.ai-dashboard-nav[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: flex;\n background: white;\n border-top: 1px solid #e0e0e0;\n padding: 0;\n \n .nav-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #666;\n font-size: 12px;\n border-right: 1px solid #e0e0e0;\n \n &:last-child {\n border-right: none;\n }\n \n &:hover {\n background-color: #f5f5f5;\n color: #2196f3;\n }\n \n &.active {\n background-color: #e3f2fd;\n color: #2196f3;\n font-weight: 600;\n \n i {\n color: #2196f3;\n }\n }\n \n i {\n font-size: 18px;\n margin-bottom: 4px;\n color: inherit;\n }\n \n span {\n font-size: 11px;\n text-align: center;\n line-height: 1.2;\n }\n }\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n position: relative;\n width: 60px;\n height: 60px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #666;\n font-weight: 500;\n text-align: center;\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"] });
236
259
  AIDashboardComponent = __decorate([
237
260
  RegisterClass(BaseDashboard, 'AIDashboard')
238
261
  ], AIDashboardComponent);
239
262
  export { AIDashboardComponent };
240
263
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIDashboardComponent, [{
241
264
  type: Component,
242
- args: [{ selector: 'mj-ai-dashboard', template: "<div class=\"ai-dashboard-container\" mjFillContainer [rightMargin]=\"8\" [bottomMargin]=\"8\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading AI Dashboard...</div>\n </div>\n </div>\n }\n \n @if (!isLoading) {\n <div class=\"dashboard-content-wrapper\">\n <div class=\"dashboard-content\">\n @if (activeTab === 'models') {\n <app-model-management\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n mjFillContainer>\n </app-model-management>\n }\n \n @if (activeTab === 'prompts') {\n <app-prompt-management\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onPromptManagementStateChange($event)\"\n mjFillContainer>\n </app-prompt-management>\n }\n \n @if (activeTab === 'agents') {\n <app-agent-configuration\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onAgentConfigurationStateChange($event)\"\n mjFillContainer>\n </app-agent-configuration>\n }\n \n @if (activeTab === 'monitoring') {\n <app-execution-monitoring\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n mjFillContainer>\n </app-execution-monitoring>\n }\n \n @if (activeTab === 'config') {\n <app-system-configuration\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onSystemConfigurationStateChange($event)\"\n mjFillContainer>\n </app-system-configuration>\n }\n </div>\n \n <div class=\"ai-dashboard-nav\">\n @for (navItem of navigationConfig; track $index) {\n <div \n class=\"nav-item\"\n [class.active]=\"navItem.selected\"\n (click)=\"onTabChange(navigationItems[$index])\">\n <i [class]=\"navItem.icon\"></i>\n <span>{{ navItem.text }}</span>\n </div>\n }\n </div>\n </div>\n }\n</div>", styles: [".ai-dashboard-container {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n }\n \n .current-tab-info {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.dashboard-content-wrapper {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.dashboard-content {\n overflow: hidden;\n flex: 1;\n}\n\n.ai-dashboard-nav {\n flex-shrink: 0;\n display: flex;\n background: white;\n border-top: 1px solid #e0e0e0;\n padding: 0;\n \n .nav-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #666;\n font-size: 12px;\n border-right: 1px solid #e0e0e0;\n \n &:last-child {\n border-right: none;\n }\n \n &:hover {\n background-color: #f5f5f5;\n color: #2196f3;\n }\n \n &.active {\n background-color: #e3f2fd;\n color: #2196f3;\n font-weight: 600;\n \n i {\n color: #2196f3;\n }\n }\n \n i {\n font-size: 18px;\n margin-bottom: 4px;\n color: inherit;\n }\n \n span {\n font-size: 11px;\n text-align: center;\n line-height: 1.2;\n }\n }\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n}\n\n.spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n}\n\n.loading-text {\n font-size: 14px;\n color: #666;\n font-weight: 500;\n text-align: center;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"] }]
265
+ args: [{ selector: 'mj-ai-dashboard', template: "<div class=\"ai-dashboard-container\" mjFillContainer [rightMargin]=\"8\" [bottomMargin]=\"8\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">Loading AI Dashboard...</div>\n </div>\n </div>\n }\n \n @if (!isLoading) {\n <div class=\"dashboard-content-wrapper\">\n <div class=\"dashboard-content\">\n @if (activeTab === 'models') {\n <app-model-management\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n mjFillContainer>\n </app-model-management>\n }\n \n @if (activeTab === 'prompts') {\n <app-prompt-management\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onPromptManagementStateChange($event)\"\n mjFillContainer>\n </app-prompt-management>\n }\n \n @if (activeTab === 'agents') {\n <app-agent-configuration\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onAgentConfigurationStateChange($event)\"\n mjFillContainer>\n </app-agent-configuration>\n }\n \n @if (activeTab === 'monitoring') {\n <app-execution-monitoring\n [initialState]=\"executionMonitoringState\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onExecutionMonitoringStateChange($event)\"\n mjFillContainer>\n </app-execution-monitoring>\n }\n \n @if (activeTab === 'config') {\n <app-system-configuration\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (stateChange)=\"onSystemConfigurationStateChange($event)\"\n mjFillContainer>\n </app-system-configuration>\n }\n </div>\n \n <div class=\"ai-dashboard-nav\">\n @for (navItem of navigationConfig; track $index) {\n <div \n class=\"nav-item\"\n [class.active]=\"navItem.selected\"\n (click)=\"onTabChange(navigationItems[$index])\">\n <i [class]=\"navItem.icon\"></i>\n <span>{{ navItem.text }}</span>\n </div>\n }\n </div>\n </div>\n }\n</div>", styles: [".ai-dashboard-container {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n }\n \n .current-tab-info {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.dashboard-content-wrapper {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.dashboard-content {\n overflow: hidden;\n flex: 1;\n}\n\n.ai-dashboard-nav {\n flex-shrink: 0;\n display: flex;\n background: white;\n border-top: 1px solid #e0e0e0;\n padding: 0;\n \n .nav-item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #666;\n font-size: 12px;\n border-right: 1px solid #e0e0e0;\n \n &:last-child {\n border-right: none;\n }\n \n &:hover {\n background-color: #f5f5f5;\n color: #2196f3;\n }\n \n &.active {\n background-color: #e3f2fd;\n color: #2196f3;\n font-weight: 600;\n \n i {\n color: #2196f3;\n }\n }\n \n i {\n font-size: 18px;\n margin-bottom: 4px;\n color: inherit;\n }\n \n span {\n font-size: 11px;\n text-align: center;\n line-height: 1.2;\n }\n }\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner {\n position: relative;\n width: 60px;\n height: 60px;\n}\n\n.spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1.5s linear infinite;\n \n &:nth-child(1) {\n border-top-color: #2196f3;\n animation-delay: 0s;\n }\n \n &:nth-child(2) {\n border-top-color: #9c27b0;\n animation-delay: 0.3s;\n transform: scale(0.8);\n }\n \n &:nth-child(3) {\n border-top-color: #ff6b35;\n animation-delay: 0.6s;\n transform: scale(0.6);\n }\n}\n\n.loading-text {\n font-size: 14px;\n color: #666;\n font-weight: 500;\n text-align: center;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"] }]
243
266
  }], () => [], null); })();
244
267
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIDashboardComponent, { className: "AIDashboardComponent", filePath: "src/AI/ai-dashboard.component.ts", lineNumber: 23 }); })();
245
268
  export function LoadAIDashboard() {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-dashboard.component.js","sourceRoot":"","sources":["../../src/AI/ai-dashboard.component.ts","../../src/AI/ai-dashboard.component.html"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-dashboard.component.js","sourceRoot":"","sources":["../../src/AI/ai-dashboard.component.ts","../../src/AI/ai-dashboard.component.html"],"names":[],"mappings":"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"}