@memberjunction/ng-dashboards 5.35.0 → 5.37.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 (159) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.js +3 -3
  2. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  3. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
  10. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  11. package/dist/AI/components/models/model-management.component.js +4 -4
  12. package/dist/AI/components/models/model-management.component.js.map +1 -1
  13. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  14. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  15. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  16. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  17. package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
  18. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  19. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  20. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  21. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  22. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  23. package/dist/Actions/components/actions-overview.component.js +137 -142
  24. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  25. package/dist/Actions/components/execution-monitoring.component.js +111 -116
  26. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  27. package/dist/Admin/admin-data-schema.component.js +13 -65
  28. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  29. package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
  30. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  31. package/dist/Admin/admin-identity-access.component.js +13 -65
  32. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  33. package/dist/Admin/admin-monitoring.component.js +13 -65
  34. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  35. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  36. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  37. package/dist/Admin/base-admin-container.component.js +26 -17
  38. package/dist/Admin/base-admin-container.component.js.map +1 -1
  39. package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
  40. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  41. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  42. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  43. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  44. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  45. package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
  46. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  47. package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
  48. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  49. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
  50. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  51. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  52. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  53. package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
  54. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  55. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  56. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  57. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
  58. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  59. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  60. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  61. package/dist/DevTools/app-state-inspector.component.js +46 -72
  62. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  63. package/dist/DevTools/class-registry.component.js +88 -100
  64. package/dist/DevTools/class-registry.component.js.map +1 -1
  65. package/dist/DevTools/event-monitor.component.js +158 -168
  66. package/dist/DevTools/event-monitor.component.js.map +1 -1
  67. package/dist/DevTools/graphql-console.component.js +257 -264
  68. package/dist/DevTools/graphql-console.component.js.map +1 -1
  69. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  70. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  71. package/dist/DevTools/layout-inspector.component.js +46 -64
  72. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  73. package/dist/DevTools/lazy-module-status.component.js +75 -84
  74. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  75. package/dist/DevTools/settings-explorer.component.js +76 -85
  76. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  77. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  78. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  79. package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
  80. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  81. package/dist/Integration/components/activity/activity.component.js +97 -99
  82. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  83. package/dist/Integration/components/connections/connections.component.js +842 -855
  84. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  85. package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
  86. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  87. package/dist/Integration/components/schedules/schedules.component.js +78 -89
  88. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  89. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  90. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  91. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
  92. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  93. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  94. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  95. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
  96. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  97. package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
  98. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  99. package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
  100. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  101. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  102. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  103. package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
  104. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  105. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  106. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  107. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  108. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  109. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  110. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  111. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  112. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  113. package/dist/Lists/index.d.ts +1 -0
  114. package/dist/Lists/index.d.ts.map +1 -1
  115. package/dist/Lists/index.js +1 -0
  116. package/dist/Lists/index.js.map +1 -1
  117. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  118. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  119. package/dist/Lists/services/list-set-operations.service.js +236 -10
  120. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  121. package/dist/MCP/mcp-dashboard.component.js +19 -19
  122. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  123. package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
  124. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  125. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  126. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  127. package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
  128. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  129. package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
  130. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  131. package/dist/Testing/components/testing-explorer.component.js +543 -629
  132. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  133. package/dist/Testing/testing-dashboard.component.js +50 -49
  134. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  135. package/dist/ai-dashboards.module.d.ts +1 -1
  136. package/dist/ai-dashboards.module.d.ts.map +1 -1
  137. package/dist/ai-dashboards.module.js +16 -1
  138. package/dist/ai-dashboards.module.js.map +1 -1
  139. package/dist/communication-dashboards.module.d.ts +9 -7
  140. package/dist/communication-dashboards.module.d.ts.map +1 -1
  141. package/dist/communication-dashboards.module.js +13 -4
  142. package/dist/communication-dashboards.module.js.map +1 -1
  143. package/dist/core-dashboards.module.d.ts +1 -1
  144. package/dist/core-dashboards.module.d.ts.map +1 -1
  145. package/dist/core-dashboards.module.js +16 -1
  146. package/dist/core-dashboards.module.js.map +1 -1
  147. package/dist/lists-dashboards.module.d.ts +10 -9
  148. package/dist/lists-dashboards.module.d.ts.map +1 -1
  149. package/dist/lists-dashboards.module.js +13 -2
  150. package/dist/lists-dashboards.module.js.map +1 -1
  151. package/dist/public-api.d.ts +1 -0
  152. package/dist/public-api.d.ts.map +1 -1
  153. package/dist/public-api.js +1 -0
  154. package/dist/public-api.js.map +1 -1
  155. package/dist/testing-dashboards.module.d.ts +1 -1
  156. package/dist/testing-dashboards.module.d.ts.map +1 -1
  157. package/dist/testing-dashboards.module.js +13 -1
  158. package/dist/testing-dashboards.module.js.map +1 -1
  159. package/package.json +53 -52
@@ -33,143 +33,101 @@ import * as i7 from "./error-analysis/error-analysis.component";
33
33
  import * as i8 from "./usage-patterns/usage-patterns.component";
34
34
  const _c0 = ["executiveSummary"];
35
35
  const _c1 = ["promptRuns"];
36
- const _forTrack0 = ($index, $item) => $item.Key;
37
- const _forTrack1 = ($index, $item) => $item.value;
38
- function AIAnalyticsResourceComponent_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
36
+ const _forTrack0 = ($index, $item) => $item.value;
37
+ function AIAnalyticsResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
39
38
  const _r1 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "mj-filter-popover", 14);
41
- i0.ɵɵlistener("ClearAllRequested", function AIAnalyticsResourceComponent_Conditional_2_Conditional_1_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.resetPopoverFilters()); });
42
- i0.ɵɵelementStart(1, "mj-filter-panel", 15);
43
- i0.ɵɵlistener("ValuesChange", function AIAnalyticsResourceComponent_Conditional_2_Conditional_1_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onAnalyticsFilterValuesChange($event)); })("Reset", function AIAnalyticsResourceComponent_Conditional_2_Conditional_1_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.resetPopoverFilters()); });
39
+ i0.ɵɵelementStart(0, "mj-filter-popover", 16);
40
+ i0.ɵɵlistener("ClearAllRequested", function AIAnalyticsResourceComponent_Conditional_7_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.resetPopoverFilters()); });
41
+ i0.ɵɵelementStart(1, "mj-filter-panel", 17);
42
+ i0.ɵɵlistener("ValuesChange", function AIAnalyticsResourceComponent_Conditional_7_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onAnalyticsFilterValuesChange($event)); })("Reset", function AIAnalyticsResourceComponent_Conditional_7_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.resetPopoverFilters()); });
44
43
  i0.ɵɵelementEnd()();
45
44
  } if (rf & 2) {
46
- const ctx_r1 = i0.ɵɵnextContext(2);
45
+ const ctx_r1 = i0.ɵɵnextContext();
47
46
  i0.ɵɵproperty("ActiveCount", ctx_r1.ActiveFilterCount)("ShowClearAll", ctx_r1.ActiveFilterCount > 0);
48
47
  i0.ɵɵadvance();
49
48
  i0.ɵɵproperty("Fields", ctx_r1.analyticsFilterFields)("Values", ctx_r1.analyticsFilterValues);
50
49
  } }
51
- function AIAnalyticsResourceComponent_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
50
+ function AIAnalyticsResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
52
51
  const _r3 = i0.ɵɵgetCurrentView();
53
- i0.ɵɵelementStart(0, "button", 16);
54
- i0.ɵɵtwoWayListener("selectedChange", function AIAnalyticsResourceComponent_Conditional_2_Conditional_2_Template_button_selectedChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.compareActive, $event) || (ctx_r1.compareActive = $event); return i0.ɵɵresetView($event); });
55
- i0.ɵɵlistener("selectedChange", function AIAnalyticsResourceComponent_Conditional_2_Conditional_2_Template_button_selectedChange_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleCompare()); });
56
- i0.ɵɵelement(1, "i", 17);
52
+ i0.ɵɵelementStart(0, "button", 18);
53
+ i0.ɵɵtwoWayListener("selectedChange", function AIAnalyticsResourceComponent_Conditional_8_Template_button_selectedChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.compareActive, $event) || (ctx_r1.compareActive = $event); return i0.ɵɵresetView($event); });
54
+ i0.ɵɵlistener("selectedChange", function AIAnalyticsResourceComponent_Conditional_8_Template_button_selectedChange_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleCompare()); });
55
+ i0.ɵɵelement(1, "i", 19);
57
56
  i0.ɵɵtext(2, " Compare ");
58
57
  i0.ɵɵelementEnd();
59
58
  } if (rf & 2) {
60
- const ctx_r1 = i0.ɵɵnextContext(2);
59
+ const ctx_r1 = i0.ɵɵnextContext();
61
60
  i0.ɵɵproperty("toggleable", true);
62
61
  i0.ɵɵtwoWayProperty("selected", ctx_r1.compareActive);
63
62
  } }
64
- function AIAnalyticsResourceComponent_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
63
+ function AIAnalyticsResourceComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
65
64
  const _r4 = i0.ɵɵgetCurrentView();
66
- i0.ɵɵelementStart(0, "button", 18);
67
- i0.ɵɵlistener("click", function AIAnalyticsResourceComponent_Conditional_2_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnExportClicked()); });
68
- i0.ɵɵelement(1, "i", 19);
65
+ i0.ɵɵelementStart(0, "button", 20);
66
+ i0.ɵɵlistener("click", function AIAnalyticsResourceComponent_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnExportClicked()); });
67
+ i0.ɵɵelement(1, "i", 21);
69
68
  i0.ɵɵtext(2, " Export ");
70
69
  i0.ɵɵelementEnd();
71
70
  } }
72
- function AIAnalyticsResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
73
- i0.ɵɵelementStart(0, "div", 3);
74
- i0.ɵɵconditionalCreate(1, AIAnalyticsResourceComponent_Conditional_2_Conditional_1_Template, 2, 4, "mj-filter-popover", 11);
75
- i0.ɵɵconditionalCreate(2, AIAnalyticsResourceComponent_Conditional_2_Conditional_2_Template, 3, 2, "button", 12);
76
- i0.ɵɵconditionalCreate(3, AIAnalyticsResourceComponent_Conditional_2_Conditional_3_Template, 3, 0, "button", 13);
77
- i0.ɵɵelementEnd();
78
- } if (rf & 2) {
79
- const ctx_r1 = i0.ɵɵnextContext();
80
- i0.ɵɵadvance();
81
- i0.ɵɵconditional(ctx_r1.analyticsFilterFields.length > 0 ? 1 : -1);
82
- i0.ɵɵadvance();
83
- i0.ɵɵconditional(ctx_r1.FilterBarConfig.ShowCompareToggle ? 2 : -1);
84
- i0.ɵɵadvance();
85
- i0.ɵɵconditional(ctx_r1.FilterBarConfig.ShowExportButton ? 3 : -1);
86
- } }
87
- function AIAnalyticsResourceComponent_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
71
+ function AIAnalyticsResourceComponent_Conditional_10_For_2_Template(rf, ctx) { if (rf & 1) {
88
72
  const _r5 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "mj-filter-chip", 21);
90
- i0.ɵɵlistener("Clicked", function AIAnalyticsResourceComponent_Conditional_3_For_2_Template_mj_filter_chip_Clicked_0_listener() { const chip_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnTimeRangeChange(chip_r6.value)); });
73
+ i0.ɵɵelementStart(0, "mj-filter-chip", 23);
74
+ i0.ɵɵlistener("Clicked", function AIAnalyticsResourceComponent_Conditional_10_For_2_Template_mj_filter_chip_Clicked_0_listener() { const chip_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnTimeRangeChange(chip_r6.value)); });
91
75
  i0.ɵɵelementEnd();
92
76
  } if (rf & 2) {
93
77
  const chip_r6 = ctx.$implicit;
94
78
  const ctx_r1 = i0.ɵɵnextContext(2);
95
79
  i0.ɵɵproperty("Label", chip_r6.text)("Active", ctx_r1.CurrentTimeRange === chip_r6.value);
96
80
  } }
97
- function AIAnalyticsResourceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
98
- i0.ɵɵelementStart(0, "div", 4);
99
- i0.ɵɵrepeaterCreate(1, AIAnalyticsResourceComponent_Conditional_3_For_2_Template, 1, 2, "mj-filter-chip", 20, _forTrack1);
81
+ function AIAnalyticsResourceComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "div", 10);
83
+ i0.ɵɵrepeaterCreate(1, AIAnalyticsResourceComponent_Conditional_10_For_2_Template, 1, 2, "mj-filter-chip", 22, _forTrack0);
100
84
  i0.ɵɵelementEnd();
101
85
  } if (rf & 2) {
102
86
  const ctx_r1 = i0.ɵɵnextContext();
103
87
  i0.ɵɵadvance();
104
88
  i0.ɵɵrepeater(ctx_r1.timeRangeChipOptions);
105
89
  } }
106
- function AIAnalyticsResourceComponent_For_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
107
- i0.ɵɵelement(0, "div", 22);
108
- } }
109
- function AIAnalyticsResourceComponent_For_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
90
+ function AIAnalyticsResourceComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
110
91
  const _r7 = i0.ɵɵgetCurrentView();
111
- i0.ɵɵelementStart(0, "button", 24);
112
- i0.ɵɵlistener("click", function AIAnalyticsResourceComponent_For_7_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const item_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSectionChange(item_r8.Key)); });
113
- i0.ɵɵelement(1, "i");
114
- i0.ɵɵelementStart(2, "span");
115
- i0.ɵɵtext(3);
116
- i0.ɵɵelementEnd()();
117
- } if (rf & 2) {
118
- const item_r8 = i0.ɵɵnextContext().$implicit;
119
- const ctx_r1 = i0.ɵɵnextContext();
120
- i0.ɵɵclassProp("active", ctx_r1.ActiveSection === item_r8.Key);
121
- i0.ɵɵadvance();
122
- i0.ɵɵclassMap(item_r8.Icon);
123
- i0.ɵɵadvance(2);
124
- i0.ɵɵtextInterpolate(item_r8.Label);
125
- } }
126
- function AIAnalyticsResourceComponent_For_7_Template(rf, ctx) { if (rf & 1) {
127
- i0.ɵɵconditionalCreate(0, AIAnalyticsResourceComponent_For_7_Conditional_0_Template, 1, 0, "div", 22)(1, AIAnalyticsResourceComponent_For_7_Conditional_1_Template, 4, 5, "button", 23);
128
- } if (rf & 2) {
129
- const item_r8 = ctx.$implicit;
130
- i0.ɵɵconditional(item_r8.Key === "divider" ? 0 : 1);
131
- } }
132
- function AIAnalyticsResourceComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
133
- const _r9 = i0.ɵɵgetCurrentView();
134
- i0.ɵɵelementStart(0, "app-analytics-executive-summary", 25, 0);
135
- i0.ɵɵlistener("SectionNavigate", function AIAnalyticsResourceComponent_Case_9_Template_app_analytics_executive_summary_SectionNavigate_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSectionChange($event)); });
92
+ i0.ɵɵelementStart(0, "app-analytics-executive-summary", 24, 0);
93
+ i0.ɵɵlistener("SectionNavigate", function AIAnalyticsResourceComponent_Case_13_Template_app_analytics_executive_summary_SectionNavigate_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSectionChange($event)); });
136
94
  i0.ɵɵelementEnd();
137
95
  } if (rf & 2) {
138
96
  const ctx_r1 = i0.ɵɵnextContext();
139
97
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
140
98
  } }
141
- function AIAnalyticsResourceComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
142
- i0.ɵɵelement(0, "app-analytics-prompt-runs", 8, 1);
99
+ function AIAnalyticsResourceComponent_Case_14_Template(rf, ctx) { if (rf & 1) {
100
+ i0.ɵɵelement(0, "app-analytics-prompt-runs", 13, 1);
143
101
  } if (rf & 2) {
144
102
  const ctx_r1 = i0.ɵɵnextContext();
145
103
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
146
104
  } }
147
- function AIAnalyticsResourceComponent_Case_11_Template(rf, ctx) { if (rf & 1) {
148
- i0.ɵɵelement(0, "app-analytics-agent-runs", 8);
105
+ function AIAnalyticsResourceComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
106
+ i0.ɵɵelement(0, "app-analytics-agent-runs", 13);
149
107
  } if (rf & 2) {
150
108
  const ctx_r1 = i0.ɵɵnextContext();
151
109
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
152
110
  } }
153
- function AIAnalyticsResourceComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
154
- i0.ɵɵelement(0, "app-analytics-model-performance", 9);
111
+ function AIAnalyticsResourceComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelement(0, "app-analytics-model-performance", 14);
155
113
  } if (rf & 2) {
156
114
  const ctx_r1 = i0.ɵɵnextContext();
157
115
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("SortBy", ctx_r1.CurrentSortBy)("SelectedVendor", ctx_r1.CurrentVendor);
158
116
  } }
159
- function AIAnalyticsResourceComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelement(0, "app-analytics-cost-budget", 8);
117
+ function AIAnalyticsResourceComponent_Case_17_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵelement(0, "app-analytics-cost-budget", 13);
161
119
  } if (rf & 2) {
162
120
  const ctx_r1 = i0.ɵɵnextContext();
163
121
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
164
122
  } }
165
- function AIAnalyticsResourceComponent_Case_14_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelement(0, "app-analytics-error-analysis", 8);
123
+ function AIAnalyticsResourceComponent_Case_18_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelement(0, "app-analytics-error-analysis", 13);
167
125
  } if (rf & 2) {
168
126
  const ctx_r1 = i0.ɵɵnextContext();
169
127
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
170
128
  } }
171
- function AIAnalyticsResourceComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
172
- i0.ɵɵelement(0, "app-analytics-usage-patterns", 10);
129
+ function AIAnalyticsResourceComponent_Case_19_Template(rf, ctx) { if (rf & 1) {
130
+ i0.ɵɵelement(0, "app-analytics-usage-patterns", 15);
173
131
  } if (rf & 2) {
174
132
  const ctx_r1 = i0.ɵɵnextContext();
175
133
  i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange);
@@ -380,15 +338,57 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
380
338
  this.OnCompareToggled(this.compareActive);
381
339
  }
382
340
  NavItems = [
383
- { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary' },
384
- { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs' },
385
- { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs' },
386
- { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance' },
341
+ { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary',
342
+ Description: 'High-level KPIs and trends across the platform' },
343
+ { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs',
344
+ Description: 'Detailed analysis of individual prompt executions' },
345
+ { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs',
346
+ Description: 'Performance breakdown by agent' },
347
+ { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance',
348
+ Description: 'Compare models across cost, speed, and quality' },
387
349
  { Key: 'divider' },
388
- { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget' },
389
- { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis' },
390
- { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns' },
350
+ { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget',
351
+ Description: 'Spend trends and budget tracking' },
352
+ { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis',
353
+ Description: 'Failure patterns and root causes' },
354
+ { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns',
355
+ Description: 'Volume, frequency, and concurrency over time' },
391
356
  ];
357
+ /**
358
+ * Active section metadata — drives <mj-page-header-interior> Title +
359
+ * Subtitle. Mirrors the pattern in KH Configuration / KH Analytics: one
360
+ * source of truth (NavItems) used both to build the rail and to render
361
+ * per-section identity.
362
+ */
363
+ get currentSection() {
364
+ return this.NavItems.find(n => n.Key === this.ActiveSection);
365
+ }
366
+ /**
367
+ * Wraps `NavItems` for `<mj-left-nav>`. The `{ Key: 'divider' }` entry
368
+ * splits the items into two `MJLeftNavSection`s (an unlabeled section per
369
+ * group) — the rail's natural section break replaces the bespoke
370
+ * `.nav-divider` line.
371
+ */
372
+ get navSections() {
373
+ const sections = [{ items: [] }];
374
+ for (const item of this.NavItems) {
375
+ if (item.Key === 'divider') {
376
+ sections.push({ items: [] });
377
+ }
378
+ else {
379
+ sections[sections.length - 1].items.push({
380
+ id: item.Key,
381
+ label: item.Label ?? '',
382
+ icon: item.Icon
383
+ });
384
+ }
385
+ }
386
+ return sections;
387
+ }
388
+ /** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */
389
+ onNavItemClicked(item) {
390
+ this.OnSectionChange(item.id);
391
+ }
392
392
  async ngOnInit() {
393
393
  super.ngOnInit();
394
394
  this.setupSettingsDebounce();
@@ -509,30 +509,43 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
509
509
  let _t;
510
510
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.executiveSummary = _t.first);
511
511
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.promptRuns = _t.first);
512
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 16, vars: 4, consts: [["executiveSummary", ""], ["promptRuns", ""], ["Title", "Analytics", "Icon", "fa-solid fa-chart-line"], ["actions", ""], ["toolbar", "", 1, "time-range-chips"], [1, "analytics-shell", 3, "Padding"], [1, "analytics-nav"], [1, "analytics-content"], [3, "TimeRange", "Filters"], [3, "TimeRange", "SortBy", "SelectedVendor"], [3, "TimeRange"], [3, "ActiveCount", "ShowClearAll"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "toggleable", "selected"], ["mjButton", "", "variant", "secondary", "size", "sm"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "selectedChange", "toggleable", "selected"], [1, "fa-solid", "fa-code-compare"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-download"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [1, "nav-divider"], [1, "nav-item", 3, "active"], [1, "nav-item", 3, "click"], [3, "SectionNavigate", "TimeRange", "Filters"]], template: function AIAnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
513
- i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 2);
514
- i0.ɵɵconditionalCreate(2, AIAnalyticsResourceComponent_Conditional_2_Template, 4, 3, "div", 3);
515
- i0.ɵɵconditionalCreate(3, AIAnalyticsResourceComponent_Conditional_3_Template, 3, 0, "div", 4);
512
+ } }, 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"], [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"], ["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) {
513
+ i0.ɵɵelementStart(0, "mj-page-layout");
514
+ i0.ɵɵelement(1, "mj-page-header", 2);
515
+ i0.ɵɵelementStart(2, "mj-page-body", 3)(3, "mj-left-nav", 4);
516
+ i0.ɵɵlistener("ItemClicked", function AIAnalyticsResourceComponent_Template_mj_left_nav_ItemClicked_3_listener($event) { return ctx.onNavItemClicked($event); });
516
517
  i0.ɵɵelementEnd();
517
- i0.ɵɵelementStart(4, "mj-page-body", 5)(5, "nav", 6);
518
- i0.ɵɵrepeaterCreate(6, AIAnalyticsResourceComponent_For_7_Template, 2, 1, null, null, _forTrack0);
518
+ i0.ɵɵelementStart(4, "mj-left-nav-content")(5, "mj-page-header-interior", 5)(6, "div", 6);
519
+ i0.ɵɵconditionalCreate(7, AIAnalyticsResourceComponent_Conditional_7_Template, 2, 4, "mj-filter-popover", 7);
520
+ i0.ɵɵconditionalCreate(8, AIAnalyticsResourceComponent_Conditional_8_Template, 3, 2, "button", 8);
521
+ i0.ɵɵconditionalCreate(9, AIAnalyticsResourceComponent_Conditional_9_Template, 3, 0, "button", 9);
519
522
  i0.ɵɵelementEnd();
520
- i0.ɵɵelementStart(8, "div", 7);
521
- i0.ɵɵconditionalCreate(9, AIAnalyticsResourceComponent_Case_9_Template, 2, 2, "app-analytics-executive-summary", 8)(10, AIAnalyticsResourceComponent_Case_10_Template, 2, 2, "app-analytics-prompt-runs", 8)(11, AIAnalyticsResourceComponent_Case_11_Template, 1, 2, "app-analytics-agent-runs", 8)(12, AIAnalyticsResourceComponent_Case_12_Template, 1, 3, "app-analytics-model-performance", 9)(13, AIAnalyticsResourceComponent_Case_13_Template, 1, 2, "app-analytics-cost-budget", 8)(14, AIAnalyticsResourceComponent_Case_14_Template, 1, 2, "app-analytics-error-analysis", 8)(15, AIAnalyticsResourceComponent_Case_15_Template, 1, 1, "app-analytics-usage-patterns", 10);
522
- i0.ɵɵelementEnd()()();
523
+ i0.ɵɵconditionalCreate(10, AIAnalyticsResourceComponent_Conditional_10_Template, 3, 0, "div", 10);
524
+ i0.ɵɵelementEnd();
525
+ i0.ɵɵelementStart(11, "mj-page-body-interior", 11)(12, "div", 12);
526
+ 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);
527
+ i0.ɵɵelementEnd()()()()();
523
528
  } if (rf & 2) {
524
- let tmp_4_0;
529
+ let tmp_10_0;
530
+ i0.ɵɵadvance(2);
531
+ i0.ɵɵproperty("Padding", false);
532
+ i0.ɵɵadvance();
533
+ i0.ɵɵproperty("Sections", ctx.navSections)("ActiveId", ctx.ActiveSection);
534
+ i0.ɵɵadvance(2);
535
+ i0.ɵɵproperty("Title", (ctx.currentSection == null ? null : ctx.currentSection.Label) || "")("Subtitle", (ctx.currentSection == null ? null : ctx.currentSection.Description) || "");
525
536
  i0.ɵɵadvance(2);
526
- i0.ɵɵconditional(ctx.ShowSharedFilterBar ? 2 : -1);
537
+ i0.ɵɵconditional(ctx.analyticsFilterFields.length > 0 ? 7 : -1);
527
538
  i0.ɵɵadvance();
528
- i0.ɵɵconditional(ctx.ShowSharedFilterBar && ctx.timeRangeChipOptions.length > 0 ? 3 : -1);
539
+ i0.ɵɵconditional(ctx.FilterBarConfig.ShowCompareToggle ? 8 : -1);
540
+ i0.ɵɵadvance();
541
+ i0.ɵɵconditional(ctx.FilterBarConfig.ShowExportButton ? 9 : -1);
542
+ i0.ɵɵadvance();
543
+ i0.ɵɵconditional(ctx.timeRangeChipOptions.length > 0 ? 10 : -1);
529
544
  i0.ɵɵadvance();
530
545
  i0.ɵɵproperty("Padding", false);
531
546
  i0.ɵɵadvance(2);
532
- i0.ɵɵrepeater(ctx.NavItems);
533
- i0.ɵɵadvance(3);
534
- i0.ɵɵconditional((tmp_4_0 = ctx.ActiveSection) === "executive-summary" ? 9 : tmp_4_0 === "prompt-runs" ? 10 : tmp_4_0 === "agent-runs" ? 11 : tmp_4_0 === "model-performance" ? 12 : tmp_4_0 === "cost-budget" ? 13 : tmp_4_0 === "error-analysis" ? 14 : tmp_4_0 === "usage-patterns" ? 15 : -1);
535
- } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, 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 .analytics-nav[_ngcontent-%COMP%] {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n padding: 12px 0;\n overflow-y: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n border: none;\n border-left: 3px solid transparent;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n }\n\n .nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-left-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 14px;\n }\n\n .nav-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 18px;\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 @media (max-width: 768px) {\n .analytics-shell[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-nav[_ngcontent-%COMP%] {\n width: 100%;\n min-width: unset;\n flex-direction: row;\n overflow-x: auto;\n overflow-y: hidden;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 8px;\n gap: 2px;\n }\n\n .nav-header[_ngcontent-%COMP%] {\n display: none;\n }\n\n .nav-divider[_ngcontent-%COMP%] {\n width: 1px;\n height: 28px;\n margin: auto 4px;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n white-space: nowrap;\n border-left: none;\n border-bottom: 3px solid transparent;\n padding: 10px 14px;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .analytics-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n }"] });
547
+ 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);
548
+ } }, 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 }"] });
536
549
  };
537
550
  AIAnalyticsResourceComponent = __decorate([
538
551
  RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')
@@ -542,10 +555,32 @@ export { AIAnalyticsResourceComponent };
542
555
  type: Component,
543
556
  args: [{ standalone: false, selector: 'app-ai-analytics-resource', template: `
544
557
  <mj-page-layout>
558
+ <!-- Outer chrome — pure identity. Every control (filter-popover,
559
+ TimeRange chips, Compare, Export) lives in the per-section
560
+ <mj-page-header-interior> card below because each section
561
+ configures its own filter fields and time-range options. -->
545
562
  <mj-page-header
546
- Title="Analytics"
547
- Icon="fa-solid fa-chart-line">
548
- @if (ShowSharedFilterBar) {
563
+ Title="AI Analytics"
564
+ Icon="fa-solid fa-chart-line"
565
+ Subtitle="Performance, cost, and usage analytics">
566
+ </mj-page-header>
567
+ <mj-page-body [Padding]="false" class="analytics-shell">
568
+ <mj-left-nav
569
+ [Sections]="navSections"
570
+ [ActiveId]="ActiveSection"
571
+ (ItemClicked)="onNavItemClicked($event)">
572
+ </mj-left-nav>
573
+
574
+ <mj-left-nav-content>
575
+ <!-- Per-section interior chrome owns the complete control surface
576
+ for the active section: identity + actions + the section's
577
+ own time-range chip strip. Even TimeRange options vary per
578
+ section (Cost & Budget adds MTD / YTD, Model Performance
579
+ drops 1h / 6h, etc.) so it belongs here rather than in the
580
+ outer chrome. -->
581
+ <mj-page-header-interior
582
+ [Title]="currentSection?.Label || ''"
583
+ [Subtitle]="currentSection?.Description || ''">
549
584
  <div actions>
550
585
  @if (analyticsFilterFields.length > 0) {
551
586
  <mj-filter-popover
@@ -571,36 +606,19 @@ export { AIAnalyticsResourceComponent };
571
606
  </button>
572
607
  }
573
608
  </div>
574
- }
575
- @if (ShowSharedFilterBar && timeRangeChipOptions.length > 0) {
576
- <div toolbar class="time-range-chips">
577
- @for (chip of timeRangeChipOptions; track chip.value) {
578
- <mj-filter-chip
579
- [Label]="chip.text"
580
- [Active]="CurrentTimeRange === chip.value"
581
- (Clicked)="OnTimeRangeChange(chip.value)">
582
- </mj-filter-chip>
583
- }
584
- </div>
585
- }
586
- </mj-page-header>
587
- <mj-page-body [Padding]="false" class="analytics-shell">
588
- <nav class="analytics-nav">
589
- @for (item of NavItems; track item.Key) {
590
- @if (item.Key === 'divider') {
591
- <div class="nav-divider"></div>
592
- } @else {
593
- <button
594
- class="nav-item"
595
- [class.active]="ActiveSection === item.Key"
596
- (click)="OnSectionChange(item.Key)">
597
- <i [class]="item.Icon"></i>
598
- <span>{{ item.Label }}</span>
599
- </button>
600
- }
609
+ @if (timeRangeChipOptions.length > 0) {
610
+ <div toolbar class="time-range-chips">
611
+ @for (chip of timeRangeChipOptions; track chip.value) {
612
+ <mj-filter-chip
613
+ [Label]="chip.text"
614
+ [Active]="CurrentTimeRange === chip.value"
615
+ (Clicked)="OnTimeRangeChange(chip.value)">
616
+ </mj-filter-chip>
617
+ }
618
+ </div>
601
619
  }
602
- </nav>
603
-
620
+ </mj-page-header-interior>
621
+ <mj-page-body-interior [Padding]="false">
604
622
  <div class="analytics-content">
605
623
  @switch (ActiveSection) {
606
624
  @case ('executive-summary') {
@@ -650,9 +668,11 @@ export { AIAnalyticsResourceComponent };
650
668
  }
651
669
  }
652
670
  </div>
671
+ </mj-page-body-interior>
672
+ </mj-left-nav-content>
653
673
  </mj-page-body>
654
674
  </mj-page-layout>
655
- `, styles: ["\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n /* \u2500\u2500 Left Navigation \u2500\u2500 */\n\n .analytics-nav {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n padding: 12px 0;\n overflow-y: auto;\n }\n\n .nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n border: none;\n border-left: 3px solid transparent;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n }\n\n .nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-left-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .nav-item i {\n width: 18px;\n text-align: center;\n font-size: 14px;\n }\n\n .nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 18px;\n }\n\n /* \u2500\u2500 Content Area \u2500\u2500 */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* \u2500\u2500 Section Placeholders \u2500\u2500 */\n\n .section-placeholder {\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 {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* \u2500\u2500 Responsive: collapse nav to horizontal strip \u2500\u2500 */\n\n @media (max-width: 768px) {\n .analytics-shell {\n flex-direction: column;\n }\n\n .analytics-nav {\n width: 100%;\n min-width: unset;\n flex-direction: row;\n overflow-x: auto;\n overflow-y: hidden;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 8px;\n gap: 2px;\n }\n\n .nav-header {\n display: none;\n }\n\n .nav-divider {\n width: 1px;\n height: 28px;\n margin: auto 4px;\n }\n\n .nav-item {\n white-space: nowrap;\n border-left: none;\n border-bottom: 3px solid transparent;\n padding: 10px 14px;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .analytics-content {\n padding: 16px;\n }\n }\n "] }]
675
+ `, styles: ["\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n /* \u2500\u2500 Left Navigation \u2500\u2500 */\n\n /* Rail width + nav-item styling now owned by <mj-left-nav>; the\n divider is expressed as a new MJLeftNavSection rather than a CSS\n rule. */\n\n /* \u2500\u2500 Content Area \u2500\u2500 */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* \u2500\u2500 Section Placeholders \u2500\u2500 */\n\n .section-placeholder {\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 {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* \u2500\u2500 Responsive: collapse nav to horizontal strip \u2500\u2500 */\n\n /* Responsive \u2014 <mj-left-nav> handles its own collapse-to-row at\n narrow viewports. We only need to tune the content padding. */\n @media (max-width: 768px) {\n .analytics-content {\n padding: 16px;\n }\n }\n "] }]
656
676
  }], null, { executiveSummary: [{
657
677
  type: ViewChild,
658
678
  args: ['executiveSummary']
@@ -660,7 +680,7 @@ export { AIAnalyticsResourceComponent };
660
680
  type: ViewChild,
661
681
  args: ['promptRuns']
662
682
  }] }); })();
663
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAnalyticsResourceComponent, { className: "AIAnalyticsResourceComponent", filePath: "src/AI/components/analytics/ai-analytics-resource.component.ts", lineNumber: 303 }); })();
683
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAnalyticsResourceComponent, { className: "AIAnalyticsResourceComponent", filePath: "src/AI/components/analytics/ai-analytics-resource.component.ts", lineNumber: 231 }); })();
664
684
  export function LoadAIAnalyticsResource() {
665
685
  // Prevents tree-shaking of the @RegisterClass decorator
666
686
  }