@memberjunction/ng-dashboards 5.34.0 → 5.35.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 (348) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -0
  235. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  236. package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
  237. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  239. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  240. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  241. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  243. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  244. package/dist/Testing/components/testing-analytics.component.js +420 -393
  245. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  249. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  251. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  252. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  253. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  255. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  256. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  257. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  259. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  260. package/dist/Testing/components/testing-explorer.component.js +587 -608
  261. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  263. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  264. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  265. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  266. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  267. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  268. package/dist/Testing/components/testing-review.component.js +310 -274
  269. package/dist/Testing/components/testing-review.component.js.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  271. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  272. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  273. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  275. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  276. package/dist/Testing/components/testing-runs.component.js +307 -273
  277. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  279. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  280. package/dist/Testing/testing-dashboard.component.js +107 -93
  281. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  282. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  283. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  285. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  287. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  288. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  289. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  290. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  291. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  292. package/dist/actions-dashboards.module.d.ts +15 -16
  293. package/dist/actions-dashboards.module.d.ts.map +1 -1
  294. package/dist/actions-dashboards.module.js +34 -11
  295. package/dist/actions-dashboards.module.js.map +1 -1
  296. package/dist/ai-dashboards.module.d.ts +45 -48
  297. package/dist/ai-dashboards.module.d.ts.map +1 -1
  298. package/dist/ai-dashboards.module.js +36 -10
  299. package/dist/ai-dashboards.module.js.map +1 -1
  300. package/dist/archiving-dashboards.module.d.ts +2 -1
  301. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  302. package/dist/archiving-dashboards.module.js +12 -2
  303. package/dist/archiving-dashboards.module.js.map +1 -1
  304. package/dist/communication-dashboards.module.d.ts +2 -1
  305. package/dist/communication-dashboards.module.d.ts.map +1 -1
  306. package/dist/communication-dashboards.module.js +24 -3
  307. package/dist/communication-dashboards.module.js.map +1 -1
  308. package/dist/core-dashboards.module.d.ts +1 -1
  309. package/dist/core-dashboards.module.d.ts.map +1 -1
  310. package/dist/core-dashboards.module.js +31 -1
  311. package/dist/core-dashboards.module.js.map +1 -1
  312. package/dist/credentials-dashboards.module.d.ts +1 -1
  313. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  314. package/dist/credentials-dashboards.module.js +28 -1
  315. package/dist/credentials-dashboards.module.js.map +1 -1
  316. package/dist/lists-dashboards.module.d.ts +1 -1
  317. package/dist/lists-dashboards.module.d.ts.map +1 -1
  318. package/dist/lists-dashboards.module.js +28 -1
  319. package/dist/lists-dashboards.module.js.map +1 -1
  320. package/dist/public-api.d.ts +2 -2
  321. package/dist/public-api.d.ts.map +1 -1
  322. package/dist/public-api.js +3 -3
  323. package/dist/public-api.js.map +1 -1
  324. package/dist/scheduling-dashboards.module.d.ts +1 -1
  325. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  326. package/dist/scheduling-dashboards.module.js +31 -1
  327. package/dist/scheduling-dashboards.module.js.map +1 -1
  328. package/dist/testing-dashboards.module.d.ts +8 -7
  329. package/dist/testing-dashboards.module.d.ts.map +1 -1
  330. package/dist/testing-dashboards.module.js +30 -0
  331. package/dist/testing-dashboards.module.js.map +1 -1
  332. package/package.json +52 -52
  333. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  334. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  335. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  336. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  339. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  340. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  342. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  343. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  344. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  346. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  347. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  348. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -23,21 +23,22 @@ import { BaseResourceComponent, NavigationService } from '@memberjunction/ng-sha
23
23
  import * as i0 from "@angular/core";
24
24
  import * as i1 from "@angular/forms";
25
25
  import * as i2 from "@memberjunction/ng-shared-generic";
26
+ import * as i3 from "@memberjunction/ng-ui-components";
26
27
  const _forTrack0 = ($index, $item) => $item.ID;
27
28
  const _forTrack1 = ($index, $item) => $item.Name;
28
29
  const _forTrack2 = ($index, $item) => $item.Label;
29
30
  const _forTrack3 = ($index, $item) => $item.EntityName;
30
31
  const _forTrack4 = ($index, $item) => $item.TagAName + $item.TagBName;
31
32
  const _forTrack5 = ($index, $item) => $item.RunID;
32
- function AnalyticsResourceComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵelementStart(0, "div", 0);
34
- i0.ɵɵelement(1, "mj-loading", 2);
33
+ function AnalyticsResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵelementStart(0, "div", 4);
35
+ i0.ɵɵelement(1, "mj-loading", 6);
35
36
  i0.ɵɵelementEnd();
36
37
  } }
37
- function AnalyticsResourceComponent_Conditional_1_For_8_Template(rf, ctx) { if (rf & 1) {
38
+ function AnalyticsResourceComponent_Conditional_6_For_4_Template(rf, ctx) { if (rf & 1) {
38
39
  const _r1 = i0.ɵɵgetCurrentView();
39
40
  i0.ɵɵelementStart(0, "button", 18);
40
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_For_8_Template_button_click_0_listener() { const nav_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SelectTab(nav_r2.ID)); });
41
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_For_4_Template_button_click_0_listener() { const nav_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SelectTab(nav_r2.ID)); });
41
42
  i0.ɵɵelement(1, "i");
42
43
  i0.ɵɵtext(2);
43
44
  i0.ɵɵelementEnd();
@@ -50,7 +51,7 @@ function AnalyticsResourceComponent_Conditional_1_For_8_Template(rf, ctx) { if (
50
51
  i0.ɵɵadvance();
51
52
  i0.ɵɵtextInterpolate1(" ", nav_r2.Label, " ");
52
53
  } }
53
- function AnalyticsResourceComponent_Conditional_1_For_16_Template(rf, ctx) { if (rf & 1) {
54
+ function AnalyticsResourceComponent_Conditional_6_For_12_Template(rf, ctx) { if (rf & 1) {
54
55
  i0.ɵɵelementStart(0, "span");
55
56
  i0.ɵɵtext(1);
56
57
  i0.ɵɵelementEnd();
@@ -60,15 +61,15 @@ function AnalyticsResourceComponent_Conditional_1_For_16_Template(rf, ctx) { if
60
61
  i0.ɵɵadvance();
61
62
  i0.ɵɵtextInterpolate(tag_r4.Name);
62
63
  } }
63
- function AnalyticsResourceComponent_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵelementStart(0, "span", 13);
64
+ function AnalyticsResourceComponent_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementStart(0, "span", 15);
65
66
  i0.ɵɵtext(1, "No trending tags yet");
66
67
  i0.ɵɵelementEnd();
67
68
  } }
68
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_8_Template(rf, ctx) { if (rf & 1) {
69
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_8_Template(rf, ctx) { if (rf & 1) {
69
70
  const _r6 = i0.ɵɵgetCurrentView();
70
- i0.ɵɵelementStart(0, "button", 73);
71
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_8_Template_button_click_0_listener() { const range_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SetDateRange(range_r7.Label)); });
71
+ i0.ɵɵelementStart(0, "button", 74);
72
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_8_Template_button_click_0_listener() { const range_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SetDateRange(range_r7.Label)); });
72
73
  i0.ɵɵtext(1);
73
74
  i0.ɵɵelementEnd();
74
75
  } if (rf & 2) {
@@ -78,7 +79,7 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_8_Template(
78
79
  i0.ɵɵadvance();
79
80
  i0.ɵɵtextInterpolate(range_r7.Label);
80
81
  } }
81
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_11_Template(rf, ctx) { if (rf & 1) {
82
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_11_Template(rf, ctx) { if (rf & 1) {
82
83
  i0.ɵɵelementStart(0, "option", 25);
83
84
  i0.ɵɵtext(1);
84
85
  i0.ɵɵelementEnd();
@@ -88,30 +89,30 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_11_Template
88
89
  i0.ɵɵadvance();
89
90
  i0.ɵɵtextInterpolate(opt_r8);
90
91
  } }
91
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelement(0, "i", 78);
93
- } }
94
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Conditional_8_Template(rf, ctx) { if (rf & 1) {
92
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
95
93
  i0.ɵɵelement(0, "i", 79);
96
94
  } }
97
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Template(rf, ctx) { if (rf & 1) {
95
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_8_Template(rf, ctx) { if (rf & 1) {
96
+ i0.ɵɵelement(0, "i", 80);
97
+ } }
98
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Template(rf, ctx) { if (rf & 1) {
98
99
  const _r9 = i0.ɵɵgetCurrentView();
99
- i0.ɵɵelementStart(0, "div", 74);
100
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Template_div_click_0_listener() { const kpi_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown(kpi_r10.DrillDownKey)); });
101
- i0.ɵɵelementStart(1, "div")(2, "div", 75);
100
+ i0.ɵɵelementStart(0, "div", 75);
101
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Template_div_click_0_listener() { const kpi_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown(kpi_r10.DrillDownKey)); });
102
+ i0.ɵɵelementStart(1, "div")(2, "div", 76);
102
103
  i0.ɵɵtext(3);
103
104
  i0.ɵɵelementEnd();
104
- i0.ɵɵelementStart(4, "div", 76);
105
+ i0.ɵɵelementStart(4, "div", 77);
105
106
  i0.ɵɵtext(5);
106
107
  i0.ɵɵelementEnd();
107
- i0.ɵɵelementStart(6, "div", 77);
108
- i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Conditional_7_Template, 1, 0, "i", 78)(8, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Conditional_8_Template, 1, 0, "i", 79);
108
+ i0.ɵɵelementStart(6, "div", 78);
109
+ i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_7_Template, 1, 0, "i", 79)(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_8_Template, 1, 0, "i", 80);
109
110
  i0.ɵɵtext(9);
110
111
  i0.ɵɵelementEnd()();
111
- i0.ɵɵelementStart(10, "div", 80);
112
+ i0.ɵɵelementStart(10, "div", 81);
112
113
  i0.ɵɵnamespaceSVG();
113
- i0.ɵɵelementStart(11, "svg", 81);
114
- i0.ɵɵelement(12, "polyline", 82);
114
+ i0.ɵɵelementStart(11, "svg", 82);
115
+ i0.ɵɵelement(12, "polyline", 83);
115
116
  i0.ɵɵelementEnd()()();
116
117
  } if (rf & 2) {
117
118
  const kpi_r10 = ctx.$implicit;
@@ -128,18 +129,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Template
128
129
  i0.ɵɵadvance(3);
129
130
  i0.ɵɵattribute("points", kpi_r10.SparklinePoints)("stroke", kpi_r10.SparklineColor);
130
131
  } }
131
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
132
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
132
133
  const _r12 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "button", 93);
134
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
135
- i0.ɵɵelement(1, "i", 94);
134
+ i0.ɵɵelementStart(0, "button", 94);
135
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
136
+ i0.ɵɵelement(1, "i", 95);
136
137
  i0.ɵɵtext(2, " CSV ");
137
138
  i0.ɵɵelementEnd();
138
139
  } }
139
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
140
- i0.ɵɵelement(0, "mj-loading", 90);
140
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
141
+ i0.ɵɵelement(0, "mj-loading", 91);
141
142
  } }
142
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
143
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
143
144
  i0.ɵɵelementStart(0, "th");
144
145
  i0.ɵɵtext(1);
145
146
  i0.ɵɵelementEnd();
@@ -148,10 +149,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
148
149
  i0.ɵɵadvance();
149
150
  i0.ɵɵtextInterpolate(col_r13);
150
151
  } }
151
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
152
- i0.ɵɵelement(0, "th", 96);
152
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
153
+ i0.ɵɵelement(0, "th", 97);
153
154
  } }
154
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
155
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
155
156
  i0.ɵɵelementStart(0, "td");
156
157
  i0.ɵɵtext(1);
157
158
  i0.ɵɵelementEnd();
@@ -161,26 +162,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
161
162
  i0.ɵɵadvance();
162
163
  i0.ɵɵtextInterpolate(row_r15[col_r14]);
163
164
  } }
164
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
165
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
165
166
  const _r16 = i0.ɵɵgetCurrentView();
166
- i0.ɵɵelementStart(0, "button", 98);
167
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const row_r15 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r15)); });
168
- i0.ɵɵelement(1, "i", 99);
167
+ i0.ɵɵelementStart(0, "button", 99);
168
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const row_r15 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r15)); });
169
+ i0.ɵɵelement(1, "i", 100);
169
170
  i0.ɵɵelementEnd();
170
171
  } }
171
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
172
- i0.ɵɵelementStart(0, "td", 96);
173
- i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 97);
172
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
173
+ i0.ɵɵelementStart(0, "td", 97);
174
+ i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 98);
174
175
  i0.ɵɵelementEnd();
175
176
  } if (rf & 2) {
176
177
  const row_r15 = i0.ɵɵnextContext().$implicit;
177
178
  i0.ɵɵadvance();
178
179
  i0.ɵɵconditional(row_r15["_RecordID"] ? 1 : -1);
179
180
  } }
180
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
181
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
181
182
  i0.ɵɵelementStart(0, "tr");
182
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
183
- i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 96);
183
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
184
+ i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
184
185
  i0.ɵɵelementEnd();
185
186
  } if (rf & 2) {
186
187
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -189,13 +190,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
189
190
  i0.ɵɵadvance(2);
190
191
  i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
191
192
  } }
192
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
193
- i0.ɵɵelementStart(0, "div", 91)(1, "table", 95)(2, "thead")(3, "tr");
194
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
195
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_Conditional_6_Template, 1, 0, "th", 96);
193
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
194
+ i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
195
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
196
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
196
197
  i0.ɵɵelementEnd()();
197
198
  i0.ɵɵelementStart(7, "tbody");
198
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
199
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
199
200
  i0.ɵɵelementEnd()()();
200
201
  } if (rf & 2) {
201
202
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -206,24 +207,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
206
207
  i0.ɵɵadvance(2);
207
208
  i0.ɵɵrepeater(ctx_r2.DrillDownData);
208
209
  } }
209
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
210
- i0.ɵɵelementStart(0, "div", 92);
210
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
211
+ i0.ɵɵelementStart(0, "div", 93);
211
212
  i0.ɵɵtext(1, "No data available");
212
213
  i0.ɵɵelementEnd();
213
214
  } }
214
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Template(rf, ctx) { if (rf & 1) {
215
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Template(rf, ctx) { if (rf & 1) {
215
216
  const _r11 = i0.ɵɵgetCurrentView();
216
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 83)(2, "span", 84);
217
- i0.ɵɵelement(3, "i", 85);
217
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
218
+ i0.ɵɵelement(3, "i", 86);
218
219
  i0.ɵɵtext(4, " Detail View");
219
220
  i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(5, "div", 86);
221
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_6_Template, 3, 0, "button", 87);
222
- i0.ɵɵelementStart(7, "button", 88);
223
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
224
- i0.ɵɵelement(8, "i", 89);
221
+ i0.ɵɵelementStart(5, "div", 87);
222
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_6_Template, 3, 0, "button", 88);
223
+ i0.ɵɵelementStart(7, "button", 89);
224
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
225
+ i0.ɵɵelement(8, "i", 90);
225
226
  i0.ɵɵelementEnd()()();
226
- i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 90)(10, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_10_Template, 10, 1, "div", 91)(11, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Conditional_11_Template, 2, 0, "div", 92);
227
+ i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_11_Template, 2, 0, "div", 93);
227
228
  i0.ɵɵelementEnd();
228
229
  } if (rf & 2) {
229
230
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -232,12 +233,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
232
233
  i0.ɵɵadvance(3);
233
234
  i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
234
235
  } }
235
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_23_Template(rf, ctx) { if (rf & 1) {
236
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 100);
236
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_23_Template(rf, ctx) { if (rf & 1) {
237
+ i0.ɵɵelementStart(0, "div", 34)(1, "div", 101);
237
238
  i0.ɵɵtext(2);
238
239
  i0.ɵɵelementEnd();
239
- i0.ɵɵelement(3, "div", 101);
240
- i0.ɵɵelementStart(4, "div", 102);
240
+ i0.ɵɵelement(3, "div", 102);
241
+ i0.ɵɵelementStart(4, "div", 103);
241
242
  i0.ɵɵtext(5);
242
243
  i0.ɵɵelementEnd()();
243
244
  } if (rf & 2) {
@@ -249,19 +250,19 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_23_Template
249
250
  i0.ɵɵadvance(2);
250
251
  i0.ɵɵtextInterpolate(bar_r17.Label);
251
252
  } }
252
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_30_Template(rf, ctx) { if (rf & 1) {
253
- i0.ɵɵelementStart(0, "div", 36);
253
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_30_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵelementStart(0, "div", 37);
254
255
  i0.ɵɵnamespaceSVG();
255
- i0.ɵɵelementStart(1, "svg", 103);
256
- i0.ɵɵelement(2, "circle", 104)(3, "circle", 105);
257
- i0.ɵɵelementStart(4, "text", 106);
256
+ i0.ɵɵelementStart(1, "svg", 104);
257
+ i0.ɵɵelement(2, "circle", 105)(3, "circle", 106);
258
+ i0.ɵɵelementStart(4, "text", 107);
258
259
  i0.ɵɵtext(5);
259
260
  i0.ɵɵelementEnd()();
260
261
  i0.ɵɵnamespaceHTML();
261
- i0.ɵɵelementStart(6, "div")(7, "div", 107);
262
+ i0.ɵɵelementStart(6, "div")(7, "div", 108);
262
263
  i0.ɵɵtext(8);
263
264
  i0.ɵɵelementEnd();
264
- i0.ɵɵelementStart(9, "div", 108);
265
+ i0.ɵɵelementStart(9, "div", 109);
265
266
  i0.ɵɵtext(10);
266
267
  i0.ɵɵelementEnd()()();
267
268
  } if (rf & 2) {
@@ -276,23 +277,23 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_30_Template
276
277
  i0.ɵɵadvance(2);
277
278
  i0.ɵɵtextInterpolate2("", ctx_r2.FormatNumber(entity_r18.Tagged), " / ", ctx_r2.FormatNumber(entity_r18.Total));
278
279
  } }
279
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_31_Template(rf, ctx) { if (rf & 1) {
280
- i0.ɵɵelementStart(0, "div", 37);
280
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_31_Template(rf, ctx) { if (rf & 1) {
281
+ i0.ɵɵelementStart(0, "div", 38);
281
282
  i0.ɵɵtext(1, "No content types found");
282
283
  i0.ɵɵelementEnd();
283
284
  } }
284
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_54_Template(rf, ctx) { if (rf & 1) {
285
- i0.ɵɵelement(0, "div", 109);
285
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_54_Template(rf, ctx) { if (rf & 1) {
286
+ i0.ɵɵelement(0, "div", 110);
286
287
  } if (rf & 2) {
287
288
  const bin_r19 = ctx.$implicit;
288
289
  i0.ɵɵstyleProp("height", bin_r19.Height, "px")("background", bin_r19.Color);
289
290
  i0.ɵɵproperty("title", bin_r19.Title);
290
291
  } }
291
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_63_Template(rf, ctx) { if (rf & 1) {
292
- i0.ɵɵelementStart(0, "div", 55)(1, "div", 110);
292
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_63_Template(rf, ctx) { if (rf & 1) {
293
+ i0.ɵɵelementStart(0, "div", 56)(1, "div", 111);
293
294
  i0.ɵɵtext(2);
294
295
  i0.ɵɵelementEnd();
295
- i0.ɵɵelementStart(3, "div", 111)(4, "div", 112);
296
+ i0.ɵɵelementStart(3, "div", 112)(4, "div", 113);
296
297
  i0.ɵɵtext(5);
297
298
  i0.ɵɵelementEnd()()();
298
299
  } if (rf & 2) {
@@ -304,13 +305,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_63_Template
304
305
  i0.ɵɵadvance();
305
306
  i0.ɵɵtextInterpolate(source_r20.AvgTagsPerItem);
306
307
  } }
307
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_64_Template(rf, ctx) { if (rf & 1) {
308
- i0.ɵɵelementStart(0, "div", 37);
308
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_64_Template(rf, ctx) { if (rf & 1) {
309
+ i0.ɵɵelementStart(0, "div", 38);
309
310
  i0.ɵɵtext(1, "No source data");
310
311
  i0.ɵɵelementEnd();
311
312
  } }
312
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_73_Template(rf, ctx) { if (rf & 1) {
313
- i0.ɵɵelementStart(0, "div", 113)(1, "span", 114);
313
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_73_Template(rf, ctx) { if (rf & 1) {
314
+ i0.ɵɵelementStart(0, "div", 114)(1, "span", 115);
314
315
  i0.ɵɵtext(2);
315
316
  i0.ɵɵelementEnd()();
316
317
  } if (rf & 2) {
@@ -319,15 +320,15 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_73_Template
319
320
  i0.ɵɵadvance(2);
320
321
  i0.ɵɵtextInterpolate(day_r21.Label);
321
322
  } }
322
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_89_Template(rf, ctx) { if (rf & 1) {
323
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_89_Template(rf, ctx) { if (rf & 1) {
323
324
  i0.ɵɵnamespaceSVG();
324
- i0.ɵɵelement(0, "circle", 68);
325
+ i0.ɵɵelement(0, "circle", 69);
325
326
  } if (rf & 2) {
326
327
  const seg_r22 = ctx.$implicit;
327
328
  i0.ɵɵattribute("stroke", seg_r22.Color)("stroke-dasharray", seg_r22.StrokeDash)("stroke-dashoffset", seg_r22.StrokeOffset);
328
329
  } }
329
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_96_Template(rf, ctx) { if (rf & 1) {
330
- i0.ɵɵelementStart(0, "div", 115);
330
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_96_Template(rf, ctx) { if (rf & 1) {
331
+ i0.ɵɵelementStart(0, "div", 116);
331
332
  i0.ɵɵtext(1);
332
333
  i0.ɵɵelementStart(2, "small");
333
334
  i0.ɵɵtext(3);
@@ -340,10 +341,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_96_Template
340
341
  i0.ɵɵadvance(2);
341
342
  i0.ɵɵtextInterpolate(stat_r23.Label);
342
343
  } }
343
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_7_Template(rf, ctx) { if (rf & 1) {
344
- i0.ɵɵelement(0, "mj-loading", 90);
344
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_7_Template(rf, ctx) { if (rf & 1) {
345
+ i0.ɵɵelement(0, "mj-loading", 91);
345
346
  } }
346
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_5_Template(rf, ctx) { if (rf & 1) {
347
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_5_Template(rf, ctx) { if (rf & 1) {
347
348
  i0.ɵɵelementStart(0, "th");
348
349
  i0.ɵɵtext(1);
349
350
  i0.ɵɵelementEnd();
@@ -352,10 +353,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
352
353
  i0.ɵɵadvance();
353
354
  i0.ɵɵtextInterpolate(col_r25);
354
355
  } }
355
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
356
- i0.ɵɵelement(0, "th", 96);
356
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
357
+ i0.ɵɵelement(0, "th", 97);
357
358
  } }
358
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
359
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
359
360
  i0.ɵɵelementStart(0, "td");
360
361
  i0.ɵɵtext(1);
361
362
  i0.ɵɵelementEnd();
@@ -365,26 +366,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
365
366
  i0.ɵɵadvance();
366
367
  i0.ɵɵtextInterpolate(row_r27[col_r26]);
367
368
  } }
368
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
369
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
369
370
  const _r28 = i0.ɵɵgetCurrentView();
370
- i0.ɵɵelementStart(0, "button", 98);
371
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const row_r27 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r27)); });
372
- i0.ɵɵelement(1, "i", 99);
371
+ i0.ɵɵelementStart(0, "button", 99);
372
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const row_r27 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r27)); });
373
+ i0.ɵɵelement(1, "i", 100);
373
374
  i0.ɵɵelementEnd();
374
375
  } }
375
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
376
- i0.ɵɵelementStart(0, "td", 96);
377
- i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 97);
376
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
377
+ i0.ɵɵelementStart(0, "td", 97);
378
+ i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 98);
378
379
  i0.ɵɵelementEnd();
379
380
  } if (rf & 2) {
380
381
  const row_r27 = i0.ɵɵnextContext().$implicit;
381
382
  i0.ɵɵadvance();
382
383
  i0.ɵɵconditional(row_r27["_RecordID"] ? 1 : -1);
383
384
  } }
384
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Template(rf, ctx) { if (rf & 1) {
385
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Template(rf, ctx) { if (rf & 1) {
385
386
  i0.ɵɵelementStart(0, "tr");
386
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
387
- i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Conditional_3_Template, 2, 1, "td", 96);
387
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
388
+ i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Template, 2, 1, "td", 97);
388
389
  i0.ɵɵelementEnd();
389
390
  } if (rf & 2) {
390
391
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -393,13 +394,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
393
394
  i0.ɵɵadvance(2);
394
395
  i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
395
396
  } }
396
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_Template(rf, ctx) { if (rf & 1) {
397
- i0.ɵɵelementStart(0, "div", 91)(1, "table", 95)(2, "thead")(3, "tr");
398
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
399
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_Conditional_6_Template, 1, 0, "th", 96);
397
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Template(rf, ctx) { if (rf & 1) {
398
+ i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
399
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
400
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Conditional_6_Template, 1, 0, "th", 97);
400
401
  i0.ɵɵelementEnd()();
401
402
  i0.ɵɵelementStart(7, "tbody");
402
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
403
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
403
404
  i0.ɵɵelementEnd()()();
404
405
  } if (rf & 2) {
405
406
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -410,22 +411,22 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
410
411
  i0.ɵɵadvance(2);
411
412
  i0.ɵɵrepeater(ctx_r2.DrillDownData);
412
413
  } }
413
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_9_Template(rf, ctx) { if (rf & 1) {
414
- i0.ɵɵelementStart(0, "div", 92);
414
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_9_Template(rf, ctx) { if (rf & 1) {
415
+ i0.ɵɵelementStart(0, "div", 93);
415
416
  i0.ɵɵtext(1, "No data available");
416
417
  i0.ɵɵelementEnd();
417
418
  } }
418
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Template(rf, ctx) { if (rf & 1) {
419
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Template(rf, ctx) { if (rf & 1) {
419
420
  const _r24 = i0.ɵɵgetCurrentView();
420
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 83)(2, "span", 84);
421
- i0.ɵɵelement(3, "i", 85);
421
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
422
+ i0.ɵɵelement(3, "i", 86);
422
423
  i0.ɵɵtext(4);
423
424
  i0.ɵɵelementEnd();
424
- i0.ɵɵelementStart(5, "button", 88);
425
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
426
- i0.ɵɵelement(6, "i", 89);
425
+ i0.ɵɵelementStart(5, "button", 89);
426
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
427
+ i0.ɵɵelement(6, "i", 90);
427
428
  i0.ɵɵelementEnd()();
428
- i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_7_Template, 1, 0, "mj-loading", 90)(8, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_8_Template, 10, 1, "div", 91)(9, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Conditional_9_Template, 2, 0, "div", 92);
429
+ i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_7_Template, 1, 0, "mj-loading", 91)(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Template, 10, 1, "div", 92)(9, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_9_Template, 2, 0, "div", 93);
429
430
  i0.ɵɵelementEnd();
430
431
  } if (rf & 2) {
431
432
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -434,7 +435,7 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
434
435
  i0.ɵɵadvance(3);
435
436
  i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 7 : ctx_r2.DrillDownData.length > 0 ? 8 : 9);
436
437
  } }
437
- function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
438
+ function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template(rf, ctx) { if (rf & 1) {
438
439
  const _r5 = i0.ɵɵgetCurrentView();
439
440
  i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
440
441
  i0.ɵɵelement(2, "i", 20);
@@ -442,119 +443,119 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template(rf, ct
442
443
  i0.ɵɵtext(4, "Overview");
443
444
  i0.ɵɵelementEnd()();
444
445
  i0.ɵɵelementStart(5, "div", 21)(6, "div", 22);
445
- i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_8_Template, 2, 3, "button", 23, _forTrack2);
446
+ i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_8_Template, 2, 3, "button", 23, _forTrack2);
446
447
  i0.ɵɵelementEnd();
447
448
  i0.ɵɵelementStart(9, "select", 24);
448
- i0.ɵɵlistener("ngModelChange", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SetEntityFilter($event)); });
449
- i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_11_Template, 2, 2, "option", 25, i0.ɵɵrepeaterTrackByIdentity);
449
+ i0.ɵɵlistener("ngModelChange", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SetEntityFilter($event)); });
450
+ i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_11_Template, 2, 2, "option", 25, i0.ɵɵrepeaterTrackByIdentity);
450
451
  i0.ɵɵelementEnd()();
451
452
  i0.ɵɵelementStart(12, "div", 26);
452
- i0.ɵɵrepeaterCreate(13, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Template, 13, 10, "div", 27, _forTrack2);
453
+ i0.ɵɵrepeaterCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Template, 13, 10, "div", 27, _forTrack2);
453
454
  i0.ɵɵelementEnd();
454
- i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_Template, 12, 2, "div", 28);
455
+ i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Template, 12, 2, "div", 28);
455
456
  i0.ɵɵelementStart(16, "div", 29)(17, "div", 30);
456
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("tagGrowth")); });
457
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("tagGrowth")); });
457
458
  i0.ɵɵelementStart(18, "div", 31);
458
- i0.ɵɵelement(19, "i", 5);
459
+ i0.ɵɵelement(19, "i", 32);
459
460
  i0.ɵɵtext(20, " Tag Growth");
460
461
  i0.ɵɵelementEnd();
461
- i0.ɵɵelementStart(21, "div", 32);
462
- i0.ɵɵrepeaterCreate(22, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_23_Template, 6, 6, "div", 33, _forTrack2);
462
+ i0.ɵɵelementStart(21, "div", 33);
463
+ i0.ɵɵrepeaterCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_23_Template, 6, 6, "div", 34, _forTrack2);
463
464
  i0.ɵɵelementEnd()();
464
465
  i0.ɵɵelementStart(24, "div", 30);
465
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("contentCoverage")); });
466
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("contentCoverage")); });
466
467
  i0.ɵɵelementStart(25, "div", 31);
467
- i0.ɵɵelement(26, "i", 34);
468
+ i0.ɵɵelement(26, "i", 35);
468
469
  i0.ɵɵtext(27, " Content Coverage");
469
470
  i0.ɵɵelementEnd();
470
- i0.ɵɵelementStart(28, "div", 35);
471
- i0.ɵɵrepeaterCreate(29, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_30_Template, 11, 6, "div", 36, _forTrack1);
472
- i0.ɵɵconditionalCreate(31, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_31_Template, 2, 0, "div", 37);
471
+ i0.ɵɵelementStart(28, "div", 36);
472
+ i0.ɵɵrepeaterCreate(29, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_30_Template, 11, 6, "div", 37, _forTrack1);
473
+ i0.ɵɵconditionalCreate(31, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_31_Template, 2, 0, "div", 38);
473
474
  i0.ɵɵelementEnd()();
474
475
  i0.ɵɵelementStart(32, "div", 30);
475
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_div_click_32_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("qualityScore")); });
476
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_32_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("qualityScore")); });
476
477
  i0.ɵɵelementStart(33, "div", 31);
477
- i0.ɵɵelement(34, "i", 38);
478
+ i0.ɵɵelement(34, "i", 39);
478
479
  i0.ɵɵtext(35, " Quality Score");
479
480
  i0.ɵɵelementEnd();
480
- i0.ɵɵelementStart(36, "div", 39);
481
+ i0.ɵɵelementStart(36, "div", 40);
481
482
  i0.ɵɵnamespaceSVG();
482
- i0.ɵɵelementStart(37, "svg", 40);
483
- i0.ɵɵelement(38, "path", 41)(39, "path", 42)(40, "path", 43)(41, "path", 44);
484
- i0.ɵɵelementStart(42, "text", 45);
483
+ i0.ɵɵelementStart(37, "svg", 41);
484
+ i0.ɵɵelement(38, "path", 42)(39, "path", 43)(40, "path", 44)(41, "path", 45);
485
+ i0.ɵɵelementStart(42, "text", 46);
485
486
  i0.ɵɵtext(43);
486
487
  i0.ɵɵelementEnd();
487
- i0.ɵɵelementStart(44, "text", 46);
488
+ i0.ɵɵelementStart(44, "text", 47);
488
489
  i0.ɵɵtext(45, "out of 100");
489
490
  i0.ɵɵelementEnd();
490
- i0.ɵɵelementStart(46, "text", 47);
491
+ i0.ɵɵelementStart(46, "text", 48);
491
492
  i0.ɵɵtext(47, "0");
492
493
  i0.ɵɵelementEnd();
493
- i0.ɵɵelementStart(48, "text", 48);
494
+ i0.ɵɵelementStart(48, "text", 49);
494
495
  i0.ɵɵtext(49, "50");
495
496
  i0.ɵɵelementEnd();
496
- i0.ɵɵelementStart(50, "text", 49);
497
+ i0.ɵɵelementStart(50, "text", 50);
497
498
  i0.ɵɵtext(51, "100");
498
499
  i0.ɵɵelementEnd()()();
499
500
  i0.ɵɵnamespaceHTML();
500
- i0.ɵɵelementStart(52, "div", 50);
501
- i0.ɵɵrepeaterCreate(53, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_54_Template, 1, 5, "div", 51, i0.ɵɵcomponentInstance().TrackByIndex, true);
501
+ i0.ɵɵelementStart(52, "div", 51);
502
+ i0.ɵɵrepeaterCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_54_Template, 1, 5, "div", 52, i0.ɵɵcomponentInstance().TrackByIndex, true);
502
503
  i0.ɵɵelementEnd();
503
- i0.ɵɵelementStart(55, "div", 52);
504
+ i0.ɵɵelementStart(55, "div", 53);
504
505
  i0.ɵɵtext(56, "Confidence Distribution");
505
506
  i0.ɵɵelementEnd()();
506
507
  i0.ɵɵelementStart(57, "div", 30);
507
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_div_click_57_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("sourcePerformance")); });
508
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_57_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("sourcePerformance")); });
508
509
  i0.ɵɵelementStart(58, "div", 31);
509
- i0.ɵɵelement(59, "i", 53);
510
+ i0.ɵɵelement(59, "i", 54);
510
511
  i0.ɵɵtext(60, " Source Performance");
511
512
  i0.ɵɵelementEnd();
512
- i0.ɵɵelementStart(61, "div", 54);
513
- i0.ɵɵrepeaterCreate(62, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_63_Template, 6, 6, "div", 55, _forTrack1);
514
- i0.ɵɵconditionalCreate(64, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_64_Template, 2, 0, "div", 37);
513
+ i0.ɵɵelementStart(61, "div", 55);
514
+ i0.ɵɵrepeaterCreate(62, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_63_Template, 6, 6, "div", 56, _forTrack1);
515
+ i0.ɵɵconditionalCreate(64, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_64_Template, 2, 0, "div", 38);
515
516
  i0.ɵɵelementEnd();
516
- i0.ɵɵelementStart(65, "div", 56);
517
+ i0.ɵɵelementStart(65, "div", 57);
517
518
  i0.ɵɵtext(66, "Average tags per item");
518
519
  i0.ɵɵelementEnd()();
519
520
  i0.ɵɵelementStart(67, "div", 30);
520
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_div_click_67_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("dailyThroughput")); });
521
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_67_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("dailyThroughput")); });
521
522
  i0.ɵɵelementStart(68, "div", 31);
522
- i0.ɵɵelement(69, "i", 57);
523
+ i0.ɵɵelement(69, "i", 58);
523
524
  i0.ɵɵtext(70, " Daily Throughput");
524
525
  i0.ɵɵelementEnd();
525
- i0.ɵɵelementStart(71, "div", 58);
526
- i0.ɵɵrepeaterCreate(72, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_73_Template, 3, 5, "div", 59, _forTrack2);
526
+ i0.ɵɵelementStart(71, "div", 59);
527
+ i0.ɵɵrepeaterCreate(72, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_73_Template, 3, 5, "div", 60, _forTrack2);
527
528
  i0.ɵɵelementEnd();
528
- i0.ɵɵelementStart(74, "div", 60)(75, "div", 61);
529
- i0.ɵɵelement(76, "div", 62);
529
+ i0.ɵɵelementStart(74, "div", 61)(75, "div", 62);
530
+ i0.ɵɵelement(76, "div", 63);
530
531
  i0.ɵɵtext(77, " Success");
531
532
  i0.ɵɵelementEnd();
532
- i0.ɵɵelementStart(78, "div", 61);
533
- i0.ɵɵelement(79, "div", 63);
533
+ i0.ɵɵelementStart(78, "div", 62);
534
+ i0.ɵɵelement(79, "div", 64);
534
535
  i0.ɵɵtext(80, " Failures");
535
536
  i0.ɵɵelementEnd()()();
536
537
  i0.ɵɵelementStart(81, "div", 30);
537
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template_div_click_81_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("taxonomyHealth")); });
538
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_81_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("taxonomyHealth")); });
538
539
  i0.ɵɵelementStart(82, "div", 31);
539
- i0.ɵɵelement(83, "i", 64);
540
+ i0.ɵɵelement(83, "i", 65);
540
541
  i0.ɵɵtext(84, " Taxonomy Health");
541
542
  i0.ɵɵelementEnd();
542
- i0.ɵɵelementStart(85, "div", 65);
543
+ i0.ɵɵelementStart(85, "div", 66);
543
544
  i0.ɵɵnamespaceSVG();
544
- i0.ɵɵelementStart(86, "svg", 66);
545
- i0.ɵɵelement(87, "circle", 67);
546
- i0.ɵɵrepeaterCreate(88, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_89_Template, 1, 3, ":svg:circle", 68, i0.ɵɵcomponentInstance().TrackByIndex, true);
547
- i0.ɵɵelementStart(90, "text", 69);
545
+ i0.ɵɵelementStart(86, "svg", 67);
546
+ i0.ɵɵelement(87, "circle", 68);
547
+ i0.ɵɵrepeaterCreate(88, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_89_Template, 1, 3, ":svg:circle", 69, i0.ɵɵcomponentInstance().TrackByIndex, true);
548
+ i0.ɵɵelementStart(90, "text", 70);
548
549
  i0.ɵɵtext(91);
549
550
  i0.ɵɵelementEnd();
550
- i0.ɵɵelementStart(92, "text", 70);
551
+ i0.ɵɵelementStart(92, "text", 71);
551
552
  i0.ɵɵtext(93, "total tags");
552
553
  i0.ɵɵelementEnd()()();
553
554
  i0.ɵɵnamespaceHTML();
554
- i0.ɵɵelementStart(94, "div", 71);
555
- i0.ɵɵrepeaterCreate(95, AnalyticsResourceComponent_Conditional_1_Conditional_22_For_96_Template, 4, 6, "div", 72, _forTrack2);
555
+ i0.ɵɵelementStart(94, "div", 72);
556
+ i0.ɵɵrepeaterCreate(95, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_96_Template, 4, 6, "div", 73, _forTrack2);
556
557
  i0.ɵɵelementEnd()()();
557
- i0.ɵɵconditionalCreate(97, AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_Template, 10, 2, "div", 28);
558
+ i0.ɵɵconditionalCreate(97, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Template, 10, 2, "div", 28);
558
559
  i0.ɵɵelementEnd();
559
560
  } if (rf & 2) {
560
561
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -593,41 +594,41 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template(rf, ct
593
594
  i0.ɵɵadvance(2);
594
595
  i0.ɵɵconditional(ctx_r2.DrillDownTarget && !ctx_r2.DrillDownTarget.startsWith("kpi-") ? 97 : -1);
595
596
  } }
596
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_10_Template(rf, ctx) { if (rf & 1) {
597
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
597
598
  const _r30 = i0.ɵɵgetCurrentView();
598
- i0.ɵɵelementStart(0, "button", 93);
599
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ExportTabDataCSV("top-tags")); });
600
- i0.ɵɵelement(1, "i", 94);
599
+ i0.ɵɵelementStart(0, "button", 94);
600
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ExportTabDataCSV("top-tags")); });
601
+ i0.ɵɵelement(1, "i", 95);
601
602
  i0.ɵɵtext(2, " CSV ");
602
603
  i0.ɵɵelementEnd();
603
604
  } }
604
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_For_20_Template(rf, ctx) { if (rf & 1) {
605
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_For_20_Template(rf, ctx) { if (rf & 1) {
605
606
  const _r31 = i0.ɵɵgetCurrentView();
606
- i0.ɵɵelementStart(0, "tr", 130);
607
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_For_20_Template_tr_click_0_listener() { const tag_r32 = i0.ɵɵrestoreView(_r31).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("tag-row:" + tag_r32.Name)); });
607
+ i0.ɵɵelementStart(0, "tr", 131);
608
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_For_20_Template_tr_click_0_listener() { const tag_r32 = i0.ɵɵrestoreView(_r31).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("tag-row:" + tag_r32.Name)); });
608
609
  i0.ɵɵelementStart(1, "td");
609
610
  i0.ɵɵtext(2);
610
611
  i0.ɵɵelementEnd();
611
612
  i0.ɵɵelementStart(3, "td")(4, "strong");
612
613
  i0.ɵɵtext(5);
613
614
  i0.ɵɵelementEnd()();
614
- i0.ɵɵelementStart(6, "td", 128);
615
+ i0.ɵɵelementStart(6, "td", 129);
615
616
  i0.ɵɵtext(7);
616
617
  i0.ɵɵelementEnd();
617
618
  i0.ɵɵelementStart(8, "td");
618
- i0.ɵɵelement(9, "span", 131);
619
+ i0.ɵɵelement(9, "span", 132);
619
620
  i0.ɵɵtext(10);
620
621
  i0.ɵɵelementEnd();
621
622
  i0.ɵɵelementStart(11, "td");
622
623
  i0.ɵɵnamespaceSVG();
623
- i0.ɵɵelementStart(12, "svg", 132);
624
- i0.ɵɵelement(13, "polyline", 133);
624
+ i0.ɵɵelementStart(12, "svg", 133);
625
+ i0.ɵɵelement(13, "polyline", 134);
625
626
  i0.ɵɵelementEnd()();
626
627
  i0.ɵɵnamespaceHTML();
627
628
  i0.ɵɵelementStart(14, "td");
628
629
  i0.ɵɵtext(15);
629
630
  i0.ɵɵelementEnd();
630
- i0.ɵɵelementStart(16, "td", 134);
631
+ i0.ɵɵelementStart(16, "td", 135);
631
632
  i0.ɵɵtext(17);
632
633
  i0.ɵɵelementEnd()();
633
634
  } if (rf & 2) {
@@ -650,14 +651,14 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_
650
651
  i0.ɵɵadvance(2);
651
652
  i0.ɵɵtextInterpolate(tag_r32.FirstSeen);
652
653
  } }
653
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_Template(rf, ctx) { if (rf & 1) {
654
- i0.ɵɵelementStart(0, "div", 120)(1, "table", 95)(2, "thead")(3, "tr")(4, "th");
654
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
655
+ i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
655
656
  i0.ɵɵtext(5, "#");
656
657
  i0.ɵɵelementEnd();
657
658
  i0.ɵɵelementStart(6, "th");
658
659
  i0.ɵɵtext(7, "Tag Name");
659
660
  i0.ɵɵelementEnd();
660
- i0.ɵɵelementStart(8, "th", 128);
661
+ i0.ɵɵelementStart(8, "th", 129);
661
662
  i0.ɵɵtext(9, "Usage Count");
662
663
  i0.ɵɵelementEnd();
663
664
  i0.ɵɵelementStart(10, "th");
@@ -673,32 +674,32 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_
673
674
  i0.ɵɵtext(17, "First Seen");
674
675
  i0.ɵɵelementEnd()()();
675
676
  i0.ɵɵelementStart(18, "tbody");
676
- i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_For_20_Template, 18, 12, "tr", 129, _forTrack1);
677
+ i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_For_20_Template, 18, 12, "tr", 130, _forTrack1);
677
678
  i0.ɵɵelementEnd()()();
678
679
  } if (rf & 2) {
679
680
  const ctx_r2 = i0.ɵɵnextContext(3);
680
681
  i0.ɵɵadvance(19);
681
682
  i0.ɵɵrepeater(ctx_r2.TopTags);
682
683
  } }
683
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_12_Template(rf, ctx) { if (rf & 1) {
684
- i0.ɵɵelementStart(0, "div", 121);
685
- i0.ɵɵelement(1, "i", 116);
684
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_12_Template(rf, ctx) { if (rf & 1) {
685
+ i0.ɵɵelementStart(0, "div", 122);
686
+ i0.ɵɵelement(1, "i", 117);
686
687
  i0.ɵɵelementStart(2, "p");
687
688
  i0.ɵɵtext(3, "No tag data available yet. Process content to generate tags.");
688
689
  i0.ɵɵelementEnd()();
689
690
  } }
690
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_6_Template(rf, ctx) { if (rf & 1) {
691
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_6_Template(rf, ctx) { if (rf & 1) {
691
692
  const _r34 = i0.ɵɵgetCurrentView();
692
- i0.ɵɵelementStart(0, "button", 93);
693
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r34); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
694
- i0.ɵɵelement(1, "i", 94);
693
+ i0.ɵɵelementStart(0, "button", 94);
694
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r34); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
695
+ i0.ɵɵelement(1, "i", 95);
695
696
  i0.ɵɵtext(2, " CSV ");
696
697
  i0.ɵɵelementEnd();
697
698
  } }
698
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
699
- i0.ɵɵelement(0, "mj-loading", 90);
699
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
700
+ i0.ɵɵelement(0, "mj-loading", 91);
700
701
  } }
701
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
702
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
702
703
  i0.ɵɵelementStart(0, "th");
703
704
  i0.ɵɵtext(1);
704
705
  i0.ɵɵelementEnd();
@@ -707,10 +708,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
707
708
  i0.ɵɵadvance();
708
709
  i0.ɵɵtextInterpolate(col_r35);
709
710
  } }
710
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
711
- i0.ɵɵelement(0, "th", 96);
711
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
712
+ i0.ɵɵelement(0, "th", 97);
712
713
  } }
713
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
714
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
714
715
  i0.ɵɵelementStart(0, "td");
715
716
  i0.ɵɵtext(1);
716
717
  i0.ɵɵelementEnd();
@@ -720,26 +721,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
720
721
  i0.ɵɵadvance();
721
722
  i0.ɵɵtextInterpolate(row_r37[col_r36]);
722
723
  } }
723
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
724
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
724
725
  const _r38 = i0.ɵɵgetCurrentView();
725
- i0.ɵɵelementStart(0, "button", 136);
726
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r38); const row_r37 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r37)); });
727
- i0.ɵɵelement(1, "i", 99);
726
+ i0.ɵɵelementStart(0, "button", 137);
727
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r38); const row_r37 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r37)); });
728
+ i0.ɵɵelement(1, "i", 100);
728
729
  i0.ɵɵelementEnd();
729
730
  } }
730
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
731
- i0.ɵɵelementStart(0, "td", 96);
732
- i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 135);
731
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
732
+ i0.ɵɵelementStart(0, "td", 97);
733
+ i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
733
734
  i0.ɵɵelementEnd();
734
735
  } if (rf & 2) {
735
736
  const row_r37 = i0.ɵɵnextContext().$implicit;
736
737
  i0.ɵɵadvance();
737
738
  i0.ɵɵconditional(row_r37["_RecordID"] ? 1 : -1);
738
739
  } }
739
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
740
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
740
741
  i0.ɵɵelementStart(0, "tr");
741
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
742
- i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 96);
742
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
743
+ i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
743
744
  i0.ɵɵelementEnd();
744
745
  } if (rf & 2) {
745
746
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -748,13 +749,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
748
749
  i0.ɵɵadvance(2);
749
750
  i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
750
751
  } }
751
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
752
- i0.ɵɵelementStart(0, "div", 91)(1, "table", 95)(2, "thead")(3, "tr");
753
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
754
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_Conditional_6_Template, 1, 0, "th", 96);
752
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
753
+ i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
754
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
755
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
755
756
  i0.ɵɵelementEnd()();
756
757
  i0.ɵɵelementStart(7, "tbody");
757
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
758
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
758
759
  i0.ɵɵelementEnd()()();
759
760
  } if (rf & 2) {
760
761
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -765,24 +766,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
765
766
  i0.ɵɵadvance(2);
766
767
  i0.ɵɵrepeater(ctx_r2.DrillDownData);
767
768
  } }
768
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
769
- i0.ɵɵelementStart(0, "div", 92);
769
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
770
+ i0.ɵɵelementStart(0, "div", 93);
770
771
  i0.ɵɵtext(1, "No items found for this tag");
771
772
  i0.ɵɵelementEnd();
772
773
  } }
773
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Template(rf, ctx) { if (rf & 1) {
774
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Template(rf, ctx) { if (rf & 1) {
774
775
  const _r33 = i0.ɵɵgetCurrentView();
775
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 83)(2, "span", 84);
776
- i0.ɵɵelement(3, "i", 85);
776
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
777
+ i0.ɵɵelement(3, "i", 86);
777
778
  i0.ɵɵtext(4);
778
779
  i0.ɵɵelementEnd();
779
- i0.ɵɵelementStart(5, "div", 86);
780
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_6_Template, 3, 0, "button", 87);
781
- i0.ɵɵelementStart(7, "button", 88);
782
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
783
- i0.ɵɵelement(8, "i", 89);
780
+ i0.ɵɵelementStart(5, "div", 87);
781
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_6_Template, 3, 0, "button", 88);
782
+ i0.ɵɵelementStart(7, "button", 89);
783
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
784
+ i0.ɵɵelement(8, "i", 90);
784
785
  i0.ɵɵelementEnd()()();
785
- i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_9_Template, 1, 0, "mj-loading", 90)(10, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_10_Template, 10, 1, "div", 91)(11, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Conditional_11_Template, 2, 0, "div", 92);
786
+ i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_11_Template, 2, 0, "div", 93);
786
787
  i0.ɵɵelementEnd();
787
788
  } if (rf & 2) {
788
789
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -793,8 +794,8 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
793
794
  i0.ɵɵadvance(3);
794
795
  i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
795
796
  } }
796
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_For_6_For_5_Template(rf, ctx) { if (rf & 1) {
797
- i0.ɵɵelementStart(0, "div", 144);
797
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_For_5_Template(rf, ctx) { if (rf & 1) {
798
+ i0.ɵɵelementStart(0, "div", 145);
798
799
  i0.ɵɵtext(1);
799
800
  i0.ɵɵelementEnd();
800
801
  } if (rf & 2) {
@@ -804,12 +805,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
804
805
  i0.ɵɵadvance();
805
806
  i0.ɵɵtextInterpolate(seg_r39.Label);
806
807
  } }
807
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
808
- i0.ɵɵelementStart(0, "div", 139)(1, "div", 141);
808
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
809
+ i0.ɵɵelementStart(0, "div", 140)(1, "div", 142);
809
810
  i0.ɵɵtext(2);
810
811
  i0.ɵɵelementEnd();
811
- i0.ɵɵelementStart(3, "div", 142);
812
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_For_6_For_5_Template, 2, 6, "div", 143, i0.ɵɵcomponentInstance().TrackByIndex, true);
812
+ i0.ɵɵelementStart(3, "div", 143);
813
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_For_5_Template, 2, 6, "div", 144, i0.ɵɵcomponentInstance().TrackByIndex, true);
813
814
  i0.ɵɵelementEnd()();
814
815
  } if (rf & 2) {
815
816
  const row_r40 = ctx.$implicit;
@@ -818,9 +819,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
818
819
  i0.ɵɵadvance(2);
819
820
  i0.ɵɵrepeater(row_r40.Segments);
820
821
  } }
821
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
822
- i0.ɵɵelementStart(0, "div", 61);
823
- i0.ɵɵelement(1, "div", 145);
822
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
823
+ i0.ɵɵelementStart(0, "div", 62);
824
+ i0.ɵɵelement(1, "div", 146);
824
825
  i0.ɵɵtext(2);
825
826
  i0.ɵɵelementEnd();
826
827
  } if (rf & 2) {
@@ -830,16 +831,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
830
831
  i0.ɵɵadvance();
831
832
  i0.ɵɵtextInterpolate1(" ", item_r41.Label);
832
833
  } }
833
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_Template(rf, ctx) { if (rf & 1) {
834
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
835
- i0.ɵɵelement(2, "i", 137);
834
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_Template(rf, ctx) { if (rf & 1) {
835
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
836
+ i0.ɵɵelement(2, "i", 138);
836
837
  i0.ɵɵtext(3, " Tag Distribution by Entity");
837
838
  i0.ɵɵelementEnd();
838
- i0.ɵɵelementStart(4, "div", 138);
839
- i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_For_6_Template, 6, 1, "div", 139, _forTrack3);
839
+ i0.ɵɵelementStart(4, "div", 139);
840
+ i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_Template, 6, 1, "div", 140, _forTrack3);
840
841
  i0.ɵɵelementEnd();
841
- i0.ɵɵelementStart(7, "div", 140);
842
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_For_9_Template, 3, 3, "div", 61, _forTrack2);
842
+ i0.ɵɵelementStart(7, "div", 141);
843
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_9_Template, 3, 3, "div", 62, _forTrack2);
843
844
  i0.ɵɵelementEnd()();
844
845
  } if (rf & 2) {
845
846
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -848,11 +849,11 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
848
849
  i0.ɵɵadvance(3);
849
850
  i0.ɵɵrepeater(ctx_r2.DistributionLegend);
850
851
  } }
851
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_For_6_Template(rf, ctx) { if (rf & 1) {
852
- i0.ɵɵelementStart(0, "div", 148)(1, "div", 150);
852
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_For_6_Template(rf, ctx) { if (rf & 1) {
853
+ i0.ɵɵelementStart(0, "div", 149)(1, "div", 151);
853
854
  i0.ɵɵtext(2);
854
855
  i0.ɵɵelementEnd();
855
- i0.ɵɵelementStart(3, "div", 151);
856
+ i0.ɵɵelementStart(3, "div", 152);
856
857
  i0.ɵɵtext(4);
857
858
  i0.ɵɵelementEnd()();
858
859
  } if (rf & 2) {
@@ -864,15 +865,15 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_
864
865
  i0.ɵɵadvance(2);
865
866
  i0.ɵɵtextInterpolate(bar_r42.Label);
866
867
  } }
867
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_Template(rf, ctx) { if (rf & 1) {
868
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
869
- i0.ɵɵelement(2, "i", 146);
868
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_Template(rf, ctx) { if (rf & 1) {
869
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
870
+ i0.ɵɵelement(2, "i", 147);
870
871
  i0.ɵɵtext(3, " Tag Depth Distribution");
871
872
  i0.ɵɵelementEnd();
872
- i0.ɵɵelementStart(4, "div", 147);
873
- i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_For_6_Template, 5, 6, "div", 148, _forTrack2);
873
+ i0.ɵɵelementStart(4, "div", 148);
874
+ i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_For_6_Template, 5, 6, "div", 149, _forTrack2);
874
875
  i0.ɵɵelementEnd();
875
- i0.ɵɵelementStart(7, "div", 149);
876
+ i0.ɵɵelementStart(7, "div", 150);
876
877
  i0.ɵɵtext(8, " Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure ");
877
878
  i0.ɵɵelementEnd()();
878
879
  } if (rf & 2) {
@@ -880,9 +881,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_
880
881
  i0.ɵɵadvance(5);
881
882
  i0.ɵɵrepeater(ctx_r2.TagDepthBars);
882
883
  } }
883
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_22_Template(rf, ctx) { if (rf & 1) {
884
- i0.ɵɵelementStart(0, "span", 126);
885
- i0.ɵɵelement(1, "i", 152);
884
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_22_Template(rf, ctx) { if (rf & 1) {
885
+ i0.ɵɵelementStart(0, "span", 127);
886
+ i0.ɵɵelement(1, "i", 153);
886
887
  i0.ɵɵtext(2);
887
888
  i0.ɵɵelementEnd();
888
889
  } if (rf & 2) {
@@ -890,16 +891,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_22_
890
891
  i0.ɵɵadvance(2);
891
892
  i0.ɵɵtextInterpolate1(" Last computed: ", ctx_r2.CoOccurrenceLastComputed, " ");
892
893
  } }
893
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_24_Template(rf, ctx) { if (rf & 1) {
894
- i0.ɵɵelement(0, "i", 153);
894
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_24_Template(rf, ctx) { if (rf & 1) {
895
+ i0.ɵɵelement(0, "i", 154);
895
896
  i0.ɵɵtext(1, " Computing... ");
896
897
  } }
897
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_25_Template(rf, ctx) { if (rf & 1) {
898
- i0.ɵɵelement(0, "i", 154);
898
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_25_Template(rf, ctx) { if (rf & 1) {
899
+ i0.ɵɵelement(0, "i", 155);
899
900
  i0.ɵɵtext(1, " Recompute ");
900
901
  } }
901
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_For_16_Template(rf, ctx) { if (rf & 1) {
902
- i0.ɵɵelementStart(0, "tr")(1, "td", 134);
902
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_For_16_Template(rf, ctx) { if (rf & 1) {
903
+ i0.ɵɵelementStart(0, "tr")(1, "td", 135);
903
904
  i0.ɵɵtext(2);
904
905
  i0.ɵɵelementEnd();
905
906
  i0.ɵɵelementStart(3, "td")(4, "strong");
@@ -908,18 +909,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
908
909
  i0.ɵɵelementStart(6, "td")(7, "strong");
909
910
  i0.ɵɵtext(8);
910
911
  i0.ɵɵelementEnd()();
911
- i0.ɵɵelementStart(9, "td", 128);
912
+ i0.ɵɵelementStart(9, "td", 129);
912
913
  i0.ɵɵtext(10);
913
914
  i0.ɵɵelementEnd();
914
915
  i0.ɵɵelementStart(11, "td");
915
- i0.ɵɵelement(12, "span", 155);
916
+ i0.ɵɵelement(12, "span", 156);
916
917
  i0.ɵɵelementEnd()();
917
918
  } if (rf & 2) {
918
919
  const pair_r43 = ctx.$implicit;
919
- const ɵ$index_665_r44 = ctx.$index;
920
+ const ɵ$index_663_r44 = ctx.$index;
920
921
  const ctx_r2 = i0.ɵɵnextContext(4);
921
922
  i0.ɵɵadvance(2);
922
- i0.ɵɵtextInterpolate(ɵ$index_665_r44 + 1);
923
+ i0.ɵɵtextInterpolate(ɵ$index_663_r44 + 1);
923
924
  i0.ɵɵadvance(3);
924
925
  i0.ɵɵtextInterpolate(pair_r43.TagAName);
925
926
  i0.ɵɵadvance(3);
@@ -929,8 +930,8 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
929
930
  i0.ɵɵadvance(2);
930
931
  i0.ɵɵstyleProp("width", pair_r43.BarWidth, "px");
931
932
  } }
932
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_Template(rf, ctx) { if (rf & 1) {
933
- i0.ɵɵelementStart(0, "div", 120)(1, "table", 95)(2, "thead")(3, "tr")(4, "th");
933
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_Template(rf, ctx) { if (rf & 1) {
934
+ i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
934
935
  i0.ɵɵtext(5, "#");
935
936
  i0.ɵɵelementEnd();
936
937
  i0.ɵɵelementStart(6, "th");
@@ -939,56 +940,56 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
939
940
  i0.ɵɵelementStart(8, "th");
940
941
  i0.ɵɵtext(9, "Tag B");
941
942
  i0.ɵɵelementEnd();
942
- i0.ɵɵelementStart(10, "th", 128);
943
+ i0.ɵɵelementStart(10, "th", 129);
943
944
  i0.ɵɵtext(11, "Co-Occurrences");
944
945
  i0.ɵɵelementEnd();
945
946
  i0.ɵɵelementStart(12, "th");
946
947
  i0.ɵɵtext(13, "Frequency");
947
948
  i0.ɵɵelementEnd()()();
948
949
  i0.ɵɵelementStart(14, "tbody");
949
- i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_For_16_Template, 13, 6, "tr", null, _forTrack4);
950
+ i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_For_16_Template, 13, 6, "tr", null, _forTrack4);
950
951
  i0.ɵɵelementEnd()()();
951
952
  } if (rf & 2) {
952
953
  const ctx_r2 = i0.ɵɵnextContext(3);
953
954
  i0.ɵɵadvance(15);
954
955
  i0.ɵɵrepeater(ctx_r2.CoOccurrencePairs);
955
956
  } }
956
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_27_Template(rf, ctx) { if (rf & 1) {
957
- i0.ɵɵelementStart(0, "div", 121);
958
- i0.ɵɵelement(1, "i", 124);
957
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template(rf, ctx) { if (rf & 1) {
958
+ i0.ɵɵelementStart(0, "div", 122);
959
+ i0.ɵɵelement(1, "i", 125);
959
960
  i0.ɵɵelementStart(2, "p");
960
961
  i0.ɵɵtext(3, "No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.");
961
962
  i0.ɵɵelementEnd()();
962
963
  } }
963
- function AnalyticsResourceComponent_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
964
+ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Template(rf, ctx) { if (rf & 1) {
964
965
  const _r29 = i0.ɵɵgetCurrentView();
965
966
  i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
966
- i0.ɵɵelement(2, "i", 116);
967
+ i0.ɵɵelement(2, "i", 117);
967
968
  i0.ɵɵelementStart(3, "h1");
968
969
  i0.ɵɵtext(4, "Tags");
969
970
  i0.ɵɵelementEnd()();
970
- i0.ɵɵelementStart(5, "div", 117)(6, "div", 118)(7, "h3");
971
- i0.ɵɵelement(8, "i", 119);
971
+ i0.ɵɵelementStart(5, "div", 118)(6, "div", 119)(7, "h3");
972
+ i0.ɵɵelement(8, "i", 120);
972
973
  i0.ɵɵtext(9, " Top 20 Tags");
973
974
  i0.ɵɵelementEnd();
974
- i0.ɵɵconditionalCreate(10, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_10_Template, 3, 0, "button", 87);
975
+ i0.ɵɵconditionalCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_10_Template, 3, 0, "button", 88);
975
976
  i0.ɵɵelementEnd();
976
- i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_Template, 21, 0, "div", 120)(12, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_12_Template, 4, 0, "div", 121);
977
+ i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_Template, 21, 0, "div", 121)(12, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_12_Template, 4, 0, "div", 122);
977
978
  i0.ɵɵelementEnd();
978
- i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_Template, 12, 3, "div", 28);
979
- i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_Template, 10, 0, "div", 122);
980
- i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_Template, 9, 0, "div", 122);
981
- i0.ɵɵelementStart(16, "div", 123)(17, "div", 118)(18, "h3");
982
- i0.ɵɵelement(19, "i", 124);
979
+ i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Template, 12, 3, "div", 28);
980
+ i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_Template, 10, 0, "div", 123);
981
+ i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_Template, 9, 0, "div", 123);
982
+ i0.ɵɵelementStart(16, "div", 124)(17, "div", 119)(18, "h3");
983
+ i0.ɵɵelement(19, "i", 125);
983
984
  i0.ɵɵtext(20, " Frequently Paired Tags");
984
985
  i0.ɵɵelementEnd();
985
- i0.ɵɵelementStart(21, "div", 125);
986
- i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_22_Template, 3, 1, "span", 126);
987
- i0.ɵɵelementStart(23, "button", 127);
988
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_23_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r29); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RecomputeCoOccurrence()); });
989
- i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_24_Template, 2, 0)(25, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_25_Template, 2, 0);
986
+ i0.ɵɵelementStart(21, "div", 126);
987
+ i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_22_Template, 3, 1, "span", 127);
988
+ i0.ɵɵelementStart(23, "button", 128);
989
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r29); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RecomputeCoOccurrence()); });
990
+ i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_24_Template, 2, 0)(25, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_25_Template, 2, 0);
990
991
  i0.ɵɵelementEnd()()();
991
- i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_Template, 17, 0, "div", 120)(27, AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_27_Template, 4, 0, "div", 121);
992
+ i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_Template, 17, 0, "div", 121)(27, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template, 4, 0, "div", 122);
992
993
  i0.ɵɵelementEnd()();
993
994
  } if (rf & 2) {
994
995
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -1011,34 +1012,34 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Template(rf, ct
1011
1012
  i0.ɵɵadvance(2);
1012
1013
  i0.ɵɵconditional(ctx_r2.CoOccurrencePairs.length > 0 ? 26 : 27);
1013
1014
  } }
1014
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_For_22_Template(rf, ctx) { if (rf & 1) {
1015
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_For_22_Template(rf, ctx) { if (rf & 1) {
1015
1016
  const _r45 = i0.ɵɵgetCurrentView();
1016
- i0.ɵɵelementStart(0, "tr", 130);
1017
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_For_22_Template_tr_click_0_listener() { const source_r46 = i0.ɵɵrestoreView(_r45).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.SelectSource(source_r46.Name); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("source-row:" + source_r46.Name)); });
1017
+ i0.ɵɵelementStart(0, "tr", 131);
1018
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_For_22_Template_tr_click_0_listener() { const source_r46 = i0.ɵɵrestoreView(_r45).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.SelectSource(source_r46.Name); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("source-row:" + source_r46.Name)); });
1018
1019
  i0.ɵɵelementStart(1, "td")(2, "strong");
1019
1020
  i0.ɵɵtext(3);
1020
1021
  i0.ɵɵelementEnd()();
1021
1022
  i0.ɵɵelementStart(4, "td");
1022
- i0.ɵɵelement(5, "i", 158);
1023
+ i0.ɵɵelement(5, "i", 159);
1023
1024
  i0.ɵɵtext(6);
1024
1025
  i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(7, "td", 128);
1026
+ i0.ɵɵelementStart(7, "td", 129);
1026
1027
  i0.ɵɵtext(8);
1027
1028
  i0.ɵɵelementEnd();
1028
- i0.ɵɵelementStart(9, "td", 128);
1029
+ i0.ɵɵelementStart(9, "td", 129);
1029
1030
  i0.ɵɵtext(10);
1030
1031
  i0.ɵɵelementEnd();
1031
- i0.ɵɵelementStart(11, "td", 128);
1032
+ i0.ɵɵelementStart(11, "td", 129);
1032
1033
  i0.ɵɵtext(12);
1033
1034
  i0.ɵɵelementEnd();
1034
- i0.ɵɵelementStart(13, "td", 128);
1035
+ i0.ɵɵelementStart(13, "td", 129);
1035
1036
  i0.ɵɵtext(14);
1036
1037
  i0.ɵɵelementEnd();
1037
- i0.ɵɵelementStart(15, "td", 134);
1038
+ i0.ɵɵelementStart(15, "td", 135);
1038
1039
  i0.ɵɵtext(16);
1039
1040
  i0.ɵɵelementEnd();
1040
- i0.ɵɵelementStart(17, "td")(18, "span", 159);
1041
- i0.ɵɵelement(19, "i", 160);
1041
+ i0.ɵɵelementStart(17, "td")(18, "span", 160);
1042
+ i0.ɵɵelement(19, "i", 161);
1042
1043
  i0.ɵɵtext(20);
1043
1044
  i0.ɵɵelementEnd()()();
1044
1045
  } if (rf & 2) {
@@ -1067,23 +1068,23 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_F
1067
1068
  i0.ɵɵadvance(2);
1068
1069
  i0.ɵɵtextInterpolate1(" ", source_r46.Status);
1069
1070
  } }
1070
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1071
- i0.ɵɵelementStart(0, "div", 120)(1, "table", 95)(2, "thead")(3, "tr")(4, "th");
1071
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1072
+ i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
1072
1073
  i0.ɵɵtext(5, "Source Name");
1073
1074
  i0.ɵɵelementEnd();
1074
1075
  i0.ɵɵelementStart(6, "th");
1075
1076
  i0.ɵɵtext(7, "Type");
1076
1077
  i0.ɵɵelementEnd();
1077
- i0.ɵɵelementStart(8, "th", 128);
1078
+ i0.ɵɵelementStart(8, "th", 129);
1078
1079
  i0.ɵɵtext(9, "Items");
1079
1080
  i0.ɵɵelementEnd();
1080
- i0.ɵɵelementStart(10, "th", 128);
1081
+ i0.ɵɵelementStart(10, "th", 129);
1081
1082
  i0.ɵɵtext(11, "Tags Generated");
1082
1083
  i0.ɵɵelementEnd();
1083
- i0.ɵɵelementStart(12, "th", 128);
1084
+ i0.ɵɵelementStart(12, "th", 129);
1084
1085
  i0.ɵɵtext(13, "Avg Tags/Item");
1085
1086
  i0.ɵɵelementEnd();
1086
- i0.ɵɵelementStart(14, "th", 128);
1087
+ i0.ɵɵelementStart(14, "th", 129);
1087
1088
  i0.ɵɵtext(15, "Avg Weight");
1088
1089
  i0.ɵɵelementEnd();
1089
1090
  i0.ɵɵelementStart(16, "th");
@@ -1093,32 +1094,32 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_T
1093
1094
  i0.ɵɵtext(19, "Status");
1094
1095
  i0.ɵɵelementEnd()()();
1095
1096
  i0.ɵɵelementStart(20, "tbody");
1096
- i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_For_22_Template, 21, 16, "tr", 157, _forTrack1);
1097
+ i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_For_22_Template, 21, 16, "tr", 158, _forTrack1);
1097
1098
  i0.ɵɵelementEnd()()();
1098
1099
  } if (rf & 2) {
1099
1100
  const ctx_r2 = i0.ɵɵnextContext(3);
1100
1101
  i0.ɵɵadvance(21);
1101
1102
  i0.ɵɵrepeater(ctx_r2.SourceComparison);
1102
1103
  } }
1103
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1104
- i0.ɵɵelementStart(0, "div", 121);
1105
- i0.ɵɵelement(1, "i", 156);
1104
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1105
+ i0.ɵɵelementStart(0, "div", 122);
1106
+ i0.ɵɵelement(1, "i", 157);
1106
1107
  i0.ɵɵelementStart(2, "p");
1107
1108
  i0.ɵɵtext(3, "No content sources configured yet.");
1108
1109
  i0.ɵɵelementEnd()();
1109
1110
  } }
1110
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1111
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1111
1112
  const _r48 = i0.ɵɵgetCurrentView();
1112
- i0.ɵɵelementStart(0, "button", 93);
1113
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r48); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
1114
- i0.ɵɵelement(1, "i", 94);
1113
+ i0.ɵɵelementStart(0, "button", 94);
1114
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r48); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
1115
+ i0.ɵɵelement(1, "i", 95);
1115
1116
  i0.ɵɵtext(2, " CSV");
1116
1117
  i0.ɵɵelementEnd();
1117
1118
  } }
1118
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1119
- i0.ɵɵelement(0, "mj-loading", 90);
1119
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1120
+ i0.ɵɵelement(0, "mj-loading", 91);
1120
1121
  } }
1121
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
1122
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
1122
1123
  i0.ɵɵelementStart(0, "th");
1123
1124
  i0.ɵɵtext(1);
1124
1125
  i0.ɵɵelementEnd();
@@ -1127,10 +1128,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
1127
1128
  i0.ɵɵadvance();
1128
1129
  i0.ɵɵtextInterpolate(col_r49);
1129
1130
  } }
1130
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1131
- i0.ɵɵelement(0, "th", 96);
1131
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1132
+ i0.ɵɵelement(0, "th", 97);
1132
1133
  } }
1133
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
1134
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
1134
1135
  i0.ɵɵelementStart(0, "td");
1135
1136
  i0.ɵɵtext(1);
1136
1137
  i0.ɵɵelementEnd();
@@ -1140,26 +1141,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
1140
1141
  i0.ɵɵadvance();
1141
1142
  i0.ɵɵtextInterpolate(row_r51[col_r50]);
1142
1143
  } }
1143
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1144
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1144
1145
  const _r52 = i0.ɵɵgetCurrentView();
1145
- i0.ɵɵelementStart(0, "button", 136);
1146
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r52); const row_r51 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r51)); });
1147
- i0.ɵɵelement(1, "i", 99);
1146
+ i0.ɵɵelementStart(0, "button", 137);
1147
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r52); const row_r51 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r51)); });
1148
+ i0.ɵɵelement(1, "i", 100);
1148
1149
  i0.ɵɵelementEnd();
1149
1150
  } }
1150
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1151
- i0.ɵɵelementStart(0, "td", 96);
1152
- i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 135);
1151
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1152
+ i0.ɵɵelementStart(0, "td", 97);
1153
+ i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
1153
1154
  i0.ɵɵelementEnd();
1154
1155
  } if (rf & 2) {
1155
1156
  const row_r51 = i0.ɵɵnextContext().$implicit;
1156
1157
  i0.ɵɵadvance();
1157
1158
  i0.ɵɵconditional(row_r51["_RecordID"] ? 1 : -1);
1158
1159
  } }
1159
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
1160
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
1160
1161
  i0.ɵɵelementStart(0, "tr");
1161
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
1162
- i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 96);
1162
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
1163
+ i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
1163
1164
  i0.ɵɵelementEnd();
1164
1165
  } if (rf & 2) {
1165
1166
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -1168,13 +1169,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
1168
1169
  i0.ɵɵadvance(2);
1169
1170
  i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
1170
1171
  } }
1171
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1172
- i0.ɵɵelementStart(0, "div", 91)(1, "table", 95)(2, "thead")(3, "tr");
1173
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1174
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_Conditional_6_Template, 1, 0, "th", 96);
1172
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1173
+ i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
1174
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1175
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
1175
1176
  i0.ɵɵelementEnd()();
1176
1177
  i0.ɵɵelementStart(7, "tbody");
1177
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
1178
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
1178
1179
  i0.ɵɵelementEnd()()();
1179
1180
  } if (rf & 2) {
1180
1181
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -1185,24 +1186,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
1185
1186
  i0.ɵɵadvance(2);
1186
1187
  i0.ɵɵrepeater(ctx_r2.DrillDownData);
1187
1188
  } }
1188
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1189
- i0.ɵɵelementStart(0, "div", 92);
1189
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1190
+ i0.ɵɵelementStart(0, "div", 93);
1190
1191
  i0.ɵɵtext(1, "No run data for this source");
1191
1192
  i0.ɵɵelementEnd();
1192
1193
  } }
1193
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1194
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1194
1195
  const _r47 = i0.ɵɵgetCurrentView();
1195
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 83)(2, "span", 84);
1196
- i0.ɵɵelement(3, "i", 85);
1196
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
1197
+ i0.ɵɵelement(3, "i", 86);
1197
1198
  i0.ɵɵtext(4);
1198
1199
  i0.ɵɵelementEnd();
1199
- i0.ɵɵelementStart(5, "div", 86);
1200
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_6_Template, 3, 0, "button", 87);
1201
- i0.ɵɵelementStart(7, "button", 88);
1202
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
1203
- i0.ɵɵelement(8, "i", 89);
1200
+ i0.ɵɵelementStart(5, "div", 87);
1201
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_6_Template, 3, 0, "button", 88);
1202
+ i0.ɵɵelementStart(7, "button", 89);
1203
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
1204
+ i0.ɵɵelement(8, "i", 90);
1204
1205
  i0.ɵɵelementEnd()()();
1205
- i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_9_Template, 1, 0, "mj-loading", 90)(10, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_10_Template, 10, 1, "div", 91)(11, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Conditional_11_Template, 2, 0, "div", 92);
1206
+ i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_11_Template, 2, 0, "div", 93);
1206
1207
  i0.ɵɵelementEnd();
1207
1208
  } if (rf & 2) {
1208
1209
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1213,12 +1214,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
1213
1214
  i0.ɵɵadvance(3);
1214
1215
  i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
1215
1216
  } }
1216
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
1217
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 170);
1217
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
1218
+ i0.ɵɵelementStart(0, "div", 34)(1, "div", 171);
1218
1219
  i0.ɵɵtext(2);
1219
1220
  i0.ɵɵelementEnd();
1220
- i0.ɵɵelement(3, "div", 101);
1221
- i0.ɵɵelementStart(4, "div", 102);
1221
+ i0.ɵɵelement(3, "div", 102);
1222
+ i0.ɵɵelementStart(4, "div", 103);
1222
1223
  i0.ɵɵtext(5);
1223
1224
  i0.ɵɵelementEnd()();
1224
1225
  } if (rf & 2) {
@@ -1230,11 +1231,11 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_
1230
1231
  i0.ɵɵadvance(2);
1231
1232
  i0.ɵɵtextInterpolate(bar_r53.Label);
1232
1233
  } }
1233
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_For_18_Template(rf, ctx) { if (rf & 1) {
1234
- i0.ɵɵelementStart(0, "div", 167)(1, "span", 171);
1234
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_18_Template(rf, ctx) { if (rf & 1) {
1235
+ i0.ɵɵelementStart(0, "div", 168)(1, "span", 172);
1235
1236
  i0.ɵɵtext(2);
1236
1237
  i0.ɵɵelementEnd();
1237
- i0.ɵɵelementStart(3, "div", 172)(4, "div", 173);
1238
+ i0.ɵɵelementStart(3, "div", 173)(4, "div", 174);
1238
1239
  i0.ɵɵtext(5);
1239
1240
  i0.ɵɵelementEnd()()();
1240
1241
  } if (rf & 2) {
@@ -1246,27 +1247,27 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_
1246
1247
  i0.ɵɵadvance();
1247
1248
  i0.ɵɵtextInterpolate1("", band_r54.Percentage, "%");
1248
1249
  } }
1249
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1250
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1251
- i0.ɵɵelement(2, "i", 161);
1250
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1251
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1252
+ i0.ɵɵelement(2, "i", 162);
1252
1253
  i0.ɵɵtext(3);
1253
1254
  i0.ɵɵelementEnd();
1254
- i0.ɵɵelementStart(4, "div", 162)(5, "div", 163)(6, "div", 31);
1255
- i0.ɵɵelement(7, "i", 137);
1255
+ i0.ɵɵelementStart(4, "div", 163)(5, "div", 164)(6, "div", 31);
1256
+ i0.ɵɵelement(7, "i", 138);
1256
1257
  i0.ɵɵtext(8, " Items Processed (Last 8 Weeks)");
1257
1258
  i0.ɵɵelementEnd();
1258
- i0.ɵɵelementStart(9, "div", 164);
1259
- i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_For_11_Template, 6, 6, "div", 33, _forTrack2);
1259
+ i0.ɵɵelementStart(9, "div", 165);
1260
+ i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_11_Template, 6, 6, "div", 34, _forTrack2);
1260
1261
  i0.ɵɵelementEnd()();
1261
- i0.ɵɵelementStart(12, "div", 163)(13, "div", 31);
1262
- i0.ɵɵelement(14, "i", 165);
1262
+ i0.ɵɵelementStart(12, "div", 164)(13, "div", 31);
1263
+ i0.ɵɵelement(14, "i", 166);
1263
1264
  i0.ɵɵtext(15, " Tag Quality Distribution");
1264
1265
  i0.ɵɵelementEnd();
1265
- i0.ɵɵelementStart(16, "div", 166);
1266
- i0.ɵɵrepeaterCreate(17, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_For_18_Template, 6, 6, "div", 167, _forTrack2);
1266
+ i0.ɵɵelementStart(16, "div", 167);
1267
+ i0.ɵɵrepeaterCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_18_Template, 6, 6, "div", 168, _forTrack2);
1267
1268
  i0.ɵɵelementEnd();
1268
- i0.ɵɵelementStart(19, "div", 168);
1269
- i0.ɵɵelement(20, "i", 169);
1269
+ i0.ɵɵelementStart(19, "div", 169);
1270
+ i0.ɵɵelement(20, "i", 170);
1270
1271
  i0.ɵɵtext(21);
1271
1272
  i0.ɵɵelementEnd()()()();
1272
1273
  } if (rf & 2) {
@@ -1280,14 +1281,14 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_
1280
1281
  i0.ɵɵadvance(4);
1281
1282
  i0.ɵɵtextInterpolate1(" ", ctx_r2.SourceQualityNote, " ");
1282
1283
  } }
1283
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_For_6_Template(rf, ctx) { if (rf & 1) {
1284
- i0.ɵɵelementStart(0, "div", 177)(1, "div", 178);
1284
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_For_6_Template(rf, ctx) { if (rf & 1) {
1285
+ i0.ɵɵelementStart(0, "div", 178)(1, "div", 179);
1285
1286
  i0.ɵɵtext(2);
1286
1287
  i0.ɵɵelementEnd();
1287
- i0.ɵɵelementStart(3, "div", 179);
1288
+ i0.ɵɵelementStart(3, "div", 180);
1288
1289
  i0.ɵɵtext(4);
1289
1290
  i0.ɵɵelementEnd();
1290
- i0.ɵɵelementStart(5, "div", 180);
1291
+ i0.ɵɵelementStart(5, "div", 181);
1291
1292
  i0.ɵɵtext(6, "uptime");
1292
1293
  i0.ɵɵelementEnd()();
1293
1294
  } if (rf & 2) {
@@ -1300,13 +1301,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_
1300
1301
  i0.ɵɵadvance();
1301
1302
  i0.ɵɵtextInterpolate1("", card_r55.Uptime, "%");
1302
1303
  } }
1303
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1304
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1305
- i0.ɵɵelement(2, "i", 174);
1304
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1305
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1306
+ i0.ɵɵelement(2, "i", 175);
1306
1307
  i0.ɵɵtext(3, " Source Health Summary");
1307
1308
  i0.ɵɵelementEnd();
1308
- i0.ɵɵelementStart(4, "div", 175);
1309
- i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_For_6_Template, 7, 6, "div", 176, _forTrack1);
1309
+ i0.ɵɵelementStart(4, "div", 176);
1310
+ i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_For_6_Template, 7, 6, "div", 177, _forTrack1);
1310
1311
  i0.ɵɵelementEnd()();
1311
1312
  } if (rf & 2) {
1312
1313
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1315,21 +1316,21 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_
1315
1316
  i0.ɵɵadvance();
1316
1317
  i0.ɵɵrepeater(ctx_r2.SourceHealthCards);
1317
1318
  } }
1318
- function AnalyticsResourceComponent_Conditional_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
1319
+ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1319
1320
  i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
1320
- i0.ɵɵelement(2, "i", 156);
1321
+ i0.ɵɵelement(2, "i", 157);
1321
1322
  i0.ɵɵelementStart(3, "h1");
1322
1323
  i0.ɵɵtext(4, "Sources");
1323
1324
  i0.ɵɵelementEnd()();
1324
- i0.ɵɵelementStart(5, "div", 117)(6, "h3");
1325
- i0.ɵɵelement(7, "i", 85);
1325
+ i0.ɵɵelementStart(5, "div", 118)(6, "h3");
1326
+ i0.ɵɵelement(7, "i", 86);
1326
1327
  i0.ɵɵtext(8, " Source Comparison");
1327
1328
  i0.ɵɵelementEnd();
1328
- i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_Template, 23, 0, "div", 120)(10, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_10_Template, 4, 0, "div", 121);
1329
+ i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_Template, 23, 0, "div", 121)(10, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_10_Template, 4, 0, "div", 122);
1329
1330
  i0.ɵɵelementEnd();
1330
- i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_Template, 12, 3, "div", 28);
1331
- i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_Template, 22, 2, "div", 122);
1332
- i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_Template, 7, 2, "div", 122);
1331
+ i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Template, 12, 3, "div", 28);
1332
+ i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_Template, 22, 2, "div", 123);
1333
+ i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_Template, 7, 2, "div", 123);
1333
1334
  i0.ɵɵelementEnd();
1334
1335
  } if (rf & 2) {
1335
1336
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -1342,16 +1343,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Template(rf, ct
1342
1343
  i0.ɵɵadvance();
1343
1344
  i0.ɵɵconditional(ctx_r2.SourceHealthCards.length > 0 ? 13 : -1);
1344
1345
  } }
1345
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_12_Template(rf, ctx) { if (rf & 1) {
1346
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_12_Template(rf, ctx) { if (rf & 1) {
1346
1347
  const _r56 = i0.ɵɵgetCurrentView();
1347
- i0.ɵɵelementStart(0, "div", 196);
1348
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_12_Template_div_click_0_listener() { const $index_r57 = i0.ɵɵrestoreView(_r56).$index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("pipeline-throughput:" + $index_r57)); });
1348
+ i0.ɵɵelementStart(0, "div", 197);
1349
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_12_Template_div_click_0_listener() { const $index_r57 = i0.ɵɵrestoreView(_r56).$index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("pipeline-throughput:" + $index_r57)); });
1349
1350
  i0.ɵɵelementEnd();
1350
1351
  } if (rf & 2) {
1351
1352
  const bar_r58 = ctx.$implicit;
1352
1353
  i0.ɵɵstyleProp("height", bar_r58.Percentage, "%")("background", bar_r58.IsError ? "var(--mj-status-error)" : "var(--mj-brand-primary)")("opacity", bar_r58.IsError ? 0.7 : 0.6 + bar_r58.Percentage / 300);
1353
1354
  } }
1354
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_15_Template(rf, ctx) { if (rf & 1) {
1355
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_15_Template(rf, ctx) { if (rf & 1) {
1355
1356
  i0.ɵɵelementStart(0, "span");
1356
1357
  i0.ɵɵtext(1);
1357
1358
  i0.ɵɵelementEnd();
@@ -1360,18 +1361,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_15_Template
1360
1361
  i0.ɵɵadvance();
1361
1362
  i0.ɵɵtextInterpolate(label_r59);
1362
1363
  } }
1363
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1364
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1364
1365
  const _r61 = i0.ɵɵgetCurrentView();
1365
- i0.ɵɵelementStart(0, "button", 93);
1366
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
1367
- i0.ɵɵelement(1, "i", 94);
1366
+ i0.ɵɵelementStart(0, "button", 94);
1367
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
1368
+ i0.ɵɵelement(1, "i", 95);
1368
1369
  i0.ɵɵtext(2, " CSV");
1369
1370
  i0.ɵɵelementEnd();
1370
1371
  } }
1371
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1372
- i0.ɵɵelement(0, "mj-loading", 90);
1372
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1373
+ i0.ɵɵelement(0, "mj-loading", 91);
1373
1374
  } }
1374
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
1375
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
1375
1376
  i0.ɵɵelementStart(0, "th");
1376
1377
  i0.ɵɵtext(1);
1377
1378
  i0.ɵɵelementEnd();
@@ -1380,10 +1381,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
1380
1381
  i0.ɵɵadvance();
1381
1382
  i0.ɵɵtextInterpolate(col_r62);
1382
1383
  } }
1383
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1384
- i0.ɵɵelement(0, "th", 96);
1384
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1385
+ i0.ɵɵelement(0, "th", 97);
1385
1386
  } }
1386
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
1387
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
1387
1388
  i0.ɵɵelementStart(0, "td");
1388
1389
  i0.ɵɵtext(1);
1389
1390
  i0.ɵɵelementEnd();
@@ -1393,26 +1394,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
1393
1394
  i0.ɵɵadvance();
1394
1395
  i0.ɵɵtextInterpolate(row_r64[col_r63]);
1395
1396
  } }
1396
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1397
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1397
1398
  const _r65 = i0.ɵɵgetCurrentView();
1398
- i0.ɵɵelementStart(0, "button", 136);
1399
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r65); const row_r64 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r64)); });
1400
- i0.ɵɵelement(1, "i", 99);
1399
+ i0.ɵɵelementStart(0, "button", 137);
1400
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r65); const row_r64 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r64)); });
1401
+ i0.ɵɵelement(1, "i", 100);
1401
1402
  i0.ɵɵelementEnd();
1402
1403
  } }
1403
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1404
- i0.ɵɵelementStart(0, "td", 96);
1405
- i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 135);
1404
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1405
+ i0.ɵɵelementStart(0, "td", 97);
1406
+ i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
1406
1407
  i0.ɵɵelementEnd();
1407
1408
  } if (rf & 2) {
1408
1409
  const row_r64 = i0.ɵɵnextContext().$implicit;
1409
1410
  i0.ɵɵadvance();
1410
1411
  i0.ɵɵconditional(row_r64["_RecordID"] ? 1 : -1);
1411
1412
  } }
1412
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
1413
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
1413
1414
  i0.ɵɵelementStart(0, "tr");
1414
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
1415
- i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 96);
1415
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
1416
+ i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
1416
1417
  i0.ɵɵelementEnd();
1417
1418
  } if (rf & 2) {
1418
1419
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -1421,13 +1422,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
1421
1422
  i0.ɵɵadvance(2);
1422
1423
  i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
1423
1424
  } }
1424
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1425
- i0.ɵɵelementStart(0, "div", 91)(1, "table", 95)(2, "thead")(3, "tr");
1426
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1427
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 96);
1425
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1426
+ i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
1427
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1428
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
1428
1429
  i0.ɵɵelementEnd()();
1429
1430
  i0.ɵɵelementStart(7, "tbody");
1430
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
1431
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
1431
1432
  i0.ɵɵelementEnd()()();
1432
1433
  } if (rf & 2) {
1433
1434
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -1438,24 +1439,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
1438
1439
  i0.ɵɵadvance(2);
1439
1440
  i0.ɵɵrepeater(ctx_r2.DrillDownData);
1440
1441
  } }
1441
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1442
- i0.ɵɵelementStart(0, "div", 92);
1442
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1443
+ i0.ɵɵelementStart(0, "div", 93);
1443
1444
  i0.ɵɵtext(1, "No runs for this day");
1444
1445
  i0.ɵɵelementEnd();
1445
1446
  } }
1446
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1447
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1447
1448
  const _r60 = i0.ɵɵgetCurrentView();
1448
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 83)(2, "span", 84);
1449
- i0.ɵɵelement(3, "i", 85);
1449
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
1450
+ i0.ɵɵelement(3, "i", 86);
1450
1451
  i0.ɵɵtext(4, " Runs for Selected Day");
1451
1452
  i0.ɵɵelementEnd();
1452
- i0.ɵɵelementStart(5, "div", 86);
1453
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_6_Template, 3, 0, "button", 87);
1454
- i0.ɵɵelementStart(7, "button", 88);
1455
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r60); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
1456
- i0.ɵɵelement(8, "i", 89);
1453
+ i0.ɵɵelementStart(5, "div", 87);
1454
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_6_Template, 3, 0, "button", 88);
1455
+ i0.ɵɵelementStart(7, "button", 89);
1456
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r60); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
1457
+ i0.ɵɵelement(8, "i", 90);
1457
1458
  i0.ɵɵelementEnd()()();
1458
- i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 90)(10, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_10_Template, 10, 1, "div", 91)(11, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Conditional_11_Template, 2, 0, "div", 92);
1459
+ i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_11_Template, 2, 0, "div", 93);
1459
1460
  i0.ɵɵelementEnd();
1460
1461
  } if (rf & 2) {
1461
1462
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1464,20 +1465,20 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
1464
1465
  i0.ɵɵadvance(3);
1465
1466
  i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
1466
1467
  } }
1467
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1468
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1468
1469
  i0.ɵɵtext(0);
1469
1470
  } if (rf & 2) {
1470
1471
  const stage_r66 = i0.ɵɵnextContext().$implicit;
1471
1472
  i0.ɵɵtextInterpolate1(" ", stage_r66.Time, "s ");
1472
1473
  } }
1473
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_24_Template(rf, ctx) { if (rf & 1) {
1474
- i0.ɵɵelementStart(0, "div", 187)(1, "div", 197);
1474
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
1475
+ i0.ɵɵelementStart(0, "div", 188)(1, "div", 198);
1475
1476
  i0.ɵɵtext(2);
1476
1477
  i0.ɵɵelementEnd();
1477
- i0.ɵɵelementStart(3, "div", 198)(4, "div", 199);
1478
- i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_1_Conditional_25_For_24_Conditional_5_Template, 1, 1);
1478
+ i0.ɵɵelementStart(3, "div", 199)(4, "div", 200);
1479
+ i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Conditional_5_Template, 1, 1);
1479
1480
  i0.ɵɵelementEnd()();
1480
- i0.ɵɵelementStart(6, "div", 200);
1481
+ i0.ɵɵelementStart(6, "div", 201);
1481
1482
  i0.ɵɵtext(7);
1482
1483
  i0.ɵɵelementEnd()();
1483
1484
  } if (rf & 2) {
@@ -1491,9 +1492,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_24_Template
1491
1492
  i0.ɵɵadvance(2);
1492
1493
  i0.ɵɵtextInterpolate1("", stage_r66.Time, "s");
1493
1494
  } }
1494
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1495
- i0.ɵɵelementStart(0, "span", 189);
1496
- i0.ɵɵelement(1, "i", 201);
1495
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1496
+ i0.ɵɵelementStart(0, "span", 190);
1497
+ i0.ɵɵelement(1, "i", 202);
1497
1498
  i0.ɵɵtext(2);
1498
1499
  i0.ɵɵelementEnd();
1499
1500
  } if (rf & 2) {
@@ -1501,26 +1502,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_30_
1501
1502
  i0.ɵɵadvance(2);
1502
1503
  i0.ɵɵtextInterpolate2(" ", ctx_r2.BottleneckStage, " stage is the bottleneck (", ctx_r2.BottleneckPercent, "% of total time) ");
1503
1504
  } }
1504
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_For_22_Template(rf, ctx) { if (rf & 1) {
1505
- i0.ɵɵelementStart(0, "tr")(1, "td", 203);
1505
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_For_22_Template(rf, ctx) { if (rf & 1) {
1506
+ i0.ɵɵelementStart(0, "tr")(1, "td", 204);
1506
1507
  i0.ɵɵtext(2);
1507
1508
  i0.ɵɵelementEnd();
1508
1509
  i0.ɵɵelementStart(3, "td");
1509
1510
  i0.ɵɵtext(4);
1510
1511
  i0.ɵɵelementEnd();
1511
- i0.ɵɵelementStart(5, "td", 134);
1512
+ i0.ɵɵelementStart(5, "td", 135);
1512
1513
  i0.ɵɵtext(6);
1513
1514
  i0.ɵɵelementEnd();
1514
- i0.ɵɵelementStart(7, "td")(8, "div", 204);
1515
- i0.ɵɵelement(9, "div", 205);
1515
+ i0.ɵɵelementStart(7, "td")(8, "div", 205);
1516
+ i0.ɵɵelement(9, "div", 206);
1516
1517
  i0.ɵɵelementEnd();
1517
- i0.ɵɵelementStart(10, "span", 206);
1518
+ i0.ɵɵelementStart(10, "span", 207);
1518
1519
  i0.ɵɵtext(11);
1519
1520
  i0.ɵɵelementEnd()();
1520
- i0.ɵɵelementStart(12, "td")(13, "span", 159);
1521
+ i0.ɵɵelementStart(12, "td")(13, "span", 160);
1521
1522
  i0.ɵɵtext(14);
1522
1523
  i0.ɵɵelementEnd()();
1523
- i0.ɵɵelementStart(15, "td", 128);
1524
+ i0.ɵɵelementStart(15, "td", 129);
1524
1525
  i0.ɵɵtext(16);
1525
1526
  i0.ɵɵelementEnd()();
1526
1527
  } if (rf & 2) {
@@ -1543,12 +1544,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_
1543
1544
  i0.ɵɵadvance(2);
1544
1545
  i0.ɵɵtextInterpolate(ctx_r2.FormatNumber(run_r67.Items));
1545
1546
  } }
1546
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_Template(rf, ctx) { if (rf & 1) {
1547
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1548
- i0.ɵɵelement(2, "i", 202);
1547
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_Template(rf, ctx) { if (rf & 1) {
1548
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1549
+ i0.ɵɵelement(2, "i", 203);
1549
1550
  i0.ɵɵtext(3, " Active Runs");
1550
1551
  i0.ɵɵelementEnd();
1551
- i0.ɵɵelementStart(4, "div", 120)(5, "table", 95)(6, "thead")(7, "tr")(8, "th");
1552
+ i0.ɵɵelementStart(4, "div", 121)(5, "table", 96)(6, "thead")(7, "tr")(8, "th");
1552
1553
  i0.ɵɵtext(9, "Run ID");
1553
1554
  i0.ɵɵelementEnd();
1554
1555
  i0.ɵɵelementStart(10, "th");
@@ -1563,25 +1564,25 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_
1563
1564
  i0.ɵɵelementStart(16, "th");
1564
1565
  i0.ɵɵtext(17, "Stage");
1565
1566
  i0.ɵɵelementEnd();
1566
- i0.ɵɵelementStart(18, "th", 128);
1567
+ i0.ɵɵelementStart(18, "th", 129);
1567
1568
  i0.ɵɵtext(19, "Items");
1568
1569
  i0.ɵɵelementEnd()()();
1569
1570
  i0.ɵɵelementStart(20, "tbody");
1570
- i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_For_22_Template, 17, 10, "tr", null, _forTrack5);
1571
+ i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_For_22_Template, 17, 10, "tr", null, _forTrack5);
1571
1572
  i0.ɵɵelementEnd()()()();
1572
1573
  } if (rf & 2) {
1573
1574
  const ctx_r2 = i0.ɵɵnextContext(3);
1574
1575
  i0.ɵɵadvance(21);
1575
1576
  i0.ɵɵrepeater(ctx_r2.ActiveRuns);
1576
1577
  } }
1577
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_53_For_6_Template(rf, ctx) { if (rf & 1) {
1578
- i0.ɵɵelementStart(0, "div", 209)(1, "div", 210);
1578
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_For_6_Template(rf, ctx) { if (rf & 1) {
1579
+ i0.ɵɵelementStart(0, "div", 210)(1, "div", 211);
1579
1580
  i0.ɵɵtext(2);
1580
1581
  i0.ɵɵelementEnd();
1581
- i0.ɵɵelementStart(3, "div", 211);
1582
+ i0.ɵɵelementStart(3, "div", 212);
1582
1583
  i0.ɵɵtext(4);
1583
1584
  i0.ɵɵelementEnd();
1584
- i0.ɵɵelementStart(5, "div", 212);
1585
+ i0.ɵɵelementStart(5, "div", 213);
1585
1586
  i0.ɵɵtext(6);
1586
1587
  i0.ɵɵelementEnd()();
1587
1588
  } if (rf & 2) {
@@ -1593,74 +1594,74 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_53_
1593
1594
  i0.ɵɵadvance(2);
1594
1595
  i0.ɵɵtextInterpolate(entry_r68.Message);
1595
1596
  } }
1596
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_53_Template(rf, ctx) { if (rf & 1) {
1597
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1598
- i0.ɵɵelement(2, "i", 207);
1597
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_Template(rf, ctx) { if (rf & 1) {
1598
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1599
+ i0.ɵɵelement(2, "i", 208);
1599
1600
  i0.ɵɵtext(3, " Recent Errors");
1600
1601
  i0.ɵɵelementEnd();
1601
- i0.ɵɵelementStart(4, "div", 208);
1602
- i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_53_For_6_Template, 7, 3, "div", 209, i0.ɵɵcomponentInstance().TrackByIndex, true);
1602
+ i0.ɵɵelementStart(4, "div", 209);
1603
+ i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_For_6_Template, 7, 3, "div", 210, i0.ɵɵcomponentInstance().TrackByIndex, true);
1603
1604
  i0.ɵɵelementEnd()();
1604
1605
  } if (rf & 2) {
1605
1606
  const ctx_r2 = i0.ɵɵnextContext(3);
1606
1607
  i0.ɵɵadvance(5);
1607
1608
  i0.ɵɵrepeater(ctx_r2.ErrorLog);
1608
1609
  } }
1609
- function AnalyticsResourceComponent_Conditional_1_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1610
+ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1610
1611
  i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
1611
- i0.ɵɵelement(2, "i", 181);
1612
+ i0.ɵɵelement(2, "i", 182);
1612
1613
  i0.ɵɵelementStart(3, "h1");
1613
1614
  i0.ɵɵtext(4, "Pipeline");
1614
1615
  i0.ɵɵelementEnd()();
1615
- i0.ɵɵelementStart(5, "div", 117)(6, "h3");
1616
- i0.ɵɵelement(7, "i", 137);
1616
+ i0.ɵɵelementStart(5, "div", 118)(6, "h3");
1617
+ i0.ɵɵelement(7, "i", 138);
1617
1618
  i0.ɵɵtext(8, " Pipeline Throughput (Last 30 Days)");
1618
1619
  i0.ɵɵelementEnd();
1619
- i0.ɵɵelementStart(9, "div", 163)(10, "div", 182);
1620
- i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_1_Conditional_25_For_12_Template, 1, 6, "div", 183, i0.ɵɵcomponentInstance().TrackByIndex, true);
1620
+ i0.ɵɵelementStart(9, "div", 164)(10, "div", 183);
1621
+ i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_12_Template, 1, 6, "div", 184, i0.ɵɵcomponentInstance().TrackByIndex, true);
1621
1622
  i0.ɵɵelementEnd();
1622
- i0.ɵɵelementStart(13, "div", 184);
1623
- i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_1_Conditional_25_For_15_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
1623
+ i0.ɵɵelementStart(13, "div", 185);
1624
+ i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_15_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
1624
1625
  i0.ɵɵelementEnd()()();
1625
- i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_Template, 12, 2, "div", 28);
1626
- i0.ɵɵelementStart(17, "div", 122)(18, "h3");
1627
- i0.ɵɵelement(19, "i", 185);
1626
+ i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Template, 12, 2, "div", 28);
1627
+ i0.ɵɵelementStart(17, "div", 123)(18, "h3");
1628
+ i0.ɵɵelement(19, "i", 186);
1628
1629
  i0.ɵɵtext(20, " Processing Time Breakdown (Avg per Item)");
1629
1630
  i0.ɵɵelementEnd();
1630
- i0.ɵɵelementStart(21, "div", 163)(22, "div", 186);
1631
- i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_1_Conditional_25_For_24_Template, 8, 7, "div", 187, _forTrack1);
1631
+ i0.ɵɵelementStart(21, "div", 164)(22, "div", 187);
1632
+ i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Template, 8, 7, "div", 188, _forTrack1);
1632
1633
  i0.ɵɵelementEnd();
1633
- i0.ɵɵelementStart(25, "div", 188)(26, "span")(27, "strong");
1634
+ i0.ɵɵelementStart(25, "div", 189)(26, "span")(27, "strong");
1634
1635
  i0.ɵɵtext(28, "Total avg:");
1635
1636
  i0.ɵɵelementEnd();
1636
1637
  i0.ɵɵtext(29);
1637
1638
  i0.ɵɵelementEnd();
1638
- i0.ɵɵconditionalCreate(30, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_30_Template, 3, 2, "span", 189);
1639
+ i0.ɵɵconditionalCreate(30, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_30_Template, 3, 2, "span", 190);
1639
1640
  i0.ɵɵelementEnd()()();
1640
- i0.ɵɵelementStart(31, "div", 122)(32, "h3");
1641
- i0.ɵɵelement(33, "i", 5);
1641
+ i0.ɵɵelementStart(31, "div", 123)(32, "h3");
1642
+ i0.ɵɵelement(33, "i", 32);
1642
1643
  i0.ɵɵtext(34, " Success Rate Overview");
1643
1644
  i0.ɵɵelementEnd();
1644
- i0.ɵɵelementStart(35, "div", 163)(36, "div", 190)(37, "div", 191)(38, "div", 192);
1645
+ i0.ɵɵelementStart(35, "div", 164)(36, "div", 191)(37, "div", 192)(38, "div", 193);
1645
1646
  i0.ɵɵtext(39);
1646
1647
  i0.ɵɵelementEnd();
1647
- i0.ɵɵelementStart(40, "div", 193);
1648
+ i0.ɵɵelementStart(40, "div", 194);
1648
1649
  i0.ɵɵtext(41, "Success Rate");
1649
1650
  i0.ɵɵelementEnd()();
1650
- i0.ɵɵelementStart(42, "div", 191)(43, "div", 194);
1651
+ i0.ɵɵelementStart(42, "div", 192)(43, "div", 195);
1651
1652
  i0.ɵɵtext(44);
1652
1653
  i0.ɵɵelementEnd();
1653
- i0.ɵɵelementStart(45, "div", 193);
1654
+ i0.ɵɵelementStart(45, "div", 194);
1654
1655
  i0.ɵɵtext(46, "Failure Rate");
1655
1656
  i0.ɵɵelementEnd()();
1656
- i0.ɵɵelementStart(47, "div", 191)(48, "div", 195);
1657
+ i0.ɵɵelementStart(47, "div", 192)(48, "div", 196);
1657
1658
  i0.ɵɵtext(49);
1658
1659
  i0.ɵɵelementEnd();
1659
- i0.ɵɵelementStart(50, "div", 193);
1660
+ i0.ɵɵelementStart(50, "div", 194);
1660
1661
  i0.ɵɵtext(51, "Total Runs");
1661
1662
  i0.ɵɵelementEnd()()()()();
1662
- i0.ɵɵconditionalCreate(52, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_Template, 23, 0, "div", 122);
1663
- i0.ɵɵconditionalCreate(53, AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_53_Template, 7, 0, "div", 122);
1663
+ i0.ɵɵconditionalCreate(52, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_Template, 23, 0, "div", 123);
1664
+ i0.ɵɵconditionalCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_Template, 7, 0, "div", 123);
1664
1665
  i0.ɵɵelementEnd();
1665
1666
  } if (rf & 2) {
1666
1667
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -1687,20 +1688,20 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Template(rf, ct
1687
1688
  i0.ɵɵadvance();
1688
1689
  i0.ɵɵconditional(ctx_r2.ErrorLog.length > 0 ? 53 : -1);
1689
1690
  } }
1690
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1691
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1691
1692
  i0.ɵɵtext(0);
1692
1693
  } if (rf & 2) {
1693
1694
  const bin_r70 = i0.ɵɵnextContext().$implicit;
1694
1695
  i0.ɵɵtextInterpolate1(" ", bin_r70.Count, " ");
1695
1696
  } }
1696
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Template(rf, ctx) { if (rf & 1) {
1697
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Template(rf, ctx) { if (rf & 1) {
1697
1698
  const _r69 = i0.ɵɵgetCurrentView();
1698
- i0.ɵɵelementStart(0, "div", 222);
1699
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Template_div_click_0_listener() { const bin_r70 = i0.ɵɵrestoreView(_r69).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("quality-bin:" + bin_r70.Label)); });
1700
- i0.ɵɵelementStart(1, "div", 223);
1701
- i0.ɵɵconditionalCreate(2, AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Conditional_2_Template, 1, 1);
1699
+ i0.ɵɵelementStart(0, "div", 223);
1700
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Template_div_click_0_listener() { const bin_r70 = i0.ɵɵrestoreView(_r69).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("quality-bin:" + bin_r70.Label)); });
1701
+ i0.ɵɵelementStart(1, "div", 224);
1702
+ i0.ɵɵconditionalCreate(2, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Conditional_2_Template, 1, 1);
1702
1703
  i0.ɵɵelementEnd();
1703
- i0.ɵɵelementStart(3, "div", 224);
1704
+ i0.ɵɵelementStart(3, "div", 225);
1704
1705
  i0.ɵɵtext(4);
1705
1706
  i0.ɵɵelementEnd()();
1706
1707
  } if (rf & 2) {
@@ -1712,7 +1713,7 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Template
1712
1713
  i0.ɵɵadvance(2);
1713
1714
  i0.ɵɵtextInterpolate(bin_r70.Label);
1714
1715
  } }
1715
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_15_Template(rf, ctx) { if (rf & 1) {
1716
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_15_Template(rf, ctx) { if (rf & 1) {
1716
1717
  i0.ɵɵelementStart(0, "span")(1, "strong");
1717
1718
  i0.ɵɵtext(2);
1718
1719
  i0.ɵɵelementEnd();
@@ -1725,18 +1726,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_15_Template
1725
1726
  i0.ɵɵadvance();
1726
1727
  i0.ɵɵtextInterpolate1(" ", stat_r71.Value);
1727
1728
  } }
1728
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1729
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1729
1730
  const _r73 = i0.ɵɵgetCurrentView();
1730
- i0.ɵɵelementStart(0, "button", 93);
1731
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r73); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
1732
- i0.ɵɵelement(1, "i", 94);
1731
+ i0.ɵɵelementStart(0, "button", 94);
1732
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r73); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
1733
+ i0.ɵɵelement(1, "i", 95);
1733
1734
  i0.ɵɵtext(2, " CSV");
1734
1735
  i0.ɵɵelementEnd();
1735
1736
  } }
1736
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1737
- i0.ɵɵelement(0, "mj-loading", 90);
1737
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1738
+ i0.ɵɵelement(0, "mj-loading", 91);
1738
1739
  } }
1739
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
1740
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
1740
1741
  i0.ɵɵelementStart(0, "th");
1741
1742
  i0.ɵɵtext(1);
1742
1743
  i0.ɵɵelementEnd();
@@ -1745,10 +1746,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
1745
1746
  i0.ɵɵadvance();
1746
1747
  i0.ɵɵtextInterpolate(col_r74);
1747
1748
  } }
1748
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1749
- i0.ɵɵelement(0, "th", 96);
1749
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1750
+ i0.ɵɵelement(0, "th", 97);
1750
1751
  } }
1751
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
1752
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
1752
1753
  i0.ɵɵelementStart(0, "td");
1753
1754
  i0.ɵɵtext(1);
1754
1755
  i0.ɵɵelementEnd();
@@ -1758,26 +1759,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
1758
1759
  i0.ɵɵadvance();
1759
1760
  i0.ɵɵtextInterpolate(row_r76[col_r75]);
1760
1761
  } }
1761
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1762
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1762
1763
  const _r77 = i0.ɵɵgetCurrentView();
1763
- i0.ɵɵelementStart(0, "button", 136);
1764
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r77); const row_r76 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r76)); });
1765
- i0.ɵɵelement(1, "i", 99);
1764
+ i0.ɵɵelementStart(0, "button", 137);
1765
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r77); const row_r76 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r76)); });
1766
+ i0.ɵɵelement(1, "i", 100);
1766
1767
  i0.ɵɵelementEnd();
1767
1768
  } }
1768
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1769
- i0.ɵɵelementStart(0, "td", 96);
1770
- i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 135);
1769
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1770
+ i0.ɵɵelementStart(0, "td", 97);
1771
+ i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
1771
1772
  i0.ɵɵelementEnd();
1772
1773
  } if (rf & 2) {
1773
1774
  const row_r76 = i0.ɵɵnextContext().$implicit;
1774
1775
  i0.ɵɵadvance();
1775
1776
  i0.ɵɵconditional(row_r76["_RecordID"] ? 1 : -1);
1776
1777
  } }
1777
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
1778
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
1778
1779
  i0.ɵɵelementStart(0, "tr");
1779
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
1780
- i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 96);
1780
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
1781
+ i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
1781
1782
  i0.ɵɵelementEnd();
1782
1783
  } if (rf & 2) {
1783
1784
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -1786,13 +1787,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
1786
1787
  i0.ɵɵadvance(2);
1787
1788
  i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
1788
1789
  } }
1789
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1790
- i0.ɵɵelementStart(0, "div", 91)(1, "table", 95)(2, "thead")(3, "tr");
1791
- i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1792
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 96);
1790
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1791
+ i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
1792
+ i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1793
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
1793
1794
  i0.ɵɵelementEnd()();
1794
1795
  i0.ɵɵelementStart(7, "tbody");
1795
- i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
1796
+ i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
1796
1797
  i0.ɵɵelementEnd()()();
1797
1798
  } if (rf & 2) {
1798
1799
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -1803,24 +1804,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
1803
1804
  i0.ɵɵadvance(2);
1804
1805
  i0.ɵɵrepeater(ctx_r2.DrillDownData);
1805
1806
  } }
1806
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1807
- i0.ɵɵelementStart(0, "div", 92);
1807
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1808
+ i0.ɵɵelementStart(0, "div", 93);
1808
1809
  i0.ɵɵtext(1, "No items in this confidence range");
1809
1810
  i0.ɵɵelementEnd();
1810
1811
  } }
1811
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1812
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1812
1813
  const _r72 = i0.ɵɵgetCurrentView();
1813
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 83)(2, "span", 84);
1814
- i0.ɵɵelement(3, "i", 85);
1814
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
1815
+ i0.ɵɵelement(3, "i", 86);
1815
1816
  i0.ɵɵtext(4);
1816
1817
  i0.ɵɵelementEnd();
1817
- i0.ɵɵelementStart(5, "div", 86);
1818
- i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_6_Template, 3, 0, "button", 87);
1819
- i0.ɵɵelementStart(7, "button", 88);
1820
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r72); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
1821
- i0.ɵɵelement(8, "i", 89);
1818
+ i0.ɵɵelementStart(5, "div", 87);
1819
+ i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_6_Template, 3, 0, "button", 88);
1820
+ i0.ɵɵelementStart(7, "button", 89);
1821
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r72); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
1822
+ i0.ɵɵelement(8, "i", 90);
1822
1823
  i0.ɵɵelementEnd()()();
1823
- i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 90)(10, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_10_Template, 10, 1, "div", 91)(11, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Conditional_11_Template, 2, 0, "div", 92);
1824
+ i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_11_Template, 2, 0, "div", 93);
1824
1825
  i0.ɵɵelementEnd();
1825
1826
  } if (rf & 2) {
1826
1827
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1831,11 +1832,11 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
1831
1832
  i0.ɵɵadvance(3);
1832
1833
  i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
1833
1834
  } }
1834
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_For_7_Template(rf, ctx) { if (rf & 1) {
1835
- i0.ɵɵelementStart(0, "div", 227)(1, "div", 229);
1836
- i0.ɵɵelement(2, "div", 230)(3, "div", 231)(4, "div", 232);
1835
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_7_Template(rf, ctx) { if (rf & 1) {
1836
+ i0.ɵɵelementStart(0, "div", 228)(1, "div", 230);
1837
+ i0.ɵɵelement(2, "div", 231)(3, "div", 232)(4, "div", 233);
1837
1838
  i0.ɵɵelementEnd();
1838
- i0.ɵɵelementStart(5, "div", 233);
1839
+ i0.ɵɵelementStart(5, "div", 234);
1839
1840
  i0.ɵɵtext(6);
1840
1841
  i0.ɵɵelementEnd()();
1841
1842
  } if (rf & 2) {
@@ -1852,9 +1853,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_
1852
1853
  i0.ɵɵadvance(2);
1853
1854
  i0.ɵɵtextInterpolate(entity_r78.Name);
1854
1855
  } }
1855
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_For_10_Template(rf, ctx) { if (rf & 1) {
1856
- i0.ɵɵelementStart(0, "div", 61);
1857
- i0.ɵɵelement(1, "div", 145);
1856
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_10_Template(rf, ctx) { if (rf & 1) {
1857
+ i0.ɵɵelementStart(0, "div", 62);
1858
+ i0.ɵɵelement(1, "div", 146);
1858
1859
  i0.ɵɵtext(2);
1859
1860
  i0.ɵɵelementEnd();
1860
1861
  } if (rf & 2) {
@@ -1864,16 +1865,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_
1864
1865
  i0.ɵɵadvance();
1865
1866
  i0.ɵɵtextInterpolate1(" ", item_r79.Label);
1866
1867
  } }
1867
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1868
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1869
- i0.ɵɵelement(2, "i", 225);
1868
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1869
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1870
+ i0.ɵɵelement(2, "i", 226);
1870
1871
  i0.ɵɵtext(3, " Weight Distribution by Entity");
1871
1872
  i0.ɵɵelementEnd();
1872
- i0.ɵɵelementStart(4, "div", 163)(5, "div", 226);
1873
- i0.ɵɵrepeaterCreate(6, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_For_7_Template, 7, 10, "div", 227, _forTrack1);
1873
+ i0.ɵɵelementStart(4, "div", 164)(5, "div", 227);
1874
+ i0.ɵɵrepeaterCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_7_Template, 7, 10, "div", 228, _forTrack1);
1874
1875
  i0.ɵɵelementEnd();
1875
- i0.ɵɵelementStart(8, "div", 228);
1876
- i0.ɵɵrepeaterCreate(9, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_For_10_Template, 3, 3, "div", 61, _forTrack2);
1876
+ i0.ɵɵelementStart(8, "div", 229);
1877
+ i0.ɵɵrepeaterCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_10_Template, 3, 3, "div", 62, _forTrack2);
1877
1878
  i0.ɵɵelementEnd()()();
1878
1879
  } if (rf & 2) {
1879
1880
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1882,14 +1883,14 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_
1882
1883
  i0.ɵɵadvance(3);
1883
1884
  i0.ɵɵrepeater(ctx_r2.WeightLegend);
1884
1885
  } }
1885
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_For_21_Template(rf, ctx) { if (rf & 1) {
1886
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_21_Template(rf, ctx) { if (rf & 1) {
1886
1887
  i0.ɵɵnamespaceSVG();
1887
- i0.ɵɵelement(0, "circle", 241);
1888
+ i0.ɵɵelement(0, "circle", 242);
1888
1889
  } if (rf & 2) {
1889
1890
  const dot_r80 = ctx.$implicit;
1890
1891
  i0.ɵɵattribute("cx", dot_r80.Cx)("cy", dot_r80.Cy);
1891
1892
  } }
1892
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
1893
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
1893
1894
  i0.ɵɵelementStart(0, "span");
1894
1895
  i0.ɵɵtext(1);
1895
1896
  i0.ɵɵelementEnd();
@@ -1898,12 +1899,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
1898
1899
  i0.ɵɵadvance();
1899
1900
  i0.ɵɵtextInterpolate(label_r81);
1900
1901
  } }
1901
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1902
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1903
- i0.ɵɵelement(2, "i", 5);
1902
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1903
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1904
+ i0.ɵɵelement(2, "i", 32);
1904
1905
  i0.ɵɵtext(3, " Tag Accuracy Over Time (Weekly Avg Confidence)");
1905
1906
  i0.ɵɵelementEnd();
1906
- i0.ɵɵelementStart(4, "div", 163)(5, "div", 234)(6, "div", 235)(7, "div");
1907
+ i0.ɵɵelementStart(4, "div", 164)(5, "div", 235)(6, "div", 236)(7, "div");
1907
1908
  i0.ɵɵtext(8, "1.0");
1908
1909
  i0.ɵɵelementEnd();
1909
1910
  i0.ɵɵelementStart(9, "div");
@@ -1915,19 +1916,19 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
1915
1916
  i0.ɵɵelementStart(13, "div");
1916
1917
  i0.ɵɵtext(14, "0.25");
1917
1918
  i0.ɵɵelementEnd()();
1918
- i0.ɵɵelementStart(15, "div", 236);
1919
- i0.ɵɵelement(16, "div", 237)(17, "div", 238);
1919
+ i0.ɵɵelementStart(15, "div", 237);
1920
+ i0.ɵɵelement(16, "div", 238)(17, "div", 239);
1920
1921
  i0.ɵɵnamespaceSVG();
1921
- i0.ɵɵelementStart(18, "svg", 239);
1922
- i0.ɵɵelement(19, "polyline", 240);
1923
- i0.ɵɵrepeaterCreate(20, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_For_21_Template, 1, 2, ":svg:circle", 241, i0.ɵɵcomponentInstance().TrackByIndex, true);
1922
+ i0.ɵɵelementStart(18, "svg", 240);
1923
+ i0.ɵɵelement(19, "polyline", 241);
1924
+ i0.ɵɵrepeaterCreate(20, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_21_Template, 1, 2, ":svg:circle", 242, i0.ɵɵcomponentInstance().TrackByIndex, true);
1924
1925
  i0.ɵɵelementEnd()()();
1925
1926
  i0.ɵɵnamespaceHTML();
1926
- i0.ɵɵelementStart(22, "div", 242);
1927
- i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_For_24_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
1927
+ i0.ɵɵelementStart(22, "div", 243);
1928
+ i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_24_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
1928
1929
  i0.ɵɵelementEnd();
1929
- i0.ɵɵelementStart(25, "div", 243);
1930
- i0.ɵɵelement(26, "i", 244);
1930
+ i0.ɵɵelementStart(25, "div", 244);
1931
+ i0.ɵɵelement(26, "i", 245);
1931
1932
  i0.ɵɵtext(27);
1932
1933
  i0.ɵɵelementEnd()()();
1933
1934
  } if (rf & 2) {
@@ -1941,20 +1942,20 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
1941
1942
  i0.ɵɵadvance(4);
1942
1943
  i0.ɵɵtextInterpolate1(" ", ctx_r2.AccuracyTrendText, " ");
1943
1944
  } }
1944
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_For_20_Template(rf, ctx) { if (rf & 1) {
1945
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_For_20_Template(rf, ctx) { if (rf & 1) {
1945
1946
  i0.ɵɵelementStart(0, "tr")(1, "td")(2, "strong");
1946
1947
  i0.ɵɵtext(3);
1947
1948
  i0.ɵɵelementEnd()();
1948
- i0.ɵɵelementStart(4, "td", 128);
1949
+ i0.ɵɵelementStart(4, "td", 129);
1949
1950
  i0.ɵɵtext(5);
1950
1951
  i0.ɵɵelementEnd();
1951
- i0.ɵɵelementStart(6, "td", 128);
1952
+ i0.ɵɵelementStart(6, "td", 129);
1952
1953
  i0.ɵɵtext(7);
1953
1954
  i0.ɵɵelementEnd();
1954
1955
  i0.ɵɵelementStart(8, "td");
1955
1956
  i0.ɵɵtext(9);
1956
1957
  i0.ɵɵelementEnd();
1957
- i0.ɵɵelementStart(10, "td")(11, "span", 159);
1958
+ i0.ɵɵelementStart(10, "td")(11, "span", 160);
1958
1959
  i0.ɵɵtext(12);
1959
1960
  i0.ɵɵelementEnd()()();
1960
1961
  } if (rf & 2) {
@@ -1972,18 +1973,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_
1972
1973
  i0.ɵɵadvance();
1973
1974
  i0.ɵɵtextInterpolate(tag_r82.SuggestedAction);
1974
1975
  } }
1975
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1976
- i0.ɵɵelementStart(0, "div", 122)(1, "h3");
1977
- i0.ɵɵelement(2, "i", 245);
1976
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1977
+ i0.ɵɵelementStart(0, "div", 123)(1, "h3");
1978
+ i0.ɵɵelement(2, "i", 246);
1978
1979
  i0.ɵɵtext(3, " Low-Confidence Tags (Avg Weight < 0.4)");
1979
1980
  i0.ɵɵelementEnd();
1980
- i0.ɵɵelementStart(4, "div", 120)(5, "table", 95)(6, "thead")(7, "tr")(8, "th");
1981
+ i0.ɵɵelementStart(4, "div", 121)(5, "table", 96)(6, "thead")(7, "tr")(8, "th");
1981
1982
  i0.ɵɵtext(9, "Tag Name");
1982
1983
  i0.ɵɵelementEnd();
1983
- i0.ɵɵelementStart(10, "th", 128);
1984
+ i0.ɵɵelementStart(10, "th", 129);
1984
1985
  i0.ɵɵtext(11, "Avg Weight");
1985
1986
  i0.ɵɵelementEnd();
1986
- i0.ɵɵelementStart(12, "th", 128);
1987
+ i0.ɵɵelementStart(12, "th", 129);
1987
1988
  i0.ɵɵtext(13, "Usage Count");
1988
1989
  i0.ɵɵelementEnd();
1989
1990
  i0.ɵɵelementStart(14, "th");
@@ -1993,33 +1994,33 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_
1993
1994
  i0.ɵɵtext(17, "Suggested Action");
1994
1995
  i0.ɵɵelementEnd()()();
1995
1996
  i0.ɵɵelementStart(18, "tbody");
1996
- i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_For_20_Template, 13, 7, "tr", null, _forTrack1);
1997
+ i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_For_20_Template, 13, 7, "tr", null, _forTrack1);
1997
1998
  i0.ɵɵelementEnd()()()();
1998
1999
  } if (rf & 2) {
1999
2000
  const ctx_r2 = i0.ɵɵnextContext(3);
2000
2001
  i0.ɵɵadvance(19);
2001
2002
  i0.ɵɵrepeater(ctx_r2.LowConfidenceTags);
2002
2003
  } }
2003
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_26_Template(rf, ctx) { if (rf & 1) {
2004
- i0.ɵɵelementStart(0, "div", 220)(1, "div", 246);
2005
- i0.ɵɵelement(2, "i", 158);
2004
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_26_Template(rf, ctx) { if (rf & 1) {
2005
+ i0.ɵɵelementStart(0, "div", 221)(1, "div", 247);
2006
+ i0.ɵɵelement(2, "i", 159);
2006
2007
  i0.ɵɵtext(3);
2007
2008
  i0.ɵɵelementEnd();
2008
2009
  i0.ɵɵnamespaceSVG();
2009
- i0.ɵɵelementStart(4, "svg", 247);
2010
- i0.ɵɵelement(5, "circle", 248)(6, "circle", 249);
2010
+ i0.ɵɵelementStart(4, "svg", 248);
2011
+ i0.ɵɵelement(5, "circle", 249)(6, "circle", 250);
2011
2012
  i0.ɵɵelementEnd();
2012
2013
  i0.ɵɵnamespaceHTML();
2013
- i0.ɵɵelementStart(7, "div", 250);
2014
+ i0.ɵɵelementStart(7, "div", 251);
2014
2015
  i0.ɵɵtext(8);
2015
2016
  i0.ɵɵelementEnd();
2016
- i0.ɵɵelementStart(9, "div", 251);
2017
+ i0.ɵɵelementStart(9, "div", 252);
2017
2018
  i0.ɵɵtext(10);
2018
2019
  i0.ɵɵelementEnd();
2019
- i0.ɵɵelementStart(11, "div", 251);
2020
+ i0.ɵɵelementStart(11, "div", 252);
2020
2021
  i0.ɵɵtext(12);
2021
2022
  i0.ɵɵelementEnd();
2022
- i0.ɵɵelementStart(13, "div", 252);
2023
+ i0.ɵɵelementStart(13, "div", 253);
2023
2024
  i0.ɵɵtext(14);
2024
2025
  i0.ɵɵelementEnd()();
2025
2026
  } if (rf & 2) {
@@ -2045,9 +2046,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_26_Template
2045
2046
  i0.ɵɵadvance();
2046
2047
  i0.ɵɵtextInterpolate(model_r83.Role);
2047
2048
  } }
2048
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_27_Template(rf, ctx) { if (rf & 1) {
2049
- i0.ɵɵelementStart(0, "div", 221);
2050
- i0.ɵɵelement(1, "i", 253);
2049
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_27_Template(rf, ctx) { if (rf & 1) {
2050
+ i0.ɵɵelementStart(0, "div", 222);
2051
+ i0.ɵɵelement(1, "i", 254);
2051
2052
  i0.ɵɵelementStart(2, "div")(3, "strong");
2052
2053
  i0.ɵɵtext(4, "Recommendation:");
2053
2054
  i0.ɵɵelementEnd();
@@ -2058,34 +2059,34 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_27_
2058
2059
  i0.ɵɵadvance(5);
2059
2060
  i0.ɵɵtextInterpolate1(" ", ctx_r2.ModelRecommendation, " ");
2060
2061
  } }
2061
- function AnalyticsResourceComponent_Conditional_1_Conditional_26_Template(rf, ctx) { if (rf & 1) {
2062
+ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Template(rf, ctx) { if (rf & 1) {
2062
2063
  i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
2063
- i0.ɵɵelement(2, "i", 213);
2064
+ i0.ɵɵelement(2, "i", 214);
2064
2065
  i0.ɵɵelementStart(3, "h1");
2065
2066
  i0.ɵɵtext(4, "Quality");
2066
2067
  i0.ɵɵelementEnd()();
2067
- i0.ɵɵelementStart(5, "div", 117)(6, "h3");
2068
- i0.ɵɵelement(7, "i", 214);
2068
+ i0.ɵɵelementStart(5, "div", 118)(6, "h3");
2069
+ i0.ɵɵelement(7, "i", 215);
2069
2070
  i0.ɵɵtext(8, " Confidence Distribution");
2070
2071
  i0.ɵɵelementEnd();
2071
- i0.ɵɵelementStart(9, "div", 163)(10, "div", 215);
2072
- i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Template, 5, 6, "div", 216, _forTrack2);
2072
+ i0.ɵɵelementStart(9, "div", 164)(10, "div", 216);
2073
+ i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Template, 5, 6, "div", 217, _forTrack2);
2073
2074
  i0.ɵɵelementEnd();
2074
- i0.ɵɵelementStart(13, "div", 217);
2075
- i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_1_Conditional_26_For_15_Template, 4, 2, "span", null, _forTrack2);
2075
+ i0.ɵɵelementStart(13, "div", 218);
2076
+ i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_15_Template, 4, 2, "span", null, _forTrack2);
2076
2077
  i0.ɵɵelementEnd()()();
2077
- i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_Template, 12, 3, "div", 28);
2078
- i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_Template, 11, 0, "div", 122);
2079
- i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_Template, 28, 2, "div", 122);
2080
- i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_Template, 21, 0, "div", 122);
2081
- i0.ɵɵelementStart(20, "div", 122)(21, "h3");
2082
- i0.ɵɵelement(22, "i", 218);
2078
+ i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Template, 12, 3, "div", 28);
2079
+ i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_Template, 11, 0, "div", 123);
2080
+ i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_Template, 28, 2, "div", 123);
2081
+ i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_Template, 21, 0, "div", 123);
2082
+ i0.ɵɵelementStart(20, "div", 123)(21, "h3");
2083
+ i0.ɵɵelement(22, "i", 219);
2083
2084
  i0.ɵɵtext(23, " Model Performance Comparison");
2084
2085
  i0.ɵɵelementEnd();
2085
- i0.ɵɵelementStart(24, "div", 219);
2086
- i0.ɵɵrepeaterCreate(25, AnalyticsResourceComponent_Conditional_1_Conditional_26_For_26_Template, 15, 15, "div", 220, _forTrack1);
2086
+ i0.ɵɵelementStart(24, "div", 220);
2087
+ i0.ɵɵrepeaterCreate(25, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_26_Template, 15, 15, "div", 221, _forTrack1);
2087
2088
  i0.ɵɵelementEnd();
2088
- i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_27_Template, 6, 1, "div", 221);
2089
+ i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_27_Template, 6, 1, "div", 222);
2089
2090
  i0.ɵɵelementEnd()();
2090
2091
  } if (rf & 2) {
2091
2092
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2106,10 +2107,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Template(rf, ct
2106
2107
  i0.ɵɵadvance(2);
2107
2108
  i0.ɵɵconditional(ctx_r2.ModelRecommendation ? 27 : -1);
2108
2109
  } }
2109
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_For_15_Template(rf, ctx) { if (rf & 1) {
2110
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_For_15_Template(rf, ctx) { if (rf & 1) {
2110
2111
  const _r85 = i0.ɵɵgetCurrentView();
2111
- i0.ɵɵelementStart(0, "button", 73);
2112
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_27_For_15_Template_button_click_0_listener() { const range_r86 = i0.ɵɵrestoreView(_r85).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SetDateRange(range_r86.Label)); });
2112
+ i0.ɵɵelementStart(0, "button", 74);
2113
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_20_For_15_Template_button_click_0_listener() { const range_r86 = i0.ɵɵrestoreView(_r85).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SetDateRange(range_r86.Label)); });
2113
2114
  i0.ɵɵtext(1);
2114
2115
  i0.ɵɵelementEnd();
2115
2116
  } if (rf & 2) {
@@ -2119,17 +2120,17 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_For_15_Template
2119
2120
  i0.ɵɵadvance();
2120
2121
  i0.ɵɵtextInterpolate(range_r86.Label);
2121
2122
  } }
2122
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
2123
- i0.ɵɵelementStart(0, "div", 259)(1, "div", 260);
2123
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
2124
+ i0.ɵɵelementStart(0, "div", 260)(1, "div", 261);
2124
2125
  i0.ɵɵelement(2, "i");
2125
2126
  i0.ɵɵelementEnd();
2126
- i0.ɵɵelementStart(3, "div")(4, "div", 261);
2127
+ i0.ɵɵelementStart(3, "div")(4, "div", 262);
2127
2128
  i0.ɵɵtext(5);
2128
2129
  i0.ɵɵelementEnd();
2129
- i0.ɵɵelementStart(6, "div", 262);
2130
+ i0.ɵɵelementStart(6, "div", 263);
2130
2131
  i0.ɵɵtext(7);
2131
2132
  i0.ɵɵelementEnd();
2132
- i0.ɵɵelementStart(8, "div", 263);
2133
+ i0.ɵɵelementStart(8, "div", 264);
2133
2134
  i0.ɵɵtext(9);
2134
2135
  i0.ɵɵelementEnd()()();
2135
2136
  } if (rf & 2) {
@@ -2143,29 +2144,29 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_16_
2143
2144
  i0.ɵɵadvance(2);
2144
2145
  i0.ɵɵtextInterpolate(kpi_r87.SubLabel);
2145
2146
  } }
2146
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2147
- i0.ɵɵelementStart(0, "div", 258);
2148
- i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_16_For_2_Template, 10, 5, "div", 259, _forTrack2);
2147
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_Template(rf, ctx) { if (rf & 1) {
2148
+ i0.ɵɵelementStart(0, "div", 259);
2149
+ i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_For_2_Template, 10, 5, "div", 260, _forTrack2);
2149
2150
  i0.ɵɵelementEnd();
2150
2151
  } if (rf & 2) {
2151
2152
  const ctx_r2 = i0.ɵɵnextContext(3);
2152
2153
  i0.ɵɵadvance();
2153
2154
  i0.ɵɵrepeater(ctx_r2.CostKPIs);
2154
2155
  } }
2155
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_21_For_16_Template(rf, ctx) { if (rf & 1) {
2156
- i0.ɵɵelementStart(0, "tr")(1, "td", 203);
2156
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_For_16_Template(rf, ctx) { if (rf & 1) {
2157
+ i0.ɵɵelementStart(0, "tr")(1, "td", 204);
2157
2158
  i0.ɵɵtext(2);
2158
2159
  i0.ɵɵelementEnd();
2159
2160
  i0.ɵɵelementStart(3, "td");
2160
2161
  i0.ɵɵtext(4);
2161
2162
  i0.ɵɵelementEnd();
2162
- i0.ɵɵelementStart(5, "td", 128);
2163
+ i0.ɵɵelementStart(5, "td", 129);
2163
2164
  i0.ɵɵtext(6);
2164
2165
  i0.ɵɵelementEnd();
2165
- i0.ɵɵelementStart(7, "td", 128);
2166
+ i0.ɵɵelementStart(7, "td", 129);
2166
2167
  i0.ɵɵtext(8);
2167
2168
  i0.ɵɵelementEnd();
2168
- i0.ɵɵelementStart(9, "td", 134);
2169
+ i0.ɵɵelementStart(9, "td", 135);
2169
2170
  i0.ɵɵtext(10);
2170
2171
  i0.ɵɵelementEnd()();
2171
2172
  } if (rf & 2) {
@@ -2182,66 +2183,66 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_21_
2182
2183
  i0.ɵɵadvance(2);
2183
2184
  i0.ɵɵtextInterpolate(row_r88.Started);
2184
2185
  } }
2185
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_21_Template(rf, ctx) { if (rf & 1) {
2186
- i0.ɵɵelementStart(0, "div", 120)(1, "table", 95)(2, "thead")(3, "tr")(4, "th");
2186
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_Template(rf, ctx) { if (rf & 1) {
2187
+ i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
2187
2188
  i0.ɵɵtext(5, "Run ID");
2188
2189
  i0.ɵɵelementEnd();
2189
2190
  i0.ɵɵelementStart(6, "th");
2190
2191
  i0.ɵɵtext(7, "Source");
2191
2192
  i0.ɵɵelementEnd();
2192
- i0.ɵɵelementStart(8, "th", 128);
2193
+ i0.ɵɵelementStart(8, "th", 129);
2193
2194
  i0.ɵɵtext(9, "Tokens");
2194
2195
  i0.ɵɵelementEnd();
2195
- i0.ɵɵelementStart(10, "th", 128);
2196
+ i0.ɵɵelementStart(10, "th", 129);
2196
2197
  i0.ɵɵtext(11, "Cost");
2197
2198
  i0.ɵɵelementEnd();
2198
2199
  i0.ɵɵelementStart(12, "th");
2199
2200
  i0.ɵɵtext(13, "Started");
2200
2201
  i0.ɵɵelementEnd()()();
2201
2202
  i0.ɵɵelementStart(14, "tbody");
2202
- i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_21_For_16_Template, 11, 5, "tr", null, _forTrack5);
2203
+ i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_For_16_Template, 11, 5, "tr", null, _forTrack5);
2203
2204
  i0.ɵɵelementEnd()()();
2204
2205
  } if (rf & 2) {
2205
2206
  const ctx_r2 = i0.ɵɵnextContext(3);
2206
2207
  i0.ɵɵadvance(15);
2207
2208
  i0.ɵɵrepeater(ctx_r2.CostPerRunRows);
2208
2209
  } }
2209
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_22_Template(rf, ctx) { if (rf & 1) {
2210
- i0.ɵɵelementStart(0, "div", 121);
2211
- i0.ɵɵelement(1, "i", 254);
2210
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_22_Template(rf, ctx) { if (rf & 1) {
2211
+ i0.ɵɵelementStart(0, "div", 122);
2212
+ i0.ɵɵelement(1, "i", 255);
2212
2213
  i0.ɵɵelementStart(2, "p");
2213
2214
  i0.ɵɵtext(3, "No cost data available yet. Run the pipeline to generate cost and token usage metrics.");
2214
2215
  i0.ɵɵelementEnd();
2215
- i0.ɵɵelementStart(4, "p", 264);
2216
+ i0.ɵɵelementStart(4, "p", 265);
2216
2217
  i0.ɵɵtext(5, "Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.");
2217
2218
  i0.ɵɵelementEnd()();
2218
2219
  } }
2219
- function AnalyticsResourceComponent_Conditional_1_Conditional_27_Template(rf, ctx) { if (rf & 1) {
2220
+ function AnalyticsResourceComponent_Conditional_6_Conditional_20_Template(rf, ctx) { if (rf & 1) {
2220
2221
  const _r84 = i0.ɵɵgetCurrentView();
2221
2222
  i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
2222
- i0.ɵɵelement(2, "i", 254);
2223
+ i0.ɵɵelement(2, "i", 255);
2223
2224
  i0.ɵɵelementStart(3, "h1");
2224
2225
  i0.ɵɵtext(4, "Cost & Usage");
2225
2226
  i0.ɵɵelementEnd();
2226
- i0.ɵɵelementStart(5, "div", 255)(6, "button", 93);
2227
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_27_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ExportTabDataCSV("cost-usage")); });
2228
- i0.ɵɵelement(7, "i", 94);
2227
+ i0.ɵɵelementStart(5, "div", 256)(6, "button", 94);
2228
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_20_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ExportTabDataCSV("cost-usage")); });
2229
+ i0.ɵɵelement(7, "i", 95);
2229
2230
  i0.ɵɵtext(8, " CSV ");
2230
2231
  i0.ɵɵelementEnd();
2231
- i0.ɵɵelementStart(9, "button", 256);
2232
- i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_Conditional_27_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.PrintCurrentTab()); });
2233
- i0.ɵɵelement(10, "i", 257);
2232
+ i0.ɵɵelementStart(9, "button", 257);
2233
+ i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_20_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.PrintCurrentTab()); });
2234
+ i0.ɵɵelement(10, "i", 258);
2234
2235
  i0.ɵɵtext(11, " Print ");
2235
2236
  i0.ɵɵelementEnd()()();
2236
2237
  i0.ɵɵelementStart(12, "div", 21)(13, "div", 22);
2237
- i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_1_Conditional_27_For_15_Template, 2, 3, "button", 23, _forTrack2);
2238
+ i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_20_For_15_Template, 2, 3, "button", 23, _forTrack2);
2238
2239
  i0.ɵɵelementEnd()();
2239
- i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_16_Template, 3, 0, "div", 258);
2240
- i0.ɵɵelementStart(17, "div", 122)(18, "h3");
2241
- i0.ɵɵelement(19, "i", 85);
2240
+ i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_Template, 3, 0, "div", 259);
2241
+ i0.ɵɵelementStart(17, "div", 123)(18, "h3");
2242
+ i0.ɵɵelement(19, "i", 86);
2242
2243
  i0.ɵɵtext(20, " Cost Breakdown by Run");
2243
2244
  i0.ɵɵelementEnd();
2244
- i0.ɵɵconditionalCreate(21, AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_21_Template, 17, 0, "div", 120)(22, AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_22_Template, 6, 0, "div", 121);
2245
+ i0.ɵɵconditionalCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_Template, 17, 0, "div", 121)(22, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_22_Template, 6, 0, "div", 122);
2245
2246
  i0.ɵɵelementEnd()();
2246
2247
  } if (rf & 2) {
2247
2248
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2252,59 +2253,47 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_Template(rf, ct
2252
2253
  i0.ɵɵadvance(5);
2253
2254
  i0.ɵɵconditional(ctx_r2.CostPerRunRows.length > 0 ? 21 : 22);
2254
2255
  } }
2255
- function AnalyticsResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
2256
- i0.ɵɵelementStart(0, "div", 1)(1, "aside", 3)(2, "div", 4)(3, "h2");
2257
- i0.ɵɵelement(4, "i", 5);
2258
- i0.ɵɵtext(5, " Analytics");
2259
- i0.ɵɵelementEnd()();
2260
- i0.ɵɵelementStart(6, "nav", 6);
2261
- i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_1_For_8_Template, 3, 5, "button", 7, _forTrack0);
2256
+ function AnalyticsResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
2257
+ i0.ɵɵelementStart(0, "div", 5)(1, "aside", 7)(2, "nav", 8);
2258
+ i0.ɵɵrepeaterCreate(3, AnalyticsResourceComponent_Conditional_6_For_4_Template, 3, 5, "button", 9, _forTrack0);
2262
2259
  i0.ɵɵelementEnd();
2263
- i0.ɵɵelement(9, "div", 8);
2264
- i0.ɵɵelementStart(10, "div", 9)(11, "h3");
2265
- i0.ɵɵelement(12, "i", 10);
2266
- i0.ɵɵtext(13, " Trending Tags");
2260
+ i0.ɵɵelement(5, "div", 10);
2261
+ i0.ɵɵelementStart(6, "div", 11)(7, "h3");
2262
+ i0.ɵɵelement(8, "i", 12);
2263
+ i0.ɵɵtext(9, " Trending Tags");
2267
2264
  i0.ɵɵelementEnd();
2268
- i0.ɵɵelementStart(14, "div", 11);
2269
- i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_1_For_16_Template, 2, 5, "span", 12, _forTrack1);
2270
- i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_1_Conditional_17_Template, 2, 0, "span", 13);
2271
- i0.ɵɵelementEnd()();
2272
- i0.ɵɵelementStart(18, "div", 14);
2273
- i0.ɵɵelement(19, "span", 15);
2274
- i0.ɵɵtext(20);
2275
- i0.ɵɵelementEnd()();
2276
- i0.ɵɵelementStart(21, "div", 16);
2277
- i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_1_Conditional_22_Template, 98, 7, "section", 17);
2278
- i0.ɵɵconditionalCreate(23, AnalyticsResourceComponent_Conditional_1_Conditional_23_Template, 28, 9, "section", 17);
2279
- i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_1_Conditional_24_Template, 14, 4, "section", 17);
2280
- i0.ɵɵconditionalCreate(25, AnalyticsResourceComponent_Conditional_1_Conditional_25_Template, 54, 8, "section", 17);
2281
- i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_1_Conditional_26_Template, 28, 5, "section", 17);
2282
- i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_1_Conditional_27_Template, 23, 2, "section", 17);
2265
+ i0.ɵɵelementStart(10, "div", 13);
2266
+ i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_For_12_Template, 2, 5, "span", 14, _forTrack1);
2267
+ i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_13_Template, 2, 0, "span", 15);
2268
+ i0.ɵɵelementEnd()()();
2269
+ i0.ɵɵelementStart(14, "div", 16);
2270
+ i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_15_Template, 98, 7, "section", 17);
2271
+ i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_16_Template, 28, 9, "section", 17);
2272
+ i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_17_Template, 14, 4, "section", 17);
2273
+ i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_6_Conditional_18_Template, 54, 8, "section", 17);
2274
+ i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_19_Template, 28, 5, "section", 17);
2275
+ i0.ɵɵconditionalCreate(20, AnalyticsResourceComponent_Conditional_6_Conditional_20_Template, 23, 2, "section", 17);
2283
2276
  i0.ɵɵelementEnd()();
2284
2277
  } if (rf & 2) {
2285
2278
  const ctx_r2 = i0.ɵɵnextContext();
2286
- i0.ɵɵadvance(7);
2279
+ i0.ɵɵadvance(3);
2287
2280
  i0.ɵɵrepeater(ctx_r2.NavItems);
2288
2281
  i0.ɵɵadvance(8);
2289
2282
  i0.ɵɵrepeater(ctx_r2.TrendingTags);
2290
2283
  i0.ɵɵadvance(2);
2291
- i0.ɵɵconditional(ctx_r2.TrendingTags.length === 0 ? 17 : -1);
2292
- i0.ɵɵadvance(2);
2293
- i0.ɵɵclassProp("status-dot-error", !ctx_r2.PipelineStatusOk);
2294
- i0.ɵɵadvance();
2295
- i0.ɵɵtextInterpolate1(" ", ctx_r2.PipelineStatusText, " ");
2284
+ i0.ɵɵconditional(ctx_r2.TrendingTags.length === 0 ? 13 : -1);
2296
2285
  i0.ɵɵadvance(2);
2297
- i0.ɵɵconditional(ctx_r2.ActiveTab === "overview" ? 22 : -1);
2286
+ i0.ɵɵconditional(ctx_r2.ActiveTab === "overview" ? 15 : -1);
2298
2287
  i0.ɵɵadvance();
2299
- i0.ɵɵconditional(ctx_r2.ActiveTab === "tags" ? 23 : -1);
2288
+ i0.ɵɵconditional(ctx_r2.ActiveTab === "tags" ? 16 : -1);
2300
2289
  i0.ɵɵadvance();
2301
- i0.ɵɵconditional(ctx_r2.ActiveTab === "sources" ? 24 : -1);
2290
+ i0.ɵɵconditional(ctx_r2.ActiveTab === "sources" ? 17 : -1);
2302
2291
  i0.ɵɵadvance();
2303
- i0.ɵɵconditional(ctx_r2.ActiveTab === "pipeline" ? 25 : -1);
2292
+ i0.ɵɵconditional(ctx_r2.ActiveTab === "pipeline" ? 18 : -1);
2304
2293
  i0.ɵɵadvance();
2305
- i0.ɵɵconditional(ctx_r2.ActiveTab === "quality" ? 26 : -1);
2294
+ i0.ɵɵconditional(ctx_r2.ActiveTab === "quality" ? 19 : -1);
2306
2295
  i0.ɵɵadvance();
2307
- i0.ɵɵconditional(ctx_r2.ActiveTab === "cost" ? 27 : -1);
2296
+ i0.ɵɵconditional(ctx_r2.ActiveTab === "cost" ? 20 : -1);
2308
2297
  } }
2309
2298
  // ================================================================
2310
2299
  // Component
@@ -4245,11 +4234,21 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
4245
4234
  }
4246
4235
  }
4247
4236
  static ɵfac = /*@__PURE__*/ (() => { let ɵAnalyticsResourceComponent_BaseFactory; return function AnalyticsResourceComponent_Factory(__ngFactoryType__) { return (ɵAnalyticsResourceComponent_BaseFactory || (ɵAnalyticsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AnalyticsResourceComponent)))(__ngFactoryType__ || AnalyticsResourceComponent); }; })();
4248
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsResourceComponent, selectors: [["app-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "analytics-loading"], [1, "analytics-layout"], ["text", "Loading analytics data...", "size", "medium"], [1, "analytics-sidebar"], [1, "sidebar-header"], [1, "fa-solid", "fa-chart-line"], [1, "sidebar-nav"], [1, "nav-item", 3, "active"], [1, "sidebar-divider"], [1, "trending-section"], [1, "fa-solid", "fa-arrow-trend-up"], [1, "tag-cloud"], [3, "font-size", "font-weight"], [1, "no-trending"], [1, "pipeline-status"], [1, "status-dot"], [1, "main-content"], [1, "tab-section"], [1, "nav-item", 3, "click"], [1, "tab-section-header"], [1, "fa-solid", "fa-grip"], [1, "filter-bar"], [1, "date-chips"], [1, "date-chip", 3, "active"], [1, "filter-dropdown", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "kpi-row"], [1, "kpi-card"], [1, "drill-down-panel"], [1, "cards-grid"], [1, "widget-card", 3, "click"], [1, "widget-title"], [1, "bar-chart"], [1, "bar-col"], [1, "fa-solid", "fa-bullseye"], [1, "rings-grid"], [1, "ring-item"], [1, "widget-empty"], [1, "fa-solid", "fa-gauge-high"], [1, "gauge-container"], ["width", "180", "height", "110", "viewBox", "0 0 180 110"], ["d", "M 20 95 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "14", "stroke-linecap", "round"], ["d", "M 20 95 A 70 70 0 0 1 48.6 35.2", "fill", "none", "stroke", "var(--mj-status-error)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["d", "M 48.6 35.2 A 70 70 0 0 1 118 28", "fill", "none", "stroke", "var(--mj-status-warning)", "stroke-width", "14", "opacity", "0.3"], ["d", "M 118 28 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-status-success)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["x", "90", "y", "88", "text-anchor", "middle", "font-size", "26", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "90", "y", "105", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], ["x", "28", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "86", "y", "18", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "155", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], [1, "mini-histogram"], [1, "mini-hist-bar", 3, "height", "background", "title"], [1, "mini-hist-label"], [1, "fa-solid", "fa-ranking-star"], [1, "h-bar-list"], [1, "h-bar-row"], [1, "widget-footnote"], [1, "fa-solid", "fa-bolt"], [1, "throughput-bars"], [1, "tp-bar", 3, "height", "background"], [1, "legend"], [1, "legend-item"], [1, "legend-dot", 2, "background", "var(--mj-status-success)"], [1, "legend-dot", 2, "background", "var(--mj-status-error)"], [1, "fa-solid", "fa-sitemap"], [1, "taxonomy-ring-container"], ["width", "140", "height", "140", "viewBox", "0 0 140 140"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "18"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke-width", "18", "transform", "rotate(-90 70 70)"], ["x", "70", "y", "66", "text-anchor", "middle", "font-size", "22", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "70", "y", "82", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], [1, "taxonomy-stats"], [1, "tax-stat", 3, "background", "color"], [1, "date-chip", 3, "click"], [1, "kpi-card", 3, "click"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-delta"], [1, "fa-solid", "fa-arrow-up", 2, "font-size", "9px"], [1, "fa-solid", "fa-arrow-down", 2, "font-size", "9px"], [1, "kpi-sparkline"], ["width", "64", "height", "28", "viewBox", "0 0 64 28"], ["fill", "none", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], [1, "drill-down-header"], [1, "drill-down-title"], [1, "fa-solid", "fa-table"], [1, "drill-down-header-actions"], ["title", "Export CSV", 1, "drill-export-btn"], ["aria-label", "Close drill-down", 1, "drill-down-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading details...", "size", "small"], [1, "drill-down-table-wrap"], [1, "drill-down-empty"], ["title", "Export CSV", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "data-table"], [1, "drill-action-col"], ["title", "Open record", 1, "drill-open-btn"], ["title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "bar-value"], [1, "bar", 2, "background", "var(--mj-brand-primary)"], [1, "bar-label"], ["width", "48", "height", "48", "viewBox", "0 0 48 48"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "5"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke-width", "5", "stroke-dashoffset", "31.4", "stroke-linecap", "round", "transform", "rotate(-90 24 24)"], ["x", "24", "y", "26", "text-anchor", "middle", "font-size", "11", "font-weight", "700", "fill", "var(--mj-text-primary)"], [1, "ring-label"], [1, "ring-stat"], [1, "mini-hist-bar", 3, "title"], [1, "h-bar-name"], [1, "h-bar-track"], [1, "h-bar-fill"], [1, "tp-bar"], [1, "tp-bar-label"], [1, "tax-stat"], [1, "fa-solid", "fa-tags"], [1, "sub-section", 2, "margin-top", "0"], [1, "sub-section-header"], [1, "fa-solid", "fa-trophy"], [1, "table-scroll"], [1, "empty-state"], [1, "sub-section"], [1, "sub-section", "co-occurrence-section"], [1, "fa-solid", "fa-link"], [1, "co-occurrence-actions"], ["title", "Last computed timestamp", 1, "co-occurrence-staleness"], ["title", "Recompute co-occurrence data", 1, "drill-export-btn", 3, "click", "disabled"], [1, "num"], [2, "cursor", "pointer"], [2, "cursor", "pointer", 3, "click"], [1, "weight-bar"], ["width", "48", "height", "16"], ["fill", "none", "stroke-width", "1.5", "stroke-linecap", "round"], [1, "muted"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-chart-bar"], [1, "stacked-bar-chart"], [1, "stacked-row"], [1, "legend", 2, "margin-top", "12px"], [1, "stacked-label"], [1, "stacked-track"], [1, "stacked-seg", 3, "width", "background", "title"], [1, "stacked-seg", 3, "title"], [1, "legend-dot"], [1, "fa-solid", "fa-layer-group"], [1, "v-bar-chart"], [1, "v-bar-col"], [1, "chart-footnote"], [1, "v-bar", 2, "background", "var(--mj-brand-primary)"], [1, "v-bar-label"], [1, "fa-regular", "fa-clock"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-arrows-rotate"], [1, "weight-bar", 2, "background", "var(--mj-status-info)"], [1, "fa-solid", "fa-database"], [2, "cursor", "pointer", 3, "source-selected"], [2, "margin-right", "4px"], [1, "badge"], [1, "fa-solid", "fa-circle", 2, "font-size", "6px", "margin-right", "3px"], [1, "fa-solid", "fa-chart-area"], [1, "two-col"], [1, "widget-card"], [1, "bar-chart", 2, "height", "100px"], [1, "fa-solid", "fa-star-half-stroke"], [1, "quality-bands"], [1, "quality-band-row"], [1, "source-quality-note"], [1, "fa-solid", "fa-circle-info", 2, "color", "var(--mj-status-info)", "margin-right", "4px"], [1, "bar-value", 2, "font-size", "9px"], [1, "quality-band-label"], [1, "quality-band-track"], [1, "quality-band-fill"], [1, "fa-solid", "fa-heart-pulse"], [1, "source-health-grid"], [1, "source-health-card", 3, "border-top-color"], [1, "source-health-card"], [1, "health-card-name"], [1, "health-card-value"], [1, "health-card-label"], [1, "fa-solid", "fa-gears"], [1, "pipeline-throughput-bars"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "height", "background", "opacity"], [1, "pipeline-date-labels"], [1, "fa-solid", "fa-stopwatch"], [1, "stage-bars"], [1, "stage-row"], [1, "stage-summary"], [1, "stage-warning"], [1, "success-rate-display"], [1, "success-rate-stat"], [1, "success-rate-value", 2, "color", "var(--mj-status-success)"], [1, "success-rate-label"], [1, "success-rate-value", 2, "color", "var(--mj-status-error)"], [1, "success-rate-value", 2, "color", "var(--mj-text-primary)"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "click"], [1, "stage-name"], [1, "stage-track"], [1, "stage-fill"], [1, "stage-time"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "4px"], [1, "fa-solid", "fa-spinner"], [1, "monospace-cell"], [1, "progress-track"], [1, "progress-fill", 2, "background", "var(--mj-brand-primary)"], [1, "progress-text"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "error-log"], [1, "error-entry"], [1, "error-time"], [1, "error-source"], [1, "error-msg"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-chart-column"], [1, "histogram"], [1, "hist-bar-col", 2, "cursor", "pointer"], [1, "confidence-stats"], [1, "fa-solid", "fa-robot"], [1, "model-grid"], [1, "model-card"], [1, "model-recommendation"], [1, "hist-bar-col", 2, "cursor", "pointer", 3, "click"], [1, "hist-bar"], [1, "hist-label"], [1, "fa-solid", "fa-weight-scale"], [1, "grouped-bar-chart"], [1, "grouped-col"], [1, "legend", 2, "justify-content", "center", "margin-top", "14px"], [1, "grouped-bars"], [1, "g-bar", 2, "background", "var(--mj-brand-primary)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-status-info)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-text-muted)", 3, "title"], [1, "grouped-label"], [1, "accuracy-chart"], [1, "accuracy-y-labels"], [1, "accuracy-area"], [1, "accuracy-grid-line", 2, "top", "33%"], [1, "accuracy-grid-line", 2, "top", "66%"], ["width", "100%", "height", "110", "viewBox", "0 0 400 110", "preserveAspectRatio", "none", 1, "accuracy-svg"], ["fill", "none", "stroke", "var(--mj-brand-primary)", "stroke-width", "2.5", "vector-effect", "non-scaling-stroke", "stroke-linecap", "round", "stroke-linejoin", "round"], ["r", "3", "fill", "var(--mj-brand-primary)"], [1, "accuracy-x-labels"], [1, "accuracy-trend-text"], [1, "fa-solid", "fa-arrow-trend-up", 2, "margin-right", "4px"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "model-name"], ["width", "80", "height", "80", "viewBox", "0 0 80 80", 2, "margin", "4px 0"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "8"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke-width", "8", "stroke-dashoffset", "50", "transform", "rotate(-90 40 40)", "stroke-linecap", "round"], [1, "model-score"], [1, "model-detail"], [1, "model-detail", 2, "font-weight", "600"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-status-warning)"], [1, "fa-solid", "fa-coins"], [1, "tab-header-actions"], ["title", "Print (PDF alternative)", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-print"], [1, "cost-kpi-row"], [1, "cost-kpi-card"], [1, "cost-kpi-icon"], [1, "cost-kpi-value"], [1, "cost-kpi-label"], [1, "cost-kpi-sub"], [1, "empty-state-hint"]], template: function AnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
4249
- i0.ɵɵconditionalCreate(0, AnalyticsResourceComponent_Conditional_0_Template, 2, 0, "div", 0)(1, AnalyticsResourceComponent_Conditional_1_Template, 28, 10, "div", 1);
4237
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsResourceComponent, selectors: [["app-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 5, consts: [["Title", "Knowledge Hub Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Pipeline health, trending tags, and content insights"], ["meta", ""], [3, "Label", "Variant"], [3, "Flex", "Padding"], [1, "analytics-loading"], [1, "analytics-layout"], ["text", "Loading analytics data...", "size", "medium"], [1, "analytics-sidebar"], [1, "sidebar-nav"], [1, "nav-item", 3, "active"], [1, "sidebar-divider"], [1, "trending-section"], [1, "fa-solid", "fa-arrow-trend-up"], [1, "tag-cloud"], [3, "font-size", "font-weight"], [1, "no-trending"], [1, "main-content"], [1, "tab-section"], [1, "nav-item", 3, "click"], [1, "tab-section-header"], [1, "fa-solid", "fa-grip"], [1, "filter-bar"], [1, "date-chips"], [1, "date-chip", 3, "active"], [1, "filter-dropdown", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "kpi-row"], [1, "kpi-card"], [1, "drill-down-panel"], [1, "cards-grid"], [1, "widget-card", 3, "click"], [1, "widget-title"], [1, "fa-solid", "fa-chart-line"], [1, "bar-chart"], [1, "bar-col"], [1, "fa-solid", "fa-bullseye"], [1, "rings-grid"], [1, "ring-item"], [1, "widget-empty"], [1, "fa-solid", "fa-gauge-high"], [1, "gauge-container"], ["width", "180", "height", "110", "viewBox", "0 0 180 110"], ["d", "M 20 95 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "14", "stroke-linecap", "round"], ["d", "M 20 95 A 70 70 0 0 1 48.6 35.2", "fill", "none", "stroke", "var(--mj-status-error)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["d", "M 48.6 35.2 A 70 70 0 0 1 118 28", "fill", "none", "stroke", "var(--mj-status-warning)", "stroke-width", "14", "opacity", "0.3"], ["d", "M 118 28 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-status-success)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["x", "90", "y", "88", "text-anchor", "middle", "font-size", "26", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "90", "y", "105", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], ["x", "28", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "86", "y", "18", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "155", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], [1, "mini-histogram"], [1, "mini-hist-bar", 3, "height", "background", "title"], [1, "mini-hist-label"], [1, "fa-solid", "fa-ranking-star"], [1, "h-bar-list"], [1, "h-bar-row"], [1, "widget-footnote"], [1, "fa-solid", "fa-bolt"], [1, "throughput-bars"], [1, "tp-bar", 3, "height", "background"], [1, "legend"], [1, "legend-item"], [1, "legend-dot", 2, "background", "var(--mj-status-success)"], [1, "legend-dot", 2, "background", "var(--mj-status-error)"], [1, "fa-solid", "fa-sitemap"], [1, "taxonomy-ring-container"], ["width", "140", "height", "140", "viewBox", "0 0 140 140"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "18"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke-width", "18", "transform", "rotate(-90 70 70)"], ["x", "70", "y", "66", "text-anchor", "middle", "font-size", "22", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "70", "y", "82", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], [1, "taxonomy-stats"], [1, "tax-stat", 3, "background", "color"], [1, "date-chip", 3, "click"], [1, "kpi-card", 3, "click"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-delta"], [1, "fa-solid", "fa-arrow-up", 2, "font-size", "9px"], [1, "fa-solid", "fa-arrow-down", 2, "font-size", "9px"], [1, "kpi-sparkline"], ["width", "64", "height", "28", "viewBox", "0 0 64 28"], ["fill", "none", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], [1, "drill-down-header"], [1, "drill-down-title"], [1, "fa-solid", "fa-table"], [1, "drill-down-header-actions"], ["title", "Export CSV", 1, "drill-export-btn"], ["aria-label", "Close drill-down", 1, "drill-down-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading details...", "size", "small"], [1, "drill-down-table-wrap"], [1, "drill-down-empty"], ["title", "Export CSV", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "data-table"], [1, "drill-action-col"], ["title", "Open record", 1, "drill-open-btn"], ["title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "bar-value"], [1, "bar", 2, "background", "var(--mj-brand-primary)"], [1, "bar-label"], ["width", "48", "height", "48", "viewBox", "0 0 48 48"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "5"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke-width", "5", "stroke-dashoffset", "31.4", "stroke-linecap", "round", "transform", "rotate(-90 24 24)"], ["x", "24", "y", "26", "text-anchor", "middle", "font-size", "11", "font-weight", "700", "fill", "var(--mj-text-primary)"], [1, "ring-label"], [1, "ring-stat"], [1, "mini-hist-bar", 3, "title"], [1, "h-bar-name"], [1, "h-bar-track"], [1, "h-bar-fill"], [1, "tp-bar"], [1, "tp-bar-label"], [1, "tax-stat"], [1, "fa-solid", "fa-tags"], [1, "sub-section", 2, "margin-top", "0"], [1, "sub-section-header"], [1, "fa-solid", "fa-trophy"], [1, "table-scroll"], [1, "empty-state"], [1, "sub-section"], [1, "sub-section", "co-occurrence-section"], [1, "fa-solid", "fa-link"], [1, "co-occurrence-actions"], ["title", "Last computed timestamp", 1, "co-occurrence-staleness"], ["title", "Recompute co-occurrence data", 1, "drill-export-btn", 3, "click", "disabled"], [1, "num"], [2, "cursor", "pointer"], [2, "cursor", "pointer", 3, "click"], [1, "weight-bar"], ["width", "48", "height", "16"], ["fill", "none", "stroke-width", "1.5", "stroke-linecap", "round"], [1, "muted"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-chart-bar"], [1, "stacked-bar-chart"], [1, "stacked-row"], [1, "legend", 2, "margin-top", "12px"], [1, "stacked-label"], [1, "stacked-track"], [1, "stacked-seg", 3, "width", "background", "title"], [1, "stacked-seg", 3, "title"], [1, "legend-dot"], [1, "fa-solid", "fa-layer-group"], [1, "v-bar-chart"], [1, "v-bar-col"], [1, "chart-footnote"], [1, "v-bar", 2, "background", "var(--mj-brand-primary)"], [1, "v-bar-label"], [1, "fa-regular", "fa-clock"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-arrows-rotate"], [1, "weight-bar", 2, "background", "var(--mj-status-info)"], [1, "fa-solid", "fa-database"], [2, "cursor", "pointer", 3, "source-selected"], [2, "margin-right", "4px"], [1, "badge"], [1, "fa-solid", "fa-circle", 2, "font-size", "6px", "margin-right", "3px"], [1, "fa-solid", "fa-chart-area"], [1, "two-col"], [1, "widget-card"], [1, "bar-chart", 2, "height", "100px"], [1, "fa-solid", "fa-star-half-stroke"], [1, "quality-bands"], [1, "quality-band-row"], [1, "source-quality-note"], [1, "fa-solid", "fa-circle-info", 2, "color", "var(--mj-status-info)", "margin-right", "4px"], [1, "bar-value", 2, "font-size", "9px"], [1, "quality-band-label"], [1, "quality-band-track"], [1, "quality-band-fill"], [1, "fa-solid", "fa-heart-pulse"], [1, "source-health-grid"], [1, "source-health-card", 3, "border-top-color"], [1, "source-health-card"], [1, "health-card-name"], [1, "health-card-value"], [1, "health-card-label"], [1, "fa-solid", "fa-gears"], [1, "pipeline-throughput-bars"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "height", "background", "opacity"], [1, "pipeline-date-labels"], [1, "fa-solid", "fa-stopwatch"], [1, "stage-bars"], [1, "stage-row"], [1, "stage-summary"], [1, "stage-warning"], [1, "success-rate-display"], [1, "success-rate-stat"], [1, "success-rate-value", 2, "color", "var(--mj-status-success)"], [1, "success-rate-label"], [1, "success-rate-value", 2, "color", "var(--mj-status-error)"], [1, "success-rate-value", 2, "color", "var(--mj-text-primary)"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "click"], [1, "stage-name"], [1, "stage-track"], [1, "stage-fill"], [1, "stage-time"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "4px"], [1, "fa-solid", "fa-spinner"], [1, "monospace-cell"], [1, "progress-track"], [1, "progress-fill", 2, "background", "var(--mj-brand-primary)"], [1, "progress-text"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "error-log"], [1, "error-entry"], [1, "error-time"], [1, "error-source"], [1, "error-msg"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-chart-column"], [1, "histogram"], [1, "hist-bar-col", 2, "cursor", "pointer"], [1, "confidence-stats"], [1, "fa-solid", "fa-robot"], [1, "model-grid"], [1, "model-card"], [1, "model-recommendation"], [1, "hist-bar-col", 2, "cursor", "pointer", 3, "click"], [1, "hist-bar"], [1, "hist-label"], [1, "fa-solid", "fa-weight-scale"], [1, "grouped-bar-chart"], [1, "grouped-col"], [1, "legend", 2, "justify-content", "center", "margin-top", "14px"], [1, "grouped-bars"], [1, "g-bar", 2, "background", "var(--mj-brand-primary)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-status-info)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-text-muted)", 3, "title"], [1, "grouped-label"], [1, "accuracy-chart"], [1, "accuracy-y-labels"], [1, "accuracy-area"], [1, "accuracy-grid-line", 2, "top", "33%"], [1, "accuracy-grid-line", 2, "top", "66%"], ["width", "100%", "height", "110", "viewBox", "0 0 400 110", "preserveAspectRatio", "none", 1, "accuracy-svg"], ["fill", "none", "stroke", "var(--mj-brand-primary)", "stroke-width", "2.5", "vector-effect", "non-scaling-stroke", "stroke-linecap", "round", "stroke-linejoin", "round"], ["r", "3", "fill", "var(--mj-brand-primary)"], [1, "accuracy-x-labels"], [1, "accuracy-trend-text"], [1, "fa-solid", "fa-arrow-trend-up", 2, "margin-right", "4px"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "model-name"], ["width", "80", "height", "80", "viewBox", "0 0 80 80", 2, "margin", "4px 0"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "8"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke-width", "8", "stroke-dashoffset", "50", "transform", "rotate(-90 40 40)", "stroke-linecap", "round"], [1, "model-score"], [1, "model-detail"], [1, "model-detail", 2, "font-weight", "600"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-status-warning)"], [1, "fa-solid", "fa-coins"], [1, "tab-header-actions"], ["title", "Print (PDF alternative)", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-print"], [1, "cost-kpi-row"], [1, "cost-kpi-card"], [1, "cost-kpi-icon"], [1, "cost-kpi-value"], [1, "cost-kpi-label"], [1, "cost-kpi-sub"], [1, "empty-state-hint"]], template: function AnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
4238
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
4239
+ i0.ɵɵelement(3, "mj-stat-badge", 2);
4240
+ i0.ɵɵelementEnd()();
4241
+ i0.ɵɵelementStart(4, "mj-page-body", 3);
4242
+ i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_5_Template, 2, 0, "div", 4)(6, AnalyticsResourceComponent_Conditional_6_Template, 21, 7, "div", 5);
4243
+ i0.ɵɵelementEnd()();
4250
4244
  } if (rf & 2) {
4251
- i0.ɵɵconditional(ctx.IsLoading ? 0 : 1);
4252
- } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent], styles: ["\n\n\n\n\n.analytics-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.analytics-layout[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n min-height: 600px;\n}\n\n\n\n.analytics-sidebar[_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 overflow-y: auto;\n}\n\n.sidebar-header[_ngcontent-%COMP%] {\n padding: 20px 16px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.sidebar-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n}\n\n.sidebar-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.sidebar-nav[_ngcontent-%COMP%] {\n padding: 8px 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n border-left: 3px solid transparent;\n transition: all 0.15s ease;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n border-left-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n font-weight: 600;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n font-size: 13px;\n}\n\n.sidebar-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 8px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] {\n padding: 12px 16px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:hover {\n opacity: 0.7;\n}\n\n.no-trending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section[_ngcontent-%COMP%] {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n.filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.date-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n\n\n.cards-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n\n\n.bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n\n\n.rings-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n\n\n.mini-histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar[_ngcontent-%COMP%] {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.h-bar-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n\n\n.throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.taxonomy-ring-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat[_ngcontent-%COMP%] {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n\n\n.legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n\n\n.table-scroll[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] .num[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar[_ngcontent-%COMP%] {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n\n\n.sub-section[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n\n\n.drill-down-panel[_ngcontent-%COMP%] {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.drill-down-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n\n\n.stacked-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label[_ngcontent-%COMP%] {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n\n\n.v-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar[_ngcontent-%COMP%] {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n\n\n.two-col[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n\n\n.source-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n\n\n.quality-bands[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.source-health-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.pipeline-throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.stage-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time[_ngcontent-%COMP%] {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.success-rate-display[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-rate-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.progress-track[_ngcontent-%COMP%] {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.error-log[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n\n\n.histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n\n\n.grouped-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar[_ngcontent-%COMP%] {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n\n\n.accuracy-chart[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n\n\n.model-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n\n\n@media (max-width: 1200px) {\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section[_ngcontent-%COMP%], \n .sidebar-divider[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .two-col[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n\n.tab-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n\n@media print {\n .analytics-sidebar[_ngcontent-%COMP%], \n .filter-bar[_ngcontent-%COMP%], \n .tab-header-actions[_ngcontent-%COMP%], \n .drill-down-close[_ngcontent-%COMP%], \n .drill-export-btn[_ngcontent-%COMP%], \n .drill-open-btn[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .analytics-layout[_ngcontent-%COMP%] {\n display: block;\n }\n\n .main-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .widget-card[_ngcontent-%COMP%], \n .cost-kpi-card[_ngcontent-%COMP%], \n .kpi-card[_ngcontent-%COMP%] {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n}\n\n\n\n\n\n\n\n.co-occurrence-section[_ngcontent-%COMP%] {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .table-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}"] });
4245
+ i0.ɵɵadvance(3);
4246
+ i0.ɵɵproperty("Label", ctx.PipelineStatusText)("Variant", ctx.PipelineStatusOk ? "success" : "error");
4247
+ i0.ɵɵadvance();
4248
+ i0.ɵɵproperty("Flex", true)("Padding", false);
4249
+ i0.ɵɵadvance();
4250
+ i0.ɵɵconditional(ctx.IsLoading ? 5 : 6);
4251
+ } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJStatBadgeComponent], styles: ["\n\n\n\n\n.analytics-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.analytics-layout[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n\n\n.analytics-sidebar[_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 overflow-y: auto;\n}\n\n.sidebar-header[_ngcontent-%COMP%] {\n padding: 20px 16px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.sidebar-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n}\n\n.sidebar-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.sidebar-nav[_ngcontent-%COMP%] {\n padding: 8px 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n border-left: 3px solid transparent;\n transition: all 0.15s ease;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n border-left-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n font-weight: 600;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n font-size: 13px;\n}\n\n.sidebar-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 8px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] {\n padding: 12px 16px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:hover {\n opacity: 0.7;\n}\n\n.no-trending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section[_ngcontent-%COMP%] {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n.filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.date-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n\n\n.cards-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n\n\n.bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n\n\n.rings-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n\n\n.mini-histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar[_ngcontent-%COMP%] {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.h-bar-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n\n\n.throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.taxonomy-ring-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat[_ngcontent-%COMP%] {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n\n\n.legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n\n\n.table-scroll[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] .num[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar[_ngcontent-%COMP%] {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n\n\n.sub-section[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n\n\n.drill-down-panel[_ngcontent-%COMP%] {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.drill-down-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n\n\n.stacked-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label[_ngcontent-%COMP%] {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n\n\n.v-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar[_ngcontent-%COMP%] {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n\n\n.two-col[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n\n\n.source-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n\n\n.quality-bands[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.source-health-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.pipeline-throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.stage-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time[_ngcontent-%COMP%] {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.success-rate-display[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-rate-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.progress-track[_ngcontent-%COMP%] {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.error-log[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n\n\n.histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n\n\n.grouped-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar[_ngcontent-%COMP%] {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n\n\n.accuracy-chart[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n\n\n.model-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n\n\n@media (max-width: 1200px) {\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section[_ngcontent-%COMP%], \n .sidebar-divider[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .two-col[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n\n.tab-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n\n@media print {\n .analytics-sidebar[_ngcontent-%COMP%], \n .filter-bar[_ngcontent-%COMP%], \n .tab-header-actions[_ngcontent-%COMP%], \n .drill-down-close[_ngcontent-%COMP%], \n .drill-export-btn[_ngcontent-%COMP%], \n .drill-open-btn[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .analytics-layout[_ngcontent-%COMP%] {\n display: block;\n }\n\n .main-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .widget-card[_ngcontent-%COMP%], \n .cost-kpi-card[_ngcontent-%COMP%], \n .kpi-card[_ngcontent-%COMP%] {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n}\n\n\n\n\n\n\n\n.co-occurrence-section[_ngcontent-%COMP%] {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .table-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}"] });
4253
4252
  };
4254
4253
  AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
4255
4254
  RegisterClass(BaseResourceComponent, 'AnalyticsResource')
@@ -4257,7 +4256,7 @@ AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
4257
4256
  export { AnalyticsResourceComponent };
4258
4257
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsResourceComponent, [{
4259
4258
  type: Component,
4260
- args: [{ standalone: false, selector: 'app-analytics-resource', template: "@if (IsLoading) {\n <div class=\"analytics-loading\">\n <mj-loading text=\"Loading analytics data...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"analytics-layout\">\n <!-- =============== LEFT SIDEBAR =============== -->\n <aside class=\"analytics-sidebar\">\n <div class=\"sidebar-header\">\n <h2><i class=\"fa-solid fa-chart-line\"></i> Analytics</h2>\n </div>\n\n <nav class=\"sidebar-nav\">\n @for (nav of NavItems; track nav.ID) {\n <button\n class=\"nav-item\"\n [class.active]=\"ActiveTab === nav.ID\"\n (click)=\"SelectTab(nav.ID)\"\n >\n <i [class]=\"nav.Icon\"></i> {{ nav.Label }}\n </button>\n }\n </nav>\n\n <div class=\"sidebar-divider\"></div>\n\n <!-- Trending Tags Cloud -->\n <div class=\"trending-section\">\n <h3><i class=\"fa-solid fa-arrow-trend-up\"></i> Trending Tags</h3>\n <div class=\"tag-cloud\">\n @for (tag of TrendingTags; track tag.Name) {\n <span [style.font-size.px]=\"tag.Size\" [style.font-weight]=\"tag.Weight\">{{ tag.Name }}</span>\n }\n @if (TrendingTags.length === 0) {\n <span class=\"no-trending\">No trending tags yet</span>\n }\n </div>\n </div>\n\n <!-- Pipeline Status -->\n <div class=\"pipeline-status\">\n <span class=\"status-dot\" [class.status-dot-error]=\"!PipelineStatusOk\"></span>\n {{ PipelineStatusText }}\n </div>\n </aside>\n\n <!-- =============== MAIN CONTENT =============== -->\n <div class=\"main-content\">\n\n <!-- ====================================================== -->\n <!-- TAB 1: OVERVIEW -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'overview') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-grip\"></i>\n <h1>Overview</h1>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n <select class=\"filter-dropdown\" [ngModel]=\"EntityFilter\" (ngModelChange)=\"SetEntityFilter($event)\">\n @for (opt of EntityFilterOptions; track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n @for (kpi of KPIs; track kpi.Label) {\n <div class=\"kpi-card\" (click)=\"OpenDrillDown(kpi.DrillDownKey)\">\n <div>\n <div class=\"kpi-label\">{{ kpi.Label }}</div>\n <div class=\"kpi-value\">{{ kpi.Value }}</div>\n <div class=\"kpi-delta\" [class.up]=\"kpi.DeltaDirection === 'up'\" [class.down]=\"kpi.DeltaDirection === 'down'\">\n @if (kpi.DeltaDirection === 'up') {\n <i class=\"fa-solid fa-arrow-up\" style=\"font-size:9px\"></i>\n } @else if (kpi.DeltaDirection === 'down') {\n <i class=\"fa-solid fa-arrow-down\" style=\"font-size:9px\"></i>\n }\n {{ kpi.Delta }}\n </div>\n </div>\n <div class=\"kpi-sparkline\">\n <svg width=\"64\" height=\"28\" viewBox=\"0 0 64 28\">\n <polyline [attr.points]=\"kpi.SparklinePoints\" fill=\"none\" [attr.stroke]=\"kpi.SparklineColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n }\n </div>\n\n <!-- KPI Drill-Down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Detail View</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n\n <!-- Widget Cards Grid (2x3) -->\n <div class=\"cards-grid\">\n\n <!-- Card 1: Tag Growth -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('tagGrowth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-line\"></i> Tag Growth</div>\n <div class=\"bar-chart\">\n @for (bar of TagGrowthData; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\">{{ bar.Count }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Card 2: Content Coverage -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('contentCoverage')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bullseye\"></i> Content Coverage</div>\n <div class=\"rings-grid\">\n @for (entity of CoverageData; track entity.Name) {\n <div class=\"ring-item\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"5\"/>\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" [attr.stroke]=\"entity.Color\" stroke-width=\"5\"\n [attr.stroke-dasharray]=\"entity.StrokeDash\" stroke-dashoffset=\"31.4\" stroke-linecap=\"round\"\n transform=\"rotate(-90 24 24)\"/>\n <text x=\"24\" y=\"26\" text-anchor=\"middle\" font-size=\"11\" font-weight=\"700\" fill=\"var(--mj-text-primary)\">{{ entity.Percentage }}%</text>\n </svg>\n <div>\n <div class=\"ring-label\">{{ entity.Name }}</div>\n <div class=\"ring-stat\">{{ FormatNumber(entity.Tagged) }} / {{ FormatNumber(entity.Total) }}</div>\n </div>\n </div>\n }\n @if (CoverageData.length === 0) {\n <div class=\"widget-empty\">No content types found</div>\n }\n </div>\n </div>\n\n <!-- Card 3: Quality Score Gauge -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('qualityScore')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-gauge-high\"></i> Quality Score</div>\n <div class=\"gauge-container\">\n <svg width=\"180\" height=\"110\" viewBox=\"0 0 180 110\">\n <!-- Background arc -->\n <path d=\"M 20 95 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- Zone arcs -->\n <path d=\"M 20 95 A 70 70 0 0 1 48.6 35.2\" fill=\"none\" stroke=\"var(--mj-status-error)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <path d=\"M 48.6 35.2 A 70 70 0 0 1 118 28\" fill=\"none\" stroke=\"var(--mj-status-warning)\" stroke-width=\"14\" opacity=\"0.3\"/>\n <path d=\"M 118 28 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-status-success)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <!-- Score text -->\n <text x=\"90\" y=\"88\" text-anchor=\"middle\" font-size=\"26\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ QualityScore }}</text>\n <text x=\"90\" y=\"105\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">out of 100</text>\n <text x=\"28\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">0</text>\n <text x=\"86\" y=\"18\" font-size=\"8\" fill=\"var(--mj-text-muted)\">50</text>\n <text x=\"155\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">100</text>\n </svg>\n </div>\n <!-- Mini confidence histogram -->\n <div class=\"mini-histogram\">\n @for (bin of MiniConfidenceBins; track TrackByIndex($index)) {\n <div class=\"mini-hist-bar\" [style.height.px]=\"bin.Height\" [style.background]=\"bin.Color\" [title]=\"bin.Title\"></div>\n }\n </div>\n <div class=\"mini-hist-label\">Confidence Distribution</div>\n </div>\n\n <!-- Card 4: Source Performance -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('sourcePerformance')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-ranking-star\"></i> Source Performance</div>\n <div class=\"h-bar-list\">\n @for (source of SourcePerfData; track source.Name) {\n <div class=\"h-bar-row\">\n <div class=\"h-bar-name\">{{ source.Name }}</div>\n <div class=\"h-bar-track\">\n <div class=\"h-bar-fill\" [style.width.%]=\"source.Percentage\" [style.background]=\"source.Color\">{{ source.AvgTagsPerItem }}</div>\n </div>\n </div>\n }\n @if (SourcePerfData.length === 0) {\n <div class=\"widget-empty\">No source data</div>\n }\n </div>\n <div class=\"widget-footnote\">Average tags per item</div>\n </div>\n\n <!-- Card 5: Daily Throughput -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('dailyThroughput')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bolt\"></i> Daily Throughput</div>\n <div class=\"throughput-bars\">\n @for (day of ThroughputData; track day.Label) {\n <div class=\"tp-bar\"\n [style.height.%]=\"day.Percentage\"\n [style.background]=\"day.IsError ? 'var(--mj-status-error)' : 'var(--mj-status-success)'\"\n >\n <span class=\"tp-bar-label\">{{ day.Label }}</span>\n </div>\n }\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-success)\"></div> Success</div>\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-error)\"></div> Failures</div>\n </div>\n </div>\n\n <!-- Card 6: Taxonomy Health -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('taxonomyHealth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-sitemap\"></i> Taxonomy Health</div>\n <div class=\"taxonomy-ring-container\">\n <svg width=\"140\" height=\"140\" viewBox=\"0 0 140 140\">\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"18\"/>\n @for (seg of TaxonomyRingSegments; track TrackByIndex($index)) {\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\"\n [attr.stroke]=\"seg.Color\" stroke-width=\"18\"\n [attr.stroke-dasharray]=\"seg.StrokeDash\"\n [attr.stroke-dashoffset]=\"seg.StrokeOffset\"\n transform=\"rotate(-90 70 70)\"/>\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" font-size=\"22\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ TaxonomyTotal }}</text>\n <text x=\"70\" y=\"82\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">total tags</text>\n </svg>\n </div>\n <div class=\"taxonomy-stats\">\n @for (stat of TaxonomyStats; track stat.Label) {\n <div class=\"tax-stat\" [style.background]=\"stat.BgColor\" [style.color]=\"stat.Color\">\n {{ stat.Count }}<small>{{ stat.Label }}</small>\n </div>\n }\n </div>\n </div>\n\n </div><!-- /cards-grid -->\n\n <!-- Widget Drill-Down -->\n @if (DrillDownTarget && !DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> {{ DrillDownTarget }} Detail</span>\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 2: TAGS -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'tags') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-tags\"></i>\n <h1>Tags</h1>\n </div>\n\n <!-- Top 20 Tags Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-trophy\"></i> Top 20 Tags</h3>\n @if (TopTags.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('top-tags')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n </div>\n @if (TopTags.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag Name</th>\n <th class=\"num\">Usage Count</th>\n <th>Avg Weight</th>\n <th>Trend</th>\n <th>Top Entity</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of TopTags; track tag.Name) {\n <tr style=\"cursor:pointer\" (click)=\"OpenDrillDown('tag-row:' + tag.Name)\">\n <td>{{ tag.Rank }}</td>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ FormatNumber(tag.UsageCount) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"tag.WeightBarWidth\" [style.background]=\"tag.WeightBarColor\"></span>\n {{ tag.AvgWeight }}\n </td>\n <td>\n <svg width=\"48\" height=\"16\">\n <polyline [attr.points]=\"tag.TrendPoints\" fill=\"none\" [attr.stroke]=\"tag.TrendColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </td>\n <td>{{ tag.TopEntity }}</td>\n <td class=\"muted\">{{ tag.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags\"></i>\n <p>No tag data available yet. Process content to generate tags.</p>\n </div>\n }\n </div>\n\n <!-- D10: Tags tab drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('tag-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Content Items Tagged \"{{ DrillDownTarget.replace('tag-row:', '') }}\"</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items found for this tag</div>\n }\n </div>\n }\n\n <!-- Tag Distribution by Entity -->\n @if (EntityDistribution.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Tag Distribution by Entity</h3>\n <div class=\"stacked-bar-chart\">\n @for (row of EntityDistribution; track row.EntityName) {\n <div class=\"stacked-row\">\n <div class=\"stacked-label\">{{ row.EntityName }}</div>\n <div class=\"stacked-track\">\n @for (seg of row.Segments; track TrackByIndex($index)) {\n <div class=\"stacked-seg\" [style.width.%]=\"seg.Percentage\" [style.background]=\"seg.Color\" [title]=\"seg.Label + ': ' + seg.Percentage + '%'\">{{ seg.Label }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"margin-top:12px\">\n @for (item of DistributionLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n }\n\n <!-- Tag Depth Distribution -->\n @if (TagDepthBars.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-layer-group\"></i> Tag Depth Distribution</h3>\n <div class=\"v-bar-chart\">\n @for (bar of TagDepthBars; track bar.Label) {\n <div class=\"v-bar-col\">\n <div class=\"v-bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.min-height.px]=\"bar.Count > 0 ? 24 : 0\">{{ bar.Count }}</div>\n <div class=\"v-bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n <div class=\"chart-footnote\">\n Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure\n </div>\n </div>\n }\n\n <!-- Frequently Paired Tags (Co-Occurrence) -->\n <div class=\"sub-section co-occurrence-section\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-link\"></i> Frequently Paired Tags</h3>\n <div class=\"co-occurrence-actions\">\n @if (CoOccurrenceLastComputed) {\n <span class=\"co-occurrence-staleness\" title=\"Last computed timestamp\">\n <i class=\"fa-regular fa-clock\"></i>\n Last computed: {{ CoOccurrenceLastComputed }}\n </span>\n }\n <button class=\"drill-export-btn\" (click)=\"RecomputeCoOccurrence()\" [disabled]=\"IsRecomputingCoOccurrence\" title=\"Recompute co-occurrence data\">\n @if (IsRecomputingCoOccurrence) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Computing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Recompute\n }\n </button>\n </div>\n </div>\n @if (CoOccurrencePairs.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag A</th>\n <th>Tag B</th>\n <th class=\"num\">Co-Occurrences</th>\n <th>Frequency</th>\n </tr>\n </thead>\n <tbody>\n @for (pair of CoOccurrencePairs; track pair.TagAName + pair.TagBName; let i = $index) {\n <tr>\n <td class=\"muted\">{{ i + 1 }}</td>\n <td><strong>{{ pair.TagAName }}</strong></td>\n <td><strong>{{ pair.TagBName }}</strong></td>\n <td class=\"num\">{{ FormatNumber(pair.Count) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"pair.BarWidth\" style=\"background: var(--mj-status-info)\"></span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.</p>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 3: SOURCES -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'sources') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-database\"></i>\n <h1>Sources</h1>\n </div>\n\n <!-- Source Comparison Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-table\"></i> Source Comparison</h3>\n @if (SourceComparison.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Source Name</th>\n <th>Type</th>\n <th class=\"num\">Items</th>\n <th class=\"num\">Tags Generated</th>\n <th class=\"num\">Avg Tags/Item</th>\n <th class=\"num\">Avg Weight</th>\n <th>Last Run</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (source of SourceComparison; track source.Name) {\n <tr (click)=\"SelectSource(source.Name); OpenDrillDown('source-row:' + source.Name)\" style=\"cursor:pointer\" [class.source-selected]=\"SelectedSourceName === source.Name\">\n <td><strong>{{ source.Name }}</strong></td>\n <td><i [class]=\"source.TypeIcon\" [style.color]=\"source.TypeColor\" style=\"margin-right:4px\"></i> {{ source.Type }}</td>\n <td class=\"num\">{{ FormatNumber(source.Items) }}</td>\n <td class=\"num\">{{ FormatNumber(source.TagsGenerated) }}</td>\n <td class=\"num\">{{ source.AvgTagsPerItem }}</td>\n <td class=\"num\">{{ source.AvgWeight }}</td>\n <td class=\"muted\">{{ source.LastRun }}</td>\n <td><span class=\"badge\" [class]=\"source.StatusClass\"><i class=\"fa-solid fa-circle\" style=\"font-size:6px;margin-right:3px\"></i> {{ source.Status }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No content sources configured yet.</p>\n </div>\n }\n </div>\n\n <!-- D10: Sources tab drill-down (recent runs) -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('source-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Recent Runs: {{ DrillDownTarget.replace('source-row:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No run data for this source</div>\n }\n </div>\n }\n\n <!-- Per-Source Detail -->\n @if (SelectedSourceName && SourceComparison.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-area\"></i> Source Detail: {{ SelectedSourceName }}</h3>\n <div class=\"two-col\">\n <!-- Items Processed Over Time -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-bar\"></i> Items Processed (Last 8 Weeks)</div>\n <div class=\"bar-chart\" style=\"height:100px\">\n @for (bar of SourceWeeklyBars; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\" style=\"font-size:9px\">{{ bar.Value }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Tag Quality Distribution -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-star-half-stroke\"></i> Tag Quality Distribution</div>\n <div class=\"quality-bands\">\n @for (band of SourceQualityBands; track band.Label) {\n <div class=\"quality-band-row\">\n <span class=\"quality-band-label\">{{ band.Label }}</span>\n <div class=\"quality-band-track\">\n <div class=\"quality-band-fill\" [style.width.%]=\"band.Percentage\" [style.background]=\"band.Color\">{{ band.Percentage }}%</div>\n </div>\n </div>\n }\n </div>\n <div class=\"source-quality-note\">\n <i class=\"fa-solid fa-circle-info\" style=\"color:var(--mj-status-info);margin-right:4px\"></i>\n {{ SourceQualityNote }}\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Source Health -->\n @if (SourceHealthCards.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-heart-pulse\"></i> Source Health Summary</h3>\n <div class=\"source-health-grid\" [style.grid-template-columns]=\"'repeat(' + SourceHealthCards.length + ', 1fr)'\">\n @for (card of SourceHealthCards; track card.Name) {\n <div class=\"source-health-card\" [style.border-top-color]=\"card.Color\">\n <div class=\"health-card-name\">{{ card.Name }}</div>\n <div class=\"health-card-value\" [style.color]=\"card.Color\">{{ card.Uptime }}%</div>\n <div class=\"health-card-label\">uptime</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 4: PIPELINE -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'pipeline') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <h1>Pipeline</h1>\n </div>\n\n <!-- Pipeline Throughput Chart -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Pipeline Throughput (Last 30 Days)</h3>\n <div class=\"widget-card\">\n <div class=\"pipeline-throughput-bars\">\n @for (bar of PipelineThroughputBars; track TrackByIndex($index)) {\n <div class=\"pipeline-bar\"\n [style.height.%]=\"bar.Percentage\"\n [style.background]=\"bar.IsError ? 'var(--mj-status-error)' : 'var(--mj-brand-primary)'\"\n [style.opacity]=\"bar.IsError ? 0.7 : (0.6 + bar.Percentage / 300)\"\n style=\"cursor:pointer\"\n (click)=\"OpenDrillDown('pipeline-throughput:' + $index)\"\n ></div>\n }\n </div>\n <div class=\"pipeline-date-labels\">\n @for (label of PipelineDateLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Pipeline throughput drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('pipeline-throughput:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Runs for Selected Day</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No runs for this day</div>\n }\n </div>\n }\n\n <!-- Processing Time Breakdown -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-stopwatch\"></i> Processing Time Breakdown (Avg per Item)</h3>\n <div class=\"widget-card\">\n <div class=\"stage-bars\">\n @for (stage of ProcessingStages; track stage.Name) {\n <div class=\"stage-row\">\n <div class=\"stage-name\">{{ stage.Name }}</div>\n <div class=\"stage-track\">\n <div class=\"stage-fill\" [style.width.%]=\"stage.Percentage\" [style.background]=\"stage.Color\">\n @if (stage.Percentage > 15) {\n {{ stage.Time }}s\n }\n </div>\n </div>\n <div class=\"stage-time\">{{ stage.Time }}s</div>\n </div>\n }\n </div>\n <div class=\"stage-summary\">\n <span><strong>Total avg:</strong> {{ TotalAvgProcessingTime }}s per item</span>\n @if (BottleneckStage) {\n <span class=\"stage-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:var(--mj-status-warning);margin-right:4px\"></i>\n {{ BottleneckStage }} stage is the bottleneck ({{ BottleneckPercent }}% of total time)\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- Success Rate -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Success Rate Overview</h3>\n <div class=\"widget-card\">\n <div class=\"success-rate-display\">\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-success)\">\n {{ rawProcessRuns.length > 0 ? (100 - (ErrorLog.length / rawProcessRuns.length * 100)).toFixed(1) : '100' }}%\n </div>\n <div class=\"success-rate-label\">Success Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-error)\">\n {{ rawProcessRuns.length > 0 ? (ErrorLog.length / rawProcessRuns.length * 100).toFixed(1) : '0' }}%\n </div>\n <div class=\"success-rate-label\">Failure Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-text-primary)\">\n {{ FormatNumber(rawProcessRuns.length) }}\n </div>\n <div class=\"success-rate-label\">Total Runs</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Active Runs Table -->\n @if (ActiveRuns.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-spinner\"></i> Active Runs</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th>Started</th>\n <th>Progress</th>\n <th>Stage</th>\n <th class=\"num\">Items</th>\n </tr>\n </thead>\n <tbody>\n @for (run of ActiveRuns; track run.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ run.RunID }}</td>\n <td>{{ run.Source }}</td>\n <td class=\"muted\">{{ run.Started }}</td>\n <td>\n <div class=\"progress-track\"><div class=\"progress-fill\" [style.width.%]=\"run.Progress\" style=\"background:var(--mj-brand-primary)\"></div></div>\n <span class=\"progress-text\">{{ run.Progress }}%</span>\n </td>\n <td><span class=\"badge\" [class]=\"run.StageClass\">{{ run.Stage }}</span></td>\n <td class=\"num\">{{ FormatNumber(run.Items) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Error Log -->\n @if (ErrorLog.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> Recent Errors</h3>\n <div class=\"error-log\">\n @for (entry of ErrorLog; track TrackByIndex($index)) {\n <div class=\"error-entry\">\n <div class=\"error-time\">{{ entry.Time }}</div>\n <div class=\"error-source\">{{ entry.Source }}</div>\n <div class=\"error-msg\">{{ entry.Message }}</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 5: QUALITY -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'quality') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <h1>Quality</h1>\n </div>\n\n <!-- Confidence Distribution Histogram -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-column\"></i> Confidence Distribution</h3>\n <div class=\"widget-card\">\n <div class=\"histogram\">\n @for (bin of ConfidenceHistogram; track bin.Label) {\n <div class=\"hist-bar-col\" style=\"cursor:pointer\" (click)=\"OpenDrillDown('quality-bin:' + bin.Label)\">\n <div class=\"hist-bar\" [style.height.%]=\"bin.Percentage\" [style.background]=\"bin.Color\">\n @if (bin.Count > 0) { {{ bin.Count }} }\n </div>\n <div class=\"hist-label\">{{ bin.Label }}</div>\n </div>\n }\n </div>\n <div class=\"confidence-stats\">\n @for (stat of ConfidenceStats; track stat.Label) {\n <span><strong>{{ stat.Label }}:</strong> {{ stat.Value }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Quality bin drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('quality-bin:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Items in Confidence Range {{ DrillDownTarget.replace('quality-bin:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items in this confidence range</div>\n }\n </div>\n }\n\n <!-- Weight Distribution by Entity -->\n @if (WeightByEntity.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-weight-scale\"></i> Weight Distribution by Entity</h3>\n <div class=\"widget-card\">\n <div class=\"grouped-bar-chart\">\n @for (entity of WeightByEntity; track entity.Name) {\n <div class=\"grouped-col\">\n <div class=\"grouped-bars\">\n <div class=\"g-bar\" [style.height.%]=\"entity.High\" style=\"background:var(--mj-brand-primary)\" [title]=\"'High: ' + entity.High + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Med\" style=\"background:var(--mj-status-info)\" [title]=\"'Med: ' + entity.Med + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Low\" style=\"background:var(--mj-text-muted)\" [title]=\"'Low: ' + entity.Low + '%'\"></div>\n </div>\n <div class=\"grouped-label\">{{ entity.Name }}</div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"justify-content:center;margin-top:14px\">\n @for (item of WeightLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Tag Accuracy Over Time -->\n @if (AccuracyLinePoints) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Tag Accuracy Over Time (Weekly Avg Confidence)</h3>\n <div class=\"widget-card\">\n <div class=\"accuracy-chart\">\n <div class=\"accuracy-y-labels\">\n <div>1.0</div>\n <div>0.75</div>\n <div>0.50</div>\n <div>0.25</div>\n </div>\n <div class=\"accuracy-area\">\n <div class=\"accuracy-grid-line\" style=\"top:33%\"></div>\n <div class=\"accuracy-grid-line\" style=\"top:66%\"></div>\n <svg width=\"100%\" height=\"110\" viewBox=\"0 0 400 110\" preserveAspectRatio=\"none\" class=\"accuracy-svg\">\n <polyline [attr.points]=\"AccuracyLinePoints\"\n fill=\"none\" stroke=\"var(--mj-brand-primary)\" stroke-width=\"2.5\" vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n @for (dot of AccuracyDots; track TrackByIndex($index)) {\n <circle [attr.cx]=\"dot.Cx\" [attr.cy]=\"dot.Cy\" r=\"3\" fill=\"var(--mj-brand-primary)\"/>\n }\n </svg>\n </div>\n </div>\n <div class=\"accuracy-x-labels\">\n @for (label of AccuracyMonthLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n <div class=\"accuracy-trend-text\">\n <i class=\"fa-solid fa-arrow-trend-up\" style=\"margin-right:4px\"></i>\n {{ AccuracyTrendText }}\n </div>\n </div>\n </div>\n }\n\n <!-- Low-Confidence Tags Table -->\n @if (LowConfidenceTags.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-exclamation-triangle\"></i> Low-Confidence Tags (Avg Weight &lt; 0.4)</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Tag Name</th>\n <th class=\"num\">Avg Weight</th>\n <th class=\"num\">Usage Count</th>\n <th>Top Entity</th>\n <th>Suggested Action</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of LowConfidenceTags; track tag.Name) {\n <tr>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ tag.AvgWeight }}</td>\n <td class=\"num\">{{ tag.UsageCount }}</td>\n <td>{{ tag.TopEntity }}</td>\n <td><span class=\"badge\" [class]=\"tag.ActionClass\">{{ tag.SuggestedAction }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Model Performance Comparison -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-robot\"></i> Model Performance Comparison</h3>\n <div class=\"model-grid\">\n @for (model of ModelComparisons; track model.Name) {\n <div class=\"model-card\">\n <div class=\"model-name\"><i [class]=\"model.Icon\" [style.color]=\"model.IconColor\" style=\"margin-right:4px\"></i> {{ model.Name }}</div>\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" style=\"margin:4px 0\">\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"8\"/>\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" [attr.stroke]=\"model.ScoreColor\" stroke-width=\"8\"\n [attr.stroke-dasharray]=\"model.StrokeDash\" stroke-dashoffset=\"50\"\n transform=\"rotate(-90 40 40)\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"model-score\" [style.color]=\"model.ScoreColor\">{{ model.ScorePercentage }}%</div>\n <div class=\"model-detail\">Avg confidence: {{ model.AvgConfidence }}</div>\n <div class=\"model-detail\">{{ FormatNumber(model.TagsGenerated) }} tags generated</div>\n <div class=\"model-detail\" [style.color]=\"model.RoleColor\" style=\"font-weight:600\">{{ model.Role }}</div>\n </div>\n }\n </div>\n @if (ModelRecommendation) {\n <div class=\"model-recommendation\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color:var(--mj-status-warning)\"></i>\n <div>\n <strong>Recommendation:</strong> {{ ModelRecommendation }}\n </div>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 6: COST & USAGE (D1) -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'cost') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h1>Cost & Usage</h1>\n <div class=\"tab-header-actions\">\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('cost-usage')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n <button class=\"drill-export-btn\" (click)=\"PrintCurrentTab()\" title=\"Print (PDF alternative)\">\n <i class=\"fa-solid fa-print\"></i> Print\n </button>\n </div>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n </div>\n\n <!-- KPI Cards -->\n @if (CostKPIs.length > 0) {\n <div class=\"cost-kpi-row\">\n @for (kpi of CostKPIs; track kpi.Label) {\n <div class=\"cost-kpi-card\">\n <div class=\"cost-kpi-icon\"><i [class]=\"kpi.Icon\"></i></div>\n <div>\n <div class=\"cost-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"cost-kpi-label\">{{ kpi.Label }}</div>\n <div class=\"cost-kpi-sub\">{{ kpi.SubLabel }}</div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Per-Run Cost Table -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-table\"></i> Cost Breakdown by Run</h3>\n @if (CostPerRunRows.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th class=\"num\">Tokens</th>\n <th class=\"num\">Cost</th>\n <th>Started</th>\n </tr>\n </thead>\n <tbody>\n @for (row of CostPerRunRows; track row.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ row.RunID }}</td>\n <td>{{ row.Source }}</td>\n <td class=\"num\">{{ FormatNumber(row.Tokens) }}</td>\n <td class=\"num\">{{ row.Cost > 0 ? '$' + row.Cost.toFixed(4) : '$0.00' }}</td>\n <td class=\"muted\">{{ row.Started }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-coins\"></i>\n <p>No cost data available yet. Run the pipeline to generate cost and token usage metrics.</p>\n <p class=\"empty-state-hint\">Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.</p>\n </div>\n }\n </div>\n </section>\n }\n\n </div><!-- /main-content -->\n </div><!-- /analytics-layout -->\n}\n", styles: ["/* ===================================================================\n Analytics & Insights Resource Component\n ================================================================= */\n\n.analytics-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.analytics-layout {\n display: flex;\n height: 100%;\n min-height: 600px;\n}\n\n/* ===== LEFT SIDEBAR ===== */\n.analytics-sidebar {\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 overflow-y: auto;\n}\n\n.sidebar-header {\n padding: 20px 16px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.sidebar-header h2 {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n}\n\n.sidebar-header h2 i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.sidebar-nav {\n padding: 8px 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n border-left: 3px solid transparent;\n transition: all 0.15s ease;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n\n.nav-item:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.nav-item.active {\n border-left-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n font-weight: 600;\n}\n\n.nav-item i {\n width: 16px;\n text-align: center;\n font-size: 13px;\n}\n\n.sidebar-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 8px 16px;\n}\n\n.trending-section {\n padding: 12px 16px 16px;\n}\n\n.trending-section h3 {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud span {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud span:hover {\n opacity: 0.7;\n}\n\n.no-trending {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error {\n background: var(--mj-status-error);\n}\n\n/* ===== MAIN CONTENT ===== */\n.main-content {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header i {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header h1 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ===== FILTER BAR ===== */\n.filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip:last-child {\n border-right: none;\n}\n\n.date-chip:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n/* ===== KPI CARDS ===== */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n/* ===== CARDS GRID ===== */\n.cards-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n/* ===== BAR CHART ===== */\n.bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n/* ===== PROGRESS RINGS ===== */\n.rings-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* ===== GAUGE ===== */\n.gauge-container {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n/* ===== MINI HISTOGRAM ===== */\n.mini-histogram {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== HORIZONTAL BARS ===== */\n.h-bar-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n/* ===== THROUGHPUT BARS ===== */\n.throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* ===== TAXONOMY ===== */\n.taxonomy-ring-container {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat small {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n/* ===== LEGEND ===== */\n.legend {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n/* ===== DATA TABLES ===== */\n.table-scroll {\n overflow-x: auto;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table thead th {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table .num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n/* ===== BADGES ===== */\n.badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n/* ===== SUB-SECTIONS ===== */\n.sub-section {\n margin-top: 24px;\n}\n\n.sub-section h3 {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section h3 i {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n/* ===== EMPTY STATE ===== */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n/* ===== DRILL-DOWN PANEL ===== */\n.drill-down-panel {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header h3 {\n margin: 0;\n}\n\n.drill-down-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n/* ===== STACKED BAR CHART ===== */\n.stacked-bar-chart {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n/* ===== VERTICAL BAR CHART ===== */\n.v-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n/* ===== TWO COLUMN ===== */\n.two-col {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n/* ===== SOURCE SELECTED ===== */\n.source-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n/* ===== QUALITY BANDS ===== */\n.quality-bands {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* ===== SOURCE HEALTH ===== */\n.source-health-grid {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PIPELINE ===== */\n.pipeline-throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PROCESSING STAGES ===== */\n.stage-bars {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning {\n color: var(--mj-text-muted);\n}\n\n/* ===== SUCCESS RATE ===== */\n.success-rate-display {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat {\n text-align: center;\n}\n\n.success-rate-value {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== PROGRESS ===== */\n.progress-track {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text {\n font-size: 11px;\n font-weight: 600;\n}\n\n/* ===== ERROR LOG ===== */\n.error-log {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg {\n color: var(--mj-text-secondary);\n}\n\n/* ===== HISTOGRAM ===== */\n.histogram {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* ===== GROUPED BAR CHART ===== */\n.grouped-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n/* ===== ACCURACY CHART ===== */\n.accuracy-chart {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n/* ===== MODEL COMPARISON ===== */\n.model-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n/* ===== RESPONSIVE ===== */\n@media (max-width: 1200px) {\n .cards-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout {\n flex-direction: column;\n }\n\n .analytics-sidebar {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section,\n .sidebar-divider {\n display: none;\n }\n\n .tab-section {\n padding: 16px;\n }\n\n .cards-grid {\n grid-template-columns: 1fr;\n }\n\n .kpi-row {\n grid-template-columns: 1fr;\n }\n\n .two-col {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* ===== COST & USAGE TAB (D1) ===== */\n\n.tab-header-actions {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== D5: PRINT STYLES ===== */\n\n@media print {\n .analytics-sidebar,\n .filter-bar,\n .tab-header-actions,\n .drill-down-close,\n .drill-export-btn,\n .drill-open-btn {\n display: none !important;\n }\n\n .analytics-layout {\n display: block;\n }\n\n .main-content {\n padding: 0;\n }\n\n .tab-section {\n padding: 0;\n }\n\n .widget-card,\n .cost-kpi-card,\n .kpi-card {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table {\n font-size: 10px;\n }\n}\n\n/* \u2500\u2500 Co-Occurrence Section \u2500\u2500 */\n\n/* Constrain the co-occurrence sub-section so an empty state or large table\n does not blow out the page height and render the app unusable. */\n.co-occurrence-section {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section .table-scroll {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section .empty-state {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n"] }]
4259
+ args: [{ standalone: false, selector: 'app-analytics-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Knowledge Hub Analytics\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Pipeline health, trending tags, and content insights\">\n <div meta>\n <mj-stat-badge\n [Label]=\"PipelineStatusText\"\n [Variant]=\"PipelineStatusOk ? 'success' : 'error'\">\n </mj-stat-badge>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n@if (IsLoading) {\n <div class=\"analytics-loading\">\n <mj-loading text=\"Loading analytics data...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"analytics-layout\">\n <!-- =============== LEFT SIDEBAR =============== -->\n <aside class=\"analytics-sidebar\">\n <nav class=\"sidebar-nav\">\n @for (nav of NavItems; track nav.ID) {\n <button\n class=\"nav-item\"\n [class.active]=\"ActiveTab === nav.ID\"\n (click)=\"SelectTab(nav.ID)\"\n >\n <i [class]=\"nav.Icon\"></i> {{ nav.Label }}\n </button>\n }\n </nav>\n\n <div class=\"sidebar-divider\"></div>\n\n <!-- Trending Tags Cloud -->\n <div class=\"trending-section\">\n <h3><i class=\"fa-solid fa-arrow-trend-up\"></i> Trending Tags</h3>\n <div class=\"tag-cloud\">\n @for (tag of TrendingTags; track tag.Name) {\n <span [style.font-size.px]=\"tag.Size\" [style.font-weight]=\"tag.Weight\">{{ tag.Name }}</span>\n }\n @if (TrendingTags.length === 0) {\n <span class=\"no-trending\">No trending tags yet</span>\n }\n </div>\n </div>\n\n </aside>\n\n <!-- =============== MAIN CONTENT =============== -->\n <div class=\"main-content\">\n\n <!-- ====================================================== -->\n <!-- TAB 1: OVERVIEW -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'overview') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-grip\"></i>\n <h1>Overview</h1>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n <select class=\"filter-dropdown\" [ngModel]=\"EntityFilter\" (ngModelChange)=\"SetEntityFilter($event)\">\n @for (opt of EntityFilterOptions; track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n @for (kpi of KPIs; track kpi.Label) {\n <div class=\"kpi-card\" (click)=\"OpenDrillDown(kpi.DrillDownKey)\">\n <div>\n <div class=\"kpi-label\">{{ kpi.Label }}</div>\n <div class=\"kpi-value\">{{ kpi.Value }}</div>\n <div class=\"kpi-delta\" [class.up]=\"kpi.DeltaDirection === 'up'\" [class.down]=\"kpi.DeltaDirection === 'down'\">\n @if (kpi.DeltaDirection === 'up') {\n <i class=\"fa-solid fa-arrow-up\" style=\"font-size:9px\"></i>\n } @else if (kpi.DeltaDirection === 'down') {\n <i class=\"fa-solid fa-arrow-down\" style=\"font-size:9px\"></i>\n }\n {{ kpi.Delta }}\n </div>\n </div>\n <div class=\"kpi-sparkline\">\n <svg width=\"64\" height=\"28\" viewBox=\"0 0 64 28\">\n <polyline [attr.points]=\"kpi.SparklinePoints\" fill=\"none\" [attr.stroke]=\"kpi.SparklineColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n }\n </div>\n\n <!-- KPI Drill-Down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Detail View</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n\n <!-- Widget Cards Grid (2x3) -->\n <div class=\"cards-grid\">\n\n <!-- Card 1: Tag Growth -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('tagGrowth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-line\"></i> Tag Growth</div>\n <div class=\"bar-chart\">\n @for (bar of TagGrowthData; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\">{{ bar.Count }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Card 2: Content Coverage -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('contentCoverage')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bullseye\"></i> Content Coverage</div>\n <div class=\"rings-grid\">\n @for (entity of CoverageData; track entity.Name) {\n <div class=\"ring-item\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"5\"/>\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" [attr.stroke]=\"entity.Color\" stroke-width=\"5\"\n [attr.stroke-dasharray]=\"entity.StrokeDash\" stroke-dashoffset=\"31.4\" stroke-linecap=\"round\"\n transform=\"rotate(-90 24 24)\"/>\n <text x=\"24\" y=\"26\" text-anchor=\"middle\" font-size=\"11\" font-weight=\"700\" fill=\"var(--mj-text-primary)\">{{ entity.Percentage }}%</text>\n </svg>\n <div>\n <div class=\"ring-label\">{{ entity.Name }}</div>\n <div class=\"ring-stat\">{{ FormatNumber(entity.Tagged) }} / {{ FormatNumber(entity.Total) }}</div>\n </div>\n </div>\n }\n @if (CoverageData.length === 0) {\n <div class=\"widget-empty\">No content types found</div>\n }\n </div>\n </div>\n\n <!-- Card 3: Quality Score Gauge -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('qualityScore')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-gauge-high\"></i> Quality Score</div>\n <div class=\"gauge-container\">\n <svg width=\"180\" height=\"110\" viewBox=\"0 0 180 110\">\n <!-- Background arc -->\n <path d=\"M 20 95 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- Zone arcs -->\n <path d=\"M 20 95 A 70 70 0 0 1 48.6 35.2\" fill=\"none\" stroke=\"var(--mj-status-error)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <path d=\"M 48.6 35.2 A 70 70 0 0 1 118 28\" fill=\"none\" stroke=\"var(--mj-status-warning)\" stroke-width=\"14\" opacity=\"0.3\"/>\n <path d=\"M 118 28 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-status-success)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <!-- Score text -->\n <text x=\"90\" y=\"88\" text-anchor=\"middle\" font-size=\"26\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ QualityScore }}</text>\n <text x=\"90\" y=\"105\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">out of 100</text>\n <text x=\"28\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">0</text>\n <text x=\"86\" y=\"18\" font-size=\"8\" fill=\"var(--mj-text-muted)\">50</text>\n <text x=\"155\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">100</text>\n </svg>\n </div>\n <!-- Mini confidence histogram -->\n <div class=\"mini-histogram\">\n @for (bin of MiniConfidenceBins; track TrackByIndex($index)) {\n <div class=\"mini-hist-bar\" [style.height.px]=\"bin.Height\" [style.background]=\"bin.Color\" [title]=\"bin.Title\"></div>\n }\n </div>\n <div class=\"mini-hist-label\">Confidence Distribution</div>\n </div>\n\n <!-- Card 4: Source Performance -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('sourcePerformance')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-ranking-star\"></i> Source Performance</div>\n <div class=\"h-bar-list\">\n @for (source of SourcePerfData; track source.Name) {\n <div class=\"h-bar-row\">\n <div class=\"h-bar-name\">{{ source.Name }}</div>\n <div class=\"h-bar-track\">\n <div class=\"h-bar-fill\" [style.width.%]=\"source.Percentage\" [style.background]=\"source.Color\">{{ source.AvgTagsPerItem }}</div>\n </div>\n </div>\n }\n @if (SourcePerfData.length === 0) {\n <div class=\"widget-empty\">No source data</div>\n }\n </div>\n <div class=\"widget-footnote\">Average tags per item</div>\n </div>\n\n <!-- Card 5: Daily Throughput -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('dailyThroughput')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bolt\"></i> Daily Throughput</div>\n <div class=\"throughput-bars\">\n @for (day of ThroughputData; track day.Label) {\n <div class=\"tp-bar\"\n [style.height.%]=\"day.Percentage\"\n [style.background]=\"day.IsError ? 'var(--mj-status-error)' : 'var(--mj-status-success)'\"\n >\n <span class=\"tp-bar-label\">{{ day.Label }}</span>\n </div>\n }\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-success)\"></div> Success</div>\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-error)\"></div> Failures</div>\n </div>\n </div>\n\n <!-- Card 6: Taxonomy Health -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('taxonomyHealth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-sitemap\"></i> Taxonomy Health</div>\n <div class=\"taxonomy-ring-container\">\n <svg width=\"140\" height=\"140\" viewBox=\"0 0 140 140\">\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"18\"/>\n @for (seg of TaxonomyRingSegments; track TrackByIndex($index)) {\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\"\n [attr.stroke]=\"seg.Color\" stroke-width=\"18\"\n [attr.stroke-dasharray]=\"seg.StrokeDash\"\n [attr.stroke-dashoffset]=\"seg.StrokeOffset\"\n transform=\"rotate(-90 70 70)\"/>\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" font-size=\"22\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ TaxonomyTotal }}</text>\n <text x=\"70\" y=\"82\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">total tags</text>\n </svg>\n </div>\n <div class=\"taxonomy-stats\">\n @for (stat of TaxonomyStats; track stat.Label) {\n <div class=\"tax-stat\" [style.background]=\"stat.BgColor\" [style.color]=\"stat.Color\">\n {{ stat.Count }}<small>{{ stat.Label }}</small>\n </div>\n }\n </div>\n </div>\n\n </div><!-- /cards-grid -->\n\n <!-- Widget Drill-Down -->\n @if (DrillDownTarget && !DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> {{ DrillDownTarget }} Detail</span>\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 2: TAGS -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'tags') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-tags\"></i>\n <h1>Tags</h1>\n </div>\n\n <!-- Top 20 Tags Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-trophy\"></i> Top 20 Tags</h3>\n @if (TopTags.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('top-tags')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n </div>\n @if (TopTags.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag Name</th>\n <th class=\"num\">Usage Count</th>\n <th>Avg Weight</th>\n <th>Trend</th>\n <th>Top Entity</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of TopTags; track tag.Name) {\n <tr style=\"cursor:pointer\" (click)=\"OpenDrillDown('tag-row:' + tag.Name)\">\n <td>{{ tag.Rank }}</td>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ FormatNumber(tag.UsageCount) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"tag.WeightBarWidth\" [style.background]=\"tag.WeightBarColor\"></span>\n {{ tag.AvgWeight }}\n </td>\n <td>\n <svg width=\"48\" height=\"16\">\n <polyline [attr.points]=\"tag.TrendPoints\" fill=\"none\" [attr.stroke]=\"tag.TrendColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </td>\n <td>{{ tag.TopEntity }}</td>\n <td class=\"muted\">{{ tag.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags\"></i>\n <p>No tag data available yet. Process content to generate tags.</p>\n </div>\n }\n </div>\n\n <!-- D10: Tags tab drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('tag-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Content Items Tagged \"{{ DrillDownTarget.replace('tag-row:', '') }}\"</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items found for this tag</div>\n }\n </div>\n }\n\n <!-- Tag Distribution by Entity -->\n @if (EntityDistribution.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Tag Distribution by Entity</h3>\n <div class=\"stacked-bar-chart\">\n @for (row of EntityDistribution; track row.EntityName) {\n <div class=\"stacked-row\">\n <div class=\"stacked-label\">{{ row.EntityName }}</div>\n <div class=\"stacked-track\">\n @for (seg of row.Segments; track TrackByIndex($index)) {\n <div class=\"stacked-seg\" [style.width.%]=\"seg.Percentage\" [style.background]=\"seg.Color\" [title]=\"seg.Label + ': ' + seg.Percentage + '%'\">{{ seg.Label }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"margin-top:12px\">\n @for (item of DistributionLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n }\n\n <!-- Tag Depth Distribution -->\n @if (TagDepthBars.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-layer-group\"></i> Tag Depth Distribution</h3>\n <div class=\"v-bar-chart\">\n @for (bar of TagDepthBars; track bar.Label) {\n <div class=\"v-bar-col\">\n <div class=\"v-bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.min-height.px]=\"bar.Count > 0 ? 24 : 0\">{{ bar.Count }}</div>\n <div class=\"v-bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n <div class=\"chart-footnote\">\n Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure\n </div>\n </div>\n }\n\n <!-- Frequently Paired Tags (Co-Occurrence) -->\n <div class=\"sub-section co-occurrence-section\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-link\"></i> Frequently Paired Tags</h3>\n <div class=\"co-occurrence-actions\">\n @if (CoOccurrenceLastComputed) {\n <span class=\"co-occurrence-staleness\" title=\"Last computed timestamp\">\n <i class=\"fa-regular fa-clock\"></i>\n Last computed: {{ CoOccurrenceLastComputed }}\n </span>\n }\n <button class=\"drill-export-btn\" (click)=\"RecomputeCoOccurrence()\" [disabled]=\"IsRecomputingCoOccurrence\" title=\"Recompute co-occurrence data\">\n @if (IsRecomputingCoOccurrence) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Computing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Recompute\n }\n </button>\n </div>\n </div>\n @if (CoOccurrencePairs.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag A</th>\n <th>Tag B</th>\n <th class=\"num\">Co-Occurrences</th>\n <th>Frequency</th>\n </tr>\n </thead>\n <tbody>\n @for (pair of CoOccurrencePairs; track pair.TagAName + pair.TagBName; let i = $index) {\n <tr>\n <td class=\"muted\">{{ i + 1 }}</td>\n <td><strong>{{ pair.TagAName }}</strong></td>\n <td><strong>{{ pair.TagBName }}</strong></td>\n <td class=\"num\">{{ FormatNumber(pair.Count) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"pair.BarWidth\" style=\"background: var(--mj-status-info)\"></span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.</p>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 3: SOURCES -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'sources') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-database\"></i>\n <h1>Sources</h1>\n </div>\n\n <!-- Source Comparison Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-table\"></i> Source Comparison</h3>\n @if (SourceComparison.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Source Name</th>\n <th>Type</th>\n <th class=\"num\">Items</th>\n <th class=\"num\">Tags Generated</th>\n <th class=\"num\">Avg Tags/Item</th>\n <th class=\"num\">Avg Weight</th>\n <th>Last Run</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (source of SourceComparison; track source.Name) {\n <tr (click)=\"SelectSource(source.Name); OpenDrillDown('source-row:' + source.Name)\" style=\"cursor:pointer\" [class.source-selected]=\"SelectedSourceName === source.Name\">\n <td><strong>{{ source.Name }}</strong></td>\n <td><i [class]=\"source.TypeIcon\" [style.color]=\"source.TypeColor\" style=\"margin-right:4px\"></i> {{ source.Type }}</td>\n <td class=\"num\">{{ FormatNumber(source.Items) }}</td>\n <td class=\"num\">{{ FormatNumber(source.TagsGenerated) }}</td>\n <td class=\"num\">{{ source.AvgTagsPerItem }}</td>\n <td class=\"num\">{{ source.AvgWeight }}</td>\n <td class=\"muted\">{{ source.LastRun }}</td>\n <td><span class=\"badge\" [class]=\"source.StatusClass\"><i class=\"fa-solid fa-circle\" style=\"font-size:6px;margin-right:3px\"></i> {{ source.Status }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No content sources configured yet.</p>\n </div>\n }\n </div>\n\n <!-- D10: Sources tab drill-down (recent runs) -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('source-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Recent Runs: {{ DrillDownTarget.replace('source-row:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No run data for this source</div>\n }\n </div>\n }\n\n <!-- Per-Source Detail -->\n @if (SelectedSourceName && SourceComparison.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-area\"></i> Source Detail: {{ SelectedSourceName }}</h3>\n <div class=\"two-col\">\n <!-- Items Processed Over Time -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-bar\"></i> Items Processed (Last 8 Weeks)</div>\n <div class=\"bar-chart\" style=\"height:100px\">\n @for (bar of SourceWeeklyBars; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\" style=\"font-size:9px\">{{ bar.Value }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Tag Quality Distribution -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-star-half-stroke\"></i> Tag Quality Distribution</div>\n <div class=\"quality-bands\">\n @for (band of SourceQualityBands; track band.Label) {\n <div class=\"quality-band-row\">\n <span class=\"quality-band-label\">{{ band.Label }}</span>\n <div class=\"quality-band-track\">\n <div class=\"quality-band-fill\" [style.width.%]=\"band.Percentage\" [style.background]=\"band.Color\">{{ band.Percentage }}%</div>\n </div>\n </div>\n }\n </div>\n <div class=\"source-quality-note\">\n <i class=\"fa-solid fa-circle-info\" style=\"color:var(--mj-status-info);margin-right:4px\"></i>\n {{ SourceQualityNote }}\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Source Health -->\n @if (SourceHealthCards.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-heart-pulse\"></i> Source Health Summary</h3>\n <div class=\"source-health-grid\" [style.grid-template-columns]=\"'repeat(' + SourceHealthCards.length + ', 1fr)'\">\n @for (card of SourceHealthCards; track card.Name) {\n <div class=\"source-health-card\" [style.border-top-color]=\"card.Color\">\n <div class=\"health-card-name\">{{ card.Name }}</div>\n <div class=\"health-card-value\" [style.color]=\"card.Color\">{{ card.Uptime }}%</div>\n <div class=\"health-card-label\">uptime</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 4: PIPELINE -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'pipeline') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <h1>Pipeline</h1>\n </div>\n\n <!-- Pipeline Throughput Chart -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Pipeline Throughput (Last 30 Days)</h3>\n <div class=\"widget-card\">\n <div class=\"pipeline-throughput-bars\">\n @for (bar of PipelineThroughputBars; track TrackByIndex($index)) {\n <div class=\"pipeline-bar\"\n [style.height.%]=\"bar.Percentage\"\n [style.background]=\"bar.IsError ? 'var(--mj-status-error)' : 'var(--mj-brand-primary)'\"\n [style.opacity]=\"bar.IsError ? 0.7 : (0.6 + bar.Percentage / 300)\"\n style=\"cursor:pointer\"\n (click)=\"OpenDrillDown('pipeline-throughput:' + $index)\"\n ></div>\n }\n </div>\n <div class=\"pipeline-date-labels\">\n @for (label of PipelineDateLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Pipeline throughput drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('pipeline-throughput:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Runs for Selected Day</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No runs for this day</div>\n }\n </div>\n }\n\n <!-- Processing Time Breakdown -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-stopwatch\"></i> Processing Time Breakdown (Avg per Item)</h3>\n <div class=\"widget-card\">\n <div class=\"stage-bars\">\n @for (stage of ProcessingStages; track stage.Name) {\n <div class=\"stage-row\">\n <div class=\"stage-name\">{{ stage.Name }}</div>\n <div class=\"stage-track\">\n <div class=\"stage-fill\" [style.width.%]=\"stage.Percentage\" [style.background]=\"stage.Color\">\n @if (stage.Percentage > 15) {\n {{ stage.Time }}s\n }\n </div>\n </div>\n <div class=\"stage-time\">{{ stage.Time }}s</div>\n </div>\n }\n </div>\n <div class=\"stage-summary\">\n <span><strong>Total avg:</strong> {{ TotalAvgProcessingTime }}s per item</span>\n @if (BottleneckStage) {\n <span class=\"stage-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:var(--mj-status-warning);margin-right:4px\"></i>\n {{ BottleneckStage }} stage is the bottleneck ({{ BottleneckPercent }}% of total time)\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- Success Rate -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Success Rate Overview</h3>\n <div class=\"widget-card\">\n <div class=\"success-rate-display\">\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-success)\">\n {{ rawProcessRuns.length > 0 ? (100 - (ErrorLog.length / rawProcessRuns.length * 100)).toFixed(1) : '100' }}%\n </div>\n <div class=\"success-rate-label\">Success Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-error)\">\n {{ rawProcessRuns.length > 0 ? (ErrorLog.length / rawProcessRuns.length * 100).toFixed(1) : '0' }}%\n </div>\n <div class=\"success-rate-label\">Failure Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-text-primary)\">\n {{ FormatNumber(rawProcessRuns.length) }}\n </div>\n <div class=\"success-rate-label\">Total Runs</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Active Runs Table -->\n @if (ActiveRuns.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-spinner\"></i> Active Runs</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th>Started</th>\n <th>Progress</th>\n <th>Stage</th>\n <th class=\"num\">Items</th>\n </tr>\n </thead>\n <tbody>\n @for (run of ActiveRuns; track run.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ run.RunID }}</td>\n <td>{{ run.Source }}</td>\n <td class=\"muted\">{{ run.Started }}</td>\n <td>\n <div class=\"progress-track\"><div class=\"progress-fill\" [style.width.%]=\"run.Progress\" style=\"background:var(--mj-brand-primary)\"></div></div>\n <span class=\"progress-text\">{{ run.Progress }}%</span>\n </td>\n <td><span class=\"badge\" [class]=\"run.StageClass\">{{ run.Stage }}</span></td>\n <td class=\"num\">{{ FormatNumber(run.Items) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Error Log -->\n @if (ErrorLog.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> Recent Errors</h3>\n <div class=\"error-log\">\n @for (entry of ErrorLog; track TrackByIndex($index)) {\n <div class=\"error-entry\">\n <div class=\"error-time\">{{ entry.Time }}</div>\n <div class=\"error-source\">{{ entry.Source }}</div>\n <div class=\"error-msg\">{{ entry.Message }}</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 5: QUALITY -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'quality') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <h1>Quality</h1>\n </div>\n\n <!-- Confidence Distribution Histogram -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-column\"></i> Confidence Distribution</h3>\n <div class=\"widget-card\">\n <div class=\"histogram\">\n @for (bin of ConfidenceHistogram; track bin.Label) {\n <div class=\"hist-bar-col\" style=\"cursor:pointer\" (click)=\"OpenDrillDown('quality-bin:' + bin.Label)\">\n <div class=\"hist-bar\" [style.height.%]=\"bin.Percentage\" [style.background]=\"bin.Color\">\n @if (bin.Count > 0) { {{ bin.Count }} }\n </div>\n <div class=\"hist-label\">{{ bin.Label }}</div>\n </div>\n }\n </div>\n <div class=\"confidence-stats\">\n @for (stat of ConfidenceStats; track stat.Label) {\n <span><strong>{{ stat.Label }}:</strong> {{ stat.Value }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Quality bin drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('quality-bin:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Items in Confidence Range {{ DrillDownTarget.replace('quality-bin:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items in this confidence range</div>\n }\n </div>\n }\n\n <!-- Weight Distribution by Entity -->\n @if (WeightByEntity.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-weight-scale\"></i> Weight Distribution by Entity</h3>\n <div class=\"widget-card\">\n <div class=\"grouped-bar-chart\">\n @for (entity of WeightByEntity; track entity.Name) {\n <div class=\"grouped-col\">\n <div class=\"grouped-bars\">\n <div class=\"g-bar\" [style.height.%]=\"entity.High\" style=\"background:var(--mj-brand-primary)\" [title]=\"'High: ' + entity.High + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Med\" style=\"background:var(--mj-status-info)\" [title]=\"'Med: ' + entity.Med + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Low\" style=\"background:var(--mj-text-muted)\" [title]=\"'Low: ' + entity.Low + '%'\"></div>\n </div>\n <div class=\"grouped-label\">{{ entity.Name }}</div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"justify-content:center;margin-top:14px\">\n @for (item of WeightLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Tag Accuracy Over Time -->\n @if (AccuracyLinePoints) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Tag Accuracy Over Time (Weekly Avg Confidence)</h3>\n <div class=\"widget-card\">\n <div class=\"accuracy-chart\">\n <div class=\"accuracy-y-labels\">\n <div>1.0</div>\n <div>0.75</div>\n <div>0.50</div>\n <div>0.25</div>\n </div>\n <div class=\"accuracy-area\">\n <div class=\"accuracy-grid-line\" style=\"top:33%\"></div>\n <div class=\"accuracy-grid-line\" style=\"top:66%\"></div>\n <svg width=\"100%\" height=\"110\" viewBox=\"0 0 400 110\" preserveAspectRatio=\"none\" class=\"accuracy-svg\">\n <polyline [attr.points]=\"AccuracyLinePoints\"\n fill=\"none\" stroke=\"var(--mj-brand-primary)\" stroke-width=\"2.5\" vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n @for (dot of AccuracyDots; track TrackByIndex($index)) {\n <circle [attr.cx]=\"dot.Cx\" [attr.cy]=\"dot.Cy\" r=\"3\" fill=\"var(--mj-brand-primary)\"/>\n }\n </svg>\n </div>\n </div>\n <div class=\"accuracy-x-labels\">\n @for (label of AccuracyMonthLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n <div class=\"accuracy-trend-text\">\n <i class=\"fa-solid fa-arrow-trend-up\" style=\"margin-right:4px\"></i>\n {{ AccuracyTrendText }}\n </div>\n </div>\n </div>\n }\n\n <!-- Low-Confidence Tags Table -->\n @if (LowConfidenceTags.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-exclamation-triangle\"></i> Low-Confidence Tags (Avg Weight &lt; 0.4)</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Tag Name</th>\n <th class=\"num\">Avg Weight</th>\n <th class=\"num\">Usage Count</th>\n <th>Top Entity</th>\n <th>Suggested Action</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of LowConfidenceTags; track tag.Name) {\n <tr>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ tag.AvgWeight }}</td>\n <td class=\"num\">{{ tag.UsageCount }}</td>\n <td>{{ tag.TopEntity }}</td>\n <td><span class=\"badge\" [class]=\"tag.ActionClass\">{{ tag.SuggestedAction }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Model Performance Comparison -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-robot\"></i> Model Performance Comparison</h3>\n <div class=\"model-grid\">\n @for (model of ModelComparisons; track model.Name) {\n <div class=\"model-card\">\n <div class=\"model-name\"><i [class]=\"model.Icon\" [style.color]=\"model.IconColor\" style=\"margin-right:4px\"></i> {{ model.Name }}</div>\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" style=\"margin:4px 0\">\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"8\"/>\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" [attr.stroke]=\"model.ScoreColor\" stroke-width=\"8\"\n [attr.stroke-dasharray]=\"model.StrokeDash\" stroke-dashoffset=\"50\"\n transform=\"rotate(-90 40 40)\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"model-score\" [style.color]=\"model.ScoreColor\">{{ model.ScorePercentage }}%</div>\n <div class=\"model-detail\">Avg confidence: {{ model.AvgConfidence }}</div>\n <div class=\"model-detail\">{{ FormatNumber(model.TagsGenerated) }} tags generated</div>\n <div class=\"model-detail\" [style.color]=\"model.RoleColor\" style=\"font-weight:600\">{{ model.Role }}</div>\n </div>\n }\n </div>\n @if (ModelRecommendation) {\n <div class=\"model-recommendation\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color:var(--mj-status-warning)\"></i>\n <div>\n <strong>Recommendation:</strong> {{ ModelRecommendation }}\n </div>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 6: COST & USAGE (D1) -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'cost') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h1>Cost & Usage</h1>\n <div class=\"tab-header-actions\">\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('cost-usage')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n <button class=\"drill-export-btn\" (click)=\"PrintCurrentTab()\" title=\"Print (PDF alternative)\">\n <i class=\"fa-solid fa-print\"></i> Print\n </button>\n </div>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n </div>\n\n <!-- KPI Cards -->\n @if (CostKPIs.length > 0) {\n <div class=\"cost-kpi-row\">\n @for (kpi of CostKPIs; track kpi.Label) {\n <div class=\"cost-kpi-card\">\n <div class=\"cost-kpi-icon\"><i [class]=\"kpi.Icon\"></i></div>\n <div>\n <div class=\"cost-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"cost-kpi-label\">{{ kpi.Label }}</div>\n <div class=\"cost-kpi-sub\">{{ kpi.SubLabel }}</div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Per-Run Cost Table -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-table\"></i> Cost Breakdown by Run</h3>\n @if (CostPerRunRows.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th class=\"num\">Tokens</th>\n <th class=\"num\">Cost</th>\n <th>Started</th>\n </tr>\n </thead>\n <tbody>\n @for (row of CostPerRunRows; track row.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ row.RunID }}</td>\n <td>{{ row.Source }}</td>\n <td class=\"num\">{{ FormatNumber(row.Tokens) }}</td>\n <td class=\"num\">{{ row.Cost > 0 ? '$' + row.Cost.toFixed(4) : '$0.00' }}</td>\n <td class=\"muted\">{{ row.Started }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-coins\"></i>\n <p>No cost data available yet. Run the pipeline to generate cost and token usage metrics.</p>\n <p class=\"empty-state-hint\">Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.</p>\n </div>\n }\n </div>\n </section>\n }\n\n </div><!-- /main-content -->\n </div><!-- /analytics-layout -->\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ===================================================================\n Analytics & Insights Resource Component\n ================================================================= */\n\n.analytics-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.analytics-layout {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n/* ===== LEFT SIDEBAR ===== */\n.analytics-sidebar {\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 overflow-y: auto;\n}\n\n.sidebar-header {\n padding: 20px 16px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.sidebar-header h2 {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n}\n\n.sidebar-header h2 i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.sidebar-nav {\n padding: 8px 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n border-left: 3px solid transparent;\n transition: all 0.15s ease;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n\n.nav-item:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.nav-item.active {\n border-left-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n font-weight: 600;\n}\n\n.nav-item i {\n width: 16px;\n text-align: center;\n font-size: 13px;\n}\n\n.sidebar-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 8px 16px;\n}\n\n.trending-section {\n padding: 12px 16px 16px;\n}\n\n.trending-section h3 {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud span {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud span:hover {\n opacity: 0.7;\n}\n\n.no-trending {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error {\n background: var(--mj-status-error);\n}\n\n/* ===== MAIN CONTENT ===== */\n.main-content {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header i {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header h1 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ===== FILTER BAR ===== */\n.filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip:last-child {\n border-right: none;\n}\n\n.date-chip:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n/* ===== KPI CARDS ===== */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n/* ===== CARDS GRID ===== */\n.cards-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n/* ===== BAR CHART ===== */\n.bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n/* ===== PROGRESS RINGS ===== */\n.rings-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* ===== GAUGE ===== */\n.gauge-container {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n/* ===== MINI HISTOGRAM ===== */\n.mini-histogram {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== HORIZONTAL BARS ===== */\n.h-bar-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n/* ===== THROUGHPUT BARS ===== */\n.throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* ===== TAXONOMY ===== */\n.taxonomy-ring-container {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat small {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n/* ===== LEGEND ===== */\n.legend {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n/* ===== DATA TABLES ===== */\n.table-scroll {\n overflow-x: auto;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table thead th {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table .num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n/* ===== BADGES ===== */\n.badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n/* ===== SUB-SECTIONS ===== */\n.sub-section {\n margin-top: 24px;\n}\n\n.sub-section h3 {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section h3 i {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n/* ===== EMPTY STATE ===== */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n/* ===== DRILL-DOWN PANEL ===== */\n.drill-down-panel {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header h3 {\n margin: 0;\n}\n\n.drill-down-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n/* ===== STACKED BAR CHART ===== */\n.stacked-bar-chart {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n/* ===== VERTICAL BAR CHART ===== */\n.v-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n/* ===== TWO COLUMN ===== */\n.two-col {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n/* ===== SOURCE SELECTED ===== */\n.source-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n/* ===== QUALITY BANDS ===== */\n.quality-bands {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* ===== SOURCE HEALTH ===== */\n.source-health-grid {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PIPELINE ===== */\n.pipeline-throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PROCESSING STAGES ===== */\n.stage-bars {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning {\n color: var(--mj-text-muted);\n}\n\n/* ===== SUCCESS RATE ===== */\n.success-rate-display {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat {\n text-align: center;\n}\n\n.success-rate-value {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== PROGRESS ===== */\n.progress-track {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text {\n font-size: 11px;\n font-weight: 600;\n}\n\n/* ===== ERROR LOG ===== */\n.error-log {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg {\n color: var(--mj-text-secondary);\n}\n\n/* ===== HISTOGRAM ===== */\n.histogram {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* ===== GROUPED BAR CHART ===== */\n.grouped-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n/* ===== ACCURACY CHART ===== */\n.accuracy-chart {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n/* ===== MODEL COMPARISON ===== */\n.model-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n/* ===== RESPONSIVE ===== */\n@media (max-width: 1200px) {\n .cards-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout {\n flex-direction: column;\n }\n\n .analytics-sidebar {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section,\n .sidebar-divider {\n display: none;\n }\n\n .tab-section {\n padding: 16px;\n }\n\n .cards-grid {\n grid-template-columns: 1fr;\n }\n\n .kpi-row {\n grid-template-columns: 1fr;\n }\n\n .two-col {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* ===== COST & USAGE TAB (D1) ===== */\n\n.tab-header-actions {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== D5: PRINT STYLES ===== */\n\n@media print {\n .analytics-sidebar,\n .filter-bar,\n .tab-header-actions,\n .drill-down-close,\n .drill-export-btn,\n .drill-open-btn {\n display: none !important;\n }\n\n .analytics-layout {\n display: block;\n }\n\n .main-content {\n padding: 0;\n }\n\n .tab-section {\n padding: 0;\n }\n\n .widget-card,\n .cost-kpi-card,\n .kpi-card {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table {\n font-size: 10px;\n }\n}\n\n/* \u2500\u2500 Co-Occurrence Section \u2500\u2500 */\n\n/* Constrain the co-occurrence sub-section so an empty state or large table\n does not blow out the page height and render the app unusable. */\n.co-occurrence-section {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section .table-scroll {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section .empty-state {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n"] }]
4261
4260
  }], null, null); })();
4262
4261
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsResourceComponent, { className: "AnalyticsResourceComponent", filePath: "src/KnowledgeHub/components/analytics/analytics-resource.component.ts", lineNumber: 222 }); })();
4263
4262
  /** Tree-shaking prevention */