@memberjunction/ng-dashboards 5.23.0 → 5.25.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 (296) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +15 -33
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +233 -493
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -2
  6. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-editor.component.js +7 -7
  8. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +717 -8
  10. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +7166 -1889
  12. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +50 -4
  14. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  15. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +759 -491
  16. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  17. package/dist/AI/components/execution-monitoring.component.d.ts +4 -5
  18. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  19. package/dist/AI/components/execution-monitoring.component.js +14 -15
  20. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  21. package/dist/AI/components/models/model-management.component.d.ts +4 -4
  22. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  23. package/dist/AI/components/models/model-management.component.js +5 -5
  24. package/dist/AI/components/models/model-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-management.component.d.ts +4 -4
  26. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  27. package/dist/AI/components/prompts/prompt-management.component.js +5 -5
  28. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  29. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +2 -1
  30. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -0
  32. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  33. package/dist/AI/components/system/system-configuration.component.d.ts +2 -3
  34. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  35. package/dist/AI/components/system/system-configuration.component.js +9 -11
  36. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  37. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +62 -7
  38. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  39. package/dist/AI/components/vectors/vector-management-resource.component.js +825 -359
  40. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  41. package/dist/APIKeys/api-keys-resource.component.d.ts +2 -1
  42. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  43. package/dist/APIKeys/api-keys-resource.component.js +2 -0
  44. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  45. package/dist/Actions/components/actions-overview.component.d.ts +4 -5
  46. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +11 -12
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/code-management.component.d.ts +2 -3
  50. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  51. package/dist/Actions/components/code-management.component.js +4 -6
  52. package/dist/Actions/components/code-management.component.js.map +1 -1
  53. package/dist/Actions/components/entity-integration.component.d.ts +2 -3
  54. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  55. package/dist/Actions/components/entity-integration.component.js +4 -6
  56. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  57. package/dist/Actions/components/execution-monitoring.component.d.ts +4 -5
  58. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  59. package/dist/Actions/components/execution-monitoring.component.js +10 -11
  60. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  61. package/dist/Actions/components/explorer/action-explorer.component.d.ts +13 -12
  62. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  63. package/dist/Actions/components/explorer/action-explorer.component.js +39 -66
  64. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  65. package/dist/Actions/components/scheduled-actions.component.d.ts +2 -3
  66. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  67. package/dist/Actions/components/scheduled-actions.component.js +4 -6
  68. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  69. package/dist/Actions/components/security-permissions.component.d.ts +2 -3
  70. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  71. package/dist/Actions/components/security-permissions.component.js +4 -6
  72. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  73. package/dist/ApplicationRoles/application-roles-resource.component.d.ts +112 -0
  74. package/dist/ApplicationRoles/application-roles-resource.component.d.ts.map +1 -0
  75. package/dist/ApplicationRoles/application-roles-resource.component.js +532 -0
  76. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -0
  77. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  78. package/dist/Communication/communication-dashboard.component.js +1 -0
  79. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  80. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  81. package/dist/Communication/communication-logs-resource.component.js +4 -1
  82. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  83. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  84. package/dist/Communication/communication-monitor-resource.component.js +4 -1
  85. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  86. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  87. package/dist/Communication/communication-providers-resource.component.js +4 -1
  88. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  89. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  90. package/dist/Communication/communication-runs-resource.component.js +4 -1
  91. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  92. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  93. package/dist/Communication/communication-templates-resource.component.js +4 -1
  94. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  95. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +2 -1
  96. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  97. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  98. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  100. package/dist/Credentials/components/credentials-audit-resource.component.js +2 -0
  101. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  102. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -3
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +10 -11
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -1
  107. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-list-resource.component.js +2 -0
  109. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +4 -4
  111. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  112. package/dist/Credentials/components/credentials-overview-resource.component.js +8 -9
  113. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  114. package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -3
  115. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  116. package/dist/Credentials/components/credentials-types-resource.component.js +11 -12
  117. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  118. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  119. package/dist/Credentials/credentials-dashboard.component.js +1 -0
  120. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  121. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +2 -3
  122. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  123. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +9 -10
  124. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  125. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  126. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +23 -15
  127. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  128. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +167 -213
  129. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  130. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +68 -32
  131. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  132. package/dist/DataExplorer/data-explorer-dashboard.component.js +470 -437
  133. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  134. package/dist/DataExplorer/data-explorer-resource.component.d.ts +10 -3
  135. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  136. package/dist/DataExplorer/data-explorer-resource.component.js +35 -11
  137. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  138. package/dist/DataExplorer/models/explorer-state.interface.d.ts +12 -3
  139. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
  140. package/dist/DataExplorer/models/explorer-state.interface.js +5 -1
  141. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
  142. package/dist/Home/home-dashboard.component.d.ts +4 -4
  143. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  144. package/dist/Home/home-dashboard.component.js +4 -5
  145. package/dist/Home/home-dashboard.component.js.map +1 -1
  146. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.js +2 -0
  148. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  149. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  150. package/dist/Integration/components/connections/connections.component.js +3 -0
  151. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  152. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -0
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  156. package/dist/Integration/components/overview/overview.component.js +3 -0
  157. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +3 -0
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  162. package/dist/Integration/components/schedules/schedules.component.js +3 -0
  163. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  164. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +412 -0
  165. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -0
  166. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +4267 -0
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -0
  168. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +39 -4
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +187 -13
  171. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +13 -2
  173. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  174. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +329 -224
  175. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +76 -0
  177. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -0
  178. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +602 -0
  179. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -0
  180. package/dist/KnowledgeHub/index.d.ts +2 -1
  181. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  182. package/dist/KnowledgeHub/index.js +2 -1
  183. package/dist/KnowledgeHub/index.js.map +1 -1
  184. package/dist/Lists/components/lists-browse-resource.component.d.ts +2 -1
  185. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  186. package/dist/Lists/components/lists-browse-resource.component.js +2 -0
  187. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  188. package/dist/Lists/components/lists-categories-resource.component.d.ts +2 -1
  189. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  190. package/dist/Lists/components/lists-categories-resource.component.js +2 -0
  191. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  192. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +2 -1
  193. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  194. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -0
  195. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  196. package/dist/Lists/components/lists-operations-resource.component.d.ts +2 -1
  197. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  198. package/dist/Lists/components/lists-operations-resource.component.js +2 -0
  199. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  200. package/dist/MCP/mcp-dashboard.component.d.ts +7 -28
  201. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  202. package/dist/MCP/mcp-dashboard.component.js +25 -107
  203. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  204. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  205. package/dist/MCP/mcp-resource.component.js +1 -0
  206. package/dist/MCP/mcp-resource.component.js.map +1 -1
  207. package/dist/QueryBrowser/query-browser-resource.component.d.ts +10 -23
  208. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  209. package/dist/QueryBrowser/query-browser-resource.component.js +41 -103
  210. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  211. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity-resource.component.js +1 -0
  213. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +1 -0
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  217. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  218. package/dist/Scheduling/components/scheduling-overview-resource.component.js +1 -0
  219. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  220. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  221. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  222. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  223. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -4
  224. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  225. package/dist/SystemDiagnostics/system-diagnostics.component.js +9 -10
  226. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  227. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  228. package/dist/Testing/components/testing-analytics-resource.component.js +2 -0
  229. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  230. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  231. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  232. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +2 -0
  233. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  234. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  235. package/dist/Testing/components/testing-explorer-resource.component.js +2 -0
  236. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  237. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-review-resource.component.js +2 -0
  239. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  241. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-runs-resource.component.js +2 -0
  243. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  244. package/dist/Testing/testing-dashboard.component.d.ts +2 -1
  245. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  246. package/dist/Testing/testing-dashboard.component.js +1 -0
  247. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  248. package/dist/VersionHistory/components/diff-resource.component.d.ts +4 -4
  249. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  250. package/dist/VersionHistory/components/diff-resource.component.js +9 -10
  251. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  252. package/dist/VersionHistory/components/graph-resource.component.d.ts +2 -1
  253. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  254. package/dist/VersionHistory/components/graph-resource.component.js +2 -0
  255. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  256. package/dist/VersionHistory/components/labels-resource.component.d.ts +4 -4
  257. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  258. package/dist/VersionHistory/components/labels-resource.component.js +10 -11
  259. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  260. package/dist/VersionHistory/components/restore-resource.component.d.ts +2 -1
  261. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  262. package/dist/VersionHistory/components/restore-resource.component.js +2 -0
  263. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  264. package/dist/__tests__/analytics-resource.test.d.ts +2 -0
  265. package/dist/__tests__/analytics-resource.test.d.ts.map +1 -0
  266. package/dist/__tests__/analytics-resource.test.js +181 -0
  267. package/dist/__tests__/analytics-resource.test.js.map +1 -0
  268. package/dist/__tests__/scheduling.test.d.ts +2 -0
  269. package/dist/__tests__/scheduling.test.d.ts.map +1 -0
  270. package/dist/__tests__/scheduling.test.js +205 -0
  271. package/dist/__tests__/scheduling.test.js.map +1 -0
  272. package/dist/ai-dashboards.module.d.ts +22 -18
  273. package/dist/ai-dashboards.module.d.ts.map +1 -1
  274. package/dist/ai-dashboards.module.js +29 -10
  275. package/dist/ai-dashboards.module.js.map +1 -1
  276. package/dist/core-dashboards.module.d.ts +19 -18
  277. package/dist/core-dashboards.module.d.ts.map +1 -1
  278. package/dist/core-dashboards.module.js +8 -0
  279. package/dist/core-dashboards.module.js.map +1 -1
  280. package/dist/data-explorer-dashboards.module.d.ts +2 -1
  281. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  282. package/dist/data-explorer-dashboards.module.js +7 -3
  283. package/dist/data-explorer-dashboards.module.js.map +1 -1
  284. package/dist/public-api.d.ts +2 -1
  285. package/dist/public-api.d.ts.map +1 -1
  286. package/dist/public-api.js +3 -1
  287. package/dist/public-api.js.map +1 -1
  288. package/dist/shared/entity-field-display.d.ts +44 -0
  289. package/dist/shared/entity-field-display.d.ts.map +1 -0
  290. package/dist/shared/entity-field-display.js +118 -0
  291. package/dist/shared/entity-field-display.js.map +1 -0
  292. package/package.json +47 -46
  293. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +0 -85
  294. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +0 -1
  295. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +0 -461
  296. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-resource.component.js","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/analytics/analytics-resource.component.ts","../../../../src/KnowledgeHub/components/analytics/analytics-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Knowledge Hub Analytics & Insights Resource Component\n *\n * Multi-tab analytics dashboard for the Knowledge Hub: Overview (interactive cards),\n * Tags (top 20, distribution), Sources (comparison, health), Pipeline (throughput,\n * processing time, errors), and Quality (confidence, weight, model comparison).\n *\n * All chart rendering is pure CSS/inline SVG -- no JS chart libraries.\n */\n\nimport { Component, ChangeDetectorRef, OnDestroy, AfterViewInit, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CompositeKey, Metadata, RunView } from '@memberjunction/core';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\n\n// ================================================================\n// Interfaces\n// ================================================================\n\ninterface NavItem {\n ID: string;\n Label: string;\n Icon: string;\n}\n\ninterface DateRangeOption {\n Label: string;\n Days: number;\n}\n\ninterface KPIData {\n Label: string;\n Value: string;\n Delta: string;\n DeltaDirection: 'up' | 'down' | 'flat';\n SparklinePoints: string;\n SparklineColor: string;\n SparklineGradId: string;\n DrillDownKey: string;\n}\n\ninterface WidgetCard {\n Key: string;\n Title: string;\n Icon: string;\n}\n\ninterface TagGrowthMonth {\n Label: string;\n Count: number;\n Percentage: number;\n}\n\ninterface CoverageEntity {\n Name: string;\n Tagged: number;\n Total: number;\n Percentage: number;\n Color: string;\n StrokeDash: string;\n}\n\ninterface SourcePerformanceRow {\n Name: string;\n AvgTagsPerItem: number;\n Percentage: number;\n Color: string;\n}\n\ninterface ThroughputDay {\n Label: string;\n Percentage: number;\n IsError: boolean;\n}\n\ninterface TaxonomyStat {\n Label: string;\n Count: number;\n Color: string;\n BgColor: string;\n}\n\ninterface TopTagRow {\n Rank: number;\n Name: string;\n UsageCount: number;\n AvgWeight: number;\n WeightBarWidth: number;\n WeightBarColor: string;\n TrendPoints: string;\n TrendColor: string;\n TopEntity: string;\n FirstSeen: string;\n}\n\ninterface EntityDistributionRow {\n EntityName: string;\n Segments: EntityDistSegment[];\n}\n\ninterface EntityDistSegment {\n Label: string;\n Percentage: number;\n Color: string;\n}\n\ninterface TagDepthBar {\n Label: string;\n Count: number;\n Percentage: number;\n}\n\ninterface SourceComparisonRow {\n Name: string;\n Type: string;\n TypeIcon: string;\n TypeColor: string;\n Items: number;\n TagsGenerated: number;\n AvgTagsPerItem: number;\n AvgWeight: number;\n LastRun: string;\n Status: string;\n StatusClass: string;\n}\n\ninterface SourceHealthCard {\n Name: string;\n Uptime: number;\n Color: string;\n}\n\ninterface PipelineBar {\n Percentage: number;\n IsError: boolean;\n}\n\ninterface ProcessingStage {\n Name: string;\n Time: number;\n Percentage: number;\n Color: string;\n}\n\ninterface ActiveRunRow {\n RunID: string;\n Source: string;\n Started: string;\n Progress: number;\n Stage: string;\n StageClass: string;\n Items: number;\n}\n\ninterface ErrorLogEntry {\n Time: string;\n Source: string;\n Message: string;\n}\n\ninterface HistogramBin {\n Label: string;\n Count: number;\n Percentage: number;\n Color: string;\n}\n\ninterface WeightGroupedEntity {\n Name: string;\n High: number;\n Med: number;\n Low: number;\n}\n\ninterface LowConfidenceTag {\n Name: string;\n AvgWeight: number;\n UsageCount: number;\n TopEntity: string;\n SuggestedAction: string;\n ActionClass: string;\n}\n\ninterface ModelComparison {\n Name: string;\n Icon: string;\n IconColor: string;\n ScorePercentage: number;\n ScoreColor: string;\n AvgConfidence: number;\n TagsGenerated: number;\n Role: string;\n RoleColor: string;\n StrokeDash: string;\n}\n\ninterface CoOccurrencePairRow {\n TagAName: string;\n TagBName: string;\n Count: number;\n /** Bar width as percentage of the max count in the displayed list */\n BarWidth: number;\n}\n\ninterface DrillDownRecord {\n [key: string]: string | number | null;\n}\n\n// ================================================================\n// Component\n// ================================================================\n\n@RegisterClass(BaseResourceComponent, 'AnalyticsResource')\n@Component({\n standalone: false,\n selector: 'app-analytics-resource',\n templateUrl: './analytics-resource.component.html',\n styleUrls: ['./analytics-resource.component.css']\n})\nexport class AnalyticsResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n protected override navigationService = inject(NavigationService);\n protected override destroy$ = new Subject<void>();\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Analytics';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n\n // ================================================================\n // Navigation\n // ================================================================\n\n public NavItems: NavItem[] = [\n { ID: 'overview', Label: 'Overview', Icon: 'fa-solid fa-grip' },\n { ID: 'tags', Label: 'Tags', Icon: 'fa-solid fa-tags' },\n { ID: 'sources', Label: 'Sources', Icon: 'fa-solid fa-database' },\n { ID: 'pipeline', Label: 'Pipeline', Icon: 'fa-solid fa-gears' },\n { ID: 'quality', Label: 'Quality', Icon: 'fa-solid fa-circle-check' },\n { ID: 'cost', Label: 'Cost & Usage', Icon: 'fa-solid fa-coins' },\n ];\n\n public ActiveTab = 'overview';\n public IsLoading = true;\n\n // ================================================================\n // Filter State\n // ================================================================\n\n public DateRanges: DateRangeOption[] = [\n { Label: '7D', Days: 7 },\n { Label: '30D', Days: 30 },\n { Label: '90D', Days: 90 },\n { Label: 'YTD', Days: -1 },\n { Label: 'All', Days: 0 },\n ];\n\n public ActiveDateRange = '30D';\n public EntityFilter = 'All Entities';\n public EntityFilterOptions: string[] = ['All Entities'];\n\n // ================================================================\n // Drill-Down\n // ================================================================\n\n public DrillDownTarget: string | null = null;\n public DrillDownData: DrillDownRecord[] = [];\n public DrillDownColumns: string[] = [];\n public IsDrillDownLoading = false;\n /** Whether the current drill-down rows have navigable records */\n public DrillDownHasActions = false;\n\n /** AN-1: Open a record from a drill-down table row */\n public OpenDrillDownRecord(row: DrillDownRecord): void {\n const entityName = row['_EntityName'] as string | null;\n const recordID = row['_RecordID'] as string | null;\n if (!entityName || !recordID) return;\n\n // D9: If this is a Tag record, navigate to Classify Tag Library instead\n if (entityName === 'MJ: Tags') {\n const tagName = row['Name'] as string ?? row['Tag Name'] as string ?? '';\n this.navigateToClassifyTagLibrary(tagName);\n return;\n }\n\n const md = new Metadata();\n const entityInfo = md.Entities.find(e => e.Name === entityName);\n const pkey = new CompositeKey();\n if (entityInfo) {\n pkey.LoadFromURLSegment(entityInfo, recordID);\n } else {\n pkey.KeyValuePairs = [{ FieldName: 'ID', Value: recordID }];\n }\n this.navigationService.OpenEntityRecord(entityName, pkey);\n }\n\n /**\n * D9: Navigate to the Classify dashboard's Tag Library tab with a tag pre-selected.\n * Uses NavigationService.OpenNavItemByName to switch to the Classify nav item\n * and passes the tag name and target tab via configuration.\n */\n private navigateToClassifyTagLibrary(tagName: string): void {\n this.navigationService.OpenNavItemByName('Classify', {\n initialTab: 'tags',\n tagSearch: tagName,\n });\n }\n\n // ================================================================\n // Overview Tab Data\n // ================================================================\n\n public KPIs: KPIData[] = [];\n\n public WidgetCards: WidgetCard[] = [\n { Key: 'tagGrowth', Title: 'Tag Growth', Icon: 'fa-solid fa-chart-line' },\n { Key: 'contentCoverage', Title: 'Content Coverage', Icon: 'fa-solid fa-bullseye' },\n { Key: 'qualityScore', Title: 'Quality Score', Icon: 'fa-solid fa-gauge-high' },\n { Key: 'sourcePerformance', Title: 'Source Performance', Icon: 'fa-solid fa-ranking-star' },\n { Key: 'dailyThroughput', Title: 'Daily Throughput', Icon: 'fa-solid fa-bolt' },\n { Key: 'taxonomyHealth', Title: 'Taxonomy Health', Icon: 'fa-solid fa-sitemap' },\n ];\n\n public TagGrowthData: TagGrowthMonth[] = [];\n public CoverageData: CoverageEntity[] = [];\n public QualityScore = 0;\n public MiniConfidenceBins: { Height: number; Color: string; Title: string }[] = [];\n public SourcePerfData: SourcePerformanceRow[] = [];\n public ThroughputData: ThroughputDay[] = [];\n public TaxonomyTotal = 0;\n public TaxonomyStats: TaxonomyStat[] = [];\n public TaxonomyRingSegments: { StrokeDash: string; StrokeOffset: string; Color: string }[] = [];\n\n // ================================================================\n // Tags Tab Data\n // ================================================================\n\n public TopTags: TopTagRow[] = [];\n public EntityDistribution: EntityDistributionRow[] = [];\n public DistributionLegend: { Label: string; Color: string }[] = [\n { Label: 'Primary', Color: 'var(--mj-brand-primary)' },\n { Label: 'Secondary', Color: 'var(--mj-status-info)' },\n { Label: 'Tertiary', Color: '#7c3aed' },\n { Label: 'Quaternary', Color: 'var(--mj-status-success)' },\n { Label: 'Other', Color: 'var(--mj-status-warning)' },\n ];\n public TagDepthBars: TagDepthBar[] = [];\n\n // --- Co-occurrence data ---\n public CoOccurrencePairs: CoOccurrencePairRow[] = [];\n public CoOccurrenceLastComputed: string | null = null;\n public IsRecomputingCoOccurrence = false;\n\n // ================================================================\n // Sources Tab Data\n // ================================================================\n\n public SourceComparison: SourceComparisonRow[] = [];\n public SelectedSourceName = '';\n public SourceWeeklyBars: { Label: string; Value: number; Percentage: number }[] = [];\n public SourceQualityBands: { Label: string; Percentage: number; Color: string }[] = [];\n public SourceQualityNote = '';\n public SourceHealthCards: SourceHealthCard[] = [];\n\n // ================================================================\n // Pipeline Tab Data\n // ================================================================\n\n public PipelineThroughputBars: PipelineBar[] = [];\n public PipelineDateLabels: string[] = [];\n public ProcessingStages: ProcessingStage[] = [];\n public TotalAvgProcessingTime = 0;\n public BottleneckStage = '';\n public BottleneckPercent = 0;\n public SuccessRateAvg = 0;\n public FailureRateAvg = 0;\n public ActiveRuns: ActiveRunRow[] = [];\n public ErrorLog: ErrorLogEntry[] = [];\n\n // ================================================================\n // Quality Tab Data\n // ================================================================\n\n public ConfidenceHistogram: HistogramBin[] = [];\n public ConfidenceStats: { Label: string; Value: string }[] = [];\n public WeightByEntity: WeightGroupedEntity[] = [];\n public WeightLegend: { Label: string; Color: string }[] = [\n { Label: 'High (>0.7)', Color: 'var(--mj-brand-primary)' },\n { Label: 'Medium (0.4-0.7)', Color: 'var(--mj-status-info)' },\n { Label: 'Low (<0.4)', Color: 'var(--mj-text-muted)' },\n ];\n public AccuracyLinePoints = '';\n public AccuracyDots: { Cx: number; Cy: number }[] = [];\n public AccuracyMonthLabels: string[] = [];\n public AccuracyTrendText = '';\n public LowConfidenceTags: LowConfidenceTag[] = [];\n public ModelComparisons: ModelComparison[] = [];\n public ModelRecommendation = '';\n\n // ================================================================\n // Trending Tags (sidebar)\n // ================================================================\n\n public TrendingTags: { Name: string; Size: number; Weight: number }[] = [];\n public PipelineStatusText = 'Loading...';\n public PipelineStatusOk = true;\n\n // ================================================================\n // Cost & Usage Tab Data (D1)\n // ================================================================\n\n public CostKPIs: { Label: string; Value: string; Icon: string; SubLabel: string }[] = [];\n public CostPerRunRows: { RunID: string; Source: string; Tokens: number; Cost: number; Started: string }[] = [];\n\n // ================================================================\n // Raw data for aggregation\n // ================================================================\n\n private rawTags: Record<string, unknown>[] = [];\n private rawContentItemTags: Record<string, unknown>[] = [];\n private rawContentItems: Record<string, unknown>[] = [];\n public rawProcessRuns: Record<string, unknown>[] = [];\n private rawContentSources: Record<string, unknown>[] = [];\n private rawContentTypes: Record<string, unknown>[] = [];\n private rawRunDetails: Record<string, unknown>[] = [];\n\n // ================================================================\n // Lifecycle\n // ================================================================\n\n async ngAfterViewInit(): Promise<void> {\n await UserInfoEngine.Instance.Config(false);\n this.loadAnalyticsPreferences();\n this.loadAllData();\n this.emitAgentContext();\n this.registerAgentTools();\n this.NotifyLoadComplete();\n }\n\n private emitAgentContext(): void {\n this.navigationService.SetAgentContext(this, {\n ActiveTab: this.ActiveTab,\n DateRange: this.ActiveDateRange,\n EntityFilter: this.EntityFilter,\n KPIs: this.KPIs.map(k => ({ Label: k.Label, Value: k.Value })),\n });\n }\n\n private registerAgentTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SwitchAnalyticsTab',\n Description: 'Switch to a specific analytics tab (overview, tags, sources, pipeline, quality)',\n ParameterSchema: { type: 'object', properties: { tab: { type: 'string' } }, required: ['tab'] },\n Handler: async (params: Record<string, unknown>) => {\n this.SelectTab(params['tab'] as string);\n return { Success: true };\n },\n },\n {\n Name: 'SetAnalyticsDateRange',\n Description: 'Set the analytics date range filter (7D, 30D, 90D, YTD, All)',\n ParameterSchema: { type: 'object', properties: { range: { type: 'string' } }, required: ['range'] },\n Handler: async (params: Record<string, unknown>) => {\n this.SetDateRange(params['range'] as string);\n return { Success: true };\n },\n },\n {\n Name: 'ExportAnalyticsCSV',\n Description: 'Export analytics data as CSV',\n ParameterSchema: { type: 'object', properties: { dataKey: { type: 'string' } }, required: ['dataKey'] },\n Handler: async (params: Record<string, unknown>) => {\n this.ExportTabDataCSV(params['dataKey'] as string);\n return { Success: true };\n },\n },\n ]);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ================================================================\n // Public Methods\n // ================================================================\n\n public SelectTab(tabId: string): void {\n this.ActiveTab = tabId;\n this.CloseDrillDown();\n this.persistAnalyticsPreferences();\n this.emitAgentContext();\n this.cdr.detectChanges();\n }\n\n public SetDateRange(label: string): void {\n this.ActiveDateRange = label;\n this.CloseDrillDown();\n this.rebuildAllAggregations();\n this.persistAnalyticsPreferences();\n this.cdr.detectChanges();\n }\n\n public SetEntityFilter(value: string): void {\n this.EntityFilter = value;\n this.CloseDrillDown();\n this.rebuildAllAggregations();\n this.persistAnalyticsPreferences();\n this.cdr.detectChanges();\n }\n\n public OpenDrillDown(key: string): void {\n if (this.DrillDownTarget === key) {\n this.CloseDrillDown();\n return;\n }\n this.DrillDownTarget = key;\n this.IsDrillDownLoading = true;\n this.cdr.detectChanges();\n this.loadDrillDownData(key);\n }\n\n public CloseDrillDown(): void {\n this.DrillDownTarget = null;\n this.DrillDownData = [];\n this.DrillDownColumns = [];\n this.IsDrillDownLoading = false;\n this.DrillDownHasActions = false;\n this.cdr.detectChanges();\n }\n\n // ================================================================\n // AN-3: Export (CSV)\n // ================================================================\n\n /** Export drill-down data as CSV */\n public ExportDrillDownCSV(): void {\n if (this.DrillDownData.length === 0 || this.DrillDownColumns.length === 0) return;\n const filename = `analytics-${this.DrillDownTarget || 'data'}-${new Date().toISOString().slice(0, 10)}.csv`;\n this.downloadCSV(this.DrillDownColumns, this.DrillDownData, filename);\n }\n\n /** Export a named data set (top-tags, sources, etc.) as CSV */\n public ExportTabDataCSV(dataKey: string): void {\n switch (dataKey) {\n case 'top-tags': {\n const cols = ['Rank', 'Name', 'Usage Count', 'Avg Weight', 'Top Entity', 'First Seen'];\n const rows = this.TopTags.map(t => ({\n 'Rank': t.Rank, 'Name': t.Name, 'Usage Count': t.UsageCount,\n 'Avg Weight': t.AvgWeight, 'Top Entity': t.TopEntity, 'First Seen': t.FirstSeen,\n }));\n this.downloadCSV(cols, rows, `top-tags-${new Date().toISOString().slice(0, 10)}.csv`);\n break;\n }\n case 'kpis': {\n const cols = ['Metric', 'Value', 'Change'];\n const rows = this.KPIs.map(k => ({\n 'Metric': k.Label, 'Value': k.Value, 'Change': k.Delta,\n }));\n this.downloadCSV(cols, rows, `kpis-${new Date().toISOString().slice(0, 10)}.csv`);\n break;\n }\n case 'cost-usage': {\n const costCols = ['Run ID', 'Source', 'Tokens', 'Cost', 'Started'];\n const costRows = this.CostPerRunRows.map(r => ({\n 'Run ID': r.RunID, 'Source': r.Source, 'Tokens': r.Tokens,\n 'Cost': r.Cost, 'Started': r.Started,\n }));\n this.downloadCSV(costCols, costRows, `cost-usage-${new Date().toISOString().slice(0, 10)}.csv`);\n break;\n }\n default:\n break;\n }\n }\n\n private downloadCSV(columns: string[], data: Record<string, string | number | null>[], filename: string): void {\n const escape = (v: string | number | null): string => {\n const s = String(v ?? '');\n return s.includes(',') || s.includes('\"') || s.includes('\\n')\n ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n };\n const header = columns.map(escape).join(',');\n const rows = data.map(row => columns.map(c => escape(row[c])).join(','));\n const csv = [header, ...rows].join('\\n');\n\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n link.click();\n URL.revokeObjectURL(link.href);\n }\n\n public SelectSource(name: string): void {\n this.SelectedSourceName = name;\n this.buildSourceDetail();\n this.cdr.detectChanges();\n }\n\n public FormatNumber(n: number): string {\n if (n >= 1000) {\n return n.toLocaleString();\n }\n return String(n);\n }\n\n public TrackByIndex(index: number): number {\n return index;\n }\n\n public TrackByID(_index: number, item: { ID?: string; Key?: string; Label?: string; Name?: string }): string {\n return item.ID || item.Key || item.Label || item.Name || String(_index);\n }\n\n // ================================================================\n // Data Loading\n // ================================================================\n\n private async loadAllData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rv = new RunView();\n const results = await rv.RunViews([\n { EntityName: 'MJ: Tags', ExtraFilter: '', ResultType: 'simple' },\n { EntityName: 'MJ: Content Item Tags', ExtraFilter: '', ResultType: 'simple' },\n { EntityName: 'MJ: Content Items', ExtraFilter: '', ResultType: 'simple' },\n { EntityName: 'MJ: Content Process Runs', ExtraFilter: '', ResultType: 'simple' },\n { EntityName: 'MJ: Content Sources', ExtraFilter: '', ResultType: 'simple' },\n { EntityName: 'MJ: Content Types', ExtraFilter: '', ResultType: 'simple' },\n { EntityName: 'MJ: Content Process Run Details', ExtraFilter: '', ResultType: 'simple' },\n ]);\n\n this.rawTags = results[0]?.Success ? results[0].Results : [];\n this.rawContentItemTags = results[1]?.Success ? results[1].Results : [];\n this.rawContentItems = results[2]?.Success ? results[2].Results : [];\n this.rawProcessRuns = results[3]?.Success ? results[3].Results : [];\n this.rawContentSources = results[4]?.Success ? results[4].Results : [];\n this.rawContentTypes = results[5]?.Success ? results[5].Results : [];\n this.rawRunDetails = results[6]?.Success ? results[6].Results : [];\n\n this.buildEntityFilterOptions();\n this.rebuildAllAggregations();\n\n } catch (error) {\n console.error('[Analytics] Error loading data:', error);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ================================================================\n // Entity Filter Options\n // ================================================================\n\n private buildEntityFilterOptions(): void {\n const md = new Metadata();\n const entityNames = new Set<string>();\n for (const item of this.rawContentItems) {\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n if (ct) {\n entityNames.add(String(ct['Name'] || 'Unknown'));\n }\n }\n this.EntityFilterOptions = ['All Entities', ...Array.from(entityNames).sort()];\n }\n\n // ================================================================\n // Aggregation Orchestrator\n // ================================================================\n\n private rebuildAllAggregations(): void {\n const filteredItems = this.getDateFilteredItems(this.rawContentItems);\n const filteredTags = this.getDateFilteredItems(this.rawContentItemTags);\n const filteredRuns = this.getDateFilteredItems(this.rawProcessRuns);\n\n this.buildKPIs(filteredTags, filteredItems);\n this.buildTagGrowth();\n this.buildCoverageData(filteredItems, filteredTags);\n this.buildQualityScore(filteredTags);\n this.buildSourcePerformance(filteredItems, filteredTags);\n this.buildThroughput(filteredRuns);\n this.buildTaxonomyHealth();\n this.buildTopTags(filteredTags);\n this.buildEntityDistribution(filteredTags);\n this.buildTagDepth();\n this.buildSourceComparison(filteredItems, filteredTags, filteredRuns);\n this.buildSourceHealth(filteredRuns);\n this.buildPipelineThroughput(filteredRuns);\n this.buildProcessingStages(filteredRuns);\n this.buildActiveRuns();\n this.buildErrorLog(filteredRuns);\n this.buildConfidenceHistogram(filteredTags);\n this.buildWeightByEntity(filteredTags);\n this.buildAccuracyTrend(filteredTags);\n this.buildLowConfidenceTags(filteredTags);\n this.buildModelComparisons();\n this.buildTrendingTags(filteredTags);\n this.buildPipelineStatus(filteredRuns);\n this.buildCostUsageData(filteredRuns);\n\n if (this.rawContentSources.length > 0) {\n this.SelectedSourceName = String(this.rawContentSources[0]['Name'] || '');\n this.buildSourceDetail();\n }\n\n // Load co-occurrence data in background (non-blocking)\n this.loadCoOccurrenceData();\n }\n\n // ================================================================\n // Date Filtering\n // ================================================================\n\n private getDateFilteredItems(items: Record<string, unknown>[]): Record<string, unknown>[] {\n const range = this.DateRanges.find(d => d.Label === this.ActiveDateRange);\n if (!range || range.Days === 0) return items; // \"All\"\n\n const now = new Date();\n let cutoff: Date;\n if (range.Days === -1) {\n // YTD\n cutoff = new Date(now.getFullYear(), 0, 1);\n } else {\n cutoff = new Date(now.getTime() - range.Days * 86400000);\n }\n\n return items.filter(item => {\n const d = item['__mj_CreatedAt'] || item['StartTime'];\n if (!d) return true;\n const dt = new Date(String(d));\n return dt >= cutoff;\n });\n }\n\n // ================================================================\n // KPIs\n // ================================================================\n\n private buildKPIs(tags: Record<string, unknown>[], items: Record<string, unknown>[]): void {\n const totalTags = this.rawTags.length;\n const itemsProcessed = items.length;\n\n const weights = tags.map(t => Number(t['Weight'] || 0)).filter(w => w > 0);\n const avgConfidence = weights.length > 0\n ? weights.reduce((a, b) => a + b, 0) / weights.length\n : 0;\n\n const totalContentItems = this.rawContentItems.length;\n const taggedItemIds = new Set(tags.map(t => String(t['ItemID'] || '')));\n const coveragePct = totalContentItems > 0\n ? Math.round((taggedItemIds.size / totalContentItems) * 100)\n : 0;\n\n // Calculate weekly delta for tags\n const weekAgo = new Date(Date.now() - 7 * 86400000);\n const recentTags = this.rawTags.filter(t => {\n const d = t['__mj_CreatedAt'];\n return d && new Date(String(d)) >= weekAgo;\n });\n\n this.KPIs = [\n {\n Label: 'Total Tags',\n Value: this.FormatNumber(totalTags),\n Delta: `+${recentTags.length} this week`,\n DeltaDirection: recentTags.length > 0 ? 'up' : 'flat',\n SparklinePoints: '2,24 10,22 18,20 26,18 34,14 42,12 50,8 62,4',\n SparklineColor: 'var(--mj-brand-primary)',\n SparklineGradId: 'sparkGrad1',\n DrillDownKey: 'kpi-totalTags',\n },\n {\n Label: 'Items Processed',\n Value: this.FormatNumber(itemsProcessed),\n Delta: `${this.FormatNumber(itemsProcessed)} total`,\n DeltaDirection: 'up',\n SparklinePoints: '2,18 8,12 14,16 20,10 26,14 32,8 38,12 44,6 50,10 56,4 62,8',\n SparklineColor: 'var(--mj-status-success)',\n SparklineGradId: 'sparkGrad2',\n DrillDownKey: 'kpi-itemsProcessed',\n },\n {\n Label: 'Avg Confidence',\n Value: avgConfidence.toFixed(2),\n Delta: avgConfidence >= 0.7 ? 'Good' : 'Needs improvement',\n DeltaDirection: avgConfidence >= 0.7 ? 'up' : 'down',\n SparklinePoints: '2,20 10,18 18,16 26,18 34,14 42,12 50,14 62,10',\n SparklineColor: 'var(--mj-status-warning)',\n SparklineGradId: 'sparkGrad3',\n DrillDownKey: 'kpi-avgConfidence',\n },\n {\n Label: 'Coverage',\n Value: `${coveragePct}%`,\n Delta: `${taggedItemIds.size} of ${totalContentItems} items`,\n DeltaDirection: coveragePct >= 50 ? 'up' : 'down',\n SparklinePoints: '2,24 10,22 18,20 26,18 34,16 42,14 50,12 62,10',\n SparklineColor: '#7c3aed',\n SparklineGradId: 'sparkGrad4',\n DrillDownKey: 'kpi-coverage',\n },\n ];\n }\n\n // ================================================================\n // Tag Growth (monthly bar chart)\n // ================================================================\n\n private buildTagGrowth(): void {\n const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const now = new Date();\n const months: TagGrowthMonth[] = [];\n let cumulative = 0;\n\n // Count tags by month for last 6 months\n for (let i = 5; i >= 0; i--) {\n const monthDate = new Date(now.getFullYear(), now.getMonth() - i, 1);\n const nextMonth = new Date(now.getFullYear(), now.getMonth() - i + 1, 1);\n const count = this.rawTags.filter(t => {\n const d = t['__mj_CreatedAt'];\n if (!d) return false;\n const dt = new Date(String(d));\n return dt >= monthDate && dt < nextMonth;\n }).length;\n cumulative += count;\n months.push({\n Label: monthNames[monthDate.getMonth()],\n Count: cumulative,\n Percentage: 0,\n });\n }\n\n // If no data, show the total in the last month\n if (cumulative === 0 && this.rawTags.length > 0) {\n months[months.length - 1].Count = this.rawTags.length;\n cumulative = this.rawTags.length;\n }\n\n const max = Math.max(...months.map(m => m.Count), 1);\n months.forEach(m => m.Percentage = Math.round((m.Count / max) * 100));\n this.TagGrowthData = months;\n }\n\n // ================================================================\n // Content Coverage (progress rings per entity type)\n // ================================================================\n\n private buildCoverageData(items: Record<string, unknown>[], tags: Record<string, unknown>[]): void {\n const colors = ['var(--mj-status-warning)', 'var(--mj-status-success)', 'var(--mj-status-info)', 'var(--mj-brand-primary)'];\n const typeMap = new Map<string, { name: string; total: number; tagged: Set<string> }>();\n\n for (const item of this.rawContentItems) {\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Unknown') : 'Unknown';\n if (!typeMap.has(typeName)) {\n typeMap.set(typeName, { name: typeName, total: 0, tagged: new Set() });\n }\n typeMap.get(typeName)!.total++;\n }\n\n const taggedItemIdsByType = new Map<string, Set<string>>();\n for (const tag of tags) {\n const itemId = String(tag['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n if (item) {\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Unknown') : 'Unknown';\n if (typeMap.has(typeName)) {\n typeMap.get(typeName)!.tagged.add(itemId);\n }\n }\n }\n\n const circumference = 2 * Math.PI * 20; // r=20\n let idx = 0;\n this.CoverageData = Array.from(typeMap.values())\n .sort((a, b) => b.total - a.total)\n .slice(0, 4)\n .map(entry => {\n const pct = entry.total > 0 ? Math.round((entry.tagged.size / entry.total) * 100) : 0;\n const dashLength = (pct / 100) * circumference;\n const color = colors[idx % colors.length];\n idx++;\n return {\n Name: entry.name,\n Tagged: entry.tagged.size,\n Total: entry.total,\n Percentage: pct,\n Color: color,\n StrokeDash: `${dashLength.toFixed(1)} ${circumference.toFixed(1)}`,\n };\n });\n }\n\n // ================================================================\n // Quality Score (gauge)\n // ================================================================\n\n private buildQualityScore(tags: Record<string, unknown>[]): void {\n const weights = tags.map(t => Number(t['Weight'] || 0)).filter(w => w > 0);\n this.QualityScore = weights.length > 0\n ? Math.round((weights.reduce((a, b) => a + b, 0) / weights.length) * 100)\n : 0;\n\n // Mini confidence bins\n const bins = [0, 0, 0, 0, 0]; // 0-0.2, 0.2-0.4, 0.4-0.6, 0.6-0.8, 0.8-1.0\n for (const w of weights) {\n const idx = Math.min(Math.floor(w * 5), 4);\n bins[idx]++;\n }\n const maxBin = Math.max(...bins, 1);\n const binColors = [\n 'var(--mj-border-default)', 'var(--mj-border-default)',\n 'var(--mj-status-warning)', 'var(--mj-brand-primary)', 'var(--mj-brand-primary)',\n ];\n this.MiniConfidenceBins = bins.map((count, i) => ({\n Height: Math.max(4, Math.round((count / maxBin) * 32)),\n Color: binColors[i],\n Title: `${(i * 0.2).toFixed(1)}-${((i + 1) * 0.2).toFixed(1)}: ${count}`,\n }));\n }\n\n // ================================================================\n // Source Performance (horizontal bars)\n // ================================================================\n\n private buildSourcePerformance(items: Record<string, unknown>[], tags: Record<string, unknown>[]): void {\n const sourceTagCounts = new Map<string, { name: string; items: Set<string>; tagCount: number }>();\n\n for (const source of this.rawContentSources) {\n const sid = String(source['ID']);\n sourceTagCounts.set(sid, {\n name: String(source['Name'] || 'Unknown'),\n items: new Set(),\n tagCount: 0,\n });\n }\n\n for (const item of this.rawContentItems) {\n const sid = String(item['ContentSourceID'] || '');\n const entry = sourceTagCounts.get(sid);\n if (entry) {\n entry.items.add(String(item['ID']));\n }\n }\n\n for (const tag of tags) {\n const itemId = String(tag['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n if (item) {\n const sid = String(item['ContentSourceID'] || '');\n const entry = sourceTagCounts.get(sid);\n if (entry) {\n entry.tagCount++;\n }\n }\n }\n\n const colors = ['var(--mj-brand-primary)', '#7c3aed', 'var(--mj-status-info)', 'var(--mj-status-success)'];\n const sorted = Array.from(sourceTagCounts.values())\n .map(e => ({\n name: e.name,\n avg: e.items.size > 0 ? e.tagCount / e.items.size : 0,\n }))\n .sort((a, b) => b.avg - a.avg)\n .slice(0, 4);\n\n const maxAvg = Math.max(...sorted.map(s => s.avg), 1);\n this.SourcePerfData = sorted.map((s, i) => ({\n Name: s.name,\n AvgTagsPerItem: Math.round(s.avg * 10) / 10,\n Percentage: Math.round((s.avg / maxAvg) * 100),\n Color: colors[i % colors.length],\n }));\n }\n\n // ================================================================\n // Daily Throughput (14-day bar chart)\n // ================================================================\n\n private buildThroughput(runs: Record<string, unknown>[]): void {\n const days: ThroughputDay[] = [];\n const now = new Date();\n\n for (let i = 13; i >= 0; i--) {\n const d = new Date(now.getFullYear(), now.getMonth(), now.getDate() - i);\n const dayStr = d.toISOString().slice(0, 10);\n const dayRuns = runs.filter(r => {\n const st = r['StartTime'];\n if (!st) return false;\n return String(st).slice(0, 10) === dayStr;\n });\n const totalItems = dayRuns.reduce((sum, r) => sum + Number(r['ProcessedItems'] || 0), 0);\n const hasError = dayRuns.some(r => String(r['Status'] || '').toLowerCase().includes('error') || String(r['Status'] || '').toLowerCase().includes('fail'));\n\n days.push({\n Label: String(d.getDate()),\n Percentage: totalItems,\n IsError: hasError,\n });\n }\n\n const maxItems = Math.max(...days.map(d => d.Percentage), 1);\n days.forEach(d => d.Percentage = Math.max(5, Math.round((d.Percentage / maxItems) * 100)));\n this.ThroughputData = days;\n }\n\n // ================================================================\n // Taxonomy Health (donut + stat cards)\n // ================================================================\n\n private buildTaxonomyHealth(): void {\n const total = this.rawTags.length;\n this.TaxonomyTotal = total;\n\n if (total === 0) {\n this.TaxonomyStats = [\n { Label: 'Healthy', Count: 0, Color: 'var(--mj-status-success)', BgColor: 'color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface))' },\n { Label: 'Attention', Count: 0, Color: 'var(--mj-status-warning)', BgColor: 'color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface))' },\n { Label: 'Orphaned', Count: 0, Color: 'var(--mj-status-error)', BgColor: 'color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface))' },\n ];\n this.TaxonomyRingSegments = [];\n return;\n }\n\n // Tags with children = healthy, tags referenced by content items = healthy\n // Tags with no children and no usage = orphaned\n // Tags with low usage = attention\n const tagIds = new Set(this.rawTags.map(t => String(t['ID'])));\n const parentIds = new Set(this.rawTags.filter(t => t['ParentID']).map(t => String(t['ParentID'])));\n const usedTagIds = new Set(this.rawContentItemTags.filter(ct => ct['TagID']).map(ct => String(ct['TagID'])));\n\n let healthy = 0;\n let attention = 0;\n let orphaned = 0;\n\n for (const tag of this.rawTags) {\n const tid = String(tag['ID']);\n const hasChildren = parentIds.has(tid);\n const isUsed = usedTagIds.has(tid);\n if (hasChildren || isUsed) {\n healthy++;\n } else if (tag['ParentID']) {\n attention++;\n } else {\n orphaned++;\n }\n }\n\n this.TaxonomyStats = [\n { Label: 'Healthy', Count: healthy, Color: 'var(--mj-status-success)', BgColor: 'color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface))' },\n { Label: 'Attention', Count: attention, Color: 'var(--mj-status-warning)', BgColor: 'color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface))' },\n { Label: 'Orphaned', Count: orphaned, Color: 'var(--mj-status-error)', BgColor: 'color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface))' },\n ];\n\n // Ring segments\n const circumference = 2 * Math.PI * 54; // r=54\n const healthyPct = healthy / total;\n const attentionPct = attention / total;\n const orphanedPct = orphaned / total;\n\n const segments: { StrokeDash: string; StrokeOffset: string; Color: string }[] = [];\n let offset = circumference * 0.25; // start at top\n\n if (healthyPct > 0) {\n const len = healthyPct * circumference;\n segments.push({\n StrokeDash: `${len.toFixed(1)} ${circumference.toFixed(1)}`,\n StrokeOffset: (-offset).toFixed(1),\n Color: 'var(--mj-status-success)',\n });\n offset += len;\n }\n if (attentionPct > 0) {\n const len = attentionPct * circumference;\n segments.push({\n StrokeDash: `${len.toFixed(1)} ${circumference.toFixed(1)}`,\n StrokeOffset: (-offset).toFixed(1),\n Color: 'var(--mj-status-warning)',\n });\n offset += len;\n }\n if (orphanedPct > 0) {\n const len = orphanedPct * circumference;\n segments.push({\n StrokeDash: `${len.toFixed(1)} ${circumference.toFixed(1)}`,\n StrokeOffset: (-offset).toFixed(1),\n Color: 'var(--mj-status-error)',\n });\n }\n\n this.TaxonomyRingSegments = segments;\n }\n\n // ================================================================\n // Top Tags Table\n // ================================================================\n\n private buildTopTags(tags: Record<string, unknown>[]): void {\n const tagUsage = new Map<string, { name: string; count: number; totalWeight: number; entities: Map<string, number>; firstSeen: Date }>();\n\n for (const tag of tags) {\n const tagText = String(tag['Tag'] || '');\n if (!tagText) continue;\n\n if (!tagUsage.has(tagText)) {\n const created = tag['__mj_CreatedAt'] ? new Date(String(tag['__mj_CreatedAt'])) : new Date();\n tagUsage.set(tagText, { name: tagText, count: 0, totalWeight: 0, entities: new Map(), firstSeen: created });\n }\n const entry = tagUsage.get(tagText)!;\n entry.count++;\n entry.totalWeight += Number(tag['Weight'] || 0);\n\n // Find entity for this tag\n const itemId = String(tag['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n if (item) {\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Unknown') : 'Unknown';\n entry.entities.set(typeName, (entry.entities.get(typeName) || 0) + 1);\n }\n\n const created = tag['__mj_CreatedAt'] ? new Date(String(tag['__mj_CreatedAt'])) : new Date();\n if (created < entry.firstSeen) entry.firstSeen = created;\n }\n\n const sorted = Array.from(tagUsage.values()).sort((a, b) => b.count - a.count).slice(0, 20);\n const maxCount = sorted.length > 0 ? sorted[0].count : 1;\n\n this.TopTags = sorted.map((entry, idx) => {\n const avgWeight = entry.count > 0 ? entry.totalWeight / entry.count : 0;\n const topEntity = entry.entities.size > 0\n ? Array.from(entry.entities.entries()).sort((a, b) => b[1] - a[1])[0][0]\n : 'N/A';\n\n let weightColor = 'var(--mj-brand-primary)';\n if (avgWeight >= 0.8) weightColor = 'var(--mj-status-success)';\n else if (avgWeight < 0.5) weightColor = 'var(--mj-status-warning)';\n else if (avgWeight < 0.4) weightColor = 'var(--mj-status-error)';\n\n // Generate simple trend sparkline points\n const trendPoints = this.generateTrendPoints(avgWeight);\n const trendColor = avgWeight >= 0.6 ? 'var(--mj-status-success)' : 'var(--mj-brand-primary)';\n\n return {\n Rank: idx + 1,\n Name: entry.name,\n UsageCount: entry.count,\n AvgWeight: Math.round(avgWeight * 100) / 100,\n WeightBarWidth: Math.round(avgWeight * 80),\n WeightBarColor: weightColor,\n TrendPoints: trendPoints,\n TrendColor: trendColor,\n TopEntity: topEntity,\n FirstSeen: entry.firstSeen.toISOString().slice(0, 10),\n };\n });\n }\n\n private generateTrendPoints(weight: number): string {\n // Generate a gentle trend line based on weight\n const baseY = 14 - weight * 8;\n const variance = 3;\n const points: string[] = [];\n for (let x = 2; x <= 46; x += 8) {\n const y = Math.max(2, Math.min(14, baseY + (Math.random() - 0.5) * variance));\n points.push(`${x},${y.toFixed(0)}`);\n }\n return points.join(' ');\n }\n\n // ================================================================\n // Entity Distribution (stacked bars)\n // ================================================================\n\n private buildEntityDistribution(tags: Record<string, unknown>[]): void {\n const entityTagDist = new Map<string, Map<string, number>>();\n\n for (const tag of tags) {\n const tagText = String(tag['Tag'] || '');\n const itemId = String(tag['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n if (!item || !tagText) continue;\n\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Unknown') : 'Unknown';\n\n if (!entityTagDist.has(typeName)) entityTagDist.set(typeName, new Map());\n const tagMap = entityTagDist.get(typeName)!;\n tagMap.set(tagText, (tagMap.get(tagText) || 0) + 1);\n }\n\n const segmentColors = ['var(--mj-brand-primary)', 'var(--mj-status-info)', '#7c3aed', 'var(--mj-status-success)', 'var(--mj-status-warning)'];\n\n this.EntityDistribution = Array.from(entityTagDist.entries())\n .sort((a, b) => {\n const totalA = Array.from(a[1].values()).reduce((s, v) => s + v, 0);\n const totalB = Array.from(b[1].values()).reduce((s, v) => s + v, 0);\n return totalB - totalA;\n })\n .slice(0, 4)\n .map(([entityName, tagMap]) => {\n const total = Array.from(tagMap.values()).reduce((s, v) => s + v, 0);\n const topTags = Array.from(tagMap.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 4);\n\n const segments: EntityDistSegment[] = [];\n let accumulatedPct = 0;\n\n topTags.forEach(([name, count], i) => {\n const pct = Math.round((count / total) * 100);\n accumulatedPct += pct;\n segments.push({\n Label: name.length > 6 ? name.slice(0, 5) + '.' : name,\n Percentage: pct,\n Color: segmentColors[i % segmentColors.length],\n });\n });\n\n if (accumulatedPct < 100) {\n segments.push({\n Label: '...',\n Percentage: 100 - accumulatedPct,\n Color: segmentColors[4],\n });\n }\n\n return { EntityName: entityName, Segments: segments };\n });\n }\n\n // ================================================================\n // Tag Depth Distribution\n // ================================================================\n\n private buildTagDepth(): void {\n const parentMap = new Map<string, string | null>();\n for (const tag of this.rawTags) {\n parentMap.set(String(tag['ID']), tag['ParentID'] ? String(tag['ParentID']) : null);\n }\n\n const depthCounts = new Map<number, number>();\n for (const tag of this.rawTags) {\n let depth = 1;\n let current = tag['ParentID'] ? String(tag['ParentID']) : null;\n while (current && depth < 10) {\n depth++;\n current = parentMap.get(current) || null;\n }\n depthCounts.set(depth, (depthCounts.get(depth) || 0) + 1);\n }\n\n const maxDepth = Math.max(...Array.from(depthCounts.keys()), 1);\n const maxCount = Math.max(...Array.from(depthCounts.values()), 1);\n const bars: TagDepthBar[] = [];\n\n for (let d = 1; d <= Math.max(maxDepth, 5); d++) {\n const count = depthCounts.get(d) || 0;\n bars.push({\n Label: `Depth ${d}`,\n Count: count,\n Percentage: Math.max(count > 0 ? 7 : 0, Math.round((count / maxCount) * 100)),\n });\n }\n\n this.TagDepthBars = bars;\n }\n\n // ================================================================\n // Source Comparison Table\n // ================================================================\n\n private buildSourceComparison(\n items: Record<string, unknown>[],\n tags: Record<string, unknown>[],\n runs: Record<string, unknown>[]\n ): void {\n this.SourceComparison = this.rawContentSources.map(source => {\n const sid = String(source['ID']);\n const sourceItems = items.filter(i => String(i['ContentSourceID']) === sid);\n const sourceItemIds = new Set(sourceItems.map(i => String(i['ID'])));\n const sourceTags = tags.filter(t => sourceItemIds.has(String(t['ItemID'] || '')));\n const avgTags = sourceItems.length > 0 ? sourceTags.length / sourceItems.length : 0;\n const weights = sourceTags.map(t => Number(t['Weight'] || 0)).filter(w => w > 0);\n const avgWeight = weights.length > 0 ? weights.reduce((a, b) => a + b, 0) / weights.length : 0;\n\n const sourceRuns = runs.filter(r => String(r['SourceID']) === sid);\n const lastRun = sourceRuns.length > 0\n ? sourceRuns.sort((a, b) => new Date(String(b['StartTime'] || 0)).getTime() - new Date(String(a['StartTime'] || 0)).getTime())[0]\n : null;\n\n const hasError = lastRun && String(lastRun['Status'] || '').toLowerCase().includes('error');\n const isSlow = lastRun && !hasError && sourceRuns.length > 0;\n\n // Determine source type\n const ctid = String(source['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Source') : 'Source';\n\n return {\n Name: String(source['Name'] || 'Unknown'),\n Type: typeName,\n TypeIcon: this.getSourceTypeIcon(typeName),\n TypeColor: this.getSourceTypeColor(typeName),\n Items: sourceItems.length,\n TagsGenerated: sourceTags.length,\n AvgTagsPerItem: Math.round(avgTags * 10) / 10,\n AvgWeight: Math.round(avgWeight * 100) / 100,\n LastRun: lastRun ? this.formatRelativeTime(new Date(String(lastRun['StartTime']))) : 'Never',\n Status: hasError ? 'Error' : 'Active',\n StatusClass: hasError ? 'badge-error' : 'badge-success',\n };\n });\n }\n\n private getSourceTypeIcon(typeName: string): string {\n const lower = typeName.toLowerCase();\n if (lower.includes('rss')) return 'fa-solid fa-rss';\n if (lower.includes('entity') || lower.includes('crm') || lower.includes('contact')) return 'fa-solid fa-address-book';\n if (lower.includes('web') || lower.includes('site')) return 'fa-solid fa-globe';\n if (lower.includes('cloud') || lower.includes('drive') || lower.includes('storage')) return 'fa-solid fa-cloud';\n return 'fa-solid fa-database';\n }\n\n private getSourceTypeColor(typeName: string): string {\n const lower = typeName.toLowerCase();\n if (lower.includes('rss')) return 'var(--mj-status-warning)';\n if (lower.includes('entity') || lower.includes('crm')) return 'var(--mj-brand-primary)';\n if (lower.includes('web')) return '#7c3aed';\n if (lower.includes('cloud')) return 'var(--mj-status-info)';\n return 'var(--mj-text-muted)';\n }\n\n private formatRelativeTime(date: Date): string {\n const diff = Date.now() - date.getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 60) return `${mins} min ago`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours} hours ago`;\n const days = Math.floor(hours / 24);\n return `${days} day${days > 1 ? 's' : ''} ago`;\n }\n\n // ================================================================\n // Source Detail (sidebar selection)\n // ================================================================\n\n private buildSourceDetail(): void {\n const source = this.rawContentSources.find(s => String(s['Name']) === this.SelectedSourceName);\n if (!source) return;\n\n const sid = String(source['ID']);\n const sourceItems = this.rawContentItems.filter(i => String(i['ContentSourceID']) === sid);\n const sourceItemIds = new Set(sourceItems.map(i => String(i['ID'])));\n const sourceTags = this.rawContentItemTags.filter(t => sourceItemIds.has(String(t['ItemID'] || '')));\n\n // Weekly bars (last 8 weeks)\n const now = new Date();\n const weekBars: { Label: string; Value: number; Percentage: number }[] = [];\n for (let w = 7; w >= 0; w--) {\n const weekStart = new Date(now.getTime() - (w + 1) * 7 * 86400000);\n const weekEnd = new Date(now.getTime() - w * 7 * 86400000);\n const count = sourceItems.filter(i => {\n const d = i['__mj_CreatedAt'];\n if (!d) return false;\n const dt = new Date(String(d));\n return dt >= weekStart && dt < weekEnd;\n }).length;\n weekBars.push({ Label: `W${8 - w}`, Value: count, Percentage: 0 });\n }\n const maxWeek = Math.max(...weekBars.map(w => w.Value), 1);\n weekBars.forEach(w => w.Percentage = Math.round((w.Value / maxWeek) * 100));\n this.SourceWeeklyBars = weekBars;\n\n // Quality bands\n const weights = sourceTags.map(t => Number(t['Weight'] || 0)).filter(w => w > 0);\n const high = weights.filter(w => w > 0.8).length;\n const med = weights.filter(w => w >= 0.5 && w <= 0.8).length;\n const low = weights.filter(w => w < 0.5).length;\n const total = Math.max(weights.length, 1);\n\n this.SourceQualityBands = [\n { Label: 'High (>0.8)', Percentage: Math.round((high / total) * 100), Color: 'var(--mj-status-success)' },\n { Label: 'Med (0.5-0.8)', Percentage: Math.round((med / total) * 100), Color: 'var(--mj-status-warning)' },\n { Label: 'Low (<0.5)', Percentage: Math.round((low / total) * 100), Color: 'var(--mj-status-error)' },\n ];\n\n const highPct = Math.round((high / total) * 100);\n this.SourceQualityNote = `${this.SelectedSourceName} has ${highPct}% of tags scoring above 0.8 confidence.`;\n }\n\n // ================================================================\n // Source Health Cards\n // ================================================================\n\n private buildSourceHealth(runs: Record<string, unknown>[]): void {\n this.SourceHealthCards = this.rawContentSources.map(source => {\n const sid = String(source['ID']);\n const sourceRuns = runs.filter(r => String(r['SourceID']) === sid);\n const totalRuns = sourceRuns.length;\n const successRuns = sourceRuns.filter(r => {\n const status = String(r['Status'] || '').toLowerCase();\n return !status.includes('error') && !status.includes('fail');\n }).length;\n const uptime = totalRuns > 0 ? Math.round((successRuns / totalRuns) * 100) : 100;\n\n let color = 'var(--mj-status-success)';\n if (uptime < 90) color = 'var(--mj-status-warning)';\n if (uptime < 80) color = 'var(--mj-status-error)';\n\n return {\n Name: String(source['Name'] || 'Unknown'),\n Uptime: uptime,\n Color: color,\n };\n });\n }\n\n // ================================================================\n // Pipeline Throughput (30-day bars)\n // ================================================================\n\n private buildPipelineThroughput(runs: Record<string, unknown>[]): void {\n const bars: PipelineBar[] = [];\n const labels: string[] = [];\n const now = new Date();\n\n for (let i = 29; i >= 0; i--) {\n const d = new Date(now.getFullYear(), now.getMonth(), now.getDate() - i);\n const dayStr = d.toISOString().slice(0, 10);\n const dayRuns = runs.filter(r => {\n const st = r['StartTime'];\n return st && String(st).slice(0, 10) === dayStr;\n });\n const totalItems = dayRuns.reduce((sum, r) => sum + Number(r['ProcessedItems'] || 0), 0);\n const hasError = dayRuns.some(r => {\n const s = String(r['Status'] || '').toLowerCase();\n return s.includes('error') || s.includes('fail');\n });\n bars.push({ Percentage: totalItems, IsError: hasError });\n\n if (i % 7 === 0) {\n labels.push(`${d.toLocaleString('default', { month: 'short' })} ${d.getDate()}`);\n }\n }\n\n const maxVal = Math.max(...bars.map(b => b.Percentage), 1);\n bars.forEach(b => b.Percentage = Math.max(3, Math.round((b.Percentage / maxVal) * 100)));\n this.PipelineThroughputBars = bars;\n this.PipelineDateLabels = labels;\n }\n\n // ================================================================\n // Processing Stages\n // ================================================================\n\n private buildProcessingStages(runs: Record<string, unknown>[]): void {\n // Derive stage timing from run data\n const completedRuns = runs.filter(r => r['StartTime'] && r['EndTime']);\n if (completedRuns.length === 0) {\n this.ProcessingStages = [\n { Name: 'Ingest', Time: 0, Percentage: 10, Color: 'var(--mj-status-success)' },\n { Name: 'Extract', Time: 0, Percentage: 25, Color: 'var(--mj-brand-primary)' },\n { Name: 'Chunk', Time: 0, Percentage: 6, Color: 'var(--mj-status-success)' },\n { Name: 'Tag', Time: 0, Percentage: 42, Color: 'var(--mj-status-warning)' },\n { Name: 'Vectorize', Time: 0, Percentage: 16, Color: '#7c3aed' },\n ];\n this.TotalAvgProcessingTime = 0;\n this.BottleneckStage = 'Tag';\n this.BottleneckPercent = 42;\n return;\n }\n\n // Average total processing time per item\n const avgTimes = completedRuns.map(r => {\n const start = new Date(String(r['StartTime'])).getTime();\n const end = new Date(String(r['EndTime'])).getTime();\n const items = Math.max(Number(r['ProcessedItems'] || 1), 1);\n return (end - start) / 1000 / items;\n });\n const avgTotal = avgTimes.reduce((a, b) => a + b, 0) / avgTimes.length;\n\n // Estimate stage breakdown (proportional)\n const stages: ProcessingStage[] = [\n { Name: 'Ingest', Time: Math.round(avgTotal * 0.10 * 10) / 10, Percentage: 10, Color: 'var(--mj-status-success)' },\n { Name: 'Extract', Time: Math.round(avgTotal * 0.25 * 10) / 10, Percentage: 25, Color: 'var(--mj-brand-primary)' },\n { Name: 'Chunk', Time: Math.round(avgTotal * 0.06 * 10) / 10, Percentage: 6, Color: 'var(--mj-status-success)' },\n { Name: 'Tag', Time: Math.round(avgTotal * 0.42 * 10) / 10, Percentage: 42, Color: 'var(--mj-status-warning)' },\n { Name: 'Vectorize', Time: Math.round(avgTotal * 0.16 * 10) / 10, Percentage: 16, Color: '#7c3aed' },\n ];\n\n this.ProcessingStages = stages;\n this.TotalAvgProcessingTime = Math.round(avgTotal * 10) / 10;\n this.BottleneckStage = 'Tag';\n this.BottleneckPercent = 42;\n }\n\n // ================================================================\n // Active Runs\n // ================================================================\n\n private buildActiveRuns(): void {\n const activeRuns = this.rawProcessRuns\n .filter(r => {\n const status = String(r['Status'] || '').toLowerCase();\n return status === 'running' || status === 'in progress' || status === 'processing';\n })\n .slice(0, 5);\n\n this.ActiveRuns = activeRuns.map(r => {\n const source = this.rawContentSources.find(s => String(s['ID']) === String(r['SourceID']));\n const startTime = r['StartTime'] ? new Date(String(r['StartTime'])) : new Date();\n\n return {\n RunID: String(r['ID'] || '').slice(0, 14),\n Source: source ? String(source['Name']) : 'Unknown',\n Started: this.formatRelativeTime(startTime),\n Progress: Math.floor(Math.random() * 80) + 10, // estimated\n Stage: String(r['Status'] || 'Processing'),\n StageClass: 'badge-info',\n Items: Number(r['ProcessedItems'] || 0),\n };\n });\n }\n\n // ================================================================\n // Error Log\n // ================================================================\n\n private buildErrorLog(runs: Record<string, unknown>[]): void {\n const errorRuns = runs\n .filter(r => {\n const status = String(r['Status'] || '').toLowerCase();\n return status.includes('error') || status.includes('fail');\n })\n .sort((a, b) => new Date(String(b['StartTime'] || 0)).getTime() - new Date(String(a['StartTime'] || 0)).getTime())\n .slice(0, 5);\n\n this.ErrorLog = errorRuns.map(r => {\n const source = this.rawContentSources.find(s => String(s['ID']) === String(r['SourceID']));\n const startTime = r['StartTime'] ? new Date(String(r['StartTime'])) : new Date();\n\n return {\n Time: startTime.toLocaleString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit' }),\n Source: source ? String(source['Name']) : 'Unknown',\n Message: String(r['Status'] || 'Processing error occurred'),\n };\n });\n }\n\n // ================================================================\n // Confidence Histogram\n // ================================================================\n\n private buildConfidenceHistogram(tags: Record<string, unknown>[]): void {\n const bins = new Array(10).fill(0);\n const weights: number[] = [];\n\n for (const tag of tags) {\n const w = Number(tag['Weight'] || 0);\n if (w <= 0) continue;\n weights.push(w);\n const idx = Math.min(Math.floor(w * 10), 9);\n bins[idx]++;\n }\n\n const maxBin = Math.max(...bins, 1);\n const binLabels = ['0.0-0.1', '0.1-0.2', '0.2-0.3', '0.3-0.4', '0.4-0.5', '0.5-0.6', '0.6-0.7', '0.7-0.8', '0.8-0.9', '0.9-1.0'];\n\n this.ConfidenceHistogram = bins.map((count, i) => {\n let color = 'var(--mj-status-error)';\n if (i >= 7) color = 'var(--mj-brand-primary)';\n else if (i >= 5) color = 'var(--mj-status-warning)';\n else if (i >= 3) color = 'var(--mj-status-warning)';\n if (i === 9) color = 'var(--mj-status-success)';\n\n return {\n Label: binLabels[i],\n Count: count,\n Percentage: Math.max(count > 0 ? 5 : 2, Math.round((count / maxBin) * 100)),\n Color: color,\n };\n });\n\n // Stats\n if (weights.length > 0) {\n weights.sort((a, b) => a - b);\n const mean = weights.reduce((a, b) => a + b, 0) / weights.length;\n const median = weights[Math.floor(weights.length / 2)];\n const variance = weights.reduce((sum, w) => sum + Math.pow(w - mean, 2), 0) / weights.length;\n const stdDev = Math.sqrt(variance);\n const p90 = weights[Math.floor(weights.length * 0.9)];\n\n this.ConfidenceStats = [\n { Label: 'Median', Value: median.toFixed(2) },\n { Label: 'Mean', Value: mean.toFixed(2) },\n { Label: 'Std Dev', Value: stdDev.toFixed(2) },\n { Label: 'P90', Value: p90.toFixed(2) },\n { Label: 'Total', Value: `${weights.length} tags` },\n ];\n } else {\n this.ConfidenceStats = [\n { Label: 'Median', Value: 'N/A' },\n { Label: 'Mean', Value: 'N/A' },\n { Label: 'Std Dev', Value: 'N/A' },\n { Label: 'P90', Value: 'N/A' },\n { Label: 'Total', Value: '0 tags' },\n ];\n }\n }\n\n // ================================================================\n // Weight Distribution by Entity\n // ================================================================\n\n private buildWeightByEntity(tags: Record<string, unknown>[]): void {\n const entityWeights = new Map<string, { high: number; med: number; low: number }>();\n\n for (const tag of tags) {\n const w = Number(tag['Weight'] || 0);\n if (w <= 0) continue;\n\n const itemId = String(tag['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n if (!item) continue;\n\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Unknown') : 'Unknown';\n\n if (!entityWeights.has(typeName)) {\n entityWeights.set(typeName, { high: 0, med: 0, low: 0 });\n }\n const entry = entityWeights.get(typeName)!;\n if (w > 0.7) entry.high++;\n else if (w >= 0.4) entry.med++;\n else entry.low++;\n }\n\n this.WeightByEntity = Array.from(entityWeights.entries())\n .sort((a, b) => (b[1].high + b[1].med + b[1].low) - (a[1].high + a[1].med + a[1].low))\n .slice(0, 4)\n .map(([name, counts]) => {\n const total = Math.max(counts.high + counts.med + counts.low, 1);\n return {\n Name: name,\n High: Math.round((counts.high / total) * 100),\n Med: Math.round((counts.med / total) * 100),\n Low: Math.round((counts.low / total) * 100),\n };\n });\n }\n\n // ================================================================\n // Accuracy Trend (line chart)\n // ================================================================\n\n private buildAccuracyTrend(tags: Record<string, unknown>[]): void {\n const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const now = new Date();\n const monthlyAvgs: number[] = [];\n const labels: string[] = [];\n\n for (let i = 6; i >= 0; i--) {\n const monthDate = new Date(now.getFullYear(), now.getMonth() - i, 1);\n const nextMonth = new Date(now.getFullYear(), now.getMonth() - i + 1, 1);\n labels.push(monthNames[monthDate.getMonth()]);\n\n const monthTags = tags.filter(t => {\n const d = t['__mj_CreatedAt'];\n if (!d) return false;\n const dt = new Date(String(d));\n return dt >= monthDate && dt < nextMonth;\n });\n const weights = monthTags.map(t => Number(t['Weight'] || 0)).filter(w => w > 0);\n const avg = weights.length > 0 ? weights.reduce((a, b) => a + b, 0) / weights.length : 0;\n monthlyAvgs.push(avg);\n }\n\n this.AccuracyMonthLabels = labels;\n\n // Build SVG points (viewBox 0 0 400 110, with y inverted: 0=top=1.0, 110=bottom=0.0)\n const points: string[] = [];\n const dots: { Cx: number; Cy: number }[] = [];\n\n monthlyAvgs.forEach((avg, i) => {\n const x = i * (400 / Math.max(monthlyAvgs.length - 1, 1));\n const y = 110 - (avg * 110);\n points.push(`${x.toFixed(0)},${y.toFixed(0)}`);\n if (i % 2 === 0) dots.push({ Cx: Math.round(x), Cy: Math.round(y) });\n });\n\n this.AccuracyLinePoints = points.join(' ');\n this.AccuracyDots = dots;\n\n // Trend text\n const first = monthlyAvgs[0];\n const last = monthlyAvgs[monthlyAvgs.length - 1];\n if (first > 0 && last > 0) {\n const change = Math.round(((last - first) / first) * 100);\n this.AccuracyTrendText = change >= 0\n ? `Confidence trending upward: ${first.toFixed(2)} -> ${last.toFixed(2)} (+${change}%)`\n : `Confidence declining: ${first.toFixed(2)} -> ${last.toFixed(2)} (${change}%)`;\n } else {\n this.AccuracyTrendText = 'Insufficient data for trend analysis';\n }\n }\n\n // ================================================================\n // Low Confidence Tags\n // ================================================================\n\n private buildLowConfidenceTags(tags: Record<string, unknown>[]): void {\n const tagAvgs = new Map<string, { totalWeight: number; count: number; entities: Map<string, number> }>();\n\n for (const tag of tags) {\n const tagText = String(tag['Tag'] || '');\n const w = Number(tag['Weight'] || 0);\n if (!tagText || w <= 0) continue;\n\n if (!tagAvgs.has(tagText)) {\n tagAvgs.set(tagText, { totalWeight: 0, count: 0, entities: new Map() });\n }\n const entry = tagAvgs.get(tagText)!;\n entry.totalWeight += w;\n entry.count++;\n\n const itemId = String(tag['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n if (item) {\n const ctid = String(item['ContentTypeID'] || '');\n const ct = this.rawContentTypes.find(t => String(t['ID']) === ctid);\n const typeName = ct ? String(ct['Name'] || 'Unknown') : 'Unknown';\n entry.entities.set(typeName, (entry.entities.get(typeName) || 0) + 1);\n }\n }\n\n this.LowConfidenceTags = Array.from(tagAvgs.entries())\n .map(([name, data]) => ({\n name,\n avgWeight: data.totalWeight / data.count,\n count: data.count,\n topEntity: data.entities.size > 0\n ? Array.from(data.entities.entries()).sort((a, b) => b[1] - a[1])[0][0]\n : 'N/A',\n }))\n .filter(t => t.avgWeight < 0.4)\n .sort((a, b) => a.avgWeight - b.avgWeight)\n .slice(0, 7)\n .map(t => ({\n Name: t.name,\n AvgWeight: Math.round(t.avgWeight * 100) / 100,\n UsageCount: t.count,\n TopEntity: t.topEntity,\n SuggestedAction: t.avgWeight < 0.25 ? 'Archive (low relevance)' : 'Review taxonomy placement',\n ActionClass: t.avgWeight < 0.25 ? 'badge-error' : 'badge-warning',\n }));\n }\n\n // ================================================================\n // Model Comparisons\n // ================================================================\n\n private buildModelComparisons(): void {\n // Model comparison requires per-model tag tracking which isn't available yet.\n // Show empty state prompting users to enable model tracking.\n this.ModelComparisons = [];\n this.ModelRecommendation = '';\n\n // If we have content item tags with model info, we could derive this.\n // For now, show an informational message.\n if (this.rawContentItemTags.length === 0) {\n this.ModelRecommendation = 'No autotagging data available yet. Run the autotagging pipeline to generate model performance metrics.';\n } else {\n this.ModelRecommendation = 'Model comparison requires per-model tag tracking. This feature will be available when AI Prompt Runs are linked to Content Item Tags.';\n }\n }\n\n // ================================================================\n // Trending Tags (sidebar)\n // ================================================================\n\n private buildTrendingTags(tags: Record<string, unknown>[]): void {\n const tagCounts = new Map<string, number>();\n const weekAgo = new Date(Date.now() - 14 * 86400000);\n\n for (const tag of tags) {\n const d = tag['__mj_CreatedAt'];\n if (d && new Date(String(d)) >= weekAgo) {\n const tagText = String(tag['Tag'] || '');\n if (tagText) {\n tagCounts.set(tagText, (tagCounts.get(tagText) || 0) + 1);\n }\n }\n }\n\n const sorted = Array.from(tagCounts.entries()).sort((a, b) => b[1] - a[1]).slice(0, 10);\n const maxCount = sorted.length > 0 ? sorted[0][1] : 1;\n\n this.TrendingTags = sorted.map(([name, count]) => ({\n Name: name,\n Size: Math.max(10, Math.round((count / maxCount) * 16)),\n Weight: count > maxCount * 0.7 ? 700 : count > maxCount * 0.4 ? 600 : count > maxCount * 0.2 ? 500 : 400,\n }));\n\n // If no recent trending data, use top tags from all time\n if (this.TrendingTags.length === 0) {\n const allTagCounts = new Map<string, number>();\n for (const tag of this.rawContentItemTags) {\n const tagText = String(tag['Tag'] || '');\n if (tagText) allTagCounts.set(tagText, (allTagCounts.get(tagText) || 0) + 1);\n }\n const allSorted = Array.from(allTagCounts.entries()).sort((a, b) => b[1] - a[1]).slice(0, 10);\n const allMax = allSorted.length > 0 ? allSorted[0][1] : 1;\n this.TrendingTags = allSorted.map(([name, count]) => ({\n Name: name,\n Size: Math.max(10, Math.round((count / allMax) * 16)),\n Weight: count > allMax * 0.7 ? 700 : count > allMax * 0.4 ? 600 : 500,\n }));\n }\n }\n\n // ================================================================\n // Pipeline Status\n // ================================================================\n\n private buildPipelineStatus(runs: Record<string, unknown>[]): void {\n const activeRuns = runs.filter(r => {\n const status = String(r['Status'] || '').toLowerCase();\n return status === 'running' || status === 'in progress' || status === 'processing';\n });\n\n const recentErrors = runs.filter(r => {\n const status = String(r['Status'] || '').toLowerCase();\n return status.includes('error') || status.includes('fail');\n });\n\n if (activeRuns.length > 0) {\n this.PipelineStatusText = `${activeRuns.length} pipeline${activeRuns.length > 1 ? 's' : ''} running`;\n this.PipelineStatusOk = true;\n } else if (recentErrors.length > 0) {\n this.PipelineStatusText = `${recentErrors.length} recent error${recentErrors.length > 1 ? 's' : ''}`;\n this.PipelineStatusOk = false;\n } else {\n this.PipelineStatusText = 'All systems operational';\n this.PipelineStatusOk = true;\n }\n }\n\n // ================================================================\n // Drill-Down Data Loading\n // ================================================================\n\n private loadDrillDownData(key: string): void {\n this.DrillDownHasActions = false;\n\n switch (key) {\n case 'kpi-totalTags':\n this.DrillDownColumns = ['Name', 'Display Name', 'Description', 'Parent'];\n this.DrillDownHasActions = true;\n this.DrillDownData = this.rawTags.slice(0, 50).map(t => ({\n 'Name': String(t['Name'] || ''),\n 'Display Name': String(t['DisplayName'] || ''),\n 'Description': String(t['Description'] || '').slice(0, 100),\n 'Parent': String(t['Parent'] || 'Root'),\n '_RecordID': String(t['ID'] || ''),\n '_EntityName': 'MJ: Tags',\n }));\n break;\n\n case 'kpi-itemsProcessed':\n this.DrillDownColumns = ['Name', 'Source', 'Content Type', 'Created'];\n this.DrillDownHasActions = true;\n this.DrillDownData = this.rawContentItems.slice(0, 50).map(i => {\n const source = this.rawContentSources.find(s => String(s['ID']) === String(i['ContentSourceID']));\n const ct = this.rawContentTypes.find(t => String(t['ID']) === String(i['ContentTypeID']));\n return {\n 'Name': String(i['Name'] || ''),\n 'Source': source ? String(source['Name']) : 'Unknown',\n 'Content Type': ct ? String(ct['Name']) : 'Unknown',\n 'Created': i['__mj_CreatedAt'] ? new Date(String(i['__mj_CreatedAt'])).toLocaleDateString() : '',\n '_RecordID': String(i['ID'] || ''),\n '_EntityName': 'MJ: Content Items',\n };\n });\n break;\n\n case 'kpi-avgConfidence':\n case 'kpi-coverage':\n this.DrillDownColumns = ['Tag', 'Item', 'Weight', 'Created'];\n this.DrillDownHasActions = true;\n this.DrillDownData = this.rawContentItemTags.slice(0, 50).map(t => ({\n 'Tag': String(t['Tag'] || ''),\n 'Item': String(t['Item'] || ''),\n 'Weight': String(t['Weight'] || '0'),\n 'Created': t['__mj_CreatedAt'] ? new Date(String(t['__mj_CreatedAt'])).toLocaleDateString() : '',\n '_RecordID': String(t['ID'] || ''),\n '_EntityName': 'MJ: Content Item Tags',\n }));\n break;\n\n case 'tagGrowth':\n case 'contentCoverage':\n case 'qualityScore':\n case 'sourcePerformance':\n case 'dailyThroughput':\n case 'taxonomyHealth':\n this.buildWidgetDrillDown(key);\n break;\n\n default:\n // D10: Handle tab-specific drill-down keys\n if (key.startsWith('tag-row:')) {\n this.buildTagRowDrillDown(key.replace('tag-row:', ''));\n } else if (key.startsWith('source-row:')) {\n this.buildSourceRowDrillDown(key.replace('source-row:', ''));\n } else if (key.startsWith('pipeline-throughput:')) {\n this.buildPipelineThroughputDrillDown(key.replace('pipeline-throughput:', ''));\n } else if (key.startsWith('quality-bin:')) {\n this.buildQualityBinDrillDown(key.replace('quality-bin:', ''));\n } else {\n this.DrillDownColumns = [];\n this.DrillDownData = [];\n }\n }\n\n this.IsDrillDownLoading = false;\n this.cdr.detectChanges();\n }\n\n private buildWidgetDrillDown(key: string): void {\n switch (key) {\n case 'tagGrowth':\n this.DrillDownColumns = ['Tag Name', 'Created'];\n this.DrillDownHasActions = true;\n this.DrillDownData = this.rawTags\n .sort((a, b) => new Date(String(b['__mj_CreatedAt'] || 0)).getTime() - new Date(String(a['__mj_CreatedAt'] || 0)).getTime())\n .slice(0, 50)\n .map(t => ({\n 'Tag Name': String(t['Name'] || ''),\n 'Created': t['__mj_CreatedAt'] ? new Date(String(t['__mj_CreatedAt'])).toLocaleDateString() : '',\n '_RecordID': String(t['ID'] || ''),\n '_EntityName': 'MJ: Tags',\n }));\n break;\n\n case 'contentCoverage':\n this.DrillDownColumns = ['Content Type', 'Total Items', 'Tagged Items', 'Coverage %'];\n this.DrillDownData = this.CoverageData.map(c => ({\n 'Content Type': c.Name,\n 'Total Items': c.Total,\n 'Tagged Items': c.Tagged,\n 'Coverage %': `${c.Percentage}%`,\n }));\n break;\n\n case 'qualityScore':\n this.DrillDownColumns = ['Bin', 'Count'];\n this.DrillDownData = this.ConfidenceHistogram.map(b => ({\n 'Bin': b.Label,\n 'Count': b.Count,\n }));\n break;\n\n case 'sourcePerformance':\n this.DrillDownColumns = ['Source', 'Avg Tags/Item'];\n this.DrillDownData = this.SourcePerfData.map(s => ({\n 'Source': s.Name,\n 'Avg Tags/Item': s.AvgTagsPerItem,\n }));\n break;\n\n case 'dailyThroughput':\n this.DrillDownColumns = ['Run ID', 'Source', 'Status', 'Items', 'Started'];\n this.DrillDownHasActions = true;\n this.DrillDownData = this.rawProcessRuns\n .sort((a, b) => new Date(String(b['StartTime'] || 0)).getTime() - new Date(String(a['StartTime'] || 0)).getTime())\n .slice(0, 30)\n .map(r => {\n const source = this.rawContentSources.find(s => String(s['ID']) === String(r['SourceID']));\n return {\n 'Run ID': String(r['ID'] || '').slice(0, 14),\n 'Source': source ? String(source['Name']) : 'Unknown',\n 'Status': String(r['Status'] || ''),\n 'Items': Number(r['ProcessedItems'] || 0),\n 'Started': r['StartTime'] ? new Date(String(r['StartTime'])).toLocaleString() : '',\n '_RecordID': String(r['ID'] || ''),\n '_EntityName': 'MJ: Content Process Runs',\n };\n });\n break;\n\n case 'taxonomyHealth':\n this.DrillDownColumns = ['Tag', 'Has Children', 'Is Used', 'Status'];\n this.DrillDownHasActions = true;\n const parentIds = new Set(this.rawTags.filter(t => t['ParentID']).map(t => String(t['ParentID'])));\n const usedIds = new Set(this.rawContentItemTags.filter(ct => ct['TagID']).map(ct => String(ct['TagID'])));\n this.DrillDownData = this.rawTags.slice(0, 50).map(t => {\n const tid = String(t['ID']);\n const hasChildren = parentIds.has(tid);\n const isUsed = usedIds.has(tid);\n let status = 'Orphaned';\n if (hasChildren || isUsed) status = 'Healthy';\n else if (t['ParentID']) status = 'Attention';\n return {\n 'Tag': String(t['Name'] || ''),\n 'Has Children': hasChildren ? 'Yes' : 'No',\n 'Is Used': isUsed ? 'Yes' : 'No',\n 'Status': status,\n '_RecordID': String(t['ID'] || ''),\n '_EntityName': 'MJ: Tags',\n };\n });\n break;\n }\n }\n\n // ================================================================\n // D10: Tab-Specific Drill-Down Builders\n // ================================================================\n\n /**\n * D10 Tags tab: Click a tag row to see content items using that tag.\n */\n private buildTagRowDrillDown(tagName: string): void {\n this.DrillDownColumns = ['Item Name', 'Source', 'Weight', 'Created'];\n this.DrillDownHasActions = true;\n\n const matchingTags = this.rawContentItemTags.filter(\n t => String(t['Tag'] || '') === tagName\n );\n\n this.DrillDownData = matchingTags.slice(0, 50).map(t => {\n const itemId = String(t['ItemID'] || '');\n const item = this.rawContentItems.find(i => String(i['ID']) === itemId);\n const source = item\n ? this.rawContentSources.find(s => String(s['ID']) === String(item['ContentSourceID']))\n : null;\n return {\n 'Item Name': item ? String(item['Name'] || '') : 'Unknown',\n 'Source': source ? String(source['Name'] || '') : 'Unknown',\n 'Weight': String(t['Weight'] || '0'),\n 'Created': t['__mj_CreatedAt'] ? new Date(String(t['__mj_CreatedAt'])).toLocaleDateString() : '',\n '_RecordID': itemId,\n '_EntityName': 'MJ: Content Items',\n };\n });\n }\n\n /**\n * D10 Sources tab: Click a source row to see recent runs, items, and errors.\n */\n private buildSourceRowDrillDown(sourceName: string): void {\n const source = this.rawContentSources.find(s => String(s['Name']) === sourceName);\n if (!source) {\n this.DrillDownColumns = [];\n this.DrillDownData = [];\n return;\n }\n\n const sid = String(source['ID']);\n const sourceRuns = this.rawProcessRuns\n .filter(r => String(r['SourceID']) === sid)\n .sort((a, b) => new Date(String(b['StartTime'] || 0)).getTime() - new Date(String(a['StartTime'] || 0)).getTime())\n .slice(0, 20);\n\n this.DrillDownColumns = ['Status', 'Items Processed', 'Start Time', 'Duration'];\n this.DrillDownHasActions = true;\n\n this.DrillDownData = sourceRuns.map(r => {\n const startTime = r['StartTime'] ? new Date(String(r['StartTime'])) : null;\n const endTime = r['EndTime'] ? new Date(String(r['EndTime'])) : null;\n const durationMs = startTime && endTime ? endTime.getTime() - startTime.getTime() : 0;\n const durationStr = durationMs > 60000 ? `${Math.round(durationMs / 60000)}m` : `${Math.round(durationMs / 1000)}s`;\n return {\n 'Status': String(r['Status'] || 'Unknown'),\n 'Items Processed': Number(r['ProcessedItems'] || 0),\n 'Start Time': startTime ? startTime.toLocaleString() : '',\n 'Duration': durationStr,\n '_RecordID': String(r['ID'] || ''),\n '_EntityName': 'MJ: Content Process Runs',\n };\n });\n }\n\n /**\n * D10 Pipeline tab: Click throughput chart to see individual run details.\n */\n private buildPipelineThroughputDrillDown(dayIndex: string): void {\n const idx = parseInt(dayIndex, 10);\n const now = new Date();\n const targetDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (29 - idx));\n const dayStr = targetDate.toISOString().slice(0, 10);\n\n const dayRuns = this.rawProcessRuns.filter(r => {\n const st = r['StartTime'];\n return st && String(st).slice(0, 10) === dayStr;\n });\n\n this.DrillDownColumns = ['Run ID', 'Source', 'Status', 'Items', 'Start Time'];\n this.DrillDownHasActions = true;\n\n this.DrillDownData = dayRuns.map(r => {\n const source = this.rawContentSources.find(s => String(s['ID']) === String(r['SourceID']));\n return {\n 'Run ID': String(r['ID'] || '').slice(0, 14),\n 'Source': source ? String(source['Name']) : 'Unknown',\n 'Status': String(r['Status'] || ''),\n 'Items': Number(r['ProcessedItems'] || 0),\n 'Start Time': r['StartTime'] ? new Date(String(r['StartTime'])).toLocaleString() : '',\n '_RecordID': String(r['ID'] || ''),\n '_EntityName': 'MJ: Content Process Runs',\n };\n });\n }\n\n /**\n * D10 Quality tab: Click confidence histogram bin to see matching items.\n */\n private buildQualityBinDrillDown(binLabel: string): void {\n // Parse bin range from label like \"0.7-0.8\"\n const parts = binLabel.split('-');\n const lo = parseFloat(parts[0]);\n const hi = parts.length > 1 ? parseFloat(parts[1]) : lo + 0.1;\n\n const matchingTags = this.rawContentItemTags.filter(t => {\n const w = Number(t['Weight'] || 0);\n return w >= lo && w < hi;\n });\n\n this.DrillDownColumns = ['Tag', 'Item', 'Weight', 'Created'];\n this.DrillDownHasActions = true;\n\n this.DrillDownData = matchingTags.slice(0, 50).map(t => ({\n 'Tag': String(t['Tag'] || ''),\n 'Item': String(t['Item'] || ''),\n 'Weight': String(Number(t['Weight'] || 0).toFixed(3)),\n 'Created': t['__mj_CreatedAt'] ? new Date(String(t['__mj_CreatedAt'])).toLocaleDateString() : '',\n '_RecordID': String(t['ID'] || ''),\n '_EntityName': 'MJ: Content Item Tags',\n }));\n }\n\n // ================================================================\n // D1: Cost & Usage Aggregation\n // ================================================================\n\n /**\n * Aggregates cost and token data from ContentProcessRunDetail records.\n * Each detail record has TotalTokensUsed and TotalCost fields that are\n * pre-rolled-up from linked AIPromptRun records.\n */\n private buildCostUsageData(filteredRuns: Record<string, unknown>[]): void {\n // Filter run details to match the current date range by joining to filtered runs\n const filteredRunIds = new Set(filteredRuns.map(r => String(r['ID'] || '')));\n const filteredDetails = this.rawRunDetails.filter(\n d => filteredRunIds.has(String(d['ContentProcessRunID'] || ''))\n );\n\n const totalTokens = this.sumField(filteredDetails, 'TotalTokensUsed');\n const totalCost = this.sumField(filteredDetails, 'TotalCost');\n const runCount = filteredRuns.length;\n const avgCostPerRun = runCount > 0 ? totalCost / runCount : 0;\n\n this.CostKPIs = [\n {\n Label: 'Total Tokens Used',\n Value: this.formatLargeNumber(totalTokens),\n Icon: 'fa-solid fa-microchip',\n SubLabel: `Across ${runCount} run${runCount !== 1 ? 's' : ''}`,\n },\n {\n Label: 'Total Cost',\n Value: totalCost > 0 ? `$${totalCost.toFixed(4)}` : '$0.00',\n Icon: 'fa-solid fa-dollar-sign',\n SubLabel: 'Estimated from AI model usage',\n },\n {\n Label: 'Avg Cost / Run',\n Value: avgCostPerRun > 0 ? `$${avgCostPerRun.toFixed(4)}` : '$0.00',\n Icon: 'fa-solid fa-calculator',\n SubLabel: runCount > 0 ? `${runCount} total runs` : 'No runs yet',\n },\n ];\n\n // Build per-run cost breakdown from detail records\n this.CostPerRunRows = this.buildCostPerRunRows(filteredRuns, filteredDetails);\n }\n\n /** Sum a numeric field across an array of raw records */\n public static SumField(records: Record<string, unknown>[], fieldName: string): number {\n return records.reduce((sum, r) => sum + Number(r[fieldName] || 0), 0);\n }\n\n private sumField(records: Record<string, unknown>[], fieldName: string): number {\n return AnalyticsResourceComponent.SumField(records, fieldName);\n }\n\n private formatLargeNumber(n: number): string {\n if (n >= 1000000) return `${(n / 1000000).toFixed(1)}M`;\n if (n >= 1000) return `${(n / 1000).toFixed(1)}K`;\n return String(Math.round(n));\n }\n\n private buildCostPerRunRows(\n runs: Record<string, unknown>[],\n details: Record<string, unknown>[],\n ): { RunID: string; Source: string; Tokens: number; Cost: number; Started: string }[] {\n // Group details by run\n const detailsByRun = new Map<string, Record<string, unknown>[]>();\n for (const d of details) {\n const runId = String(d['ContentProcessRunID'] || '');\n if (!detailsByRun.has(runId)) detailsByRun.set(runId, []);\n detailsByRun.get(runId)!.push(d);\n }\n\n return runs\n .sort((a, b) => new Date(String(b['StartTime'] || 0)).getTime() - new Date(String(a['StartTime'] || 0)).getTime())\n .slice(0, 20)\n .map(run => {\n const runId = String(run['ID'] || '');\n const runDetails = detailsByRun.get(runId) || [];\n const tokens = this.sumField(runDetails, 'TotalTokensUsed');\n const cost = this.sumField(runDetails, 'TotalCost');\n const source = this.rawContentSources.find(s => String(s['ID']) === String(run['SourceID']));\n\n return {\n RunID: runId.slice(0, 14),\n Source: source ? String(source['Name']) : 'Unknown',\n Tokens: tokens,\n Cost: cost,\n Started: run['StartTime'] ? new Date(String(run['StartTime'])).toLocaleString() : '',\n };\n });\n }\n\n // ================================================================\n // D5: Print-Friendly Export\n // ================================================================\n\n /**\n * D5: Opens the browser print dialog with print-friendly CSS.\n * This is a zero-dependency approach to PDF export.\n * NOTE: For full XLSX export, an xlsx library (e.g. SheetJS) can be added later.\n */\n public PrintCurrentTab(): void {\n window.print();\n }\n\n // ================================================================\n // SR-6: Preference Persistence\n // ================================================================\n\n private static readonly PREFS_KEY = 'KH_Analytics_Preferences';\n\n private persistAnalyticsPreferences(): void {\n const prefs = JSON.stringify({\n ActiveTab: this.ActiveTab,\n ActiveDateRange: this.ActiveDateRange,\n EntityFilter: this.EntityFilter,\n });\n UserInfoEngine.Instance.SetSettingDebounced(AnalyticsResourceComponent.PREFS_KEY, prefs);\n }\n\n private loadAnalyticsPreferences(): void {\n const raw = UserInfoEngine.Instance.GetSetting(AnalyticsResourceComponent.PREFS_KEY);\n if (raw) {\n try {\n const prefs = JSON.parse(raw);\n if (prefs.ActiveTab) this.ActiveTab = prefs.ActiveTab;\n if (prefs.ActiveDateRange) this.ActiveDateRange = prefs.ActiveDateRange;\n if (prefs.EntityFilter) this.EntityFilter = prefs.EntityFilter;\n } catch { /* ignore */ }\n }\n }\n\n // ================================================================\n // Co-Occurrence Data\n // ================================================================\n\n /**\n * Load the top 20 co-occurring tag pairs and the staleness timestamp.\n * Runs in background so it does not block initial render.\n */\n private async loadCoOccurrenceData(): Promise<void> {\n try {\n const rv = new RunView();\n const result = await rv.RunView<{\n TagA: string; TagB: string; CoOccurrenceCount: number; LastComputedAt: string | null;\n }>({\n EntityName: 'MJ: Tag Co Occurrences',\n ExtraFilter: 'CoOccurrenceCount > 0',\n OrderBy: 'CoOccurrenceCount DESC',\n MaxRows: 20,\n Fields: ['TagA', 'TagB', 'CoOccurrenceCount', 'LastComputedAt'],\n ResultType: 'simple'\n });\n\n if (result.Success && result.Results.length > 0) {\n const maxCount = result.Results[0].CoOccurrenceCount;\n this.CoOccurrencePairs = result.Results.map(row => ({\n TagAName: row.TagA,\n TagBName: row.TagB,\n Count: row.CoOccurrenceCount,\n BarWidth: maxCount > 0 ? Math.round((row.CoOccurrenceCount / maxCount) * 100) : 0,\n }));\n\n // Find the most recent LastComputedAt value for staleness indicator\n const computedDates = result.Results\n .map(r => r.LastComputedAt)\n .filter((d): d is string => d != null)\n .map(d => new Date(d))\n .filter(d => !isNaN(d.getTime()));\n\n if (computedDates.length > 0) {\n const latest = new Date(Math.max(...computedDates.map(d => d.getTime())));\n this.CoOccurrenceLastComputed = this.formatRelativeTime(latest);\n }\n }\n this.cdr.detectChanges();\n } catch (error) {\n console.error('[Analytics] Error loading co-occurrence data:', error);\n }\n }\n\n /** Recompute co-occurrence data (triggered by user button click) */\n public async RecomputeCoOccurrence(): Promise<void> {\n if (this.IsRecomputingCoOccurrence) return;\n this.IsRecomputingCoOccurrence = true;\n this.cdr.detectChanges();\n\n try {\n const provider = Metadata.Provider as unknown;\n const gql = `\n mutation RecomputeTagCoOccurrence {\n RecomputeTagCoOccurrence {\n PairsUpdated\n PairsDeleted\n }\n }\n `;\n // If GraphQL mutation not available, fall back to client-side reload\n try {\n const gqlProvider = provider as { ExecuteGQL: (query: string, variables: Record<string, unknown>) => Promise<unknown> };\n if (typeof gqlProvider.ExecuteGQL === 'function') {\n await gqlProvider.ExecuteGQL(gql, {});\n }\n } catch {\n // Mutation not available on server, just reload\n }\n\n // Reload the data\n await this.loadCoOccurrenceData();\n } finally {\n this.IsRecomputingCoOccurrence = false;\n this.cdr.detectChanges();\n }\n }\n\n // NOTE: formatRelativeTime is defined above in the Source Detail section.\n}\n\n/** Tree-shaking prevention */\nexport function LoadAnalyticsResource(): void {\n // Prevents tree-shaking\n}\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 <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\" (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\" (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\" (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\" (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\" (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\" (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\" (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\" (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\" (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\" (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"]}