@memberjunction/ng-dashboards 5.40.2 → 5.42.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 (57) hide show
  1. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +38 -4
  2. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  3. package/dist/AI/components/analytics/ai-analytics-resource.component.js +148 -20
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management-data.d.ts +216 -0
  6. package/dist/AI/components/analytics/realtime/realtime-management-data.d.ts.map +1 -0
  7. package/dist/AI/components/analytics/realtime/realtime-management-data.js +313 -0
  8. package/dist/AI/components/analytics/realtime/realtime-management-data.js.map +1 -0
  9. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts +103 -0
  10. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -0
  11. package/dist/AI/components/analytics/realtime/realtime-management.component.js +1060 -0
  12. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -0
  13. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +87 -0
  14. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts.map +1 -0
  15. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +710 -0
  16. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -0
  17. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +127 -0
  18. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -0
  19. package/dist/AI/components/analytics/realtime/realtime-session-data.js +233 -0
  20. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -0
  21. package/dist/AI/components/analytics/realtime/realtime-sessions.component.d.ts +94 -0
  22. package/dist/AI/components/analytics/realtime/realtime-sessions.component.d.ts.map +1 -0
  23. package/dist/AI/components/analytics/realtime/realtime-sessions.component.js +728 -0
  24. package/dist/AI/components/analytics/realtime/realtime-sessions.component.js.map +1 -0
  25. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +2 -2
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  27. package/dist/AI/components/tags/tags-resource.component.js +2 -2
  28. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  29. package/dist/AI/components/vectors/vector-management-resource.component.js +2 -2
  30. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  31. package/dist/AI/index.d.ts +5 -0
  32. package/dist/AI/index.d.ts.map +1 -1
  33. package/dist/AI/index.js +7 -0
  34. package/dist/AI/index.js.map +1 -1
  35. package/dist/DataExplorer/data-explorer-dashboard.component.js +2 -2
  36. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  37. package/dist/Home/home-dashboard.component.js +12 -8
  38. package/dist/Home/home-dashboard.component.js.map +1 -1
  39. package/dist/Integration/components/connections/connections.component.d.ts +12 -0
  40. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  41. package/dist/Integration/components/connections/connections.component.js +419 -333
  42. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  43. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +5 -5
  44. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  45. package/dist/MCP/mcp-dashboard.component.d.ts +16 -2
  46. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  47. package/dist/MCP/mcp-dashboard.component.js +37 -5
  48. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  49. package/dist/ai-dashboards.module.d.ts +22 -19
  50. package/dist/ai-dashboards.module.d.ts.map +1 -1
  51. package/dist/ai-dashboards.module.js +18 -0
  52. package/dist/ai-dashboards.module.js.map +1 -1
  53. package/dist/core-dashboards.module.d.ts +1 -1
  54. package/dist/core-dashboards.module.d.ts.map +1 -1
  55. package/dist/core-dashboards.module.js +3 -1
  56. package/dist/core-dashboards.module.js.map +1 -1
  57. package/package.json +55 -55
@@ -34,7 +34,15 @@ export declare class AIAnalyticsResourceComponent extends BaseResourceComponent
34
34
  private cdr;
35
35
  private executiveSummary?;
36
36
  private promptRuns?;
37
- ActiveSection: string;
37
+ /**
38
+ * Active analytics section. Implemented as a getter/setter so that changing
39
+ * it recomputes the (section-dependent) filter-field config exactly once,
40
+ * rather than rebuilding the whole FilterFieldConfig[] on every
41
+ * change-detection pass (the field config is template-bound twice).
42
+ */
43
+ private _activeSection;
44
+ get ActiveSection(): string;
45
+ set ActiveSection(value: string);
38
46
  CurrentTimeRange: string;
39
47
  CurrentFilters: GlobalFilterState;
40
48
  /** Single-value SortBy used by Model Performance (lives on the shared chrome). */
@@ -46,7 +54,11 @@ export declare class AIAnalyticsResourceComponent extends BaseResourceComponent
46
54
  text: string;
47
55
  value: string;
48
56
  }[];
49
- /** Vendor options, lazily built from AIEngineBase for Model Performance leaderboard. */
57
+ private _modelOptions;
58
+ private _agentOptions;
59
+ private _promptOptions;
60
+ private _vendorOptions;
61
+ /** Vendor options, built from AIEngineBase for the Model Performance leaderboard. */
50
62
  get vendorOptions(): {
51
63
  text: string;
52
64
  value: string;
@@ -73,7 +85,7 @@ export declare class AIAnalyticsResourceComponent extends BaseResourceComponent
73
85
  text: string;
74
86
  value: string;
75
87
  }[];
76
- /** Built lazily from AIEngineBase. */
88
+ /** Built from AIEngineBase (see recomputeOptionLists). */
77
89
  get modelOptions(): {
78
90
  text: string;
79
91
  value: string;
@@ -86,6 +98,19 @@ export declare class AIAnalyticsResourceComponent extends BaseResourceComponent
86
98
  text: string;
87
99
  value: string;
88
100
  }[];
101
+ /**
102
+ * Build the four option lists from AIEngineBase's cached metadata. Called once
103
+ * after the engine is loaded (ngOnInit). Mirrors the exact map/filter/sort the
104
+ * former getters performed, so the values are identical — just computed once.
105
+ *
106
+ * Accepted staleness tradeoff: these lists are built once after engine load and
107
+ * are NOT reactive — a mid-session AIEngineBase metadata reload (new model/agent/
108
+ * prompt/vendor) would not refresh them until this component is re-created. That
109
+ * is acceptable for an analytics surface (its option lists are near-static within
110
+ * a session); we deliberately do NOT wire observable reactivity here. The former
111
+ * getters re-read the engine on every CD, which was the perf cost we removed.
112
+ */
113
+ private recomputeOptionLists;
89
114
  /** Time-range chip options for the toolbar slot. */
90
115
  get timeRangeChipOptions(): {
91
116
  text: string;
@@ -93,8 +118,17 @@ export declare class AIAnalyticsResourceComponent extends BaseResourceComponent
93
118
  }[];
94
119
  /** Compare-mode visual state (kept on the shell now that analytics-filter-bar is gone). */
95
120
  compareActive: boolean;
96
- /** Build the FilterFieldConfig[] for the popover based on the active section. */
121
+ /**
122
+ * Precomputed popover field config for the active section. Recomputed only when
123
+ * ActiveSection changes (via its setter) or after the option lists load — NOT
124
+ * on every CD pass, even though the template binds this twice (the `@if` guard
125
+ * and the `[Fields]` input).
126
+ */
127
+ private _analyticsFilterFields;
128
+ /** Field config for the popover, based on the active section (precomputed). */
97
129
  get analyticsFilterFields(): FilterFieldConfig[];
130
+ /** Rebuild {@link _analyticsFilterFields} for the current section from the option lists. */
131
+ private recomputeFilterFields;
98
132
  /** Single-value flattened state for the centralized panel (the panel takes scalar values; we hold arrays in CurrentFilters). */
99
133
  get analyticsFilterValues(): Record<string, unknown>;
100
134
  /** Receive popover updates and translate scalar → array shape used by GlobalFilterState. */
@@ -1 +1 @@
1
- {"version":3,"file":"ai-analytics-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/analytics/ai-analytics-resource.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-analytics-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/analytics/ai-analytics-resource.component.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,9 @@ import * as i5 from "./model-performance/model-performance.component";
31
31
  import * as i6 from "./cost-budget/cost-budget.component";
32
32
  import * as i7 from "./error-analysis/error-analysis.component";
33
33
  import * as i8 from "./usage-patterns/usage-patterns.component";
34
+ import * as i9 from "./realtime/realtime-overview.component";
35
+ import * as i10 from "./realtime/realtime-sessions.component";
36
+ import * as i11 from "./realtime/realtime-management.component";
34
37
  const _c0 = ["executiveSummary"];
35
38
  const _c1 = ["promptRuns"];
36
39
  const _forTrack0 = ($index, $item) => $item.value;
@@ -134,6 +137,27 @@ function AIAnalyticsResourceComponent_Case_19_Template(rf, ctx) { if (rf & 1) {
134
137
  const ctx_r1 = i0.ɵɵnextContext();
135
138
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange);
136
139
  } }
140
+ function AIAnalyticsResourceComponent_Case_20_Template(rf, ctx) { if (rf & 1) {
141
+ const _r8 = i0.ɵɵgetCurrentView();
142
+ i0.ɵɵelementStart(0, "app-analytics-realtime-overview", 26);
143
+ i0.ɵɵlistener("SectionNavigate", function AIAnalyticsResourceComponent_Case_20_Template_app_analytics_realtime_overview_SectionNavigate_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSectionChange($event)); });
144
+ i0.ɵɵelementEnd();
145
+ } if (rf & 2) {
146
+ const ctx_r1 = i0.ɵɵnextContext();
147
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange);
148
+ } }
149
+ function AIAnalyticsResourceComponent_Case_21_Template(rf, ctx) { if (rf & 1) {
150
+ i0.ɵɵelement(0, "app-analytics-realtime-sessions", 15);
151
+ } if (rf & 2) {
152
+ const ctx_r1 = i0.ɵɵnextContext();
153
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange);
154
+ } }
155
+ function AIAnalyticsResourceComponent_Case_22_Template(rf, ctx) { if (rf & 1) {
156
+ i0.ɵɵelement(0, "app-realtime-management", 15);
157
+ } if (rf & 2) {
158
+ const ctx_r1 = i0.ɵɵnextContext();
159
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange);
160
+ } }
137
161
  let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends BaseResourceComponent {
138
162
  USER_SETTINGS_KEY = 'AI.Analytics.UserPreferences';
139
163
  settingsPersistSubject = new Subject();
@@ -142,7 +166,22 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
142
166
  cdr = inject(ChangeDetectorRef);
143
167
  executiveSummary;
144
168
  promptRuns;
145
- ActiveSection = 'executive-summary';
169
+ /**
170
+ * Active analytics section. Implemented as a getter/setter so that changing
171
+ * it recomputes the (section-dependent) filter-field config exactly once,
172
+ * rather than rebuilding the whole FilterFieldConfig[] on every
173
+ * change-detection pass (the field config is template-bound twice).
174
+ */
175
+ _activeSection = 'executive-summary';
176
+ get ActiveSection() {
177
+ return this._activeSection;
178
+ }
179
+ set ActiveSection(value) {
180
+ if (value !== this._activeSection) {
181
+ this._activeSection = value;
182
+ this.recomputeFilterFields();
183
+ }
184
+ }
146
185
  CurrentTimeRange = '24h';
147
186
  CurrentFilters = {
148
187
  Models: [],
@@ -162,10 +201,20 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
162
201
  { text: 'By Reliability', value: 'reliability' },
163
202
  { text: 'By Usage', value: 'usage-volume' }
164
203
  ];
165
- /** Vendor options, lazily built from AIEngineBase for Model Performance leaderboard. */
204
+ // ── Precomputed option lists ────────────────────────────────────────────
205
+ // Built ONCE from AIEngineBase's (process-cached, load-once) lists in
206
+ // ngOnInit — see recomputeOptionLists. Each used to be a getter doing
207
+ // .map().sort() (and .filter() for agents) over engine-wide lists; because
208
+ // analyticsFilterFields is template-bound twice they re-ran 2×/CD. The
209
+ // backing fields are read by both the public getters (kept for any external
210
+ // callers) and by recomputeFilterFields.
211
+ _modelOptions = [];
212
+ _agentOptions = [];
213
+ _promptOptions = [];
214
+ _vendorOptions = [];
215
+ /** Vendor options, built from AIEngineBase for the Model Performance leaderboard. */
166
216
  get vendorOptions() {
167
- return AIEngineBase.Instance?.Vendors?.map(v => ({ text: v.Name ?? '', value: v.ID ?? '' }))
168
- ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
217
+ return this._vendorOptions;
169
218
  }
170
219
  /** Per-section filter-bar config — switched on ActiveSection. */
171
220
  get FilterBarConfig() {
@@ -184,6 +233,17 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
184
233
  return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: true, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
185
234
  case 'usage-patterns':
186
235
  return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
236
+ // Realtime Voice sections own their filters internally (search/status/
237
+ // target/user/host live with the grid); only the time-range chips come
238
+ // from the shared chrome. Session data is bucketed daily, so the
239
+ // sub-day ranges are dropped.
240
+ case 'realtime-overview':
241
+ case 'realtime-sessions':
242
+ // Realtime management owns its sub-tab rail + per-surface filters
243
+ // internally; only the time-range chips come from the shared chrome
244
+ // (it windows session history daily, so sub-day ranges are dropped).
245
+ case 'realtime-management':
246
+ return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['24h', '7d', '30d'] };
187
247
  default:
188
248
  return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
189
249
  }
@@ -203,19 +263,39 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
203
263
  { text: 'Pending', value: 'Pending' },
204
264
  { text: 'Canceled', value: 'Canceled' },
205
265
  ];
206
- /** Built lazily from AIEngineBase. */
266
+ /** Built from AIEngineBase (see recomputeOptionLists). */
207
267
  get modelOptions() {
208
- return AIEngineBase.Instance?.Models?.map(m => ({ text: m.Name ?? '', value: m.ID }))
209
- ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
268
+ return this._modelOptions;
210
269
  }
211
270
  get agentOptions() {
212
- return AIEngineBase.Instance?.Agents
271
+ return this._agentOptions;
272
+ }
273
+ get promptOptions() {
274
+ return this._promptOptions;
275
+ }
276
+ /**
277
+ * Build the four option lists from AIEngineBase's cached metadata. Called once
278
+ * after the engine is loaded (ngOnInit). Mirrors the exact map/filter/sort the
279
+ * former getters performed, so the values are identical — just computed once.
280
+ *
281
+ * Accepted staleness tradeoff: these lists are built once after engine load and
282
+ * are NOT reactive — a mid-session AIEngineBase metadata reload (new model/agent/
283
+ * prompt/vendor) would not refresh them until this component is re-created. That
284
+ * is acceptable for an analytics surface (its option lists are near-static within
285
+ * a session); we deliberately do NOT wire observable reactivity here. The former
286
+ * getters re-read the engine on every CD, which was the perf cost we removed.
287
+ */
288
+ recomputeOptionLists() {
289
+ const engine = AIEngineBase.Instance;
290
+ this._modelOptions = engine?.Models?.map(m => ({ text: m.Name ?? '', value: m.ID }))
291
+ ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
292
+ this._agentOptions = engine?.Agents
213
293
  ?.filter(a => a.Status === 'Active')
214
294
  ?.map(a => ({ text: a.Name ?? '', value: a.ID }))
215
295
  ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
216
- }
217
- get promptOptions() {
218
- return AIEngineBase.Instance?.Prompts?.map(p => ({ text: p.Name ?? '', value: p.ID }))
296
+ this._promptOptions = engine?.Prompts?.map(p => ({ text: p.Name ?? '', value: p.ID }))
297
+ ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
298
+ this._vendorOptions = engine?.Vendors?.map(v => ({ text: v.Name ?? '', value: v.ID ?? '' }))
219
299
  ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
220
300
  }
221
301
  /** Time-range chip options for the toolbar slot. */
@@ -224,8 +304,19 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
224
304
  }
225
305
  /** Compare-mode visual state (kept on the shell now that analytics-filter-bar is gone). */
226
306
  compareActive = false;
227
- /** Build the FilterFieldConfig[] for the popover based on the active section. */
307
+ /**
308
+ * Precomputed popover field config for the active section. Recomputed only when
309
+ * ActiveSection changes (via its setter) or after the option lists load — NOT
310
+ * on every CD pass, even though the template binds this twice (the `@if` guard
311
+ * and the `[Fields]` input).
312
+ */
313
+ _analyticsFilterFields = [];
314
+ /** Field config for the popover, based on the active section (precomputed). */
228
315
  get analyticsFilterFields() {
316
+ return this._analyticsFilterFields;
317
+ }
318
+ /** Rebuild {@link _analyticsFilterFields} for the current section from the option lists. */
319
+ recomputeFilterFields() {
229
320
  const cfg = this.FilterBarConfig;
230
321
  const fields = [];
231
322
  if (cfg.ShowModelFilter) {
@@ -286,7 +377,7 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
286
377
  options: [{ text: 'All Vendors', value: '' }, ...this.vendorOptions],
287
378
  });
288
379
  }
289
- return fields;
380
+ this._analyticsFilterFields = fields;
290
381
  }
291
382
  /** Single-value flattened state for the centralized panel (the panel takes scalar values; we hold arrays in CurrentFilters). */
292
383
  get analyticsFilterValues() {
@@ -355,6 +446,13 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
355
446
  Description: 'Failure patterns and root causes' },
356
447
  { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns',
357
448
  Description: 'Volume, frequency, and concurrency over time' },
449
+ { Key: 'divider2' },
450
+ { Label: 'Realtime Voice', Icon: 'fa-solid fa-tower-broadcast', Key: 'realtime-overview',
451
+ Description: 'Operational analytics for voice-agent sessions — sessions, channels, and delegated runs' },
452
+ { Label: 'Voice Sessions', Icon: 'fa-solid fa-table-list', Key: 'realtime-sessions',
453
+ Description: 'Every long-lived agent session — live calls, idle holds, and closed history' },
454
+ { Label: 'Realtime Management', Icon: 'fa-solid fa-satellite-dish', Key: 'realtime-management',
455
+ Description: 'Manage the realtime + bridge surface — live sessions, bridge providers, agent identities, channels, co-agents, history, and metrics' },
358
456
  ];
359
457
  /**
360
458
  * Active section metadata — drives <mj-page-header-interior> Title +
@@ -374,7 +472,7 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
374
472
  get navSections() {
375
473
  const sections = [{ items: [] }];
376
474
  for (const item of this.NavItems) {
377
- if (item.Key === 'divider') {
475
+ if (item.Key.startsWith('divider')) {
378
476
  sections.push({ items: [] });
379
477
  }
380
478
  else {
@@ -394,7 +492,21 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
394
492
  async ngOnInit() {
395
493
  super.ngOnInit();
396
494
  this.setupSettingsDebounce();
495
+ // AIEngineBase is deferred at startup — ensure it's loaded, then build the
496
+ // option lists ONCE so the precomputed filter-field config has real data.
497
+ try {
498
+ await AIEngineBase.Instance.EnsureLoaded();
499
+ }
500
+ catch {
501
+ // Fall through with whatever (possibly empty) cache exists — the option
502
+ // lists tolerate an unloaded engine (same as the former lazy getters).
503
+ }
504
+ this.recomputeOptionLists();
397
505
  await this.loadUserSettings();
506
+ // Final rebuild: covers both the initial section and any section restored
507
+ // from user settings, now that the option lists are populated.
508
+ this.recomputeFilterFields();
509
+ this.cdr.detectChanges();
398
510
  this.NotifyLoadComplete();
399
511
  }
400
512
  ngOnDestroy() {
@@ -410,7 +522,7 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
410
522
  }
411
523
  /** Navigate to a different analytics section */
412
524
  OnSectionChange(key) {
413
- if (key === 'divider' || key === this.ActiveSection) {
525
+ if (key.startsWith('divider') || key === this.ActiveSection) {
414
526
  return;
415
527
  }
416
528
  this.ActiveSection = key;
@@ -511,7 +623,7 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
511
623
  let _t;
512
624
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.executiveSummary = _t.first);
513
625
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.promptRuns = _t.first);
514
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 11, consts: [["executiveSummary", ""], ["promptRuns", ""], ["Title", "AI Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Performance, cost, and usage analytics"], [1, "analytics-shell", 3, "Padding"], ["MobileTitle", "Analytics", 3, "ItemClicked", "Sections", "ActiveId"], [3, "Title", "Subtitle"], ["actions", ""], [3, "ActiveCount", "ShowClearAll"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "toggleable", "selected"], ["mjButton", "", "variant", "secondary", "size", "sm"], ["toolbar", "", 1, "time-range-chips"], [3, "Padding"], [1, "analytics-content"], [3, "TimeRange", "Filters"], [3, "TimeRange", "SortBy", "SelectedVendor"], [3, "TimeRange"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "selectedChange", "toggleable", "selected"], [1, "fa-solid", "fa-code-compare"], [1, "mj-action-label"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-download"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "SectionNavigate", "TimeRange", "Filters"]], template: function AIAnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
626
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 23, vars: 11, consts: [["executiveSummary", ""], ["promptRuns", ""], ["Title", "AI Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Performance, cost, and usage analytics"], [1, "analytics-shell", 3, "Padding"], ["MobileTitle", "Analytics", 3, "ItemClicked", "Sections", "ActiveId"], [3, "Title", "Subtitle"], ["actions", ""], [3, "ActiveCount", "ShowClearAll"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "toggleable", "selected"], ["mjButton", "", "variant", "secondary", "size", "sm"], ["toolbar", "", 1, "time-range-chips"], [3, "Padding"], [1, "analytics-content"], [3, "TimeRange", "Filters"], [3, "TimeRange", "SortBy", "SelectedVendor"], [3, "TimeRange"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "selectedChange", "toggleable", "selected"], [1, "fa-solid", "fa-code-compare"], [1, "mj-action-label"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-download"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "SectionNavigate", "TimeRange", "Filters"], [3, "SectionNavigate", "TimeRange"]], template: function AIAnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
515
627
  i0.ɵɵelementStart(0, "mj-page-layout");
516
628
  i0.ɵɵelement(1, "mj-page-header", 2);
517
629
  i0.ɵɵelementStart(2, "mj-page-body", 3)(3, "mj-left-nav", 4);
@@ -525,7 +637,7 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
525
637
  i0.ɵɵconditionalCreate(10, AIAnalyticsResourceComponent_Conditional_10_Template, 3, 0, "div", 10);
526
638
  i0.ɵɵelementEnd();
527
639
  i0.ɵɵelementStart(11, "mj-page-body-interior", 11)(12, "div", 12);
528
- i0.ɵɵconditionalCreate(13, AIAnalyticsResourceComponent_Case_13_Template, 2, 2, "app-analytics-executive-summary", 13)(14, AIAnalyticsResourceComponent_Case_14_Template, 2, 2, "app-analytics-prompt-runs", 13)(15, AIAnalyticsResourceComponent_Case_15_Template, 1, 2, "app-analytics-agent-runs", 13)(16, AIAnalyticsResourceComponent_Case_16_Template, 1, 3, "app-analytics-model-performance", 14)(17, AIAnalyticsResourceComponent_Case_17_Template, 1, 2, "app-analytics-cost-budget", 13)(18, AIAnalyticsResourceComponent_Case_18_Template, 1, 2, "app-analytics-error-analysis", 13)(19, AIAnalyticsResourceComponent_Case_19_Template, 1, 1, "app-analytics-usage-patterns", 15);
640
+ i0.ɵɵconditionalCreate(13, AIAnalyticsResourceComponent_Case_13_Template, 2, 2, "app-analytics-executive-summary", 13)(14, AIAnalyticsResourceComponent_Case_14_Template, 2, 2, "app-analytics-prompt-runs", 13)(15, AIAnalyticsResourceComponent_Case_15_Template, 1, 2, "app-analytics-agent-runs", 13)(16, AIAnalyticsResourceComponent_Case_16_Template, 1, 3, "app-analytics-model-performance", 14)(17, AIAnalyticsResourceComponent_Case_17_Template, 1, 2, "app-analytics-cost-budget", 13)(18, AIAnalyticsResourceComponent_Case_18_Template, 1, 2, "app-analytics-error-analysis", 13)(19, AIAnalyticsResourceComponent_Case_19_Template, 1, 1, "app-analytics-usage-patterns", 15)(20, AIAnalyticsResourceComponent_Case_20_Template, 1, 1, "app-analytics-realtime-overview", 15)(21, AIAnalyticsResourceComponent_Case_21_Template, 1, 1, "app-analytics-realtime-sessions", 15)(22, AIAnalyticsResourceComponent_Case_22_Template, 1, 1, "app-realtime-management", 15);
529
641
  i0.ɵɵelementEnd()()()()();
530
642
  } if (rf & 2) {
531
643
  let tmp_10_0;
@@ -546,8 +658,8 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
546
658
  i0.ɵɵadvance();
547
659
  i0.ɵɵproperty("Padding", false);
548
660
  i0.ɵɵadvance(2);
549
- i0.ɵɵconditional((tmp_10_0 = ctx.ActiveSection) === "executive-summary" ? 13 : tmp_10_0 === "prompt-runs" ? 14 : tmp_10_0 === "agent-runs" ? 15 : tmp_10_0 === "model-performance" ? 16 : tmp_10_0 === "cost-budget" ? 17 : tmp_10_0 === "error-analysis" ? 18 : tmp_10_0 === "usage-patterns" ? 19 : -1);
550
- } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageHeaderInteriorComponent, i1.MJPageBodyInteriorComponent, i1.MJLeftNavComponent, i1.MJLeftNavContentComponent, i1.MJFilterPopoverComponent, i1.MJFilterPanelComponent, i1.MJFilterChipComponent, i2.AnalyticsExecutiveSummaryComponent, i3.AnalyticsPromptRunsComponent, i4.AnalyticsAgentRunsComponent, i5.AnalyticsModelPerformanceComponent, i6.AnalyticsCostBudgetComponent, i7.AnalyticsErrorAnalysisComponent, i8.AnalyticsUsagePatternsComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n }\n\n .analytics-shell[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n \n\n\n \n\n\n\n\n \n\n\n .analytics-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n \n\n\n .section-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n \n\n\n \n\n\n @media (max-width: 768px) {\n .analytics-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n }\n\n \n\n\n\n @media (max-width: 700px) {\n .analytics-shell[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n }"] });
661
+ i0.ɵɵconditional((tmp_10_0 = ctx.ActiveSection) === "executive-summary" ? 13 : tmp_10_0 === "prompt-runs" ? 14 : tmp_10_0 === "agent-runs" ? 15 : tmp_10_0 === "model-performance" ? 16 : tmp_10_0 === "cost-budget" ? 17 : tmp_10_0 === "error-analysis" ? 18 : tmp_10_0 === "usage-patterns" ? 19 : tmp_10_0 === "realtime-overview" ? 20 : tmp_10_0 === "realtime-sessions" ? 21 : tmp_10_0 === "realtime-management" ? 22 : -1);
662
+ } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageHeaderInteriorComponent, i1.MJPageBodyInteriorComponent, i1.MJLeftNavComponent, i1.MJLeftNavContentComponent, i1.MJFilterPopoverComponent, i1.MJFilterPanelComponent, i1.MJFilterChipComponent, i2.AnalyticsExecutiveSummaryComponent, i3.AnalyticsPromptRunsComponent, i4.AnalyticsAgentRunsComponent, i5.AnalyticsModelPerformanceComponent, i6.AnalyticsCostBudgetComponent, i7.AnalyticsErrorAnalysisComponent, i8.AnalyticsUsagePatternsComponent, i9.AnalyticsRealtimeOverviewComponent, i10.AnalyticsRealtimeSessionsComponent, i11.RealtimeManagementComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n }\n\n .analytics-shell[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n \n\n\n \n\n\n\n\n \n\n\n .analytics-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n \n\n\n .section-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n \n\n\n \n\n\n @media (max-width: 768px) {\n .analytics-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n }\n\n \n\n\n\n @media (max-width: 700px) {\n .analytics-shell[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n }"] });
551
663
  };
552
664
  AIAnalyticsResourceComponent = __decorate([
553
665
  RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')
@@ -669,6 +781,22 @@ export { AIAnalyticsResourceComponent };
669
781
  [TimeRange]="CurrentTimeRange"
670
782
  ></app-analytics-usage-patterns>
671
783
  }
784
+ @case ('realtime-overview') {
785
+ <app-analytics-realtime-overview
786
+ [TimeRange]="CurrentTimeRange"
787
+ (SectionNavigate)="OnSectionChange($event)"
788
+ ></app-analytics-realtime-overview>
789
+ }
790
+ @case ('realtime-sessions') {
791
+ <app-analytics-realtime-sessions
792
+ [TimeRange]="CurrentTimeRange"
793
+ ></app-analytics-realtime-sessions>
794
+ }
795
+ @case ('realtime-management') {
796
+ <app-realtime-management
797
+ [TimeRange]="CurrentTimeRange"
798
+ ></app-realtime-management>
799
+ }
672
800
  }
673
801
  </div>
674
802
  </mj-page-body-interior>
@@ -683,7 +811,7 @@ export { AIAnalyticsResourceComponent };
683
811
  type: ViewChild,
684
812
  args: ['promptRuns']
685
813
  }] }); })();
686
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAnalyticsResourceComponent, { className: "AIAnalyticsResourceComponent", filePath: "src/AI/components/analytics/ai-analytics-resource.component.ts", lineNumber: 241 }); })();
814
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAnalyticsResourceComponent, { className: "AIAnalyticsResourceComponent", filePath: "src/AI/components/analytics/ai-analytics-resource.component.ts", lineNumber: 257 }); })();
687
815
  export function LoadAIAnalyticsResource() {
688
816
  // Prevents tree-shaking of the @RegisterClass decorator
689
817
  }