@memberjunction/ng-dashboards 3.3.0 → 4.0.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 (581) hide show
  1. package/dist/AI/ai-dashboard.component.d.ts +62 -0
  2. package/dist/AI/ai-dashboard.component.d.ts.map +1 -0
  3. package/dist/AI/ai-dashboard.component.js +338 -0
  4. package/dist/AI/ai-dashboard.component.js.map +1 -0
  5. package/dist/AI/components/agents/agent-configuration.component.d.ts +36 -5
  6. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-configuration.component.js +287 -141
  8. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  9. package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
  10. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  11. package/dist/AI/components/agents/agent-editor.component.js +149 -211
  12. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  13. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  14. package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
  15. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  16. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  17. package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
  18. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  19. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  20. package/dist/AI/components/charts/time-series-chart.component.js +6 -7
  21. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  22. package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
  23. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  24. package/dist/AI/components/execution-monitoring.component.js +33 -37
  25. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  26. package/dist/AI/components/models/model-management-v2.component.d.ts +96 -0
  27. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -0
  28. package/dist/AI/components/models/model-management-v2.component.js +981 -0
  29. package/dist/AI/components/models/model-management-v2.component.js.map +1 -0
  30. package/dist/AI/components/models/model-management.component.d.ts +26 -6
  31. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  32. package/dist/AI/components/models/model-management.component.js +216 -103
  33. package/dist/AI/components/models/model-management.component.js.map +1 -1
  34. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  35. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
  36. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  37. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
  39. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  40. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +97 -0
  41. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -0
  42. package/dist/AI/components/prompts/prompt-management-v2.component.js +811 -0
  43. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -0
  44. package/dist/AI/components/prompts/prompt-management.component.d.ts +26 -6
  45. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/prompts/prompt-management.component.js +164 -57
  47. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  49. package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
  50. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  51. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  52. package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
  53. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  54. package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
  55. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.js +26 -27
  57. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  58. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  59. package/dist/AI/components/widgets/kpi-card.component.js +52 -42
  60. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  61. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  62. package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
  63. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  64. package/dist/APIKeys/api-applications-panel.component.d.ts +5 -5
  65. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  66. package/dist/APIKeys/api-applications-panel.component.js +242 -239
  67. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  68. package/dist/APIKeys/api-key-create-dialog.component.d.ts +4 -5
  69. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  70. package/dist/APIKeys/api-key-create-dialog.component.js +237 -217
  71. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  72. package/dist/APIKeys/api-key-edit-panel.component.d.ts +1 -3
  73. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  74. package/dist/APIKeys/api-key-edit-panel.component.js +268 -249
  75. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  76. package/dist/APIKeys/api-key-list.component.d.ts +2 -3
  77. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  78. package/dist/APIKeys/api-key-list.component.js +136 -133
  79. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  80. package/dist/APIKeys/api-keys-resource.component.d.ts +6 -6
  81. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  82. package/dist/APIKeys/api-keys-resource.component.js +335 -358
  83. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  84. package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
  85. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  86. package/dist/APIKeys/api-scopes-panel.component.js +151 -155
  87. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  88. package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
  89. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  90. package/dist/APIKeys/api-usage-panel.component.js +237 -234
  91. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  92. package/dist/Actions/actions-management-dashboard.component.d.ts +52 -0
  93. package/dist/Actions/actions-management-dashboard.component.d.ts.map +1 -0
  94. package/dist/Actions/actions-management-dashboard.component.js +308 -0
  95. package/dist/Actions/actions-management-dashboard.component.js.map +1 -0
  96. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  97. package/dist/Actions/components/actions-list-view.component.js +15 -14
  98. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  99. package/dist/Actions/components/actions-overview.component.d.ts +3 -6
  100. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  101. package/dist/Actions/components/actions-overview.component.js +17 -19
  102. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  103. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  104. package/dist/Actions/components/categories-list-view.component.js +6 -6
  105. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  106. package/dist/Actions/components/code-management.component.d.ts +0 -4
  107. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  108. package/dist/Actions/components/code-management.component.js +3 -9
  109. package/dist/Actions/components/code-management.component.js.map +1 -1
  110. package/dist/Actions/components/entity-integration.component.d.ts +0 -4
  111. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  112. package/dist/Actions/components/entity-integration.component.js +3 -9
  113. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  114. package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
  115. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  116. package/dist/Actions/components/execution-monitoring.component.js +13 -16
  117. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  118. package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
  119. package/dist/Actions/components/executions-list-view.component.js +3 -3
  120. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  121. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts +22 -0
  122. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -0
  123. package/dist/Actions/components/explorer/action-breadcrumb.component.js +139 -0
  124. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -0
  125. package/dist/Actions/components/explorer/action-card.component.d.ts +39 -0
  126. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -0
  127. package/dist/Actions/components/explorer/action-card.component.js +411 -0
  128. package/dist/Actions/components/explorer/action-card.component.js.map +1 -0
  129. package/dist/Actions/components/explorer/action-explorer.component.d.ts +58 -0
  130. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -0
  131. package/dist/Actions/components/explorer/action-explorer.component.js +523 -0
  132. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -0
  133. package/dist/Actions/components/explorer/action-list-item.component.d.ts +24 -0
  134. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -0
  135. package/dist/Actions/components/explorer/action-list-item.component.js +210 -0
  136. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -0
  137. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +63 -0
  138. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -0
  139. package/dist/Actions/components/explorer/action-toolbar.component.js +484 -0
  140. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -0
  141. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts +57 -0
  142. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -0
  143. package/dist/Actions/components/explorer/action-tree-panel.component.js +455 -0
  144. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -0
  145. package/dist/Actions/components/explorer/index.d.ts +9 -0
  146. package/dist/Actions/components/explorer/index.d.ts.map +1 -0
  147. package/dist/Actions/components/explorer/index.js +10 -0
  148. package/dist/Actions/components/explorer/index.js.map +1 -0
  149. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +49 -0
  150. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -0
  151. package/dist/Actions/components/explorer/new-action-panel.component.js +359 -0
  152. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -0
  153. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +37 -0
  154. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -0
  155. package/dist/Actions/components/explorer/new-category-panel.component.js +282 -0
  156. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -0
  157. package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
  158. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  159. package/dist/Actions/components/scheduled-actions.component.js +3 -9
  160. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  161. package/dist/Actions/components/security-permissions.component.d.ts +0 -4
  162. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  163. package/dist/Actions/components/security-permissions.component.js +3 -9
  164. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  165. package/dist/Actions/index.d.ts +2 -6
  166. package/dist/Actions/index.d.ts.map +1 -1
  167. package/dist/Actions/index.js +4 -7
  168. package/dist/Actions/index.js.map +1 -1
  169. package/dist/Actions/services/action-explorer-state.service.d.ts +104 -0
  170. package/dist/Actions/services/action-explorer-state.service.d.ts.map +1 -0
  171. package/dist/Actions/services/action-explorer-state.service.js +352 -0
  172. package/dist/Actions/services/action-explorer-state.service.js.map +1 -0
  173. package/dist/Communication/communication-dashboard.component.d.ts +2 -7
  174. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  175. package/dist/Communication/communication-dashboard.component.js +143 -107
  176. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  177. package/dist/Communication/communication-logs-resource.component.d.ts +10 -8
  178. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-logs-resource.component.js +270 -134
  180. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  181. package/dist/Communication/communication-monitor-resource.component.d.ts +38 -7
  182. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  183. package/dist/Communication/communication-monitor-resource.component.js +469 -186
  184. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  185. package/dist/Communication/communication-providers-resource.component.d.ts +16 -9
  186. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  187. package/dist/Communication/communication-providers-resource.component.js +262 -139
  188. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  189. package/dist/Communication/communication-runs-resource.component.d.ts +4 -6
  190. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  191. package/dist/Communication/communication-runs-resource.component.js +168 -159
  192. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  193. package/dist/Communication/communication-templates-resource.component.d.ts +39 -0
  194. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -0
  195. package/dist/Communication/communication-templates-resource.component.js +388 -0
  196. package/dist/Communication/communication-templates-resource.component.js.map +1 -0
  197. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +69 -271
  198. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  199. package/dist/ComponentStudio/component-studio-dashboard.component.js +705 -1808
  200. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  201. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +68 -0
  202. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -0
  203. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +400 -0
  204. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -0
  205. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  206. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
  207. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  208. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  209. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
  210. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  211. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts +44 -0
  212. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -0
  213. package/dist/ComponentStudio/components/browser/component-browser.component.js +638 -0
  214. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -0
  215. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts +35 -0
  216. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -0
  217. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +380 -0
  218. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -0
  219. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +24 -0
  220. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -0
  221. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +221 -0
  222. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -0
  223. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts +28 -0
  224. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -0
  225. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +263 -0
  226. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -0
  227. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts +34 -0
  228. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -0
  229. package/dist/ComponentStudio/components/editors/spec-editor.component.js +307 -0
  230. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -0
  231. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts +29 -0
  232. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -0
  233. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +159 -0
  234. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -0
  235. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts +20 -0
  236. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -0
  237. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +192 -0
  238. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -0
  239. package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
  240. package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
  241. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  242. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +57 -0
  243. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -0
  244. package/dist/ComponentStudio/components/workspace/component-preview.component.js +343 -0
  245. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -0
  246. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +15 -0
  247. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -0
  248. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +144 -0
  249. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -0
  250. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +203 -0
  251. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -0
  252. package/dist/ComponentStudio/services/component-studio-state.service.js +651 -0
  253. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -0
  254. package/dist/ComponentStudio/services/component-version.service.d.ts +120 -0
  255. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -0
  256. package/dist/ComponentStudio/services/component-version.service.js +394 -0
  257. package/dist/ComponentStudio/services/component-version.service.js.map +1 -0
  258. package/dist/Credentials/components/credential-category-edit-panel.component.js +1 -1
  259. package/dist/Credentials/components/credential-edit-panel.component.js +1 -1
  260. package/dist/Credentials/components/credential-type-edit-panel.component.js +1 -1
  261. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
  262. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  263. package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
  264. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  265. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +1 -2
  266. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  267. package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
  268. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  269. package/dist/Credentials/components/credentials-list-resource.component.d.ts +1 -2
  270. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  271. package/dist/Credentials/components/credentials-list-resource.component.js +252 -241
  272. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  273. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
  274. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  275. package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
  276. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  277. package/dist/Credentials/components/credentials-types-resource.component.d.ts +1 -2
  278. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  279. package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
  280. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  281. package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
  282. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  283. package/dist/Credentials/credentials-dashboard.component.js +31 -44
  284. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  285. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
  286. package/dist/Credentials/pipes/group-by.pipe.js +2 -1
  287. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
  288. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
  289. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  290. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
  291. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  292. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  293. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
  294. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  295. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
  296. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
  297. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
  298. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +2 -2
  299. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  300. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
  301. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  302. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +245 -0
  303. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  304. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +1143 -0
  305. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  306. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  307. package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
  308. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  309. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +0 -4
  310. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  311. package/dist/DataExplorer/data-explorer-dashboard.component.js +49 -54
  312. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  313. package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
  314. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  315. package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
  316. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  317. package/dist/DataExplorer/index.d.ts +2 -2
  318. package/dist/DataExplorer/index.d.ts.map +1 -1
  319. package/dist/DataExplorer/index.js +2 -2
  320. package/dist/DataExplorer/index.js.map +1 -1
  321. package/dist/EntityAdmin/components/entity-details.component.d.ts +50 -0
  322. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -0
  323. package/dist/EntityAdmin/components/entity-details.component.js +680 -0
  324. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -0
  325. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +31 -0
  326. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +1 -0
  327. package/dist/EntityAdmin/components/entity-filter-panel.component.js +160 -0
  328. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -0
  329. package/dist/EntityAdmin/components/erd-composite.component.d.ts +73 -0
  330. package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +1 -0
  331. package/dist/EntityAdmin/components/erd-composite.component.js +271 -0
  332. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -0
  333. package/dist/EntityAdmin/components/erd-diagram.component.d.ts +47 -0
  334. package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +1 -0
  335. package/dist/EntityAdmin/components/erd-diagram.component.js +618 -0
  336. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -0
  337. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
  338. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  339. package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
  340. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  341. package/dist/Home/home-application.d.ts +0 -5
  342. package/dist/Home/home-application.d.ts.map +1 -1
  343. package/dist/Home/home-application.js +0 -9
  344. package/dist/Home/home-application.js.map +1 -1
  345. package/dist/Home/home-dashboard.component.d.ts +0 -4
  346. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  347. package/dist/Home/home-dashboard.component.js +141 -139
  348. package/dist/Home/home-dashboard.component.js.map +1 -1
  349. package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
  350. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  351. package/dist/Lists/components/lists-browse-resource.component.js +761 -685
  352. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  353. package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
  354. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  355. package/dist/Lists/components/lists-categories-resource.component.js +340 -316
  356. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  357. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
  358. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  359. package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
  360. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  361. package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
  362. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  363. package/dist/Lists/components/lists-operations-resource.component.js +508 -455
  364. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  365. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  366. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
  367. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  368. package/dist/Lists/index.d.ts +0 -1
  369. package/dist/Lists/index.d.ts.map +1 -1
  370. package/dist/Lists/index.js +0 -11
  371. package/dist/Lists/index.js.map +1 -1
  372. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +68 -0
  373. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -0
  374. package/dist/MCP/components/mcp-connection-dialog.component.js +523 -0
  375. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -0
  376. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +73 -0
  377. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -0
  378. package/dist/MCP/components/mcp-log-detail-panel.component.js +533 -0
  379. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -0
  380. package/dist/MCP/components/mcp-server-dialog.component.d.ts +76 -0
  381. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -0
  382. package/dist/MCP/components/mcp-server-dialog.component.js +546 -0
  383. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -0
  384. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +267 -0
  385. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -0
  386. package/dist/MCP/components/mcp-test-tool-dialog.component.js +1300 -0
  387. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -0
  388. package/dist/MCP/index.d.ts +11 -0
  389. package/dist/MCP/index.d.ts.map +1 -0
  390. package/dist/MCP/index.js +15 -0
  391. package/dist/MCP/index.js.map +1 -0
  392. package/dist/MCP/mcp-dashboard.component.d.ts +467 -0
  393. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -0
  394. package/dist/MCP/mcp-dashboard.component.js +2765 -0
  395. package/dist/MCP/mcp-dashboard.component.js.map +1 -0
  396. package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
  397. package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
  398. package/dist/MCP/mcp-filter-panel.component.js +288 -0
  399. package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
  400. package/dist/MCP/mcp-resource.component.d.ts +26 -0
  401. package/dist/MCP/mcp-resource.component.d.ts.map +1 -0
  402. package/dist/MCP/mcp-resource.component.js +54 -0
  403. package/dist/MCP/mcp-resource.component.js.map +1 -0
  404. package/dist/MCP/mcp.module.d.ts +24 -0
  405. package/dist/MCP/mcp.module.d.ts.map +1 -0
  406. package/dist/MCP/mcp.module.js +113 -0
  407. package/dist/MCP/mcp.module.js.map +1 -0
  408. package/dist/MCP/services/mcp-tools.service.d.ts +115 -0
  409. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -0
  410. package/dist/MCP/services/mcp-tools.service.js +221 -0
  411. package/dist/MCP/services/mcp-tools.service.js.map +1 -0
  412. package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
  413. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  414. package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
  415. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  416. package/dist/Scheduling/components/index.d.ts +5 -8
  417. package/dist/Scheduling/components/index.d.ts.map +1 -1
  418. package/dist/Scheduling/components/index.js +6 -9
  419. package/dist/Scheduling/components/index.js.map +1 -1
  420. package/dist/Scheduling/components/job-slideout.component.d.ts +45 -0
  421. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -0
  422. package/dist/Scheduling/components/job-slideout.component.js +459 -0
  423. package/dist/Scheduling/components/job-slideout.component.js.map +1 -0
  424. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +15 -0
  425. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -0
  426. package/dist/Scheduling/components/scheduling-activity-resource.component.js +45 -0
  427. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -0
  428. package/dist/Scheduling/components/scheduling-activity.component.d.ts +71 -0
  429. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -0
  430. package/dist/Scheduling/components/scheduling-activity.component.js +714 -0
  431. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -0
  432. package/dist/Scheduling/components/scheduling-health-resource.component.js +1 -1
  433. package/dist/Scheduling/components/scheduling-health.component.js +1 -1
  434. package/dist/Scheduling/components/scheduling-history-resource.component.js +1 -1
  435. package/dist/Scheduling/components/scheduling-history.component.js +1 -1
  436. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +3 -8
  437. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  438. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +5 -15
  439. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  440. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +52 -34
  441. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  442. package/dist/Scheduling/components/scheduling-jobs.component.js +452 -262
  443. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  444. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +1 -1
  445. package/dist/Scheduling/components/scheduling-monitoring.component.js +1 -1
  446. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +15 -0
  447. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -0
  448. package/dist/Scheduling/components/scheduling-overview-resource.component.js +45 -0
  449. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -0
  450. package/dist/Scheduling/components/scheduling-overview.component.d.ts +43 -0
  451. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -0
  452. package/dist/Scheduling/components/scheduling-overview.component.js +600 -0
  453. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -0
  454. package/dist/Scheduling/components/scheduling-types-resource.component.js +1 -1
  455. package/dist/Scheduling/components/scheduling-types.component.js +1 -1
  456. package/dist/Scheduling/scheduling-dashboard.component.d.ts +22 -33
  457. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  458. package/dist/Scheduling/scheduling-dashboard.component.js +173 -175
  459. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  460. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +49 -6
  461. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  462. package/dist/Scheduling/services/scheduling-instrumentation.service.js +218 -149
  463. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  464. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
  465. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  466. package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
  467. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  468. package/dist/Testing/components/index.d.ts +7 -8
  469. package/dist/Testing/components/index.d.ts.map +1 -1
  470. package/dist/Testing/components/index.js +8 -9
  471. package/dist/Testing/components/index.js.map +1 -1
  472. package/dist/Testing/components/testing-analytics-resource.component.d.ts +0 -4
  473. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  474. package/dist/Testing/components/testing-analytics-resource.component.js +3 -9
  475. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  476. package/dist/Testing/components/testing-analytics.component.d.ts +52 -37
  477. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  478. package/dist/Testing/components/testing-analytics.component.js +1024 -570
  479. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  480. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +16 -0
  481. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -0
  482. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +47 -0
  483. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -0
  484. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +57 -0
  485. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -0
  486. package/dist/Testing/components/testing-dashboard-tab.component.js +649 -0
  487. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -0
  488. package/dist/Testing/components/testing-execution-resource.component.js +1 -1
  489. package/dist/Testing/components/testing-execution.component.js +1 -1
  490. package/dist/Testing/components/testing-explorer-resource.component.d.ts +16 -0
  491. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -0
  492. package/dist/Testing/components/testing-explorer-resource.component.js +47 -0
  493. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -0
  494. package/dist/Testing/components/testing-explorer.component.d.ts +193 -0
  495. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -0
  496. package/dist/Testing/components/testing-explorer.component.js +2219 -0
  497. package/dist/Testing/components/testing-explorer.component.js.map +1 -0
  498. package/dist/Testing/components/testing-feedback-resource.component.js +1 -1
  499. package/dist/Testing/components/testing-feedback.component.js +1 -1
  500. package/dist/Testing/components/testing-overview-resource.component.js +1 -1
  501. package/dist/Testing/components/testing-overview.component.js +1 -1
  502. package/dist/Testing/components/testing-review-resource.component.d.ts +16 -0
  503. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -0
  504. package/dist/Testing/components/testing-review-resource.component.js +47 -0
  505. package/dist/Testing/components/testing-review-resource.component.js.map +1 -0
  506. package/dist/Testing/components/testing-review.component.d.ts +60 -0
  507. package/dist/Testing/components/testing-review.component.d.ts.map +1 -0
  508. package/dist/Testing/components/testing-review.component.js +985 -0
  509. package/dist/Testing/components/testing-review.component.js.map +1 -0
  510. package/dist/Testing/components/testing-runs-resource.component.d.ts +16 -0
  511. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -0
  512. package/dist/Testing/components/testing-runs-resource.component.js +47 -0
  513. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -0
  514. package/dist/Testing/components/testing-runs.component.d.ts +82 -0
  515. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -0
  516. package/dist/Testing/components/testing-runs.component.js +1067 -0
  517. package/dist/Testing/components/testing-runs.component.js.map +1 -0
  518. package/dist/Testing/components/testing-version-comparison.component.js +1 -1
  519. package/dist/Testing/components/testing-version-resource.component.js +1 -1
  520. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
  521. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
  522. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  523. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
  524. package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
  525. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  526. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  527. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
  528. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  529. package/dist/Testing/testing-dashboard.component.d.ts +12 -16
  530. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  531. package/dist/Testing/testing-dashboard.component.js +51 -72
  532. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  533. package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
  534. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
  535. package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
  536. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
  537. package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
  538. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
  539. package/dist/VersionHistory/components/graph-resource.component.js +521 -0
  540. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
  541. package/dist/VersionHistory/components/index.d.ts +5 -0
  542. package/dist/VersionHistory/components/index.d.ts.map +1 -0
  543. package/dist/VersionHistory/components/index.js +5 -0
  544. package/dist/VersionHistory/components/index.js.map +1 -0
  545. package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
  546. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
  547. package/dist/VersionHistory/components/labels-resource.component.js +968 -0
  548. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
  549. package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
  550. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
  551. package/dist/VersionHistory/components/restore-resource.component.js +472 -0
  552. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
  553. package/dist/VersionHistory/index.d.ts +2 -0
  554. package/dist/VersionHistory/index.d.ts.map +1 -0
  555. package/dist/VersionHistory/index.js +2 -0
  556. package/dist/VersionHistory/index.js.map +1 -0
  557. package/dist/generic/base-dashboard.d.ts +65 -0
  558. package/dist/generic/base-dashboard.d.ts.map +1 -0
  559. package/dist/generic/base-dashboard.js +74 -0
  560. package/dist/generic/base-dashboard.js.map +1 -0
  561. package/dist/module.d.ts +127 -104
  562. package/dist/module.d.ts.map +1 -1
  563. package/dist/module.js +221 -95
  564. package/dist/module.js.map +1 -1
  565. package/dist/public-api.d.ts +22 -19
  566. package/dist/public-api.d.ts.map +1 -1
  567. package/dist/public-api.js +28 -119
  568. package/dist/public-api.js.map +1 -1
  569. package/dist/shared/pipes/highlight-search.pipe.d.ts +17 -0
  570. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -0
  571. package/dist/shared/pipes/highlight-search.pipe.js +41 -0
  572. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -0
  573. package/dist/shared/pipes/index.d.ts +2 -0
  574. package/dist/shared/pipes/index.d.ts.map +1 -0
  575. package/dist/shared/pipes/index.js +2 -0
  576. package/dist/shared/pipes/index.js.map +1 -0
  577. package/dist/shared/shared-pipes.module.d.ts +11 -0
  578. package/dist/shared/shared-pipes.module.d.ts.map +1 -0
  579. package/dist/shared/shared-pipes.module.js +24 -0
  580. package/dist/shared/shared-pipes.module.js.map +1 -0
  581. package/package.json +65 -56
@@ -5,21 +5,21 @@ import * as i1 from "@angular/common";
5
5
  import * as i2 from "@progress/kendo-angular-dialog";
6
6
  import * as i3 from "@progress/kendo-angular-buttons";
7
7
  import * as i4 from "@memberjunction/ng-shared-generic";
8
- function APIUsagePanelComponent_mj_loading_1_Template(rf, ctx) { if (rf & 1) {
9
- i0.ɵɵelement(0, "mj-loading", 4);
8
+ function APIUsagePanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelement(0, "mj-loading", 1);
10
10
  } }
11
- function APIUsagePanelComponent_ng_container_2_div_77_div_2_div_3_Template(rf, ctx) { if (rf & 1) {
12
- i0.ɵɵelement(0, "div", 60);
11
+ function APIUsagePanelComponent_Conditional_2_Conditional_76_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelement(0, "div", 56);
13
13
  } if (rf & 2) {
14
14
  const bucket_r3 = i0.ɵɵnextContext().$implicit;
15
15
  const ctx_r1 = i0.ɵɵnextContext(3);
16
16
  i0.ɵɵstyleProp("height", ctx_r1.getErrorBarHeight(bucket_r3), "%");
17
17
  } }
18
- function APIUsagePanelComponent_ng_container_2_div_77_div_2_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "div", 55)(1, "div", 56)(2, "div", 57);
20
- i0.ɵɵtemplate(3, APIUsagePanelComponent_ng_container_2_div_77_div_2_div_3_Template, 1, 2, "div", 58);
18
+ function APIUsagePanelComponent_Conditional_2_Conditional_76_For_3_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "div", 50)(1, "div", 52)(2, "div", 53);
20
+ i0.ɵɵconditionalCreate(3, APIUsagePanelComponent_Conditional_2_Conditional_76_For_3_Conditional_3_Template, 1, 2, "div", 54);
21
21
  i0.ɵɵelementEnd()();
22
- i0.ɵɵelementStart(4, "div", 59);
22
+ i0.ɵɵelementStart(4, "div", 55);
23
23
  i0.ɵɵtext(5);
24
24
  i0.ɵɵelementEnd()();
25
25
  } if (rf & 2) {
@@ -29,56 +29,56 @@ function APIUsagePanelComponent_ng_container_2_div_77_div_2_Template(rf, ctx) {
29
29
  i0.ɵɵadvance(2);
30
30
  i0.ɵɵstyleProp("height", ctx_r1.getBarHeight(bucket_r3.requests), "%");
31
31
  i0.ɵɵadvance();
32
- i0.ɵɵproperty("ngIf", bucket_r3.errors > 0);
32
+ i0.ɵɵconditional(bucket_r3.errors > 0 ? 3 : -1);
33
33
  i0.ɵɵadvance(2);
34
34
  i0.ɵɵtextInterpolate(bucket_r3.label);
35
35
  } }
36
- function APIUsagePanelComponent_ng_container_2_div_77_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "div", 51)(1, "div", 52);
38
- i0.ɵɵtemplate(2, APIUsagePanelComponent_ng_container_2_div_77_div_2_Template, 6, 5, "div", 53);
36
+ function APIUsagePanelComponent_Conditional_2_Conditional_76_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 49);
38
+ i0.ɵɵrepeaterCreate(2, APIUsagePanelComponent_Conditional_2_Conditional_76_For_3_Template, 6, 5, "div", 50, i0.ɵɵrepeaterTrackByIdentity);
39
39
  i0.ɵɵelementEnd();
40
- i0.ɵɵelementStart(3, "div", 54)(4, "span");
41
- i0.ɵɵtext(5);
40
+ i0.ɵɵelementStart(4, "div", 51)(5, "span");
41
+ i0.ɵɵtext(6);
42
42
  i0.ɵɵelementEnd();
43
- i0.ɵɵelementStart(6, "span");
44
- i0.ɵɵtext(7);
43
+ i0.ɵɵelementStart(7, "span");
44
+ i0.ɵɵtext(8);
45
45
  i0.ɵɵelementEnd();
46
- i0.ɵɵelementStart(8, "span");
47
- i0.ɵɵtext(9, "0");
46
+ i0.ɵɵelementStart(9, "span");
47
+ i0.ɵɵtext(10, "0");
48
48
  i0.ɵɵelementEnd()()();
49
49
  } if (rf & 2) {
50
50
  const ctx_r1 = i0.ɵɵnextContext(2);
51
51
  i0.ɵɵadvance(2);
52
- i0.ɵɵproperty("ngForOf", ctx_r1.TimeBuckets);
53
- i0.ɵɵadvance(3);
52
+ i0.ɵɵrepeater(ctx_r1.TimeBuckets);
53
+ i0.ɵɵadvance(4);
54
54
  i0.ɵɵtextInterpolate(ctx_r1.formatNumber(ctx_r1.MaxRequests));
55
55
  i0.ɵɵadvance(2);
56
56
  i0.ɵɵtextInterpolate(ctx_r1.formatNumber(ctx_r1.Math.round(ctx_r1.MaxRequests / 2)));
57
57
  } }
58
- function APIUsagePanelComponent_ng_container_2_div_78_Template(rf, ctx) { if (rf & 1) {
59
- i0.ɵɵelementStart(0, "div", 61);
60
- i0.ɵɵelement(1, "i", 62);
58
+ function APIUsagePanelComponent_Conditional_2_Conditional_77_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵelementStart(0, "div", 34);
60
+ i0.ɵɵelement(1, "i", 57);
61
61
  i0.ɵɵelementStart(2, "span");
62
62
  i0.ɵɵtext(3, "No usage data available");
63
63
  i0.ɵɵelementEnd()();
64
64
  } }
65
- function APIUsagePanelComponent_ng_container_2_div_86_div_1_Template(rf, ctx) { if (rf & 1) {
65
+ function APIUsagePanelComponent_Conditional_2_Conditional_85_For_2_Template(rf, ctx) { if (rf & 1) {
66
66
  const _r4 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "div", 65);
68
- i0.ɵɵlistener("click", function APIUsagePanelComponent_ng_container_2_div_86_div_1_Template_div_click_0_listener() { const ep_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.drillDownEndpoint(ep_r5)); });
69
- i0.ɵɵelementStart(1, "div", 66)(2, "span", 67);
67
+ i0.ɵɵelementStart(0, "div", 59);
68
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_2_Conditional_85_For_2_Template_div_click_0_listener() { const ep_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.drillDownEndpoint(ep_r5)); });
69
+ i0.ɵɵelementStart(1, "div", 60)(2, "span", 61);
70
70
  i0.ɵɵtext(3);
71
71
  i0.ɵɵelementEnd();
72
- i0.ɵɵelementStart(4, "span", 68);
72
+ i0.ɵɵelementStart(4, "span", 62);
73
73
  i0.ɵɵtext(5);
74
74
  i0.ɵɵelementEnd()();
75
- i0.ɵɵelementStart(6, "div", 69)(7, "span", 70);
75
+ i0.ɵɵelementStart(6, "div", 63)(7, "span", 64);
76
76
  i0.ɵɵtext(8);
77
77
  i0.ɵɵelementEnd();
78
- i0.ɵɵelementStart(9, "span", 71);
78
+ i0.ɵɵelementStart(9, "span", 65);
79
79
  i0.ɵɵtext(10);
80
80
  i0.ɵɵelementEnd();
81
- i0.ɵɵelementStart(11, "span", 72);
81
+ i0.ɵɵelementStart(11, "span", 66);
82
82
  i0.ɵɵtext(12);
83
83
  i0.ɵɵelementEnd()()();
84
84
  } if (rf & 2) {
@@ -99,33 +99,33 @@ function APIUsagePanelComponent_ng_container_2_div_86_div_1_Template(rf, ctx) {
99
99
  i0.ɵɵadvance();
100
100
  i0.ɵɵtextInterpolate1(" ", ep_r5.errorRate, "% err ");
101
101
  } }
102
- function APIUsagePanelComponent_ng_container_2_div_86_Template(rf, ctx) { if (rf & 1) {
103
- i0.ɵɵelementStart(0, "div", 63);
104
- i0.ɵɵtemplate(1, APIUsagePanelComponent_ng_container_2_div_86_div_1_Template, 13, 8, "div", 64);
102
+ function APIUsagePanelComponent_Conditional_2_Conditional_85_Template(rf, ctx) { if (rf & 1) {
103
+ i0.ɵɵelementStart(0, "div", 39);
104
+ i0.ɵɵrepeaterCreate(1, APIUsagePanelComponent_Conditional_2_Conditional_85_For_2_Template, 13, 8, "div", 58, i0.ɵɵrepeaterTrackByIdentity);
105
105
  i0.ɵɵelementEnd();
106
106
  } if (rf & 2) {
107
107
  const ctx_r1 = i0.ɵɵnextContext(2);
108
108
  i0.ɵɵadvance();
109
- i0.ɵɵproperty("ngForOf", ctx_r1.TopEndpoints);
109
+ i0.ɵɵrepeater(ctx_r1.TopEndpoints);
110
110
  } }
111
- function APIUsagePanelComponent_ng_container_2_div_87_Template(rf, ctx) { if (rf & 1) {
112
- i0.ɵɵelementStart(0, "div", 73);
113
- i0.ɵɵelement(1, "i", 28);
111
+ function APIUsagePanelComponent_Conditional_2_Conditional_86_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelementStart(0, "div", 40);
113
+ i0.ɵɵelement(1, "i", 26);
114
114
  i0.ɵɵelementStart(2, "span");
115
115
  i0.ɵɵtext(3, "No endpoint data");
116
116
  i0.ɵɵelementEnd()();
117
117
  } }
118
- function APIUsagePanelComponent_ng_container_2_div_94_div_1_Template(rf, ctx) { if (rf & 1) {
118
+ function APIUsagePanelComponent_Conditional_2_Conditional_93_For_2_Template(rf, ctx) { if (rf & 1) {
119
119
  const _r6 = i0.ɵɵgetCurrentView();
120
- i0.ɵɵelementStart(0, "div", 76);
121
- i0.ɵɵlistener("click", function APIUsagePanelComponent_ng_container_2_div_94_div_1_Template_div_click_0_listener() { const key_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.drillDownKey(key_r7)); });
122
- i0.ɵɵelementStart(1, "div", 77)(2, "span", 78);
120
+ i0.ɵɵelementStart(0, "div", 68);
121
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_2_Conditional_93_For_2_Template_div_click_0_listener() { const key_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.drillDownKey(key_r7)); });
122
+ i0.ɵɵelementStart(1, "div", 69)(2, "span", 70);
123
123
  i0.ɵɵtext(3);
124
124
  i0.ɵɵelementEnd();
125
- i0.ɵɵelementStart(4, "span", 79);
125
+ i0.ɵɵelementStart(4, "span", 71);
126
126
  i0.ɵɵtext(5);
127
127
  i0.ɵɵelementEnd()();
128
- i0.ɵɵelementStart(6, "div", 80);
128
+ i0.ɵɵelementStart(6, "div", 72);
129
129
  i0.ɵɵtext(7);
130
130
  i0.ɵɵelementEnd()();
131
131
  } if (rf & 2) {
@@ -138,36 +138,36 @@ function APIUsagePanelComponent_ng_container_2_div_94_div_1_Template(rf, ctx) {
138
138
  i0.ɵɵadvance(2);
139
139
  i0.ɵɵtextInterpolate(ctx_r1.formatNumber(key_r7.requests));
140
140
  } }
141
- function APIUsagePanelComponent_ng_container_2_div_94_Template(rf, ctx) { if (rf & 1) {
142
- i0.ɵɵelementStart(0, "div", 74);
143
- i0.ɵɵtemplate(1, APIUsagePanelComponent_ng_container_2_div_94_div_1_Template, 8, 3, "div", 75);
141
+ function APIUsagePanelComponent_Conditional_2_Conditional_93_Template(rf, ctx) { if (rf & 1) {
142
+ i0.ɵɵelementStart(0, "div", 41);
143
+ i0.ɵɵrepeaterCreate(1, APIUsagePanelComponent_Conditional_2_Conditional_93_For_2_Template, 8, 3, "div", 67, i0.ɵɵrepeaterTrackByIdentity);
144
144
  i0.ɵɵelementEnd();
145
145
  } if (rf & 2) {
146
146
  const ctx_r1 = i0.ɵɵnextContext(2);
147
147
  i0.ɵɵadvance();
148
- i0.ɵɵproperty("ngForOf", ctx_r1.TopKeys);
148
+ i0.ɵɵrepeater(ctx_r1.TopKeys);
149
149
  } }
150
- function APIUsagePanelComponent_ng_container_2_div_95_Template(rf, ctx) { if (rf & 1) {
151
- i0.ɵɵelementStart(0, "div", 73);
152
- i0.ɵɵelement(1, "i", 26);
150
+ function APIUsagePanelComponent_Conditional_2_Conditional_94_Template(rf, ctx) { if (rf & 1) {
151
+ i0.ɵɵelementStart(0, "div", 40);
152
+ i0.ɵɵelement(1, "i", 24);
153
153
  i0.ɵɵelementStart(2, "span");
154
154
  i0.ɵɵtext(3, "No key data");
155
155
  i0.ɵɵelementEnd()();
156
156
  } }
157
- function APIUsagePanelComponent_ng_container_2_div_102_div_2_Template(rf, ctx) { if (rf & 1) {
158
- i0.ɵɵelement(0, "div", 86);
157
+ function APIUsagePanelComponent_Conditional_2_Conditional_101_For_3_Template(rf, ctx) { if (rf & 1) {
158
+ i0.ɵɵelement(0, "div", 77);
159
159
  } if (rf & 2) {
160
160
  const group_r8 = ctx.$implicit;
161
161
  i0.ɵɵstyleProp("width", group_r8.percentage, "%")("background-color", group_r8.color);
162
162
  i0.ɵɵproperty("title", group_r8.label + ": " + group_r8.count + " (" + group_r8.percentage + "%)");
163
163
  } }
164
- function APIUsagePanelComponent_ng_container_2_div_102_div_4_Template(rf, ctx) { if (rf & 1) {
165
- i0.ɵɵelementStart(0, "div", 87);
166
- i0.ɵɵelement(1, "span", 88);
167
- i0.ɵɵelementStart(2, "span", 89);
164
+ function APIUsagePanelComponent_Conditional_2_Conditional_101_For_6_Template(rf, ctx) { if (rf & 1) {
165
+ i0.ɵɵelementStart(0, "div", 76);
166
+ i0.ɵɵelement(1, "span", 78);
167
+ i0.ɵɵelementStart(2, "span", 79);
168
168
  i0.ɵɵtext(3);
169
169
  i0.ɵɵelementEnd();
170
- i0.ɵɵelementStart(4, "span", 90);
170
+ i0.ɵɵelementStart(4, "span", 80);
171
171
  i0.ɵɵtext(5);
172
172
  i0.ɵɵelementEnd()();
173
173
  } if (rf & 2) {
@@ -180,44 +180,44 @@ function APIUsagePanelComponent_ng_container_2_div_102_div_4_Template(rf, ctx) {
180
180
  i0.ɵɵadvance(2);
181
181
  i0.ɵɵtextInterpolate2("", ctx_r1.formatNumber(group_r9.count), " (", group_r9.percentage, "%)");
182
182
  } }
183
- function APIUsagePanelComponent_ng_container_2_div_102_Template(rf, ctx) { if (rf & 1) {
184
- i0.ɵɵelementStart(0, "div", 81)(1, "div", 82);
185
- i0.ɵɵtemplate(2, APIUsagePanelComponent_ng_container_2_div_102_div_2_Template, 1, 5, "div", 83);
183
+ function APIUsagePanelComponent_Conditional_2_Conditional_101_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "div", 43)(1, "div", 73);
185
+ i0.ɵɵrepeaterCreate(2, APIUsagePanelComponent_Conditional_2_Conditional_101_For_3_Template, 1, 5, "div", 74, i0.ɵɵrepeaterTrackByIdentity);
186
186
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(3, "div", 84);
188
- i0.ɵɵtemplate(4, APIUsagePanelComponent_ng_container_2_div_102_div_4_Template, 6, 5, "div", 85);
187
+ i0.ɵɵelementStart(4, "div", 75);
188
+ i0.ɵɵrepeaterCreate(5, APIUsagePanelComponent_Conditional_2_Conditional_101_For_6_Template, 6, 5, "div", 76, i0.ɵɵrepeaterTrackByIdentity);
189
189
  i0.ɵɵelementEnd()();
190
190
  } if (rf & 2) {
191
191
  const ctx_r1 = i0.ɵɵnextContext(2);
192
192
  i0.ɵɵadvance(2);
193
- i0.ɵɵproperty("ngForOf", ctx_r1.StatusGroups);
194
- i0.ɵɵadvance(2);
195
- i0.ɵɵproperty("ngForOf", ctx_r1.StatusGroups);
193
+ i0.ɵɵrepeater(ctx_r1.StatusGroups);
194
+ i0.ɵɵadvance(3);
195
+ i0.ɵɵrepeater(ctx_r1.StatusGroups);
196
196
  } }
197
- function APIUsagePanelComponent_ng_container_2_div_103_Template(rf, ctx) { if (rf & 1) {
198
- i0.ɵɵelementStart(0, "div", 73);
199
- i0.ɵɵelement(1, "i", 44);
197
+ function APIUsagePanelComponent_Conditional_2_Conditional_102_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵelementStart(0, "div", 40);
199
+ i0.ɵɵelement(1, "i", 42);
200
200
  i0.ɵɵelementStart(2, "span");
201
201
  i0.ɵɵtext(3, "No status data");
202
202
  i0.ɵɵelementEnd()();
203
203
  } }
204
- function APIUsagePanelComponent_ng_container_2_div_109_div_15_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelementStart(0, "div", 101)(1, "span", 93);
204
+ function APIUsagePanelComponent_Conditional_2_Conditional_108_For_16_Template(rf, ctx) { if (rf & 1) {
205
+ i0.ɵɵelementStart(0, "div", 89)(1, "span", 82);
206
206
  i0.ɵɵtext(2);
207
207
  i0.ɵɵelementEnd();
208
- i0.ɵɵelementStart(3, "span", 94);
208
+ i0.ɵɵelementStart(3, "span", 83);
209
209
  i0.ɵɵtext(4);
210
210
  i0.ɵɵelementEnd();
211
- i0.ɵɵelementStart(5, "span", 95)(6, "span", 67);
211
+ i0.ɵɵelementStart(5, "span", 84)(6, "span", 61);
212
212
  i0.ɵɵtext(7);
213
213
  i0.ɵɵelementEnd()();
214
- i0.ɵɵelementStart(8, "span", 96);
214
+ i0.ɵɵelementStart(8, "span", 85);
215
215
  i0.ɵɵtext(9);
216
216
  i0.ɵɵelementEnd();
217
- i0.ɵɵelementStart(10, "span", 102);
217
+ i0.ɵɵelementStart(10, "span", 90);
218
218
  i0.ɵɵtext(11);
219
219
  i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(12, "span", 98);
220
+ i0.ɵɵelementStart(12, "span", 87);
221
221
  i0.ɵɵtext(13);
222
222
  i0.ɵɵelementEnd()();
223
223
  } if (rf & 2) {
@@ -240,36 +240,36 @@ function APIUsagePanelComponent_ng_container_2_div_109_div_15_Template(rf, ctx)
240
240
  i0.ɵɵadvance(2);
241
241
  i0.ɵɵtextInterpolate1("", log_r10.responseTime, "ms");
242
242
  } }
243
- function APIUsagePanelComponent_ng_container_2_div_109_Template(rf, ctx) { if (rf & 1) {
244
- i0.ɵɵelementStart(0, "div", 91)(1, "div", 92)(2, "span", 93);
243
+ function APIUsagePanelComponent_Conditional_2_Conditional_108_Template(rf, ctx) { if (rf & 1) {
244
+ i0.ɵɵelementStart(0, "div", 47)(1, "div", 81)(2, "span", 82);
245
245
  i0.ɵɵtext(3, "Time");
246
246
  i0.ɵɵelementEnd();
247
- i0.ɵɵelementStart(4, "span", 94);
247
+ i0.ɵɵelementStart(4, "span", 83);
248
248
  i0.ɵɵtext(5, "API Key");
249
249
  i0.ɵɵelementEnd();
250
- i0.ɵɵelementStart(6, "span", 95);
250
+ i0.ɵɵelementStart(6, "span", 84);
251
251
  i0.ɵɵtext(7, "Method");
252
252
  i0.ɵɵelementEnd();
253
- i0.ɵɵelementStart(8, "span", 96);
253
+ i0.ɵɵelementStart(8, "span", 85);
254
254
  i0.ɵɵtext(9, "Endpoint");
255
255
  i0.ɵɵelementEnd();
256
- i0.ɵɵelementStart(10, "span", 97);
256
+ i0.ɵɵelementStart(10, "span", 86);
257
257
  i0.ɵɵtext(11, "Status");
258
258
  i0.ɵɵelementEnd();
259
- i0.ɵɵelementStart(12, "span", 98);
259
+ i0.ɵɵelementStart(12, "span", 87);
260
260
  i0.ɵɵtext(13, "Duration");
261
261
  i0.ɵɵelementEnd()();
262
- i0.ɵɵelementStart(14, "div", 99);
263
- i0.ɵɵtemplate(15, APIUsagePanelComponent_ng_container_2_div_109_div_15_Template, 14, 8, "div", 100);
262
+ i0.ɵɵelementStart(14, "div", 88);
263
+ i0.ɵɵrepeaterCreate(15, APIUsagePanelComponent_Conditional_2_Conditional_108_For_16_Template, 14, 8, "div", 89, i0.ɵɵrepeaterTrackByIdentity);
264
264
  i0.ɵɵelementEnd()();
265
265
  } if (rf & 2) {
266
266
  const ctx_r1 = i0.ɵɵnextContext(2);
267
267
  i0.ɵɵadvance(15);
268
- i0.ɵɵproperty("ngForOf", ctx_r1.RecentLogs);
268
+ i0.ɵɵrepeater(ctx_r1.RecentLogs);
269
269
  } }
270
- function APIUsagePanelComponent_ng_container_2_div_110_Template(rf, ctx) { if (rf & 1) {
271
- i0.ɵɵelementStart(0, "div", 103);
272
- i0.ɵɵelement(1, "i", 104);
270
+ function APIUsagePanelComponent_Conditional_2_Conditional_109_Template(rf, ctx) { if (rf & 1) {
271
+ i0.ɵɵelementStart(0, "div", 48);
272
+ i0.ɵɵelement(1, "i", 91);
273
273
  i0.ɵɵelementStart(2, "span");
274
274
  i0.ɵɵtext(3, "No requests logged yet");
275
275
  i0.ɵɵelementEnd();
@@ -277,130 +277,133 @@ function APIUsagePanelComponent_ng_container_2_div_110_Template(rf, ctx) { if (r
277
277
  i0.ɵɵtext(5, "API usage will appear here once keys are used");
278
278
  i0.ɵɵelementEnd()();
279
279
  } }
280
- function APIUsagePanelComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
280
+ function APIUsagePanelComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
281
281
  const _r1 = i0.ɵɵgetCurrentView();
282
- i0.ɵɵelementContainerStart(0);
283
- i0.ɵɵelementStart(1, "div", 5)(2, "div", 6)(3, "h3", 7);
284
- i0.ɵɵelement(4, "i", 8);
285
- i0.ɵɵtext(5, " API Usage Analytics ");
282
+ i0.ɵɵelementStart(0, "div", 3)(1, "div", 4)(2, "h3", 5);
283
+ i0.ɵɵelement(3, "i", 6);
284
+ i0.ɵɵtext(4, " API Usage Analytics ");
286
285
  i0.ɵɵelementEnd();
287
- i0.ɵɵelementStart(6, "p", 9);
288
- i0.ɵɵtext(7, "Monitor API key usage, performance, and trends");
286
+ i0.ɵɵelementStart(5, "p", 7);
287
+ i0.ɵɵtext(6, "Monitor API key usage, performance, and trends");
289
288
  i0.ɵɵelementEnd()();
290
- i0.ɵɵelementStart(8, "div", 10)(9, "button", 11);
291
- i0.ɵɵlistener("click", function APIUsagePanelComponent_ng_container_2_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("day")); });
292
- i0.ɵɵtext(10, "24 Hours");
289
+ i0.ɵɵelementStart(7, "div", 8)(8, "button", 9);
290
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_2_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("day")); });
291
+ i0.ɵɵtext(9, "24 Hours");
293
292
  i0.ɵɵelementEnd();
294
- i0.ɵɵelementStart(11, "button", 11);
295
- i0.ɵɵlistener("click", function APIUsagePanelComponent_ng_container_2_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("week")); });
296
- i0.ɵɵtext(12, "7 Days");
293
+ i0.ɵɵelementStart(10, "button", 9);
294
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_2_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("week")); });
295
+ i0.ɵɵtext(11, "7 Days");
297
296
  i0.ɵɵelementEnd();
298
- i0.ɵɵelementStart(13, "button", 11);
299
- i0.ɵɵlistener("click", function APIUsagePanelComponent_ng_container_2_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("month")); });
300
- i0.ɵɵtext(14, "30 Days");
297
+ i0.ɵɵelementStart(12, "button", 9);
298
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_2_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("month")); });
299
+ i0.ɵɵtext(13, "30 Days");
301
300
  i0.ɵɵelementEnd();
302
- i0.ɵɵelementStart(15, "button", 11);
303
- i0.ɵɵlistener("click", function APIUsagePanelComponent_ng_container_2_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("all")); });
304
- i0.ɵɵtext(16, "All Time");
301
+ i0.ɵɵelementStart(14, "button", 9);
302
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setTimeRange("all")); });
303
+ i0.ɵɵtext(15, "All Time");
305
304
  i0.ɵɵelementEnd()()();
306
- i0.ɵɵelementStart(17, "div", 12)(18, "div", 13)(19, "div", 14);
307
- i0.ɵɵelement(20, "i", 15);
305
+ i0.ɵɵelementStart(16, "div", 10)(17, "div", 11)(18, "div", 12);
306
+ i0.ɵɵelement(19, "i", 13);
308
307
  i0.ɵɵelementEnd();
309
- i0.ɵɵelementStart(21, "div", 16)(22, "div", 17);
310
- i0.ɵɵtext(23);
308
+ i0.ɵɵelementStart(20, "div", 14)(21, "div", 15);
309
+ i0.ɵɵtext(22);
311
310
  i0.ɵɵelementEnd();
312
- i0.ɵɵelementStart(24, "div", 18);
313
- i0.ɵɵtext(25, "Total Requests");
311
+ i0.ɵɵelementStart(23, "div", 16);
312
+ i0.ɵɵtext(24, "Total Requests");
314
313
  i0.ɵɵelementEnd()()();
315
- i0.ɵɵelementStart(26, "div", 13)(27, "div", 19);
316
- i0.ɵɵelement(28, "i", 20);
314
+ i0.ɵɵelementStart(25, "div", 11)(26, "div", 17);
315
+ i0.ɵɵelement(27, "i", 18);
317
316
  i0.ɵɵelementEnd();
318
- i0.ɵɵelementStart(29, "div", 16)(30, "div", 17);
319
- i0.ɵɵtext(31);
317
+ i0.ɵɵelementStart(28, "div", 14)(29, "div", 15);
318
+ i0.ɵɵtext(30);
320
319
  i0.ɵɵelementEnd();
321
- i0.ɵɵelementStart(32, "div", 18);
322
- i0.ɵɵtext(33, "Success Rate");
320
+ i0.ɵɵelementStart(31, "div", 16);
321
+ i0.ɵɵtext(32, "Success Rate");
323
322
  i0.ɵɵelementEnd()()();
324
- i0.ɵɵelementStart(34, "div", 13)(35, "div", 21);
325
- i0.ɵɵelement(36, "i", 22);
323
+ i0.ɵɵelementStart(33, "div", 11)(34, "div", 19);
324
+ i0.ɵɵelement(35, "i", 20);
326
325
  i0.ɵɵelementEnd();
327
- i0.ɵɵelementStart(37, "div", 16)(38, "div", 17);
328
- i0.ɵɵtext(39);
326
+ i0.ɵɵelementStart(36, "div", 14)(37, "div", 15);
327
+ i0.ɵɵtext(38);
329
328
  i0.ɵɵelementEnd();
330
- i0.ɵɵelementStart(40, "div", 18);
331
- i0.ɵɵtext(41, "Errors");
329
+ i0.ɵɵelementStart(39, "div", 16);
330
+ i0.ɵɵtext(40, "Errors");
332
331
  i0.ɵɵelementEnd()()();
333
- i0.ɵɵelementStart(42, "div", 13)(43, "div", 23);
334
- i0.ɵɵelement(44, "i", 24);
332
+ i0.ɵɵelementStart(41, "div", 11)(42, "div", 21);
333
+ i0.ɵɵelement(43, "i", 22);
335
334
  i0.ɵɵelementEnd();
336
- i0.ɵɵelementStart(45, "div", 16)(46, "div", 17);
337
- i0.ɵɵtext(47);
335
+ i0.ɵɵelementStart(44, "div", 14)(45, "div", 15);
336
+ i0.ɵɵtext(46);
338
337
  i0.ɵɵelementEnd();
339
- i0.ɵɵelementStart(48, "div", 18);
340
- i0.ɵɵtext(49, "Avg Response Time");
338
+ i0.ɵɵelementStart(47, "div", 16);
339
+ i0.ɵɵtext(48, "Avg Response Time");
341
340
  i0.ɵɵelementEnd()()();
342
- i0.ɵɵelementStart(50, "div", 13)(51, "div", 25);
343
- i0.ɵɵelement(52, "i", 26);
341
+ i0.ɵɵelementStart(49, "div", 11)(50, "div", 23);
342
+ i0.ɵɵelement(51, "i", 24);
344
343
  i0.ɵɵelementEnd();
345
- i0.ɵɵelementStart(53, "div", 16)(54, "div", 17);
346
- i0.ɵɵtext(55);
344
+ i0.ɵɵelementStart(52, "div", 14)(53, "div", 15);
345
+ i0.ɵɵtext(54);
347
346
  i0.ɵɵelementEnd();
348
- i0.ɵɵelementStart(56, "div", 18);
349
- i0.ɵɵtext(57, "Active Keys");
347
+ i0.ɵɵelementStart(55, "div", 16);
348
+ i0.ɵɵtext(56, "Active Keys");
350
349
  i0.ɵɵelementEnd()()();
351
- i0.ɵɵelementStart(58, "div", 13)(59, "div", 27);
352
- i0.ɵɵelement(60, "i", 28);
350
+ i0.ɵɵelementStart(57, "div", 11)(58, "div", 25);
351
+ i0.ɵɵelement(59, "i", 26);
353
352
  i0.ɵɵelementEnd();
354
- i0.ɵɵelementStart(61, "div", 16)(62, "div", 17);
355
- i0.ɵɵtext(63);
353
+ i0.ɵɵelementStart(60, "div", 14)(61, "div", 15);
354
+ i0.ɵɵtext(62);
356
355
  i0.ɵɵelementEnd();
357
- i0.ɵɵelementStart(64, "div", 18);
358
- i0.ɵɵtext(65, "Unique Endpoints");
356
+ i0.ɵɵelementStart(63, "div", 16);
357
+ i0.ɵɵtext(64, "Unique Endpoints");
359
358
  i0.ɵɵelementEnd()()()();
360
- i0.ɵɵelementStart(66, "div", 29)(67, "div", 30)(68, "h4");
361
- i0.ɵɵtext(69, "Request Volume");
359
+ i0.ɵɵelementStart(65, "div", 27)(66, "div", 28)(67, "h4");
360
+ i0.ɵɵtext(68, "Request Volume");
362
361
  i0.ɵɵelementEnd();
363
- i0.ɵɵelementStart(70, "div", 31)(71, "span", 32);
364
- i0.ɵɵelement(72, "span", 33);
365
- i0.ɵɵtext(73, " Requests ");
362
+ i0.ɵɵelementStart(69, "div", 29)(70, "span", 30);
363
+ i0.ɵɵelement(71, "span", 31);
364
+ i0.ɵɵtext(72, " Requests ");
366
365
  i0.ɵɵelementEnd();
367
- i0.ɵɵelementStart(74, "span", 32);
368
- i0.ɵɵelement(75, "span", 34);
369
- i0.ɵɵtext(76, " Errors ");
366
+ i0.ɵɵelementStart(73, "span", 30);
367
+ i0.ɵɵelement(74, "span", 32);
368
+ i0.ɵɵtext(75, " Errors ");
370
369
  i0.ɵɵelementEnd()()();
371
- i0.ɵɵtemplate(77, APIUsagePanelComponent_ng_container_2_div_77_Template, 10, 3, "div", 35)(78, APIUsagePanelComponent_ng_container_2_div_78_Template, 4, 0, "div", 36);
370
+ i0.ɵɵconditionalCreate(76, APIUsagePanelComponent_Conditional_2_Conditional_76_Template, 11, 2, "div", 33);
371
+ i0.ɵɵconditionalCreate(77, APIUsagePanelComponent_Conditional_2_Conditional_77_Template, 4, 0, "div", 34);
372
372
  i0.ɵɵelementEnd();
373
- i0.ɵɵelementStart(79, "div", 37)(80, "div", 38)(81, "div", 39)(82, "h4");
374
- i0.ɵɵelement(83, "i", 28);
375
- i0.ɵɵtext(84, " Top Endpoints ");
373
+ i0.ɵɵelementStart(78, "div", 35)(79, "div", 36)(80, "div", 37)(81, "h4");
374
+ i0.ɵɵelement(82, "i", 26);
375
+ i0.ɵɵtext(83, " Top Endpoints ");
376
376
  i0.ɵɵelementEnd()();
377
- i0.ɵɵelementStart(85, "div", 40);
378
- i0.ɵɵtemplate(86, APIUsagePanelComponent_ng_container_2_div_86_Template, 2, 1, "div", 41)(87, APIUsagePanelComponent_ng_container_2_div_87_Template, 4, 0, "div", 42);
377
+ i0.ɵɵelementStart(84, "div", 38);
378
+ i0.ɵɵconditionalCreate(85, APIUsagePanelComponent_Conditional_2_Conditional_85_Template, 3, 0, "div", 39);
379
+ i0.ɵɵconditionalCreate(86, APIUsagePanelComponent_Conditional_2_Conditional_86_Template, 4, 0, "div", 40);
379
380
  i0.ɵɵelementEnd()();
380
- i0.ɵɵelementStart(88, "div", 38)(89, "div", 39)(90, "h4");
381
- i0.ɵɵelement(91, "i", 26);
382
- i0.ɵɵtext(92, " Most Active Keys ");
381
+ i0.ɵɵelementStart(87, "div", 36)(88, "div", 37)(89, "h4");
382
+ i0.ɵɵelement(90, "i", 24);
383
+ i0.ɵɵtext(91, " Most Active Keys ");
383
384
  i0.ɵɵelementEnd()();
384
- i0.ɵɵelementStart(93, "div", 40);
385
- i0.ɵɵtemplate(94, APIUsagePanelComponent_ng_container_2_div_94_Template, 2, 1, "div", 43)(95, APIUsagePanelComponent_ng_container_2_div_95_Template, 4, 0, "div", 42);
385
+ i0.ɵɵelementStart(92, "div", 38);
386
+ i0.ɵɵconditionalCreate(93, APIUsagePanelComponent_Conditional_2_Conditional_93_Template, 3, 0, "div", 41);
387
+ i0.ɵɵconditionalCreate(94, APIUsagePanelComponent_Conditional_2_Conditional_94_Template, 4, 0, "div", 40);
386
388
  i0.ɵɵelementEnd()();
387
- i0.ɵɵelementStart(96, "div", 38)(97, "div", 39)(98, "h4");
388
- i0.ɵɵelement(99, "i", 44);
389
- i0.ɵɵtext(100, " Status Distribution ");
389
+ i0.ɵɵelementStart(95, "div", 36)(96, "div", 37)(97, "h4");
390
+ i0.ɵɵelement(98, "i", 42);
391
+ i0.ɵɵtext(99, " Status Distribution ");
390
392
  i0.ɵɵelementEnd()();
391
- i0.ɵɵelementStart(101, "div", 40);
392
- i0.ɵɵtemplate(102, APIUsagePanelComponent_ng_container_2_div_102_Template, 5, 2, "div", 45)(103, APIUsagePanelComponent_ng_container_2_div_103_Template, 4, 0, "div", 42);
393
+ i0.ɵɵelementStart(100, "div", 38);
394
+ i0.ɵɵconditionalCreate(101, APIUsagePanelComponent_Conditional_2_Conditional_101_Template, 7, 0, "div", 43);
395
+ i0.ɵɵconditionalCreate(102, APIUsagePanelComponent_Conditional_2_Conditional_102_Template, 4, 0, "div", 40);
393
396
  i0.ɵɵelementEnd()()();
394
- i0.ɵɵelementStart(104, "div", 46)(105, "div", 47)(106, "h4");
395
- i0.ɵɵelement(107, "i", 48);
396
- i0.ɵɵtext(108, " Recent Requests ");
397
+ i0.ɵɵelementStart(103, "div", 44)(104, "div", 45)(105, "h4");
398
+ i0.ɵɵelement(106, "i", 46);
399
+ i0.ɵɵtext(107, " Recent Requests ");
397
400
  i0.ɵɵelementEnd()();
398
- i0.ɵɵtemplate(109, APIUsagePanelComponent_ng_container_2_div_109_Template, 16, 1, "div", 49)(110, APIUsagePanelComponent_ng_container_2_div_110_Template, 6, 0, "div", 50);
401
+ i0.ɵɵconditionalCreate(108, APIUsagePanelComponent_Conditional_2_Conditional_108_Template, 17, 0, "div", 47);
402
+ i0.ɵɵconditionalCreate(109, APIUsagePanelComponent_Conditional_2_Conditional_109_Template, 6, 0, "div", 48);
399
403
  i0.ɵɵelementEnd();
400
- i0.ɵɵelementContainerEnd();
401
404
  } if (rf & 2) {
402
405
  const ctx_r1 = i0.ɵɵnextContext();
403
- i0.ɵɵadvance(9);
406
+ i0.ɵɵadvance(8);
404
407
  i0.ɵɵclassProp("active", ctx_r1.TimeRange === "day");
405
408
  i0.ɵɵadvance(2);
406
409
  i0.ɵɵclassProp("active", ctx_r1.TimeRange === "week");
@@ -425,28 +428,28 @@ function APIUsagePanelComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
425
428
  i0.ɵɵadvance(8);
426
429
  i0.ɵɵtextInterpolate(ctx_r1.UniqueEndpoints);
427
430
  i0.ɵɵadvance(14);
428
- i0.ɵɵproperty("ngIf", ctx_r1.TimeBuckets.length > 0);
431
+ i0.ɵɵconditional(ctx_r1.TimeBuckets.length > 0 ? 76 : -1);
429
432
  i0.ɵɵadvance();
430
- i0.ɵɵproperty("ngIf", ctx_r1.TimeBuckets.length === 0);
433
+ i0.ɵɵconditional(ctx_r1.TimeBuckets.length === 0 ? 77 : -1);
431
434
  i0.ɵɵadvance(8);
432
- i0.ɵɵproperty("ngIf", ctx_r1.TopEndpoints.length > 0);
435
+ i0.ɵɵconditional(ctx_r1.TopEndpoints.length > 0 ? 85 : -1);
433
436
  i0.ɵɵadvance();
434
- i0.ɵɵproperty("ngIf", ctx_r1.TopEndpoints.length === 0);
437
+ i0.ɵɵconditional(ctx_r1.TopEndpoints.length === 0 ? 86 : -1);
435
438
  i0.ɵɵadvance(7);
436
- i0.ɵɵproperty("ngIf", ctx_r1.TopKeys.length > 0);
439
+ i0.ɵɵconditional(ctx_r1.TopKeys.length > 0 ? 93 : -1);
437
440
  i0.ɵɵadvance();
438
- i0.ɵɵproperty("ngIf", ctx_r1.TopKeys.length === 0);
441
+ i0.ɵɵconditional(ctx_r1.TopKeys.length === 0 ? 94 : -1);
439
442
  i0.ɵɵadvance(7);
440
- i0.ɵɵproperty("ngIf", ctx_r1.StatusGroups.length > 0);
443
+ i0.ɵɵconditional(ctx_r1.StatusGroups.length > 0 ? 101 : -1);
441
444
  i0.ɵɵadvance();
442
- i0.ɵɵproperty("ngIf", ctx_r1.StatusGroups.length === 0);
445
+ i0.ɵɵconditional(ctx_r1.StatusGroups.length === 0 ? 102 : -1);
443
446
  i0.ɵɵadvance(6);
444
- i0.ɵɵproperty("ngIf", ctx_r1.RecentLogs.length > 0);
447
+ i0.ɵɵconditional(ctx_r1.RecentLogs.length > 0 ? 108 : -1);
445
448
  i0.ɵɵadvance();
446
- i0.ɵɵproperty("ngIf", ctx_r1.RecentLogs.length === 0);
449
+ i0.ɵɵconditional(ctx_r1.RecentLogs.length === 0 ? 109 : -1);
447
450
  } }
448
- function APIUsagePanelComponent_kendo_window_3_span_6_Template(rf, ctx) { if (rf & 1) {
449
- i0.ɵɵelementStart(0, "span", 114);
451
+ function APIUsagePanelComponent_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
452
+ i0.ɵɵelementStart(0, "span", 95);
450
453
  i0.ɵɵtext(1);
451
454
  i0.ɵɵelementEnd();
452
455
  } if (rf & 2) {
@@ -454,8 +457,8 @@ function APIUsagePanelComponent_kendo_window_3_span_6_Template(rf, ctx) { if (rf
454
457
  i0.ɵɵadvance();
455
458
  i0.ɵɵtextInterpolate1(" ", ctx_r1.LogsFilter.endpoint, " ");
456
459
  } }
457
- function APIUsagePanelComponent_kendo_window_3_span_7_Template(rf, ctx) { if (rf & 1) {
458
- i0.ɵɵelementStart(0, "span", 114);
460
+ function APIUsagePanelComponent_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
461
+ i0.ɵɵelementStart(0, "span", 95);
459
462
  i0.ɵɵtext(1);
460
463
  i0.ɵɵelementEnd();
461
464
  } if (rf & 2) {
@@ -463,26 +466,26 @@ function APIUsagePanelComponent_kendo_window_3_span_7_Template(rf, ctx) { if (rf
463
466
  i0.ɵɵadvance();
464
467
  i0.ɵɵtextInterpolate1(" Key: ", ctx_r1.KeyMap.get(ctx_r1.LogsFilter.keyId) || "Unknown", " ");
465
468
  } }
466
- function APIUsagePanelComponent_kendo_window_3_mj_loading_11_Template(rf, ctx) { if (rf & 1) {
467
- i0.ɵɵelement(0, "mj-loading", 115);
469
+ function APIUsagePanelComponent_Conditional_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
470
+ i0.ɵɵelement(0, "mj-loading", 99);
468
471
  } }
469
- function APIUsagePanelComponent_kendo_window_3_div_12_div_16_Template(rf, ctx) { if (rf & 1) {
470
- i0.ɵɵelementStart(0, "div", 101)(1, "span", 93);
472
+ function APIUsagePanelComponent_Conditional_3_Conditional_12_For_17_Template(rf, ctx) { if (rf & 1) {
473
+ i0.ɵɵelementStart(0, "div", 89)(1, "span", 82);
471
474
  i0.ɵɵtext(2);
472
475
  i0.ɵɵelementEnd();
473
- i0.ɵɵelementStart(3, "span", 94);
476
+ i0.ɵɵelementStart(3, "span", 83);
474
477
  i0.ɵɵtext(4);
475
478
  i0.ɵɵelementEnd();
476
- i0.ɵɵelementStart(5, "span", 95)(6, "span", 67);
479
+ i0.ɵɵelementStart(5, "span", 84)(6, "span", 61);
477
480
  i0.ɵɵtext(7);
478
481
  i0.ɵɵelementEnd()();
479
- i0.ɵɵelementStart(8, "span", 96);
482
+ i0.ɵɵelementStart(8, "span", 85);
480
483
  i0.ɵɵtext(9);
481
484
  i0.ɵɵelementEnd();
482
- i0.ɵɵelementStart(10, "span", 102);
485
+ i0.ɵɵelementStart(10, "span", 90);
483
486
  i0.ɵɵtext(11);
484
487
  i0.ɵɵelementEnd();
485
- i0.ɵɵelementStart(12, "span", 98);
488
+ i0.ɵɵelementStart(12, "span", 87);
486
489
  i0.ɵɵtext(13);
487
490
  i0.ɵɵelementEnd()();
488
491
  } if (rf & 2) {
@@ -505,67 +508,65 @@ function APIUsagePanelComponent_kendo_window_3_div_12_div_16_Template(rf, ctx) {
505
508
  i0.ɵɵadvance(2);
506
509
  i0.ɵɵtextInterpolate1("", log_r12.responseTime, "ms");
507
510
  } }
508
- function APIUsagePanelComponent_kendo_window_3_div_12_Template(rf, ctx) { if (rf & 1) {
509
- i0.ɵɵelementStart(0, "div", 116)(1, "div", 91)(2, "div", 92)(3, "span", 93);
511
+ function APIUsagePanelComponent_Conditional_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
512
+ i0.ɵɵelementStart(0, "div", 100)(1, "div", 47)(2, "div", 81)(3, "span", 82);
510
513
  i0.ɵɵtext(4, "Time");
511
514
  i0.ɵɵelementEnd();
512
- i0.ɵɵelementStart(5, "span", 94);
515
+ i0.ɵɵelementStart(5, "span", 83);
513
516
  i0.ɵɵtext(6, "API Key");
514
517
  i0.ɵɵelementEnd();
515
- i0.ɵɵelementStart(7, "span", 95);
518
+ i0.ɵɵelementStart(7, "span", 84);
516
519
  i0.ɵɵtext(8, "Method");
517
520
  i0.ɵɵelementEnd();
518
- i0.ɵɵelementStart(9, "span", 96);
521
+ i0.ɵɵelementStart(9, "span", 85);
519
522
  i0.ɵɵtext(10, "Endpoint");
520
523
  i0.ɵɵelementEnd();
521
- i0.ɵɵelementStart(11, "span", 97);
524
+ i0.ɵɵelementStart(11, "span", 86);
522
525
  i0.ɵɵtext(12, "Status");
523
526
  i0.ɵɵelementEnd();
524
- i0.ɵɵelementStart(13, "span", 98);
527
+ i0.ɵɵelementStart(13, "span", 87);
525
528
  i0.ɵɵtext(14, "Duration");
526
529
  i0.ɵɵelementEnd()();
527
- i0.ɵɵelementStart(15, "div", 117);
528
- i0.ɵɵtemplate(16, APIUsagePanelComponent_kendo_window_3_div_12_div_16_Template, 14, 8, "div", 100);
530
+ i0.ɵɵelementStart(15, "div", 101);
531
+ i0.ɵɵrepeaterCreate(16, APIUsagePanelComponent_Conditional_3_Conditional_12_For_17_Template, 14, 8, "div", 89, i0.ɵɵrepeaterTrackByIdentity);
529
532
  i0.ɵɵelementEnd()()();
530
533
  } if (rf & 2) {
531
534
  const ctx_r1 = i0.ɵɵnextContext(2);
532
535
  i0.ɵɵadvance(16);
533
- i0.ɵɵproperty("ngForOf", ctx_r1.RecentLogs);
536
+ i0.ɵɵrepeater(ctx_r1.RecentLogs);
534
537
  } }
535
- function APIUsagePanelComponent_kendo_window_3_Template(rf, ctx) { if (rf & 1) {
538
+ function APIUsagePanelComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
536
539
  const _r11 = i0.ɵɵgetCurrentView();
537
- i0.ɵɵelementStart(0, "kendo-window", 105);
538
- i0.ɵɵlistener("close", function APIUsagePanelComponent_kendo_window_3_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeLogsPanel()); });
539
- i0.ɵɵelementStart(1, "kendo-window-titlebar")(2, "div", 106);
540
- i0.ɵɵelement(3, "i", 107);
540
+ i0.ɵɵelementStart(0, "kendo-window", 92);
541
+ i0.ɵɵlistener("close", function APIUsagePanelComponent_Conditional_3_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeLogsPanel()); });
542
+ i0.ɵɵelementStart(1, "kendo-window-titlebar")(2, "div", 93);
543
+ i0.ɵɵelement(3, "i", 94);
541
544
  i0.ɵɵelementStart(4, "span");
542
545
  i0.ɵɵtext(5, "Request Details");
543
546
  i0.ɵɵelementEnd();
544
- i0.ɵɵtemplate(6, APIUsagePanelComponent_kendo_window_3_span_6_Template, 2, 1, "span", 108)(7, APIUsagePanelComponent_kendo_window_3_span_7_Template, 2, 1, "span", 108);
547
+ i0.ɵɵconditionalCreate(6, APIUsagePanelComponent_Conditional_3_Conditional_6_Template, 2, 1, "span", 95);
548
+ i0.ɵɵconditionalCreate(7, APIUsagePanelComponent_Conditional_3_Conditional_7_Template, 2, 1, "span", 95);
545
549
  i0.ɵɵelementEnd();
546
- i0.ɵɵelementStart(8, "button", 109);
547
- i0.ɵɵlistener("click", function APIUsagePanelComponent_kendo_window_3_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeLogsPanel()); });
548
- i0.ɵɵelement(9, "i", 110);
550
+ i0.ɵɵelementStart(8, "button", 96);
551
+ i0.ɵɵlistener("click", function APIUsagePanelComponent_Conditional_3_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeLogsPanel()); });
552
+ i0.ɵɵelement(9, "i", 97);
549
553
  i0.ɵɵelementEnd()();
550
- i0.ɵɵelementStart(10, "div", 111);
551
- i0.ɵɵtemplate(11, APIUsagePanelComponent_kendo_window_3_mj_loading_11_Template, 1, 0, "mj-loading", 112)(12, APIUsagePanelComponent_kendo_window_3_div_12_Template, 17, 1, "div", 113);
554
+ i0.ɵɵelementStart(10, "div", 98);
555
+ i0.ɵɵconditionalCreate(11, APIUsagePanelComponent_Conditional_3_Conditional_11_Template, 1, 0, "mj-loading", 99);
556
+ i0.ɵɵconditionalCreate(12, APIUsagePanelComponent_Conditional_3_Conditional_12_Template, 18, 0, "div", 100);
552
557
  i0.ɵɵelementEnd()();
553
558
  } if (rf & 2) {
554
559
  const ctx_r1 = i0.ɵɵnextContext();
555
560
  i0.ɵɵproperty("width", 800)("minWidth", 600)("height", 500)("minHeight", 400)("resizable", true)("draggable", true)("top", 80);
556
561
  i0.ɵɵadvance(6);
557
- i0.ɵɵproperty("ngIf", ctx_r1.LogsFilter.endpoint);
562
+ i0.ɵɵconditional(ctx_r1.LogsFilter.endpoint ? 6 : -1);
558
563
  i0.ɵɵadvance();
559
- i0.ɵɵproperty("ngIf", ctx_r1.LogsFilter.keyId);
564
+ i0.ɵɵconditional(ctx_r1.LogsFilter.keyId ? 7 : -1);
560
565
  i0.ɵɵadvance(4);
561
- i0.ɵɵproperty("ngIf", ctx_r1.IsLoadingLogs);
566
+ i0.ɵɵconditional(ctx_r1.IsLoadingLogs ? 11 : -1);
562
567
  i0.ɵɵadvance();
563
- i0.ɵɵproperty("ngIf", !ctx_r1.IsLoadingLogs);
568
+ i0.ɵɵconditional(!ctx_r1.IsLoadingLogs ? 12 : -1);
564
569
  } }
565
- /** Tree shaking prevention function */
566
- export function LoadAPIUsagePanel() {
567
- // This function prevents tree shaking
568
- }
569
570
  /**
570
571
  * API Usage Analytics Panel Component
571
572
  * Comprehensive usage statistics and drill-down capabilities
@@ -992,22 +993,24 @@ export class APIUsagePanelComponent {
992
993
  return num.toString();
993
994
  }
994
995
  static ɵfac = function APIUsagePanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIUsagePanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
995
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIUsagePanelComponent, selectors: [["mj-api-usage-panel"]], decls: 4, vars: 3, consts: [[1, "usage-panel"], ["text", "Loading usage analytics...", 4, "ngIf"], [4, "ngIf"], [3, "width", "minWidth", "height", "minHeight", "resizable", "draggable", "top", "close", 4, "ngIf"], ["text", "Loading usage analytics..."], [1, "panel-header"], [1, "header-left"], [1, "panel-title"], [1, "fa-solid", "fa-chart-line"], [1, "panel-subtitle"], [1, "time-filters"], [1, "time-btn", 3, "click"], [1, "kpi-grid"], [1, "kpi-card"], [1, "kpi-icon", "requests"], [1, "fa-solid", "fa-arrow-right-arrow-left"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", "success-rate"], [1, "fa-solid", "fa-check-circle"], [1, "kpi-icon", "errors"], [1, "fa-solid", "fa-circle-exclamation"], [1, "kpi-icon", "response-time"], [1, "fa-solid", "fa-gauge-high"], [1, "kpi-icon", "keys"], [1, "fa-solid", "fa-key"], [1, "kpi-icon", "endpoints"], [1, "fa-solid", "fa-code-branch"], [1, "chart-section"], [1, "chart-header"], [1, "chart-legend"], [1, "legend-item"], [1, "legend-color", "requests"], [1, "legend-color", "errors"], ["class", "chart-container", 4, "ngIf"], ["class", "empty-chart", 4, "ngIf"], [1, "breakdown-grid"], [1, "breakdown-card"], [1, "breakdown-header"], [1, "breakdown-content"], ["class", "endpoint-list", 4, "ngIf"], ["class", "empty-state", 4, "ngIf"], ["class", "key-list", 4, "ngIf"], [1, "fa-solid", "fa-circle-half-stroke"], ["class", "status-distribution", 4, "ngIf"], [1, "logs-section"], [1, "logs-header"], [1, "fa-solid", "fa-list"], ["class", "logs-table", 4, "ngIf"], ["class", "empty-state large", 4, "ngIf"], [1, "chart-container"], [1, "chart-bars"], ["class", "bar-group", 3, "title", 4, "ngFor", "ngForOf"], [1, "chart-y-axis"], [1, "bar-group", 3, "title"], [1, "bar-wrapper"], [1, "bar", "requests-bar"], ["class", "bar errors-bar", 3, "height", 4, "ngIf"], [1, "bar-label"], [1, "bar", "errors-bar"], [1, "empty-chart"], [1, "fa-solid", "fa-chart-area"], [1, "endpoint-list"], ["class", "endpoint-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "endpoint-item", 3, "click"], [1, "endpoint-info"], [1, "method-badge", 3, "ngClass"], [1, "endpoint-path"], [1, "endpoint-stats"], [1, "endpoint-requests"], [1, "endpoint-time"], [1, "endpoint-error"], [1, "empty-state"], [1, "key-list"], ["class", "key-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "key-item", 3, "click"], [1, "key-info"], [1, "key-label"], [1, "key-last-used"], [1, "key-requests"], [1, "status-distribution"], [1, "status-bar"], ["class", "status-segment", 3, "width", "backgroundColor", "title", 4, "ngFor", "ngForOf"], [1, "status-legend"], ["class", "status-legend-item", 4, "ngFor", "ngForOf"], [1, "status-segment", 3, "title"], [1, "status-legend-item"], [1, "status-color"], [1, "status-label"], [1, "status-count"], [1, "logs-table"], [1, "logs-table-header"], [1, "col-time"], [1, "col-key"], [1, "col-method"], [1, "col-endpoint"], [1, "col-status"], [1, "col-duration"], [1, "logs-table-body"], ["class", "log-row", 4, "ngFor", "ngForOf"], [1, "log-row"], [1, "col-status", 3, "ngClass"], [1, "empty-state", "large"], [1, "fa-solid", "fa-inbox"], [3, "close", "width", "minWidth", "height", "minHeight", "resizable", "draggable", "top"], [1, "drilldown-title"], [1, "fa-solid", "fa-magnifying-glass-chart"], ["class", "filter-badge", 4, "ngIf"], ["kendoButton", "", "fillMode", "flat", 1, "window-close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "drilldown-content"], ["text", "Loading requests...", 4, "ngIf"], ["class", "drilldown-logs", 4, "ngIf"], [1, "filter-badge"], ["text", "Loading requests..."], [1, "drilldown-logs"], [1, "logs-table-body", "scrollable"]], template: function APIUsagePanelComponent_Template(rf, ctx) { if (rf & 1) {
996
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIUsagePanelComponent, selectors: [["mj-api-usage-panel"]], standalone: false, decls: 4, vars: 3, consts: [[1, "usage-panel"], ["text", "Loading usage analytics..."], [3, "width", "minWidth", "height", "minHeight", "resizable", "draggable", "top"], [1, "panel-header"], [1, "header-left"], [1, "panel-title"], [1, "fa-solid", "fa-chart-line"], [1, "panel-subtitle"], [1, "time-filters"], [1, "time-btn", 3, "click"], [1, "kpi-grid"], [1, "kpi-card"], [1, "kpi-icon", "requests"], [1, "fa-solid", "fa-arrow-right-arrow-left"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", "success-rate"], [1, "fa-solid", "fa-check-circle"], [1, "kpi-icon", "errors"], [1, "fa-solid", "fa-circle-exclamation"], [1, "kpi-icon", "response-time"], [1, "fa-solid", "fa-gauge-high"], [1, "kpi-icon", "keys"], [1, "fa-solid", "fa-key"], [1, "kpi-icon", "endpoints"], [1, "fa-solid", "fa-code-branch"], [1, "chart-section"], [1, "chart-header"], [1, "chart-legend"], [1, "legend-item"], [1, "legend-color", "requests"], [1, "legend-color", "errors"], [1, "chart-container"], [1, "empty-chart"], [1, "breakdown-grid"], [1, "breakdown-card"], [1, "breakdown-header"], [1, "breakdown-content"], [1, "endpoint-list"], [1, "empty-state"], [1, "key-list"], [1, "fa-solid", "fa-circle-half-stroke"], [1, "status-distribution"], [1, "logs-section"], [1, "logs-header"], [1, "fa-solid", "fa-list"], [1, "logs-table"], [1, "empty-state", "large"], [1, "chart-bars"], [1, "bar-group", 3, "title"], [1, "chart-y-axis"], [1, "bar-wrapper"], [1, "bar", "requests-bar"], [1, "bar", "errors-bar", 3, "height"], [1, "bar-label"], [1, "bar", "errors-bar"], [1, "fa-solid", "fa-chart-area"], [1, "endpoint-item"], [1, "endpoint-item", 3, "click"], [1, "endpoint-info"], [1, "method-badge", 3, "ngClass"], [1, "endpoint-path"], [1, "endpoint-stats"], [1, "endpoint-requests"], [1, "endpoint-time"], [1, "endpoint-error"], [1, "key-item"], [1, "key-item", 3, "click"], [1, "key-info"], [1, "key-label"], [1, "key-last-used"], [1, "key-requests"], [1, "status-bar"], [1, "status-segment", 3, "width", "backgroundColor", "title"], [1, "status-legend"], [1, "status-legend-item"], [1, "status-segment", 3, "title"], [1, "status-color"], [1, "status-label"], [1, "status-count"], [1, "logs-table-header"], [1, "col-time"], [1, "col-key"], [1, "col-method"], [1, "col-endpoint"], [1, "col-status"], [1, "col-duration"], [1, "logs-table-body"], [1, "log-row"], [1, "col-status", 3, "ngClass"], [1, "fa-solid", "fa-inbox"], [3, "close", "width", "minWidth", "height", "minHeight", "resizable", "draggable", "top"], [1, "drilldown-title"], [1, "fa-solid", "fa-magnifying-glass-chart"], [1, "filter-badge"], ["kendoButton", "", "fillMode", "flat", 1, "window-close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "drilldown-content"], ["text", "Loading requests..."], [1, "drilldown-logs"], [1, "logs-table-body", "scrollable"]], template: function APIUsagePanelComponent_Template(rf, ctx) { if (rf & 1) {
996
997
  i0.ɵɵelementStart(0, "div", 0);
997
- i0.ɵɵtemplate(1, APIUsagePanelComponent_mj_loading_1_Template, 1, 0, "mj-loading", 1)(2, APIUsagePanelComponent_ng_container_2_Template, 111, 28, "ng-container", 2)(3, APIUsagePanelComponent_kendo_window_3_Template, 13, 11, "kendo-window", 3);
998
+ i0.ɵɵconditionalCreate(1, APIUsagePanelComponent_Conditional_1_Template, 1, 0, "mj-loading", 1);
999
+ i0.ɵɵconditionalCreate(2, APIUsagePanelComponent_Conditional_2_Template, 110, 28);
1000
+ i0.ɵɵconditionalCreate(3, APIUsagePanelComponent_Conditional_3_Template, 13, 11, "kendo-window", 2);
998
1001
  i0.ɵɵelementEnd();
999
1002
  } if (rf & 2) {
1000
1003
  i0.ɵɵadvance();
1001
- i0.ɵɵproperty("ngIf", ctx.IsLoading);
1004
+ i0.ɵɵconditional(ctx.IsLoading ? 1 : -1);
1002
1005
  i0.ɵɵadvance();
1003
- i0.ɵɵproperty("ngIf", !ctx.IsLoading);
1006
+ i0.ɵɵconditional(!ctx.IsLoading ? 2 : -1);
1004
1007
  i0.ɵɵadvance();
1005
- i0.ɵɵproperty("ngIf", ctx.ShowLogsPanel);
1006
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.WindowComponent, i2.WindowTitleBarComponent, i3.ButtonComponent, i4.LoadingComponent], styles: [".usage-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: #f8fafc;\n min-height: 100%;\n}\n\n\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 24px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.panel-subtitle[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: #6b7280;\n}\n\n\n\n.time-filters[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: white;\n padding: 4px;\n border-radius: 10px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.time-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.time-btn[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.time-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n\n\n.kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 16px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 18px 20px;\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n transition: all 0.2s ease;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n.kpi-card.success[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n}\n\n.kpi-card.warning[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n font-size: 18px;\n}\n\n.kpi-icon.requests[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n color: #2563eb;\n}\n\n.kpi-icon.success-rate[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);\n color: #059669;\n}\n\n.kpi-icon.errors[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n color: #dc2626;\n}\n\n.kpi-icon.response-time[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n color: #4f46e5;\n}\n\n.kpi-icon.keys[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n color: #d97706;\n}\n\n.kpi-icon.endpoints[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f3e8ff 0%, #e9d5ff 100%);\n color: #7c3aed;\n}\n\n.kpi-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6b7280;\n}\n\n\n\n.chart-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n.chart-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.chart-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.legend-color[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.legend-color.requests[_ngcontent-%COMP%] {\n background: #6366f1;\n}\n\n.legend-color.errors[_ngcontent-%COMP%] {\n background: #ef4444;\n}\n\n.chart-container[_ngcontent-%COMP%] {\n display: flex;\n height: 200px;\n gap: 8px;\n}\n\n.chart-bars[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: flex-end;\n gap: 4px;\n padding-bottom: 24px;\n}\n\n.bar-group[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 0;\n}\n\n.bar-wrapper[_ngcontent-%COMP%] {\n width: 100%;\n height: 160px;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 32px;\n border-radius: 4px 4px 0 0;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.bar.requests-bar[_ngcontent-%COMP%] {\n background: linear-gradient(180deg, #6366f1 0%, #818cf8 100%);\n}\n\n.bar.requests-bar[_ngcontent-%COMP%]:hover {\n background: linear-gradient(180deg, #4f46e5 0%, #6366f1 100%);\n}\n\n.bar.errors-bar[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n background: #ef4444;\n border-radius: 0;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 10px;\n color: #9ca3af;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 100%;\n}\n\n.chart-y-axis[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding-bottom: 24px;\n font-size: 10px;\n color: #9ca3af;\n text-align: right;\n min-width: 40px;\n}\n\n.empty-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #9ca3af;\n}\n\n.empty-chart[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n\n\n.breakdown-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 20px;\n}\n\n.breakdown-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.breakdown-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.breakdown-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.breakdown-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.breakdown-content[_ngcontent-%COMP%] {\n padding: 12px;\n max-height: 280px;\n overflow-y: auto;\n}\n\n\n\n.endpoint-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.endpoint-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.endpoint-item[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.endpoint-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n\n.method-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.method-get[_ngcontent-%COMP%] { background: #dbeafe; color: #2563eb; }\n.method-post[_ngcontent-%COMP%] { background: #d1fae5; color: #059669; }\n.method-put[_ngcontent-%COMP%] { background: #fef3c7; color: #d97706; }\n.method-delete[_ngcontent-%COMP%] { background: #fee2e2; color: #dc2626; }\n.method-other[_ngcontent-%COMP%] { background: #f3f4f6; color: #6b7280; }\n\n.endpoint-path[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'Fira Code', monospace;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.endpoint-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.endpoint-requests[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #6366f1;\n}\n\n.endpoint-time[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.endpoint-error[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.endpoint-error.has-errors[_ngcontent-%COMP%] {\n color: #ef4444;\n font-weight: 500;\n}\n\n\n\n.key-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.key-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.key-item[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.key-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.key-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-last-used[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.key-requests[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #6366f1;\n}\n\n\n\n.status-distribution[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.status-bar[_ngcontent-%COMP%] {\n display: flex;\n height: 24px;\n border-radius: 6px;\n overflow: hidden;\n background: #f3f4f6;\n}\n\n.status-segment[_ngcontent-%COMP%] {\n transition: all 0.3s ease;\n}\n\n.status-segment[_ngcontent-%COMP%]:hover {\n filter: brightness(1.1);\n}\n\n.status-legend[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.status-legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n\n.status-color[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.status-label[_ngcontent-%COMP%] {\n flex: 1;\n color: #374151;\n}\n\n.status-count[_ngcontent-%COMP%] {\n color: #6b7280;\n font-weight: 500;\n}\n\n\n\n.logs-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.logs-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.logs-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.logs-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.logs-table[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.logs-table-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n background: #f3f4f6;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table-body[_ngcontent-%COMP%] {\n max-height: 320px;\n overflow-y: auto;\n}\n\n.logs-table-body.scrollable[_ngcontent-%COMP%] {\n max-height: 380px;\n}\n\n.log-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n border-bottom: 1px solid #f3f4f6;\n font-size: 13px;\n align-items: center;\n transition: background 0.2s ease;\n}\n\n.log-row[_ngcontent-%COMP%]:hover {\n background: #f9fafb;\n}\n\n.col-time[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 12px;\n}\n\n.col-key[_ngcontent-%COMP%] {\n color: #374151;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-endpoint[_ngcontent-%COMP%] {\n font-family: 'Fira Code', monospace;\n font-size: 12px;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-status[_ngcontent-%COMP%] {\n font-weight: 600;\n text-align: center;\n}\n\n.col-status.status-success[_ngcontent-%COMP%] { color: #10b981; }\n.col-status.status-info[_ngcontent-%COMP%] { color: #3b82f6; }\n.col-status.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n.col-status.status-error[_ngcontent-%COMP%] { color: #ef4444; }\n\n.col-duration[_ngcontent-%COMP%] {\n color: #6b7280;\n text-align: right;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 20px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.empty-state.large[_ngcontent-%COMP%] {\n padding: 48px 24px;\n}\n\n.empty-state.large[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0 0 0;\n font-size: 12px;\n}\n\n\n\n.drilldown-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 15px;\n}\n\n.drilldown-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.filter-badge[_ngcontent-%COMP%] {\n padding: 4px 10px;\n background: #e0e7ff;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #4f46e5;\n}\n\n.window-close-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n color: #9ca3af;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n}\n\n.window-close-btn[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: rgba(0, 0, 0, 0.05);\n}\n\n.drilldown-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow: hidden;\n}\n\n.drilldown-logs[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n[_nghost-%COMP%] kendo-window {\n border-radius: 12px !important;\n overflow: hidden;\n box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15) !important;\n}\n\n[_nghost-%COMP%] kendo-window .k-window-content {\n padding: 0 !important;\n}\n\n[_nghost-%COMP%] kendo-window-titlebar {\n padding: 16px 20px !important;\n background: #f9fafb !important;\n border-bottom: 1px solid #e5e7eb !important;\n}\n\n\n\n@media (max-width: 1400px) {\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@media (max-width: 1200px) {\n .breakdown-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n@media (max-width: 900px) {\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .breakdown-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header[_ngcontent-%COMP%], \n .log-row[_ngcontent-%COMP%] {\n grid-template-columns: 80px 100px 60px 1fr 60px;\n }\n\n .col-duration[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 600px) {\n .panel-header[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .time-filters[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n }\n\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header[_ngcontent-%COMP%], \n .log-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 60px;\n }\n\n .col-key[_ngcontent-%COMP%], \n .col-method[_ngcontent-%COMP%], \n .col-endpoint[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
1008
+ i0.ɵɵconditional(ctx.ShowLogsPanel ? 3 : -1);
1009
+ } }, dependencies: [i1.NgClass, i2.WindowComponent, i2.WindowTitleBarComponent, i3.ButtonComponent, i4.LoadingComponent], styles: [".usage-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: #f8fafc;\n min-height: 100%;\n}\n\n\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 24px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.panel-subtitle[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: #6b7280;\n}\n\n\n\n.time-filters[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: white;\n padding: 4px;\n border-radius: 10px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.time-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.time-btn[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.time-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n\n\n.kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 16px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 18px 20px;\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n transition: all 0.2s ease;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n.kpi-card.success[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n}\n\n.kpi-card.warning[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n font-size: 18px;\n}\n\n.kpi-icon.requests[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n color: #2563eb;\n}\n\n.kpi-icon.success-rate[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);\n color: #059669;\n}\n\n.kpi-icon.errors[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n color: #dc2626;\n}\n\n.kpi-icon.response-time[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n color: #4f46e5;\n}\n\n.kpi-icon.keys[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n color: #d97706;\n}\n\n.kpi-icon.endpoints[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f3e8ff 0%, #e9d5ff 100%);\n color: #7c3aed;\n}\n\n.kpi-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6b7280;\n}\n\n\n\n.chart-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n.chart-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.chart-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.legend-color[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.legend-color.requests[_ngcontent-%COMP%] {\n background: #6366f1;\n}\n\n.legend-color.errors[_ngcontent-%COMP%] {\n background: #ef4444;\n}\n\n.chart-container[_ngcontent-%COMP%] {\n display: flex;\n height: 200px;\n gap: 8px;\n}\n\n.chart-bars[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: flex-end;\n gap: 4px;\n padding-bottom: 24px;\n}\n\n.bar-group[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 0;\n}\n\n.bar-wrapper[_ngcontent-%COMP%] {\n width: 100%;\n height: 160px;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 32px;\n border-radius: 4px 4px 0 0;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.bar.requests-bar[_ngcontent-%COMP%] {\n background: linear-gradient(180deg, #6366f1 0%, #818cf8 100%);\n}\n\n.bar.requests-bar[_ngcontent-%COMP%]:hover {\n background: linear-gradient(180deg, #4f46e5 0%, #6366f1 100%);\n}\n\n.bar.errors-bar[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n background: #ef4444;\n border-radius: 0;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 10px;\n color: #9ca3af;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 100%;\n}\n\n.chart-y-axis[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding-bottom: 24px;\n font-size: 10px;\n color: #9ca3af;\n text-align: right;\n min-width: 40px;\n}\n\n.empty-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #9ca3af;\n}\n\n.empty-chart[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n\n\n.breakdown-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 20px;\n}\n\n.breakdown-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.breakdown-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.breakdown-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.breakdown-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.breakdown-content[_ngcontent-%COMP%] {\n padding: 12px;\n max-height: 280px;\n overflow-y: auto;\n}\n\n\n\n.endpoint-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.endpoint-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.endpoint-item[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.endpoint-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n\n.method-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.method-get[_ngcontent-%COMP%] { background: #dbeafe; color: #2563eb; }\n.method-post[_ngcontent-%COMP%] { background: #d1fae5; color: #059669; }\n.method-put[_ngcontent-%COMP%] { background: #fef3c7; color: #d97706; }\n.method-delete[_ngcontent-%COMP%] { background: #fee2e2; color: #dc2626; }\n.method-other[_ngcontent-%COMP%] { background: #f3f4f6; color: #6b7280; }\n\n.endpoint-path[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'Fira Code', monospace;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.endpoint-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.endpoint-requests[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #6366f1;\n}\n\n.endpoint-time[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.endpoint-error[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.endpoint-error.has-errors[_ngcontent-%COMP%] {\n color: #ef4444;\n font-weight: 500;\n}\n\n\n\n.key-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.key-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.key-item[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.key-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.key-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-last-used[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.key-requests[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #6366f1;\n}\n\n\n\n.status-distribution[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.status-bar[_ngcontent-%COMP%] {\n display: flex;\n height: 24px;\n border-radius: 6px;\n overflow: hidden;\n background: #f3f4f6;\n}\n\n.status-segment[_ngcontent-%COMP%] {\n transition: all 0.3s ease;\n}\n\n.status-segment[_ngcontent-%COMP%]:hover {\n filter: brightness(1.1);\n}\n\n.status-legend[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.status-legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n\n.status-color[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.status-label[_ngcontent-%COMP%] {\n flex: 1;\n color: #374151;\n}\n\n.status-count[_ngcontent-%COMP%] {\n color: #6b7280;\n font-weight: 500;\n}\n\n\n\n.logs-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.logs-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.logs-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.logs-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.logs-table[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.logs-table-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n background: #f3f4f6;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table-body[_ngcontent-%COMP%] {\n max-height: 320px;\n overflow-y: auto;\n}\n\n.logs-table-body.scrollable[_ngcontent-%COMP%] {\n max-height: 380px;\n}\n\n.log-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n border-bottom: 1px solid #f3f4f6;\n font-size: 13px;\n align-items: center;\n transition: background 0.2s ease;\n}\n\n.log-row[_ngcontent-%COMP%]:hover {\n background: #f9fafb;\n}\n\n.col-time[_ngcontent-%COMP%] {\n color: #6b7280;\n font-size: 12px;\n}\n\n.col-key[_ngcontent-%COMP%] {\n color: #374151;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-endpoint[_ngcontent-%COMP%] {\n font-family: 'Fira Code', monospace;\n font-size: 12px;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-status[_ngcontent-%COMP%] {\n font-weight: 600;\n text-align: center;\n}\n\n.col-status.status-success[_ngcontent-%COMP%] { color: #10b981; }\n.col-status.status-info[_ngcontent-%COMP%] { color: #3b82f6; }\n.col-status.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n.col-status.status-error[_ngcontent-%COMP%] { color: #ef4444; }\n\n.col-duration[_ngcontent-%COMP%] {\n color: #6b7280;\n text-align: right;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 20px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.empty-state.large[_ngcontent-%COMP%] {\n padding: 48px 24px;\n}\n\n.empty-state.large[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0 0 0;\n font-size: 12px;\n}\n\n\n\n.drilldown-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 15px;\n}\n\n.drilldown-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n}\n\n.filter-badge[_ngcontent-%COMP%] {\n padding: 4px 10px;\n background: #e0e7ff;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #4f46e5;\n}\n\n.window-close-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n color: #9ca3af;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n}\n\n.window-close-btn[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: rgba(0, 0, 0, 0.05);\n}\n\n.drilldown-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow: hidden;\n}\n\n.drilldown-logs[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n[_nghost-%COMP%] kendo-window {\n border-radius: 12px !important;\n overflow: hidden;\n box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15) !important;\n}\n\n[_nghost-%COMP%] kendo-window .k-window-content {\n padding: 0 !important;\n}\n\n[_nghost-%COMP%] kendo-window-titlebar {\n padding: 16px 20px !important;\n background: #f9fafb !important;\n border-bottom: 1px solid #e5e7eb !important;\n}\n\n\n\n@media (max-width: 1400px) {\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@media (max-width: 1200px) {\n .breakdown-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n@media (max-width: 900px) {\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .breakdown-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header[_ngcontent-%COMP%], \n .log-row[_ngcontent-%COMP%] {\n grid-template-columns: 80px 100px 60px 1fr 60px;\n }\n\n .col-duration[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 600px) {\n .panel-header[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .time-filters[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n }\n\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header[_ngcontent-%COMP%], \n .log-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 60px;\n }\n\n .col-key[_ngcontent-%COMP%], \n .col-method[_ngcontent-%COMP%], \n .col-endpoint[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
1007
1010
  }
1008
1011
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(APIUsagePanelComponent, [{
1009
1012
  type: Component,
1010
- args: [{ selector: 'mj-api-usage-panel', template: "<div class=\"usage-panel\">\n <mj-loading *ngIf=\"IsLoading\" text=\"Loading usage analytics...\"></mj-loading>\n\n <ng-container *ngIf=\"!IsLoading\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n API Usage Analytics\n </h3>\n <p class=\"panel-subtitle\">Monitor API key usage, performance, and trends</p>\n </div>\n <div class=\"time-filters\">\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'day'\"\n (click)=\"setTimeRange('day')\">24 Hours</button>\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'week'\"\n (click)=\"setTimeRange('week')\">7 Days</button>\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'month'\"\n (click)=\"setTimeRange('month')\">30 Days</button>\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'all'\"\n (click)=\"setTimeRange('all')\">All Time</button>\n </div>\n </div>\n\n <!-- Summary KPIs -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon requests\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{formatNumber(TotalRequests)}}</div>\n <div class=\"kpi-label\">Total Requests</div>\n </div>\n </div>\n\n <div class=\"kpi-card\" [class.success]=\"SuccessRate >= 95\">\n <div class=\"kpi-icon success-rate\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{SuccessRate}}%</div>\n <div class=\"kpi-label\">Success Rate</div>\n </div>\n </div>\n\n <div class=\"kpi-card\" [class.warning]=\"TotalErrors > 0\">\n <div class=\"kpi-icon errors\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{formatNumber(TotalErrors)}}</div>\n <div class=\"kpi-label\">Errors</div>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon response-time\">\n <i class=\"fa-solid fa-gauge-high\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{AvgResponseTime}}ms</div>\n <div class=\"kpi-label\">Avg Response Time</div>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon keys\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{UniqueKeys}}</div>\n <div class=\"kpi-label\">Active Keys</div>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon endpoints\">\n <i class=\"fa-solid fa-code-branch\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{UniqueEndpoints}}</div>\n <div class=\"kpi-label\">Unique Endpoints</div>\n </div>\n </div>\n </div>\n\n <!-- Usage Chart -->\n <div class=\"chart-section\">\n <div class=\"chart-header\">\n <h4>Request Volume</h4>\n <div class=\"chart-legend\">\n <span class=\"legend-item\">\n <span class=\"legend-color requests\"></span> Requests\n </span>\n <span class=\"legend-item\">\n <span class=\"legend-color errors\"></span> Errors\n </span>\n </div>\n </div>\n <div class=\"chart-container\" *ngIf=\"TimeBuckets.length > 0\">\n <div class=\"chart-bars\">\n <div class=\"bar-group\" *ngFor=\"let bucket of TimeBuckets\" [title]=\"bucket.requests + ' requests, ' + bucket.errors + ' errors'\">\n <div class=\"bar-wrapper\">\n <div class=\"bar requests-bar\"\n [style.height.%]=\"getBarHeight(bucket.requests)\">\n <div class=\"bar errors-bar\"\n [style.height.%]=\"getErrorBarHeight(bucket)\"\n *ngIf=\"bucket.errors > 0\">\n </div>\n </div>\n </div>\n <div class=\"bar-label\">{{bucket.label}}</div>\n </div>\n </div>\n <div class=\"chart-y-axis\">\n <span>{{formatNumber(MaxRequests)}}</span>\n <span>{{formatNumber(Math.round(MaxRequests / 2))}}</span>\n <span>0</span>\n </div>\n </div>\n <div class=\"empty-chart\" *ngIf=\"TimeBuckets.length === 0\">\n <i class=\"fa-solid fa-chart-area\"></i>\n <span>No usage data available</span>\n </div>\n </div>\n\n <!-- Breakdown Grid -->\n <div class=\"breakdown-grid\">\n <!-- Top Endpoints -->\n <div class=\"breakdown-card\">\n <div class=\"breakdown-header\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Top Endpoints\n </h4>\n </div>\n <div class=\"breakdown-content\">\n <div class=\"endpoint-list\" *ngIf=\"TopEndpoints.length > 0\">\n <div class=\"endpoint-item\" *ngFor=\"let ep of TopEndpoints\"\n (click)=\"drillDownEndpoint(ep)\">\n <div class=\"endpoint-info\">\n <span class=\"method-badge\" [ngClass]=\"getMethodClass(ep.method)\">\n {{ep.method}}\n </span>\n <span class=\"endpoint-path\">{{ep.endpoint}}</span>\n </div>\n <div class=\"endpoint-stats\">\n <span class=\"endpoint-requests\">{{formatNumber(ep.requests)}}</span>\n <span class=\"endpoint-time\">{{ep.avgResponseTime}}ms</span>\n <span class=\"endpoint-error\" [class.has-errors]=\"ep.errorRate > 0\">\n {{ep.errorRate}}% err\n </span>\n </div>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"TopEndpoints.length === 0\">\n <i class=\"fa-solid fa-code-branch\"></i>\n <span>No endpoint data</span>\n </div>\n </div>\n </div>\n\n <!-- Top Keys -->\n <div class=\"breakdown-card\">\n <div class=\"breakdown-header\">\n <h4>\n <i class=\"fa-solid fa-key\"></i>\n Most Active Keys\n </h4>\n </div>\n <div class=\"breakdown-content\">\n <div class=\"key-list\" *ngIf=\"TopKeys.length > 0\">\n <div class=\"key-item\" *ngFor=\"let key of TopKeys\"\n (click)=\"drillDownKey(key)\">\n <div class=\"key-info\">\n <span class=\"key-label\">{{key.label}}</span>\n <span class=\"key-last-used\">{{formatDate(key.lastUsed)}}</span>\n </div>\n <div class=\"key-requests\">{{formatNumber(key.requests)}}</div>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"TopKeys.length === 0\">\n <i class=\"fa-solid fa-key\"></i>\n <span>No key data</span>\n </div>\n </div>\n </div>\n\n <!-- Status Distribution -->\n <div class=\"breakdown-card\">\n <div class=\"breakdown-header\">\n <h4>\n <i class=\"fa-solid fa-circle-half-stroke\"></i>\n Status Distribution\n </h4>\n </div>\n <div class=\"breakdown-content\">\n <div class=\"status-distribution\" *ngIf=\"StatusGroups.length > 0\">\n <div class=\"status-bar\">\n <div class=\"status-segment\" *ngFor=\"let group of StatusGroups\"\n [style.width.%]=\"group.percentage\"\n [style.backgroundColor]=\"group.color\"\n [title]=\"group.label + ': ' + group.count + ' (' + group.percentage + '%)'\">\n </div>\n </div>\n <div class=\"status-legend\">\n <div class=\"status-legend-item\" *ngFor=\"let group of StatusGroups\">\n <span class=\"status-color\" [style.backgroundColor]=\"group.color\"></span>\n <span class=\"status-label\">{{group.label}}</span>\n <span class=\"status-count\">{{formatNumber(group.count)}} ({{group.percentage}}%)</span>\n </div>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"StatusGroups.length === 0\">\n <i class=\"fa-solid fa-circle-half-stroke\"></i>\n <span>No status data</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Recent Logs -->\n <div class=\"logs-section\">\n <div class=\"logs-header\">\n <h4>\n <i class=\"fa-solid fa-list\"></i>\n Recent Requests\n </h4>\n </div>\n <div class=\"logs-table\" *ngIf=\"RecentLogs.length > 0\">\n <div class=\"logs-table-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-key\">API Key</span>\n <span class=\"col-method\">Method</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n <div class=\"logs-table-body\">\n <div class=\"log-row\" *ngFor=\"let log of RecentLogs\">\n <span class=\"col-time\">{{formatDate(log.timestamp)}}</span>\n <span class=\"col-key\">{{log.keyLabel}}</span>\n <span class=\"col-method\">\n <span class=\"method-badge\" [ngClass]=\"getMethodClass(log.method)\">\n {{log.method}}\n </span>\n </span>\n <span class=\"col-endpoint\">{{log.endpoint}}</span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n </div>\n </div>\n <div class=\"empty-state large\" *ngIf=\"RecentLogs.length === 0\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No requests logged yet</span>\n <p>API usage will appear here once keys are used</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Drill-down Panel -->\n <kendo-window *ngIf=\"ShowLogsPanel\"\n [width]=\"800\"\n [minWidth]=\"600\"\n [height]=\"500\"\n [minHeight]=\"400\"\n [resizable]=\"true\"\n [draggable]=\"true\"\n [top]=\"80\"\n (close)=\"closeLogsPanel()\">\n <kendo-window-titlebar>\n <div class=\"drilldown-title\">\n <i class=\"fa-solid fa-magnifying-glass-chart\"></i>\n <span>Request Details</span>\n <span class=\"filter-badge\" *ngIf=\"LogsFilter.endpoint\">\n {{LogsFilter.endpoint}}\n </span>\n <span class=\"filter-badge\" *ngIf=\"LogsFilter.keyId\">\n Key: {{KeyMap.get(LogsFilter.keyId) || 'Unknown'}}\n </span>\n </div>\n <button kendoButton fillMode=\"flat\" (click)=\"closeLogsPanel()\" class=\"window-close-btn\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </kendo-window-titlebar>\n\n <div class=\"drilldown-content\">\n <mj-loading *ngIf=\"IsLoadingLogs\" text=\"Loading requests...\"></mj-loading>\n <div class=\"drilldown-logs\" *ngIf=\"!IsLoadingLogs\">\n <div class=\"logs-table\">\n <div class=\"logs-table-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-key\">API Key</span>\n <span class=\"col-method\">Method</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n <div class=\"logs-table-body scrollable\">\n <div class=\"log-row\" *ngFor=\"let log of RecentLogs\">\n <span class=\"col-time\">{{formatDate(log.timestamp)}}</span>\n <span class=\"col-key\">{{log.keyLabel}}</span>\n <span class=\"col-method\">\n <span class=\"method-badge\" [ngClass]=\"getMethodClass(log.method)\">\n {{log.method}}\n </span>\n </span>\n <span class=\"col-endpoint\">{{log.endpoint}}</span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </kendo-window>\n</div>\n", styles: [".usage-panel {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: #f8fafc;\n min-height: 100%;\n}\n\n/* Header */\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.header-left {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 24px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.panel-title i {\n color: #6366f1;\n}\n\n.panel-subtitle {\n margin: 0;\n font-size: 14px;\n color: #6b7280;\n}\n\n/* Time Filters */\n.time-filters {\n display: flex;\n gap: 4px;\n background: white;\n padding: 4px;\n border-radius: 10px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.time-btn {\n padding: 8px 16px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.time-btn:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.time-btn.active {\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n/* KPI Grid */\n.kpi-grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 16px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 18px 20px;\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n transition: all 0.2s ease;\n}\n\n.kpi-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n.kpi-card.success {\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n}\n\n.kpi-card.warning {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n}\n\n.kpi-icon {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n font-size: 18px;\n}\n\n.kpi-icon.requests {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n color: #2563eb;\n}\n\n.kpi-icon.success-rate {\n background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);\n color: #059669;\n}\n\n.kpi-icon.errors {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n color: #dc2626;\n}\n\n.kpi-icon.response-time {\n background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n color: #4f46e5;\n}\n\n.kpi-icon.keys {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n color: #d97706;\n}\n\n.kpi-icon.endpoints {\n background: linear-gradient(135deg, #f3e8ff 0%, #e9d5ff 100%);\n color: #7c3aed;\n}\n\n.kpi-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.kpi-label {\n font-size: 12px;\n color: #6b7280;\n}\n\n/* Chart Section */\n.chart-section {\n background: white;\n border-radius: 12px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n.chart-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.chart-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.chart-legend {\n display: flex;\n gap: 16px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.legend-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.legend-color.requests {\n background: #6366f1;\n}\n\n.legend-color.errors {\n background: #ef4444;\n}\n\n.chart-container {\n display: flex;\n height: 200px;\n gap: 8px;\n}\n\n.chart-bars {\n flex: 1;\n display: flex;\n align-items: flex-end;\n gap: 4px;\n padding-bottom: 24px;\n}\n\n.bar-group {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 0;\n}\n\n.bar-wrapper {\n width: 100%;\n height: 160px;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n\n.bar {\n width: 100%;\n max-width: 32px;\n border-radius: 4px 4px 0 0;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.bar.requests-bar {\n background: linear-gradient(180deg, #6366f1 0%, #818cf8 100%);\n}\n\n.bar.requests-bar:hover {\n background: linear-gradient(180deg, #4f46e5 0%, #6366f1 100%);\n}\n\n.bar.errors-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n background: #ef4444;\n border-radius: 0;\n}\n\n.bar-label {\n margin-top: 8px;\n font-size: 10px;\n color: #9ca3af;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 100%;\n}\n\n.chart-y-axis {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding-bottom: 24px;\n font-size: 10px;\n color: #9ca3af;\n text-align: right;\n min-width: 40px;\n}\n\n.empty-chart {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #9ca3af;\n}\n\n.empty-chart i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n/* Breakdown Grid */\n.breakdown-grid {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 20px;\n}\n\n.breakdown-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.breakdown-header {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.breakdown-header h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.breakdown-header h4 i {\n color: #6b7280;\n}\n\n.breakdown-content {\n padding: 12px;\n max-height: 280px;\n overflow-y: auto;\n}\n\n/* Endpoint List */\n.endpoint-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.endpoint-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.endpoint-item:hover {\n background: #f3f4f6;\n}\n\n.endpoint-info {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n\n.method-badge {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.method-get { background: #dbeafe; color: #2563eb; }\n.method-post { background: #d1fae5; color: #059669; }\n.method-put { background: #fef3c7; color: #d97706; }\n.method-delete { background: #fee2e2; color: #dc2626; }\n.method-other { background: #f3f4f6; color: #6b7280; }\n\n.endpoint-path {\n font-size: 12px;\n font-family: 'Fira Code', monospace;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.endpoint-stats {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.endpoint-requests {\n font-weight: 600;\n color: #6366f1;\n}\n\n.endpoint-time {\n color: #6b7280;\n}\n\n.endpoint-error {\n color: #10b981;\n}\n\n.endpoint-error.has-errors {\n color: #ef4444;\n font-weight: 500;\n}\n\n/* Key List */\n.key-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.key-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.key-item:hover {\n background: #f3f4f6;\n}\n\n.key-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.key-label {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-last-used {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.key-requests {\n font-size: 14px;\n font-weight: 600;\n color: #6366f1;\n}\n\n/* Status Distribution */\n.status-distribution {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.status-bar {\n display: flex;\n height: 24px;\n border-radius: 6px;\n overflow: hidden;\n background: #f3f4f6;\n}\n\n.status-segment {\n transition: all 0.3s ease;\n}\n\n.status-segment:hover {\n filter: brightness(1.1);\n}\n\n.status-legend {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.status-legend-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n\n.status-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.status-label {\n flex: 1;\n color: #374151;\n}\n\n.status-count {\n color: #6b7280;\n font-weight: 500;\n}\n\n/* Logs Section */\n.logs-section {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.logs-header {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.logs-header h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.logs-header h4 i {\n color: #6b7280;\n}\n\n.logs-table {\n width: 100%;\n}\n\n.logs-table-header {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n background: #f3f4f6;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table-body {\n max-height: 320px;\n overflow-y: auto;\n}\n\n.logs-table-body.scrollable {\n max-height: 380px;\n}\n\n.log-row {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n border-bottom: 1px solid #f3f4f6;\n font-size: 13px;\n align-items: center;\n transition: background 0.2s ease;\n}\n\n.log-row:hover {\n background: #f9fafb;\n}\n\n.col-time {\n color: #6b7280;\n font-size: 12px;\n}\n\n.col-key {\n color: #374151;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-endpoint {\n font-family: 'Fira Code', monospace;\n font-size: 12px;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-status {\n font-weight: 600;\n text-align: center;\n}\n\n.col-status.status-success { color: #10b981; }\n.col-status.status-info { color: #3b82f6; }\n.col-status.status-warning { color: #f59e0b; }\n.col-status.status-error { color: #ef4444; }\n\n.col-duration {\n color: #6b7280;\n text-align: right;\n}\n\n/* Empty States */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 20px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.empty-state span {\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.empty-state.large {\n padding: 48px 24px;\n}\n\n.empty-state.large i {\n font-size: 48px;\n}\n\n.empty-state p {\n margin: 8px 0 0 0;\n font-size: 12px;\n}\n\n/* Drill-down Window */\n.drilldown-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 15px;\n}\n\n.drilldown-title i {\n color: #6366f1;\n}\n\n.filter-badge {\n padding: 4px 10px;\n background: #e0e7ff;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #4f46e5;\n}\n\n.window-close-btn {\n margin-left: auto;\n color: #9ca3af;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n}\n\n.window-close-btn:hover {\n color: #374151;\n background: rgba(0, 0, 0, 0.05);\n}\n\n.drilldown-content {\n height: 100%;\n overflow: hidden;\n}\n\n.drilldown-logs {\n height: 100%;\n}\n\n/* Kendo Window Styling */\n:host ::ng-deep kendo-window {\n border-radius: 12px !important;\n overflow: hidden;\n box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15) !important;\n}\n\n:host ::ng-deep kendo-window .k-window-content {\n padding: 0 !important;\n}\n\n:host ::ng-deep kendo-window-titlebar {\n padding: 16px 20px !important;\n background: #f9fafb !important;\n border-bottom: 1px solid #e5e7eb !important;\n}\n\n/* Responsive */\n@media (max-width: 1400px) {\n .kpi-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@media (max-width: 1200px) {\n .breakdown-grid {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n@media (max-width: 900px) {\n .kpi-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .breakdown-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header,\n .log-row {\n grid-template-columns: 80px 100px 60px 1fr 60px;\n }\n\n .col-duration {\n display: none;\n }\n}\n\n@media (max-width: 600px) {\n .panel-header {\n flex-direction: column;\n }\n\n .time-filters {\n width: 100%;\n justify-content: center;\n }\n\n .kpi-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header,\n .log-row {\n grid-template-columns: 1fr 60px;\n }\n\n .col-key,\n .col-method,\n .col-endpoint {\n display: none;\n }\n}\n"] }]
1013
+ args: [{ standalone: false, selector: 'mj-api-usage-panel', template: "<div class=\"usage-panel\">\n @if (IsLoading) {\n <mj-loading text=\"Loading usage analytics...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n API Usage Analytics\n </h3>\n <p class=\"panel-subtitle\">Monitor API key usage, performance, and trends</p>\n </div>\n <div class=\"time-filters\">\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'day'\"\n (click)=\"setTimeRange('day')\">24 Hours</button>\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'week'\"\n (click)=\"setTimeRange('week')\">7 Days</button>\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'month'\"\n (click)=\"setTimeRange('month')\">30 Days</button>\n <button class=\"time-btn\" [class.active]=\"TimeRange === 'all'\"\n (click)=\"setTimeRange('all')\">All Time</button>\n </div>\n </div>\n <!-- Summary KPIs -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon requests\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{formatNumber(TotalRequests)}}</div>\n <div class=\"kpi-label\">Total Requests</div>\n </div>\n </div>\n <div class=\"kpi-card\" [class.success]=\"SuccessRate >= 95\">\n <div class=\"kpi-icon success-rate\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{SuccessRate}}%</div>\n <div class=\"kpi-label\">Success Rate</div>\n </div>\n </div>\n <div class=\"kpi-card\" [class.warning]=\"TotalErrors > 0\">\n <div class=\"kpi-icon errors\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{formatNumber(TotalErrors)}}</div>\n <div class=\"kpi-label\">Errors</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon response-time\">\n <i class=\"fa-solid fa-gauge-high\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{AvgResponseTime}}ms</div>\n <div class=\"kpi-label\">Avg Response Time</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon keys\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{UniqueKeys}}</div>\n <div class=\"kpi-label\">Active Keys</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon endpoints\">\n <i class=\"fa-solid fa-code-branch\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{UniqueEndpoints}}</div>\n <div class=\"kpi-label\">Unique Endpoints</div>\n </div>\n </div>\n </div>\n <!-- Usage Chart -->\n <div class=\"chart-section\">\n <div class=\"chart-header\">\n <h4>Request Volume</h4>\n <div class=\"chart-legend\">\n <span class=\"legend-item\">\n <span class=\"legend-color requests\"></span> Requests\n </span>\n <span class=\"legend-item\">\n <span class=\"legend-color errors\"></span> Errors\n </span>\n </div>\n </div>\n @if (TimeBuckets.length > 0) {\n <div class=\"chart-container\">\n <div class=\"chart-bars\">\n @for (bucket of TimeBuckets; track bucket) {\n <div class=\"bar-group\" [title]=\"bucket.requests + ' requests, ' + bucket.errors + ' errors'\">\n <div class=\"bar-wrapper\">\n <div class=\"bar requests-bar\"\n [style.height.%]=\"getBarHeight(bucket.requests)\">\n @if (bucket.errors > 0) {\n <div class=\"bar errors-bar\"\n [style.height.%]=\"getErrorBarHeight(bucket)\"\n >\n </div>\n }\n </div>\n </div>\n <div class=\"bar-label\">{{bucket.label}}</div>\n </div>\n }\n </div>\n <div class=\"chart-y-axis\">\n <span>{{formatNumber(MaxRequests)}}</span>\n <span>{{formatNumber(Math.round(MaxRequests / 2))}}</span>\n <span>0</span>\n </div>\n </div>\n }\n @if (TimeBuckets.length === 0) {\n <div class=\"empty-chart\">\n <i class=\"fa-solid fa-chart-area\"></i>\n <span>No usage data available</span>\n </div>\n }\n </div>\n <!-- Breakdown Grid -->\n <div class=\"breakdown-grid\">\n <!-- Top Endpoints -->\n <div class=\"breakdown-card\">\n <div class=\"breakdown-header\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Top Endpoints\n </h4>\n </div>\n <div class=\"breakdown-content\">\n @if (TopEndpoints.length > 0) {\n <div class=\"endpoint-list\">\n @for (ep of TopEndpoints; track ep) {\n <div class=\"endpoint-item\"\n (click)=\"drillDownEndpoint(ep)\">\n <div class=\"endpoint-info\">\n <span class=\"method-badge\" [ngClass]=\"getMethodClass(ep.method)\">\n {{ep.method}}\n </span>\n <span class=\"endpoint-path\">{{ep.endpoint}}</span>\n </div>\n <div class=\"endpoint-stats\">\n <span class=\"endpoint-requests\">{{formatNumber(ep.requests)}}</span>\n <span class=\"endpoint-time\">{{ep.avgResponseTime}}ms</span>\n <span class=\"endpoint-error\" [class.has-errors]=\"ep.errorRate > 0\">\n {{ep.errorRate}}% err\n </span>\n </div>\n </div>\n }\n </div>\n }\n @if (TopEndpoints.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-code-branch\"></i>\n <span>No endpoint data</span>\n </div>\n }\n </div>\n </div>\n <!-- Top Keys -->\n <div class=\"breakdown-card\">\n <div class=\"breakdown-header\">\n <h4>\n <i class=\"fa-solid fa-key\"></i>\n Most Active Keys\n </h4>\n </div>\n <div class=\"breakdown-content\">\n @if (TopKeys.length > 0) {\n <div class=\"key-list\">\n @for (key of TopKeys; track key) {\n <div class=\"key-item\"\n (click)=\"drillDownKey(key)\">\n <div class=\"key-info\">\n <span class=\"key-label\">{{key.label}}</span>\n <span class=\"key-last-used\">{{formatDate(key.lastUsed)}}</span>\n </div>\n <div class=\"key-requests\">{{formatNumber(key.requests)}}</div>\n </div>\n }\n </div>\n }\n @if (TopKeys.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-key\"></i>\n <span>No key data</span>\n </div>\n }\n </div>\n </div>\n <!-- Status Distribution -->\n <div class=\"breakdown-card\">\n <div class=\"breakdown-header\">\n <h4>\n <i class=\"fa-solid fa-circle-half-stroke\"></i>\n Status Distribution\n </h4>\n </div>\n <div class=\"breakdown-content\">\n @if (StatusGroups.length > 0) {\n <div class=\"status-distribution\">\n <div class=\"status-bar\">\n @for (group of StatusGroups; track group) {\n <div class=\"status-segment\"\n [style.width.%]=\"group.percentage\"\n [style.backgroundColor]=\"group.color\"\n [title]=\"group.label + ': ' + group.count + ' (' + group.percentage + '%)'\">\n </div>\n }\n </div>\n <div class=\"status-legend\">\n @for (group of StatusGroups; track group) {\n <div class=\"status-legend-item\">\n <span class=\"status-color\" [style.backgroundColor]=\"group.color\"></span>\n <span class=\"status-label\">{{group.label}}</span>\n <span class=\"status-count\">{{formatNumber(group.count)}} ({{group.percentage}}%)</span>\n </div>\n }\n </div>\n </div>\n }\n @if (StatusGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-circle-half-stroke\"></i>\n <span>No status data</span>\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Recent Logs -->\n <div class=\"logs-section\">\n <div class=\"logs-header\">\n <h4>\n <i class=\"fa-solid fa-list\"></i>\n Recent Requests\n </h4>\n </div>\n @if (RecentLogs.length > 0) {\n <div class=\"logs-table\">\n <div class=\"logs-table-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-key\">API Key</span>\n <span class=\"col-method\">Method</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n <div class=\"logs-table-body\">\n @for (log of RecentLogs; track log) {\n <div class=\"log-row\">\n <span class=\"col-time\">{{formatDate(log.timestamp)}}</span>\n <span class=\"col-key\">{{log.keyLabel}}</span>\n <span class=\"col-method\">\n <span class=\"method-badge\" [ngClass]=\"getMethodClass(log.method)\">\n {{log.method}}\n </span>\n </span>\n <span class=\"col-endpoint\">{{log.endpoint}}</span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n }\n </div>\n </div>\n }\n @if (RecentLogs.length === 0) {\n <div class=\"empty-state large\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No requests logged yet</span>\n <p>API usage will appear here once keys are used</p>\n </div>\n }\n </div>\n }\n\n <!-- Drill-down Panel -->\n @if (ShowLogsPanel) {\n <kendo-window\n [width]=\"800\"\n [minWidth]=\"600\"\n [height]=\"500\"\n [minHeight]=\"400\"\n [resizable]=\"true\"\n [draggable]=\"true\"\n [top]=\"80\"\n (close)=\"closeLogsPanel()\">\n <kendo-window-titlebar>\n <div class=\"drilldown-title\">\n <i class=\"fa-solid fa-magnifying-glass-chart\"></i>\n <span>Request Details</span>\n @if (LogsFilter.endpoint) {\n <span class=\"filter-badge\">\n {{LogsFilter.endpoint}}\n </span>\n }\n @if (LogsFilter.keyId) {\n <span class=\"filter-badge\">\n Key: {{KeyMap.get(LogsFilter.keyId) || 'Unknown'}}\n </span>\n }\n </div>\n <button kendoButton fillMode=\"flat\" (click)=\"closeLogsPanel()\" class=\"window-close-btn\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </kendo-window-titlebar>\n <div class=\"drilldown-content\">\n @if (IsLoadingLogs) {\n <mj-loading text=\"Loading requests...\"></mj-loading>\n }\n @if (!IsLoadingLogs) {\n <div class=\"drilldown-logs\">\n <div class=\"logs-table\">\n <div class=\"logs-table-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-key\">API Key</span>\n <span class=\"col-method\">Method</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n <div class=\"logs-table-body scrollable\">\n @for (log of RecentLogs; track log) {\n <div class=\"log-row\">\n <span class=\"col-time\">{{formatDate(log.timestamp)}}</span>\n <span class=\"col-key\">{{log.keyLabel}}</span>\n <span class=\"col-method\">\n <span class=\"method-badge\" [ngClass]=\"getMethodClass(log.method)\">\n {{log.method}}\n </span>\n </span>\n <span class=\"col-endpoint\">{{log.endpoint}}</span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </kendo-window>\n }\n</div>\n", styles: [".usage-panel {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: #f8fafc;\n min-height: 100%;\n}\n\n/* Header */\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.header-left {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 24px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.panel-title i {\n color: #6366f1;\n}\n\n.panel-subtitle {\n margin: 0;\n font-size: 14px;\n color: #6b7280;\n}\n\n/* Time Filters */\n.time-filters {\n display: flex;\n gap: 4px;\n background: white;\n padding: 4px;\n border-radius: 10px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.time-btn {\n padding: 8px 16px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.time-btn:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.time-btn.active {\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n/* KPI Grid */\n.kpi-grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 16px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 18px 20px;\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n transition: all 0.2s ease;\n}\n\n.kpi-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n.kpi-card.success {\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n}\n\n.kpi-card.warning {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n}\n\n.kpi-icon {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n font-size: 18px;\n}\n\n.kpi-icon.requests {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n color: #2563eb;\n}\n\n.kpi-icon.success-rate {\n background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);\n color: #059669;\n}\n\n.kpi-icon.errors {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n color: #dc2626;\n}\n\n.kpi-icon.response-time {\n background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n color: #4f46e5;\n}\n\n.kpi-icon.keys {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n color: #d97706;\n}\n\n.kpi-icon.endpoints {\n background: linear-gradient(135deg, #f3e8ff 0%, #e9d5ff 100%);\n color: #7c3aed;\n}\n\n.kpi-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: #1f2937;\n}\n\n.kpi-label {\n font-size: 12px;\n color: #6b7280;\n}\n\n/* Chart Section */\n.chart-section {\n background: white;\n border-radius: 12px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n.chart-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.chart-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.chart-legend {\n display: flex;\n gap: 16px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.legend-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.legend-color.requests {\n background: #6366f1;\n}\n\n.legend-color.errors {\n background: #ef4444;\n}\n\n.chart-container {\n display: flex;\n height: 200px;\n gap: 8px;\n}\n\n.chart-bars {\n flex: 1;\n display: flex;\n align-items: flex-end;\n gap: 4px;\n padding-bottom: 24px;\n}\n\n.bar-group {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 0;\n}\n\n.bar-wrapper {\n width: 100%;\n height: 160px;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n\n.bar {\n width: 100%;\n max-width: 32px;\n border-radius: 4px 4px 0 0;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.bar.requests-bar {\n background: linear-gradient(180deg, #6366f1 0%, #818cf8 100%);\n}\n\n.bar.requests-bar:hover {\n background: linear-gradient(180deg, #4f46e5 0%, #6366f1 100%);\n}\n\n.bar.errors-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n background: #ef4444;\n border-radius: 0;\n}\n\n.bar-label {\n margin-top: 8px;\n font-size: 10px;\n color: #9ca3af;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 100%;\n}\n\n.chart-y-axis {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding-bottom: 24px;\n font-size: 10px;\n color: #9ca3af;\n text-align: right;\n min-width: 40px;\n}\n\n.empty-chart {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #9ca3af;\n}\n\n.empty-chart i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n/* Breakdown Grid */\n.breakdown-grid {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 20px;\n}\n\n.breakdown-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.breakdown-header {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.breakdown-header h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.breakdown-header h4 i {\n color: #6b7280;\n}\n\n.breakdown-content {\n padding: 12px;\n max-height: 280px;\n overflow-y: auto;\n}\n\n/* Endpoint List */\n.endpoint-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.endpoint-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.endpoint-item:hover {\n background: #f3f4f6;\n}\n\n.endpoint-info {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n\n.method-badge {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.method-get { background: #dbeafe; color: #2563eb; }\n.method-post { background: #d1fae5; color: #059669; }\n.method-put { background: #fef3c7; color: #d97706; }\n.method-delete { background: #fee2e2; color: #dc2626; }\n.method-other { background: #f3f4f6; color: #6b7280; }\n\n.endpoint-path {\n font-size: 12px;\n font-family: 'Fira Code', monospace;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.endpoint-stats {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.endpoint-requests {\n font-weight: 600;\n color: #6366f1;\n}\n\n.endpoint-time {\n color: #6b7280;\n}\n\n.endpoint-error {\n color: #10b981;\n}\n\n.endpoint-error.has-errors {\n color: #ef4444;\n font-weight: 500;\n}\n\n/* Key List */\n.key-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.key-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n background: #f9fafb;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.key-item:hover {\n background: #f3f4f6;\n}\n\n.key-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.key-label {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-last-used {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.key-requests {\n font-size: 14px;\n font-weight: 600;\n color: #6366f1;\n}\n\n/* Status Distribution */\n.status-distribution {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.status-bar {\n display: flex;\n height: 24px;\n border-radius: 6px;\n overflow: hidden;\n background: #f3f4f6;\n}\n\n.status-segment {\n transition: all 0.3s ease;\n}\n\n.status-segment:hover {\n filter: brightness(1.1);\n}\n\n.status-legend {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.status-legend-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n}\n\n.status-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n}\n\n.status-label {\n flex: 1;\n color: #374151;\n}\n\n.status-count {\n color: #6b7280;\n font-weight: 500;\n}\n\n/* Logs Section */\n.logs-section {\n background: white;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.logs-header {\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.logs-header h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #374151;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.logs-header h4 i {\n color: #6b7280;\n}\n\n.logs-table {\n width: 100%;\n}\n\n.logs-table-header {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n background: #f3f4f6;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table-body {\n max-height: 320px;\n overflow-y: auto;\n}\n\n.logs-table-body.scrollable {\n max-height: 380px;\n}\n\n.log-row {\n display: grid;\n grid-template-columns: 100px 120px 70px 1fr 70px 80px;\n gap: 12px;\n padding: 12px 20px;\n border-bottom: 1px solid #f3f4f6;\n font-size: 13px;\n align-items: center;\n transition: background 0.2s ease;\n}\n\n.log-row:hover {\n background: #f9fafb;\n}\n\n.col-time {\n color: #6b7280;\n font-size: 12px;\n}\n\n.col-key {\n color: #374151;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-endpoint {\n font-family: 'Fira Code', monospace;\n font-size: 12px;\n color: #374151;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.col-status {\n font-weight: 600;\n text-align: center;\n}\n\n.col-status.status-success { color: #10b981; }\n.col-status.status-info { color: #3b82f6; }\n.col-status.status-warning { color: #f59e0b; }\n.col-status.status-error { color: #ef4444; }\n\n.col-duration {\n color: #6b7280;\n text-align: right;\n}\n\n/* Empty States */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 20px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.empty-state span {\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.empty-state.large {\n padding: 48px 24px;\n}\n\n.empty-state.large i {\n font-size: 48px;\n}\n\n.empty-state p {\n margin: 8px 0 0 0;\n font-size: 12px;\n}\n\n/* Drill-down Window */\n.drilldown-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 15px;\n}\n\n.drilldown-title i {\n color: #6366f1;\n}\n\n.filter-badge {\n padding: 4px 10px;\n background: #e0e7ff;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #4f46e5;\n}\n\n.window-close-btn {\n margin-left: auto;\n color: #9ca3af;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n}\n\n.window-close-btn:hover {\n color: #374151;\n background: rgba(0, 0, 0, 0.05);\n}\n\n.drilldown-content {\n height: 100%;\n overflow: hidden;\n}\n\n.drilldown-logs {\n height: 100%;\n}\n\n/* Kendo Window Styling */\n:host ::ng-deep kendo-window {\n border-radius: 12px !important;\n overflow: hidden;\n box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15) !important;\n}\n\n:host ::ng-deep kendo-window .k-window-content {\n padding: 0 !important;\n}\n\n:host ::ng-deep kendo-window-titlebar {\n padding: 16px 20px !important;\n background: #f9fafb !important;\n border-bottom: 1px solid #e5e7eb !important;\n}\n\n/* Responsive */\n@media (max-width: 1400px) {\n .kpi-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n@media (max-width: 1200px) {\n .breakdown-grid {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n@media (max-width: 900px) {\n .kpi-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .breakdown-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header,\n .log-row {\n grid-template-columns: 80px 100px 60px 1fr 60px;\n }\n\n .col-duration {\n display: none;\n }\n}\n\n@media (max-width: 600px) {\n .panel-header {\n flex-direction: column;\n }\n\n .time-filters {\n width: 100%;\n justify-content: center;\n }\n\n .kpi-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table-header,\n .log-row {\n grid-template-columns: 1fr 60px;\n }\n\n .col-key,\n .col-method,\n .col-endpoint {\n display: none;\n }\n}\n"] }]
1011
1014
  }], () => [{ type: i0.ChangeDetectorRef }], null); })();
1012
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIUsagePanelComponent, { className: "APIUsagePanelComponent", filePath: "src/APIKeys/api-usage-panel.component.ts", lineNumber: 66 }); })();
1015
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIUsagePanelComponent, { className: "APIUsagePanelComponent", filePath: "src/apikeys/api-usage-panel.component.ts", lineNumber: 61 }); })();
1013
1016
  //# sourceMappingURL=api-usage-panel.component.js.map