@memberjunction/ng-dashboards 5.34.0 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -0
  235. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  236. package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
  237. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  239. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  240. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  241. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  243. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  244. package/dist/Testing/components/testing-analytics.component.js +420 -393
  245. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  249. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  251. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  252. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  253. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  255. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  256. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  257. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  259. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  260. package/dist/Testing/components/testing-explorer.component.js +587 -608
  261. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  263. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  264. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  265. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  266. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  267. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  268. package/dist/Testing/components/testing-review.component.js +310 -274
  269. package/dist/Testing/components/testing-review.component.js.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  271. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  272. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  273. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  275. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  276. package/dist/Testing/components/testing-runs.component.js +307 -273
  277. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  279. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  280. package/dist/Testing/testing-dashboard.component.js +107 -93
  281. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  282. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  283. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  285. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  287. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  288. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  289. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  290. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  291. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  292. package/dist/actions-dashboards.module.d.ts +15 -16
  293. package/dist/actions-dashboards.module.d.ts.map +1 -1
  294. package/dist/actions-dashboards.module.js +34 -11
  295. package/dist/actions-dashboards.module.js.map +1 -1
  296. package/dist/ai-dashboards.module.d.ts +45 -48
  297. package/dist/ai-dashboards.module.d.ts.map +1 -1
  298. package/dist/ai-dashboards.module.js +36 -10
  299. package/dist/ai-dashboards.module.js.map +1 -1
  300. package/dist/archiving-dashboards.module.d.ts +2 -1
  301. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  302. package/dist/archiving-dashboards.module.js +12 -2
  303. package/dist/archiving-dashboards.module.js.map +1 -1
  304. package/dist/communication-dashboards.module.d.ts +2 -1
  305. package/dist/communication-dashboards.module.d.ts.map +1 -1
  306. package/dist/communication-dashboards.module.js +24 -3
  307. package/dist/communication-dashboards.module.js.map +1 -1
  308. package/dist/core-dashboards.module.d.ts +1 -1
  309. package/dist/core-dashboards.module.d.ts.map +1 -1
  310. package/dist/core-dashboards.module.js +31 -1
  311. package/dist/core-dashboards.module.js.map +1 -1
  312. package/dist/credentials-dashboards.module.d.ts +1 -1
  313. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  314. package/dist/credentials-dashboards.module.js +28 -1
  315. package/dist/credentials-dashboards.module.js.map +1 -1
  316. package/dist/lists-dashboards.module.d.ts +1 -1
  317. package/dist/lists-dashboards.module.d.ts.map +1 -1
  318. package/dist/lists-dashboards.module.js +28 -1
  319. package/dist/lists-dashboards.module.js.map +1 -1
  320. package/dist/public-api.d.ts +2 -2
  321. package/dist/public-api.d.ts.map +1 -1
  322. package/dist/public-api.js +3 -3
  323. package/dist/public-api.js.map +1 -1
  324. package/dist/scheduling-dashboards.module.d.ts +1 -1
  325. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  326. package/dist/scheduling-dashboards.module.js +31 -1
  327. package/dist/scheduling-dashboards.module.js.map +1 -1
  328. package/dist/testing-dashboards.module.d.ts +8 -7
  329. package/dist/testing-dashboards.module.d.ts.map +1 -1
  330. package/dist/testing-dashboards.module.js +30 -0
  331. package/dist/testing-dashboards.module.js.map +1 -1
  332. package/package.json +52 -52
  333. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  334. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  335. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  336. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  339. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  340. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  342. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  343. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  344. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  346. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  347. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  348. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -11,22 +11,22 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
11
11
  import { RunView, CompositeKey } from '@memberjunction/core';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@angular/common";
14
- import * as i2 from "@memberjunction/ng-shared-generic";
15
- function CredentialsOverviewResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelement(0, "mj-loading", 1);
14
+ import * as i2 from "@memberjunction/ng-ui-components";
15
+ import * as i3 from "@memberjunction/ng-shared-generic";
16
+ function CredentialsOverviewResourceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
17
+ const _r1 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "button", 5);
19
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
20
+ i0.ɵɵelement(1, "i", 6);
21
+ i0.ɵɵtext(2, " New Credential ");
22
+ i0.ɵɵelementEnd();
17
23
  } }
18
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
19
- const _r3 = i0.ɵɵgetCurrentView();
20
- i0.ɵɵelementStart(0, "button", 60);
21
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
22
- i0.ɵɵelement(1, "i", 61);
23
- i0.ɵɵelementStart(2, "span");
24
- i0.ɵɵtext(3, "New Credential");
25
- i0.ɵɵelementEnd()();
24
+ function CredentialsOverviewResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelement(0, "mj-loading", 4);
26
26
  } }
27
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
28
- i0.ɵɵelementStart(0, "span", 20);
29
- i0.ɵɵelement(1, "i", 62);
27
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_12_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵelementStart(0, "span", 17);
29
+ i0.ɵɵelement(1, "i", 57);
30
30
  i0.ɵɵtext(2);
31
31
  i0.ɵɵelementEnd();
32
32
  } if (rf & 2) {
@@ -34,11 +34,11 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_22_Templ
34
34
  i0.ɵɵadvance(2);
35
35
  i0.ɵɵtextInterpolate1(" ", ctx_r1.expiredCredentials, " expired ");
36
36
  } }
37
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
37
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
38
38
  const _r4 = i0.ɵɵgetCurrentView();
39
- i0.ɵɵelementStart(0, "span", 63);
40
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_23_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewExpiringCredentials()); });
41
- i0.ɵɵelement(1, "i", 38);
39
+ i0.ɵɵelementStart(0, "span", 58);
40
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewExpiringCredentials()); });
41
+ i0.ɵɵelement(1, "i", 35);
42
42
  i0.ɵɵtext(2);
43
43
  i0.ɵɵelementEnd();
44
44
  } if (rf & 2) {
@@ -46,45 +46,45 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_23_Templ
46
46
  i0.ɵɵadvance(2);
47
47
  i0.ɵɵtextInterpolate1(" ", ctx_r1.expiringSoonCount, " expiring soon ");
48
48
  } }
49
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "span", 22);
51
- i0.ɵɵelement(1, "i", 33);
49
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_14_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "span", 19);
51
+ i0.ɵɵelement(1, "i", 30);
52
52
  i0.ɵɵtext(2, " All credentials healthy ");
53
53
  i0.ɵɵelementEnd();
54
54
  } }
55
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_63_Template(rf, ctx) { if (rf & 1) {
56
- i0.ɵɵelementStart(0, "div", 39);
57
- i0.ɵɵelement(1, "i", 31);
55
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_53_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "div", 36);
57
+ i0.ɵɵelement(1, "i", 28);
58
58
  i0.ɵɵelementEnd();
59
59
  } }
60
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_5_Template(rf, ctx) { if (rf & 1) {
60
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_5_Template(rf, ctx) { if (rf & 1) {
61
61
  const _r5 = i0.ɵɵgetCurrentView();
62
62
  i0.ɵɵnamespaceSVG();
63
63
  i0.ɵɵelementContainerStart(0);
64
- i0.ɵɵelementStart(1, "circle", 72);
65
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_5_Template_circle_click_1_listener() { const stat_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryClick(stat_r6)); });
64
+ i0.ɵɵelementStart(1, "circle", 67);
65
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_5_Template_circle_click_1_listener() { const stat_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryClick(stat_r6)); });
66
66
  i0.ɵɵelementEnd();
67
67
  i0.ɵɵelementContainerEnd();
68
68
  } if (rf & 2) {
69
69
  const stat_r6 = ctx.$implicit;
70
- const ɵ$index_184_r7 = ctx.$index;
70
+ const ɵ$index_174_r7 = ctx.$index;
71
71
  const ctx_r1 = i0.ɵɵnextContext(3);
72
72
  i0.ɵɵadvance();
73
- i0.ɵɵattribute("stroke", stat_r6.color)("stroke-dasharray", stat_r6.percentage * 2.51 + " " + (251 - stat_r6.percentage * 2.51))("stroke-dashoffset", ctx_r1.getDonutOffset(ɵ$index_184_r7));
73
+ i0.ɵɵattribute("stroke", stat_r6.color)("stroke-dasharray", stat_r6.percentage * 2.51 + " " + (251 - stat_r6.percentage * 2.51))("stroke-dashoffset", ctx_r1.getDonutOffset(ɵ$index_174_r7));
74
74
  } }
75
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_13_Template(rf, ctx) { if (rf & 1) {
75
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template(rf, ctx) { if (rf & 1) {
76
76
  const _r8 = i0.ɵɵgetCurrentView();
77
- i0.ɵɵelementStart(0, "div", 73);
78
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_13_Template_div_click_0_listener() { const stat_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryClick(stat_r9)); });
79
- i0.ɵɵelement(1, "div", 74);
80
- i0.ɵɵelementStart(2, "div", 75)(3, "div", 76);
77
+ i0.ɵɵelementStart(0, "div", 68);
78
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template_div_click_0_listener() { const stat_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryClick(stat_r9)); });
79
+ i0.ɵɵelement(1, "div", 69);
80
+ i0.ɵɵelementStart(2, "div", 70)(3, "div", 71);
81
81
  i0.ɵɵelement(4, "i");
82
82
  i0.ɵɵtext(5);
83
83
  i0.ɵɵelementEnd();
84
- i0.ɵɵelementStart(6, "div", 77);
84
+ i0.ɵɵelementStart(6, "div", 72);
85
85
  i0.ɵɵtext(7);
86
86
  i0.ɵɵelementEnd()();
87
- i0.ɵɵelement(8, "i", 78);
87
+ i0.ɵɵelement(8, "i", 73);
88
88
  i0.ɵɵelementEnd();
89
89
  } if (rf & 2) {
90
90
  const stat_r9 = ctx.$implicit;
@@ -97,22 +97,22 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_1
97
97
  i0.ɵɵadvance(2);
98
98
  i0.ɵɵtextInterpolate2("", stat_r9.count, " (", stat_r9.percentage, "%)");
99
99
  } }
100
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelementStart(0, "div", 48)(1, "div", 64);
100
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_Template(rf, ctx) { if (rf & 1) {
101
+ i0.ɵɵelementStart(0, "div", 45)(1, "div", 59);
102
102
  i0.ɵɵnamespaceSVG();
103
- i0.ɵɵelementStart(2, "svg", 65);
104
- i0.ɵɵelement(3, "circle", 66);
105
- i0.ɵɵrepeaterCreate(4, CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_5_Template, 2, 3, ":svg:ng-container", null, i0.ɵɵrepeaterTrackByIdentity);
103
+ i0.ɵɵelementStart(2, "svg", 60);
104
+ i0.ɵɵelement(3, "circle", 61);
105
+ i0.ɵɵrepeaterCreate(4, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_5_Template, 2, 3, ":svg:ng-container", null, i0.ɵɵrepeaterTrackByIdentity);
106
106
  i0.ɵɵelementEnd();
107
107
  i0.ɵɵnamespaceHTML();
108
- i0.ɵɵelementStart(6, "div", 67)(7, "div", 68);
108
+ i0.ɵɵelementStart(6, "div", 62)(7, "div", 63);
109
109
  i0.ɵɵtext(8);
110
110
  i0.ɵɵelementEnd();
111
- i0.ɵɵelementStart(9, "div", 69);
111
+ i0.ɵɵelementStart(9, "div", 64);
112
112
  i0.ɵɵtext(10, "Total");
113
113
  i0.ɵɵelementEnd()()();
114
- i0.ɵɵelementStart(11, "div", 70);
115
- i0.ɵɵrepeaterCreate(12, CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_For_13_Template, 9, 7, "div", 71, i0.ɵɵrepeaterTrackByIdentity);
114
+ i0.ɵɵelementStart(11, "div", 65);
115
+ i0.ɵɵrepeaterCreate(12, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_For_13_Template, 9, 7, "div", 66, i0.ɵɵrepeaterTrackByIdentity);
116
116
  i0.ɵɵelementEnd()();
117
117
  } if (rf & 2) {
118
118
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -123,16 +123,16 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_Templ
123
123
  i0.ɵɵadvance(4);
124
124
  i0.ɵɵrepeater(ctx_r1.categoryStats);
125
125
  } }
126
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_83_Template(rf, ctx) { if (rf & 1) {
127
- i0.ɵɵelementStart(0, "div", 49);
128
- i0.ɵɵelement(1, "i", 79);
126
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_73_Template(rf, ctx) { if (rf & 1) {
127
+ i0.ɵɵelementStart(0, "div", 46);
128
+ i0.ɵɵelement(1, "i", 74);
129
129
  i0.ɵɵelementStart(2, "span");
130
130
  i0.ɵɵtext(3, "No credentials configured");
131
131
  i0.ɵɵelementEnd()();
132
132
  } }
133
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
134
- i0.ɵɵelementStart(0, "span", 92);
135
- i0.ɵɵelement(1, "i", 94);
133
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
134
+ i0.ɵɵelementStart(0, "span", 87);
135
+ i0.ɵɵelement(1, "i", 89);
136
136
  i0.ɵɵtext(2);
137
137
  i0.ɵɵelementEnd();
138
138
  } if (rf & 2) {
@@ -140,9 +140,9 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2
140
140
  i0.ɵɵadvance(2);
141
141
  i0.ɵɵtextInterpolate1(" ", type_r11.activeCount, " ");
142
142
  } }
143
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
144
- i0.ɵɵelementStart(0, "span", 93);
145
- i0.ɵɵelement(1, "i", 38);
143
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
144
+ i0.ɵɵelementStart(0, "span", 88);
145
+ i0.ɵɵelement(1, "i", 35);
146
146
  i0.ɵɵtext(2);
147
147
  i0.ɵɵelementEnd();
148
148
  } if (rf & 2) {
@@ -150,28 +150,28 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2
150
150
  i0.ɵɵadvance(2);
151
151
  i0.ɵɵtextInterpolate1(" ", type_r11.expiringCount, " ");
152
152
  } }
153
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Template(rf, ctx) { if (rf & 1) {
153
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template(rf, ctx) { if (rf & 1) {
154
154
  const _r10 = i0.ɵɵgetCurrentView();
155
- i0.ɵɵelementStart(0, "div", 81);
156
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Template_div_click_0_listener() { const type_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onTypeClick(type_r11)); });
157
- i0.ɵɵelementStart(1, "div", 82)(2, "div", 83);
155
+ i0.ɵɵelementStart(0, "div", 76);
156
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template_div_click_0_listener() { const type_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onTypeClick(type_r11)); });
157
+ i0.ɵɵelementStart(1, "div", 77)(2, "div", 78);
158
158
  i0.ɵɵtext(3);
159
159
  i0.ɵɵelementEnd();
160
- i0.ɵɵelementStart(4, "div", 84);
160
+ i0.ɵɵelementStart(4, "div", 79);
161
161
  i0.ɵɵtext(5);
162
162
  i0.ɵɵelementEnd()();
163
- i0.ɵɵelementStart(6, "div", 85)(7, "div", 86)(8, "span", 87);
163
+ i0.ɵɵelementStart(6, "div", 80)(7, "div", 81)(8, "span", 82);
164
164
  i0.ɵɵtext(9);
165
165
  i0.ɵɵelementEnd();
166
- i0.ɵɵelementStart(10, "span", 88);
166
+ i0.ɵɵelementStart(10, "span", 83);
167
167
  i0.ɵɵtext(11, "credentials");
168
168
  i0.ɵɵelementEnd()();
169
- i0.ɵɵelementStart(12, "div", 89);
170
- i0.ɵɵelement(13, "div", 90);
169
+ i0.ɵɵelementStart(12, "div", 84);
170
+ i0.ɵɵelement(13, "div", 85);
171
171
  i0.ɵɵelementEnd();
172
- i0.ɵɵelementStart(14, "div", 91);
173
- i0.ɵɵconditionalCreate(15, CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Conditional_15_Template, 3, 1, "span", 92);
174
- i0.ɵɵconditionalCreate(16, CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Conditional_16_Template, 3, 1, "span", 93);
172
+ i0.ɵɵelementStart(14, "div", 86);
173
+ i0.ɵɵconditionalCreate(15, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_15_Template, 3, 1, "span", 87);
174
+ i0.ɵɵconditionalCreate(16, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Conditional_16_Template, 3, 1, "span", 88);
175
175
  i0.ɵɵelementEnd()()();
176
176
  } if (rf & 2) {
177
177
  const type_r11 = ctx.$implicit;
@@ -189,24 +189,24 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2
189
189
  i0.ɵɵadvance();
190
190
  i0.ɵɵconditional(type_r11.expiringCount > 0 ? 16 : -1);
191
191
  } }
192
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_Template(rf, ctx) { if (rf & 1) {
193
- i0.ɵɵelementStart(0, "div", 52);
194
- i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_For_2_Template, 17, 7, "div", 80, i0.ɵɵrepeaterTrackByIdentity);
192
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_Template(rf, ctx) { if (rf & 1) {
193
+ i0.ɵɵelementStart(0, "div", 49);
194
+ i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_For_2_Template, 17, 7, "div", 75, i0.ɵɵrepeaterTrackByIdentity);
195
195
  i0.ɵɵelementEnd();
196
196
  } if (rf & 2) {
197
197
  const ctx_r1 = i0.ɵɵnextContext(2);
198
198
  i0.ɵɵadvance();
199
199
  i0.ɵɵrepeater(ctx_r1.typeStats.slice(0, 6));
200
200
  } }
201
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_95_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelementStart(0, "div", 49);
203
- i0.ɵɵelement(1, "i", 95);
201
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_85_Template(rf, ctx) { if (rf & 1) {
202
+ i0.ɵɵelementStart(0, "div", 46);
203
+ i0.ɵɵelement(1, "i", 90);
204
204
  i0.ɵɵelementStart(2, "span");
205
205
  i0.ɵɵtext(3, "No credential types configured");
206
206
  i0.ɵɵelementEnd()();
207
207
  } }
208
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
209
- i0.ɵɵelementStart(0, "span", 104);
208
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵelementStart(0, "span", 99);
210
210
  i0.ɵɵtext(1);
211
211
  i0.ɵɵelementEnd();
212
212
  } if (rf & 2) {
@@ -214,25 +214,25 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_
214
214
  i0.ɵɵadvance();
215
215
  i0.ɵɵtextInterpolate1("by ", activity_r13.user);
216
216
  } }
217
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_2_Template(rf, ctx) { if (rf & 1) {
217
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template(rf, ctx) { if (rf & 1) {
218
218
  const _r12 = i0.ɵɵgetCurrentView();
219
- i0.ɵɵelementStart(0, "div", 97);
220
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_2_Template_div_click_0_listener() { const activity_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onActivityClick(activity_r13)); });
221
- i0.ɵɵelementStart(1, "div", 98);
219
+ i0.ɵɵelementStart(0, "div", 92);
220
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template_div_click_0_listener() { const activity_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onActivityClick(activity_r13)); });
221
+ i0.ɵɵelementStart(1, "div", 93);
222
222
  i0.ɵɵelement(2, "i");
223
223
  i0.ɵɵelementEnd();
224
- i0.ɵɵelementStart(3, "div", 99)(4, "div", 100);
224
+ i0.ɵɵelementStart(3, "div", 94)(4, "div", 95);
225
225
  i0.ɵɵtext(5);
226
226
  i0.ɵɵelementEnd();
227
- i0.ɵɵelementStart(6, "div", 101)(7, "span", 102);
227
+ i0.ɵɵelementStart(6, "div", 96)(7, "span", 97);
228
228
  i0.ɵɵtext(8);
229
229
  i0.ɵɵelementEnd();
230
- i0.ɵɵelementStart(9, "span", 103);
230
+ i0.ɵɵelementStart(9, "span", 98);
231
231
  i0.ɵɵtext(10);
232
232
  i0.ɵɵelementEnd();
233
- i0.ɵɵconditionalCreate(11, CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_2_Conditional_11_Template, 2, 1, "span", 104);
233
+ i0.ɵɵconditionalCreate(11, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Conditional_11_Template, 2, 1, "span", 99);
234
234
  i0.ɵɵelementEnd()();
235
- i0.ɵɵelementStart(12, "div", 105);
235
+ i0.ɵɵelementStart(12, "div", 100);
236
236
  i0.ɵɵtext(13);
237
237
  i0.ɵɵelementEnd()();
238
238
  } if (rf & 2) {
@@ -253,195 +253,180 @@ function CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_
253
253
  i0.ɵɵadvance(2);
254
254
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDate(activity_r13.date), " ");
255
255
  } }
256
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_Template(rf, ctx) { if (rf & 1) {
257
- i0.ɵɵelementStart(0, "div", 55);
258
- i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_For_2_Template, 14, 8, "div", 96, i0.ɵɵrepeaterTrackByIdentity);
256
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_Template(rf, ctx) { if (rf & 1) {
257
+ i0.ɵɵelementStart(0, "div", 52);
258
+ i0.ɵɵrepeaterCreate(1, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_For_2_Template, 14, 8, "div", 91, i0.ɵɵrepeaterTrackByIdentity);
259
259
  i0.ɵɵelementEnd();
260
260
  } if (rf & 2) {
261
261
  const ctx_r1 = i0.ɵɵnextContext(2);
262
262
  i0.ɵɵadvance();
263
263
  i0.ɵɵrepeater(ctx_r1.recentActivity);
264
264
  } }
265
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_107_Template(rf, ctx) { if (rf & 1) {
266
- i0.ɵɵelementStart(0, "div", 49);
267
- i0.ɵɵelement(1, "i", 106);
265
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_97_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "div", 46);
267
+ i0.ɵɵelement(1, "i", 101);
268
268
  i0.ɵɵelementStart(2, "span");
269
269
  i0.ɵɵtext(3, "No recent activity");
270
270
  i0.ɵɵelementEnd()();
271
271
  } }
272
- function CredentialsOverviewResourceComponent_Conditional_2_Conditional_108_Template(rf, ctx) { if (rf & 1) {
272
+ function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template(rf, ctx) { if (rf & 1) {
273
273
  const _r14 = i0.ɵɵgetCurrentView();
274
- i0.ɵɵelementStart(0, "div", 56)(1, "div", 107);
274
+ i0.ɵɵelementStart(0, "div", 53)(1, "div", 102);
275
275
  i0.ɵɵtext(2, "Quick Actions");
276
276
  i0.ɵɵelementEnd();
277
- i0.ɵɵelementStart(3, "div", 108)(4, "button", 109);
278
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_108_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
279
- i0.ɵɵelement(5, "i", 61);
277
+ i0.ɵɵelementStart(3, "div", 103)(4, "button", 104);
278
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
279
+ i0.ɵɵelement(5, "i", 6);
280
280
  i0.ɵɵelementStart(6, "span");
281
281
  i0.ɵɵtext(7, "Add Credential");
282
282
  i0.ɵɵelementEnd()();
283
- i0.ɵɵelementStart(8, "button", 109);
284
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_108_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAllTypes()); });
285
- i0.ɵɵelement(9, "i", 95);
283
+ i0.ɵɵelementStart(8, "button", 104);
284
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAllTypes()); });
285
+ i0.ɵɵelement(9, "i", 90);
286
286
  i0.ɵɵelementStart(10, "span");
287
287
  i0.ɵɵtext(11, "Manage Types");
288
288
  i0.ɵɵelementEnd()();
289
- i0.ɵɵelementStart(12, "button", 109);
290
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_108_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAllCategories()); });
291
- i0.ɵɵelement(13, "i", 110);
289
+ i0.ɵɵelementStart(12, "button", 104);
290
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAllCategories()); });
291
+ i0.ɵɵelement(13, "i", 105);
292
292
  i0.ɵɵelementStart(14, "span");
293
293
  i0.ɵɵtext(15, "Categories");
294
294
  i0.ɵɵelementEnd()();
295
- i0.ɵɵelementStart(16, "button", 109);
296
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Conditional_108_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAuditLog()); });
297
- i0.ɵɵelement(17, "i", 111);
295
+ i0.ɵɵelementStart(16, "button", 104);
296
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewAuditLog()); });
297
+ i0.ɵɵelement(17, "i", 106);
298
298
  i0.ɵɵelementStart(18, "span");
299
299
  i0.ɵɵtext(19, "Audit Log");
300
300
  i0.ɵɵelementEnd()()()();
301
301
  } }
302
- function CredentialsOverviewResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
303
- const _r1 = i0.ɵɵgetCurrentView();
304
- i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "h2", 4);
305
- i0.ɵɵtext(3, "Credential Overview");
306
- i0.ɵɵelementEnd();
307
- i0.ɵɵelementStart(4, "p", 5);
308
- i0.ɵɵtext(5, "Monitor and manage your organization's credentials");
309
- i0.ɵɵelementEnd()();
310
- i0.ɵɵelementStart(6, "div", 6)(7, "button", 7);
311
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refresh()); });
312
- i0.ɵɵelement(8, "i", 8);
313
- i0.ɵɵelementEnd();
314
- i0.ɵɵconditionalCreate(9, CredentialsOverviewResourceComponent_Conditional_2_Conditional_9_Template, 4, 0, "button", 9);
315
- i0.ɵɵelementEnd()();
316
- i0.ɵɵelementStart(10, "div", 10)(11, "div", 11)(12, "div", 12);
302
+ function CredentialsOverviewResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
303
+ const _r3 = i0.ɵɵgetCurrentView();
304
+ i0.ɵɵelementStart(0, "div", 7)(1, "div", 8)(2, "div", 9);
317
305
  i0.ɵɵnamespaceSVG();
318
- i0.ɵɵelementStart(13, "svg", 13);
319
- i0.ɵɵelement(14, "path", 14)(15, "path", 15);
306
+ i0.ɵɵelementStart(3, "svg", 10);
307
+ i0.ɵɵelement(4, "path", 11)(5, "path", 12);
320
308
  i0.ɵɵelementEnd();
321
309
  i0.ɵɵnamespaceHTML();
322
- i0.ɵɵelementStart(16, "div", 16);
323
- i0.ɵɵtext(17);
310
+ i0.ɵɵelementStart(6, "div", 13);
311
+ i0.ɵɵtext(7);
324
312
  i0.ɵɵelementEnd()()();
325
- i0.ɵɵelementStart(18, "div", 17)(19, "div", 18);
326
- i0.ɵɵtext(20);
313
+ i0.ɵɵelementStart(8, "div", 14)(9, "div", 15);
314
+ i0.ɵɵtext(10);
327
315
  i0.ɵɵelementEnd();
328
- i0.ɵɵelementStart(21, "div", 19);
329
- i0.ɵɵconditionalCreate(22, CredentialsOverviewResourceComponent_Conditional_2_Conditional_22_Template, 3, 1, "span", 20);
330
- i0.ɵɵconditionalCreate(23, CredentialsOverviewResourceComponent_Conditional_2_Conditional_23_Template, 3, 1, "span", 21);
331
- i0.ɵɵconditionalCreate(24, CredentialsOverviewResourceComponent_Conditional_2_Conditional_24_Template, 3, 0, "span", 22);
316
+ i0.ɵɵelementStart(11, "div", 16);
317
+ i0.ɵɵconditionalCreate(12, CredentialsOverviewResourceComponent_Conditional_7_Conditional_12_Template, 3, 1, "span", 17);
318
+ i0.ɵɵconditionalCreate(13, CredentialsOverviewResourceComponent_Conditional_7_Conditional_13_Template, 3, 1, "span", 18);
319
+ i0.ɵɵconditionalCreate(14, CredentialsOverviewResourceComponent_Conditional_7_Conditional_14_Template, 3, 0, "span", 19);
332
320
  i0.ɵɵelementEnd()()();
333
- i0.ɵɵelementStart(25, "div", 23)(26, "div", 24);
334
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Template_div_click_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllCredentials()); });
335
- i0.ɵɵelementStart(27, "div", 25);
336
- i0.ɵɵelement(28, "i", 26);
321
+ i0.ɵɵelementStart(15, "div", 20)(16, "div", 21);
322
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllCredentials()); });
323
+ i0.ɵɵelementStart(17, "div", 22);
324
+ i0.ɵɵelement(18, "i", 23);
337
325
  i0.ɵɵelementEnd();
338
- i0.ɵɵelementStart(29, "div", 27)(30, "div", 28);
339
- i0.ɵɵtext(31);
326
+ i0.ɵɵelementStart(19, "div", 24)(20, "div", 25);
327
+ i0.ɵɵtext(21);
340
328
  i0.ɵɵelementEnd();
341
- i0.ɵɵelementStart(32, "div", 29);
342
- i0.ɵɵtext(33, "Total Credentials");
329
+ i0.ɵɵelementStart(22, "div", 26);
330
+ i0.ɵɵtext(23, "Total Credentials");
343
331
  i0.ɵɵelementEnd()();
344
- i0.ɵɵelementStart(34, "div", 30);
345
- i0.ɵɵelement(35, "i", 31);
332
+ i0.ɵɵelementStart(24, "div", 27);
333
+ i0.ɵɵelement(25, "i", 28);
346
334
  i0.ɵɵelementEnd()();
347
- i0.ɵɵelementStart(36, "div", 32);
348
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Template_div_click_36_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllCredentials()); });
349
- i0.ɵɵelementStart(37, "div", 25);
350
- i0.ɵɵelement(38, "i", 33);
335
+ i0.ɵɵelementStart(26, "div", 29);
336
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_div_click_26_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllCredentials()); });
337
+ i0.ɵɵelementStart(27, "div", 22);
338
+ i0.ɵɵelement(28, "i", 30);
351
339
  i0.ɵɵelementEnd();
352
- i0.ɵɵelementStart(39, "div", 27)(40, "div", 28);
353
- i0.ɵɵtext(41);
340
+ i0.ɵɵelementStart(29, "div", 24)(30, "div", 25);
341
+ i0.ɵɵtext(31);
354
342
  i0.ɵɵelementEnd();
355
- i0.ɵɵelementStart(42, "div", 29);
356
- i0.ɵɵtext(43, "Active");
343
+ i0.ɵɵelementStart(32, "div", 26);
344
+ i0.ɵɵtext(33, "Active");
357
345
  i0.ɵɵelementEnd()();
358
- i0.ɵɵelementStart(44, "div", 34)(45, "span", 35);
359
- i0.ɵɵtext(46);
346
+ i0.ɵɵelementStart(34, "div", 31)(35, "span", 32);
347
+ i0.ɵɵtext(36);
360
348
  i0.ɵɵelementEnd()()();
361
- i0.ɵɵelementStart(47, "div", 36)(48, "div", 25);
362
- i0.ɵɵelement(49, "i", 37);
349
+ i0.ɵɵelementStart(37, "div", 33)(38, "div", 22);
350
+ i0.ɵɵelement(39, "i", 34);
363
351
  i0.ɵɵelementEnd();
364
- i0.ɵɵelementStart(50, "div", 27)(51, "div", 28);
365
- i0.ɵɵtext(52);
352
+ i0.ɵɵelementStart(40, "div", 24)(41, "div", 25);
353
+ i0.ɵɵtext(42);
366
354
  i0.ɵɵelementEnd();
367
- i0.ɵɵelementStart(53, "div", 29);
368
- i0.ɵɵtext(54, "Types");
355
+ i0.ɵɵelementStart(43, "div", 26);
356
+ i0.ɵɵtext(44, "Types");
369
357
  i0.ɵɵelementEnd()()();
370
- i0.ɵɵelementStart(55, "div", 24);
371
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Template_div_click_55_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewExpiringCredentials()); });
372
- i0.ɵɵelementStart(56, "div", 25);
373
- i0.ɵɵelement(57, "i", 38);
358
+ i0.ɵɵelementStart(45, "div", 21);
359
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_div_click_45_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewExpiringCredentials()); });
360
+ i0.ɵɵelementStart(46, "div", 22);
361
+ i0.ɵɵelement(47, "i", 35);
374
362
  i0.ɵɵelementEnd();
375
- i0.ɵɵelementStart(58, "div", 27)(59, "div", 28);
376
- i0.ɵɵtext(60);
363
+ i0.ɵɵelementStart(48, "div", 24)(49, "div", 25);
364
+ i0.ɵɵtext(50);
377
365
  i0.ɵɵelementEnd();
378
- i0.ɵɵelementStart(61, "div", 29);
379
- i0.ɵɵtext(62, "Expiring Soon");
366
+ i0.ɵɵelementStart(51, "div", 26);
367
+ i0.ɵɵtext(52, "Expiring Soon");
380
368
  i0.ɵɵelementEnd()();
381
- i0.ɵɵconditionalCreate(63, CredentialsOverviewResourceComponent_Conditional_2_Conditional_63_Template, 2, 0, "div", 39);
369
+ i0.ɵɵconditionalCreate(53, CredentialsOverviewResourceComponent_Conditional_7_Conditional_53_Template, 2, 0, "div", 36);
382
370
  i0.ɵɵelementEnd();
383
- i0.ɵɵelementStart(64, "div", 36)(65, "div", 25);
384
- i0.ɵɵelement(66, "i", 40);
371
+ i0.ɵɵelementStart(54, "div", 33)(55, "div", 22);
372
+ i0.ɵɵelement(56, "i", 37);
385
373
  i0.ɵɵelementEnd();
386
- i0.ɵɵelementStart(67, "div", 27)(68, "div", 28);
387
- i0.ɵɵtext(69);
374
+ i0.ɵɵelementStart(57, "div", 24)(58, "div", 25);
375
+ i0.ɵɵtext(59);
388
376
  i0.ɵɵelementEnd();
389
- i0.ɵɵelementStart(70, "div", 29);
390
- i0.ɵɵtext(71, "Expired");
377
+ i0.ɵɵelementStart(60, "div", 26);
378
+ i0.ɵɵtext(61, "Expired");
391
379
  i0.ɵɵelementEnd()()()();
392
- i0.ɵɵelementStart(72, "div", 41)(73, "div", 42)(74, "div", 43)(75, "div", 44);
393
- i0.ɵɵelement(76, "i", 45);
394
- i0.ɵɵelementStart(77, "span");
395
- i0.ɵɵtext(78, "Credentials by Category");
380
+ i0.ɵɵelementStart(62, "div", 38)(63, "div", 39)(64, "div", 40)(65, "div", 41);
381
+ i0.ɵɵelement(66, "i", 42);
382
+ i0.ɵɵelementStart(67, "span");
383
+ i0.ɵɵtext(68, "Credentials by Category");
396
384
  i0.ɵɵelementEnd()();
397
- i0.ɵɵelementStart(79, "span", 46);
398
- i0.ɵɵtext(80, "Click to filter by category");
385
+ i0.ɵɵelementStart(69, "span", 43);
386
+ i0.ɵɵtext(70, "Click to filter by category");
399
387
  i0.ɵɵelementEnd()();
400
- i0.ɵɵelementStart(81, "div", 47);
401
- i0.ɵɵconditionalCreate(82, CredentialsOverviewResourceComponent_Conditional_2_Conditional_82_Template, 14, 1, "div", 48);
402
- i0.ɵɵconditionalCreate(83, CredentialsOverviewResourceComponent_Conditional_2_Conditional_83_Template, 4, 0, "div", 49);
388
+ i0.ɵɵelementStart(71, "div", 44);
389
+ i0.ɵɵconditionalCreate(72, CredentialsOverviewResourceComponent_Conditional_7_Conditional_72_Template, 14, 1, "div", 45);
390
+ i0.ɵɵconditionalCreate(73, CredentialsOverviewResourceComponent_Conditional_7_Conditional_73_Template, 4, 0, "div", 46);
403
391
  i0.ɵɵelementEnd()();
404
- i0.ɵɵelementStart(84, "div", 50)(85, "div", 43)(86, "div", 44);
405
- i0.ɵɵelement(87, "i", 37);
406
- i0.ɵɵelementStart(88, "span");
407
- i0.ɵɵtext(89, "Top Credential Types");
392
+ i0.ɵɵelementStart(74, "div", 47)(75, "div", 40)(76, "div", 41);
393
+ i0.ɵɵelement(77, "i", 34);
394
+ i0.ɵɵelementStart(78, "span");
395
+ i0.ɵɵtext(79, "Top Credential Types");
408
396
  i0.ɵɵelementEnd()();
409
- i0.ɵɵelementStart(90, "button", 51);
410
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Template_button_click_90_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllTypes()); });
411
- i0.ɵɵtext(91, " View All ");
412
- i0.ɵɵelement(92, "i", 31);
397
+ i0.ɵɵelementStart(80, "button", 48);
398
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_button_click_80_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAllTypes()); });
399
+ i0.ɵɵtext(81, " View All ");
400
+ i0.ɵɵelement(82, "i", 28);
413
401
  i0.ɵɵelementEnd()();
414
- i0.ɵɵelementStart(93, "div", 47);
415
- i0.ɵɵconditionalCreate(94, CredentialsOverviewResourceComponent_Conditional_2_Conditional_94_Template, 3, 0, "div", 52);
416
- i0.ɵɵconditionalCreate(95, CredentialsOverviewResourceComponent_Conditional_2_Conditional_95_Template, 4, 0, "div", 49);
402
+ i0.ɵɵelementStart(83, "div", 44);
403
+ i0.ɵɵconditionalCreate(84, CredentialsOverviewResourceComponent_Conditional_7_Conditional_84_Template, 3, 0, "div", 49);
404
+ i0.ɵɵconditionalCreate(85, CredentialsOverviewResourceComponent_Conditional_7_Conditional_85_Template, 4, 0, "div", 46);
417
405
  i0.ɵɵelementEnd()();
418
- i0.ɵɵelementStart(96, "div", 53)(97, "div", 43)(98, "div", 44);
419
- i0.ɵɵelement(99, "i", 54);
420
- i0.ɵɵelementStart(100, "span");
421
- i0.ɵɵtext(101, "Recent Activity");
406
+ i0.ɵɵelementStart(86, "div", 50)(87, "div", 40)(88, "div", 41);
407
+ i0.ɵɵelement(89, "i", 51);
408
+ i0.ɵɵelementStart(90, "span");
409
+ i0.ɵɵtext(91, "Recent Activity");
422
410
  i0.ɵɵelementEnd()();
423
- i0.ɵɵelementStart(102, "button", 51);
424
- i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_2_Template_button_click_102_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAuditLog()); });
425
- i0.ɵɵtext(103, " View All ");
426
- i0.ɵɵelement(104, "i", 31);
411
+ i0.ɵɵelementStart(92, "button", 48);
412
+ i0.ɵɵlistener("click", function CredentialsOverviewResourceComponent_Conditional_7_Template_button_click_92_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.viewAuditLog()); });
413
+ i0.ɵɵtext(93, " View All ");
414
+ i0.ɵɵelement(94, "i", 28);
427
415
  i0.ɵɵelementEnd()();
428
- i0.ɵɵelementStart(105, "div", 47);
429
- i0.ɵɵconditionalCreate(106, CredentialsOverviewResourceComponent_Conditional_2_Conditional_106_Template, 3, 0, "div", 55);
430
- i0.ɵɵconditionalCreate(107, CredentialsOverviewResourceComponent_Conditional_2_Conditional_107_Template, 4, 0, "div", 49);
416
+ i0.ɵɵelementStart(95, "div", 44);
417
+ i0.ɵɵconditionalCreate(96, CredentialsOverviewResourceComponent_Conditional_7_Conditional_96_Template, 3, 0, "div", 52);
418
+ i0.ɵɵconditionalCreate(97, CredentialsOverviewResourceComponent_Conditional_7_Conditional_97_Template, 4, 0, "div", 46);
431
419
  i0.ɵɵelementEnd()()();
432
- i0.ɵɵconditionalCreate(108, CredentialsOverviewResourceComponent_Conditional_2_Conditional_108_Template, 20, 0, "div", 56);
433
- i0.ɵɵelementStart(109, "div", 57);
434
- i0.ɵɵelement(110, "i", 58);
435
- i0.ɵɵelementStart(111, "div", 59)(112, "strong");
436
- i0.ɵɵtext(113, "Security Note:");
420
+ i0.ɵɵconditionalCreate(98, CredentialsOverviewResourceComponent_Conditional_7_Conditional_98_Template, 20, 0, "div", 53);
421
+ i0.ɵɵelementStart(99, "div", 54);
422
+ i0.ɵɵelement(100, "i", 55);
423
+ i0.ɵɵelementStart(101, "div", 56)(102, "strong");
424
+ i0.ɵɵtext(103, "Security Note:");
437
425
  i0.ɵɵelementEnd();
438
- i0.ɵɵtext(114, " All credential values are encrypted. Access to credentials is logged in the audit trail for compliance and security monitoring. ");
426
+ i0.ɵɵtext(104, " All credential values are encrypted. Access to credentials is logged in the audit trail for compliance and security monitoring. ");
439
427
  i0.ɵɵelementEnd()();
440
428
  } if (rf & 2) {
441
429
  const ctx_r1 = i0.ɵɵnextContext();
442
- i0.ɵɵadvance(9);
443
- i0.ɵɵconditional(ctx_r1.UserCanCreateCredentials ? 9 : -1);
444
- i0.ɵɵadvance();
445
430
  i0.ɵɵproperty("ngClass", ctx_r1.getHealthClass());
446
431
  i0.ɵɵadvance(5);
447
432
  i0.ɵɵattribute("stroke-dasharray", ctx_r1.getHealthScore() + ", 100");
@@ -450,11 +435,11 @@ function CredentialsOverviewResourceComponent_Conditional_2_Template(rf, ctx) {
450
435
  i0.ɵɵadvance(3);
451
436
  i0.ɵɵtextInterpolate(ctx_r1.getHealthLabel());
452
437
  i0.ɵɵadvance(2);
453
- i0.ɵɵconditional(ctx_r1.expiredCredentials > 0 ? 22 : -1);
438
+ i0.ɵɵconditional(ctx_r1.expiredCredentials > 0 ? 12 : -1);
454
439
  i0.ɵɵadvance();
455
- i0.ɵɵconditional(ctx_r1.expiringSoonCount > 0 ? 23 : -1);
440
+ i0.ɵɵconditional(ctx_r1.expiringSoonCount > 0 ? 13 : -1);
456
441
  i0.ɵɵadvance();
457
- i0.ɵɵconditional(ctx_r1.expiredCredentials === 0 && ctx_r1.expiringSoonCount === 0 ? 24 : -1);
442
+ i0.ɵɵconditional(ctx_r1.expiredCredentials === 0 && ctx_r1.expiringSoonCount === 0 ? 14 : -1);
458
443
  i0.ɵɵadvance(7);
459
444
  i0.ɵɵtextInterpolate(ctx_r1.totalCredentials);
460
445
  i0.ɵɵadvance(10);
@@ -468,25 +453,25 @@ function CredentialsOverviewResourceComponent_Conditional_2_Template(rf, ctx) {
468
453
  i0.ɵɵadvance(5);
469
454
  i0.ɵɵtextInterpolate(ctx_r1.expiringSoonCount);
470
455
  i0.ɵɵadvance(3);
471
- i0.ɵɵconditional(ctx_r1.expiringSoonCount > 0 ? 63 : -1);
456
+ i0.ɵɵconditional(ctx_r1.expiringSoonCount > 0 ? 53 : -1);
472
457
  i0.ɵɵadvance();
473
458
  i0.ɵɵclassProp("danger", ctx_r1.expiredCredentials > 0);
474
459
  i0.ɵɵadvance(5);
475
460
  i0.ɵɵtextInterpolate(ctx_r1.expiredCredentials);
476
461
  i0.ɵɵadvance(13);
477
- i0.ɵɵconditional(ctx_r1.categoryStats.length > 0 ? 82 : -1);
462
+ i0.ɵɵconditional(ctx_r1.categoryStats.length > 0 ? 72 : -1);
478
463
  i0.ɵɵadvance();
479
- i0.ɵɵconditional(ctx_r1.categoryStats.length === 0 ? 83 : -1);
464
+ i0.ɵɵconditional(ctx_r1.categoryStats.length === 0 ? 73 : -1);
480
465
  i0.ɵɵadvance(11);
481
- i0.ɵɵconditional(ctx_r1.typeStats.length > 0 ? 94 : -1);
466
+ i0.ɵɵconditional(ctx_r1.typeStats.length > 0 ? 84 : -1);
482
467
  i0.ɵɵadvance();
483
- i0.ɵɵconditional(ctx_r1.typeStats.length === 0 ? 95 : -1);
468
+ i0.ɵɵconditional(ctx_r1.typeStats.length === 0 ? 85 : -1);
484
469
  i0.ɵɵadvance(11);
485
- i0.ɵɵconditional(ctx_r1.recentActivity.length > 0 ? 106 : -1);
470
+ i0.ɵɵconditional(ctx_r1.recentActivity.length > 0 ? 96 : -1);
486
471
  i0.ɵɵadvance();
487
- i0.ɵɵconditional(ctx_r1.recentActivity.length === 0 ? 107 : -1);
472
+ i0.ɵɵconditional(ctx_r1.recentActivity.length === 0 ? 97 : -1);
488
473
  i0.ɵɵadvance();
489
- i0.ɵɵconditional(ctx_r1.UserCanCreateCredentials ? 108 : -1);
474
+ i0.ɵɵconditional(ctx_r1.UserCanCreateCredentials ? 98 : -1);
490
475
  } }
491
476
  let CredentialsOverviewResourceComponent = class CredentialsOverviewResourceComponent extends BaseResourceComponent {
492
477
  cdr;
@@ -914,17 +899,26 @@ let CredentialsOverviewResourceComponent = class CredentialsOverviewResourceComp
914
899
  return offset;
915
900
  }
916
901
  static ɵfac = function CredentialsOverviewResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CredentialsOverviewResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
917
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CredentialsOverviewResourceComponent, selectors: [["mj-credentials-overview-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [[1, "overview-container"], ["text", "Loading overview..."], [1, "overview-header"], [1, "header-left"], [1, "overview-title"], [1, "overview-subtitle"], [1, "header-actions"], ["title", "Refresh", 1, "btn-refresh", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "btn-primary"], [1, "health-banner", 3, "ngClass"], [1, "health-score-container"], [1, "health-score-ring"], ["viewBox", "0 0 36 36", 1, "circular-chart"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle-bg"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle"], [1, "health-score-value"], [1, "health-info"], [1, "health-label"], [1, "health-details"], [1, "health-alert"], [1, "health-warning-text"], [1, "health-ok"], [1, "kpi-row"], [1, "kpi-card", "clickable", 3, "click"], [1, "kpi-icon"], [1, "fa-solid", "fa-key"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-trend"], [1, "fa-solid", "fa-arrow-right"], [1, "kpi-card", "active", "clickable", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "kpi-trend", "success"], [1, "percentage"], [1, "kpi-card"], [1, "fa-solid", "fa-cubes"], [1, "fa-solid", "fa-clock"], [1, "kpi-trend", "warning"], [1, "fa-solid", "fa-circle-xmark"], [1, "content-grid"], [1, "panel", "category-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-chart-pie"], [1, "panel-subtitle"], [1, "panel-body"], [1, "category-chart"], [1, "empty-state"], [1, "panel", "types-panel"], [1, "panel-action", 3, "click"], [1, "type-list"], [1, "panel", "activity-panel"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "activity-list"], [1, "quick-actions"], [1, "security-notice"], [1, "fa-solid", "fa-shield-check"], [1, "notice-content"], [1, "btn-primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-circle-exclamation"], [1, "health-warning-text", 3, "click"], [1, "donut-chart-container"], ["viewBox", "0 0 100 100", 1, "donut-chart"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "12"], [1, "donut-center"], [1, "donut-total"], [1, "donut-label"], [1, "category-legend"], [1, "legend-item"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke-width", "12", 1, "donut-segment", 3, "click"], [1, "legend-item", 3, "click"], [1, "legend-color"], [1, "legend-info"], [1, "legend-name"], [1, "legend-value"], [1, "fa-solid", "fa-chevron-right", "legend-arrow"], [1, "fa-solid", "fa-folder-open"], [1, "type-item"], [1, "type-item", 3, "click"], [1, "type-info"], [1, "type-name"], [1, "type-category"], [1, "type-stats"], [1, "type-count"], [1, "count-value"], [1, "count-label"], [1, "type-bar"], [1, "type-bar-fill"], [1, "type-indicators"], ["title", "Active", 1, "indicator", "active"], ["title", "Expiring Soon", 1, "indicator", "warning"], [1, "fa-solid", "fa-circle"], [1, "fa-solid", "fa-shapes"], [1, "activity-item"], [1, "activity-item", 3, "click"], [1, "activity-icon", 3, "ngClass"], [1, "activity-info"], [1, "activity-name"], [1, "activity-meta"], [1, "activity-type"], [1, "activity-action"], [1, "activity-user"], [1, "activity-time"], [1, "fa-solid", "fa-inbox"], [1, "quick-actions-title"], [1, "quick-actions-grid"], [1, "quick-action", 3, "click"], [1, "fa-solid", "fa-folder-tree"], [1, "fa-solid", "fa-clipboard-list"]], template: function CredentialsOverviewResourceComponent_Template(rf, ctx) { if (rf & 1) {
918
- i0.ɵɵelementStart(0, "div", 0);
919
- i0.ɵɵconditionalCreate(1, CredentialsOverviewResourceComponent_Conditional_1_Template, 1, 0, "mj-loading", 1);
920
- i0.ɵɵconditionalCreate(2, CredentialsOverviewResourceComponent_Conditional_2_Template, 115, 26);
902
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CredentialsOverviewResourceComponent, selectors: [["mj-credentials-overview-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 4, consts: [["Title", "Credential Overview", "Icon", "fa-solid fa-chart-pie", "Subtitle", "Monitor and manage your organization's credentials"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["text", "Loading overview..."], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "health-banner", 3, "ngClass"], [1, "health-score-container"], [1, "health-score-ring"], ["viewBox", "0 0 36 36", 1, "circular-chart"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle-bg"], ["d", "M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831", 1, "circle"], [1, "health-score-value"], [1, "health-info"], [1, "health-label"], [1, "health-details"], [1, "health-alert"], [1, "health-warning-text"], [1, "health-ok"], [1, "kpi-row"], [1, "kpi-card", "clickable", 3, "click"], [1, "kpi-icon"], [1, "fa-solid", "fa-key"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-trend"], [1, "fa-solid", "fa-arrow-right"], [1, "kpi-card", "active", "clickable", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "kpi-trend", "success"], [1, "percentage"], [1, "kpi-card"], [1, "fa-solid", "fa-cubes"], [1, "fa-solid", "fa-clock"], [1, "kpi-trend", "warning"], [1, "fa-solid", "fa-circle-xmark"], [1, "content-grid"], [1, "panel", "category-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-chart-pie"], [1, "panel-subtitle"], [1, "panel-body"], [1, "category-chart"], [1, "empty-state"], [1, "panel", "types-panel"], [1, "panel-action", 3, "click"], [1, "type-list"], [1, "panel", "activity-panel"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "activity-list"], [1, "quick-actions"], [1, "security-notice"], [1, "fa-solid", "fa-shield-check"], [1, "notice-content"], [1, "fa-solid", "fa-circle-exclamation"], [1, "health-warning-text", 3, "click"], [1, "donut-chart-container"], ["viewBox", "0 0 100 100", 1, "donut-chart"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "12"], [1, "donut-center"], [1, "donut-total"], [1, "donut-label"], [1, "category-legend"], [1, "legend-item"], ["cx", "50", "cy", "50", "r", "40", "fill", "none", "stroke-width", "12", 1, "donut-segment", 3, "click"], [1, "legend-item", 3, "click"], [1, "legend-color"], [1, "legend-info"], [1, "legend-name"], [1, "legend-value"], [1, "fa-solid", "fa-chevron-right", "legend-arrow"], [1, "fa-solid", "fa-folder-open"], [1, "type-item"], [1, "type-item", 3, "click"], [1, "type-info"], [1, "type-name"], [1, "type-category"], [1, "type-stats"], [1, "type-count"], [1, "count-value"], [1, "count-label"], [1, "type-bar"], [1, "type-bar-fill"], [1, "type-indicators"], ["title", "Active", 1, "indicator", "active"], ["title", "Expiring Soon", 1, "indicator", "warning"], [1, "fa-solid", "fa-circle"], [1, "fa-solid", "fa-shapes"], [1, "activity-item"], [1, "activity-item", 3, "click"], [1, "activity-icon", 3, "ngClass"], [1, "activity-info"], [1, "activity-name"], [1, "activity-meta"], [1, "activity-type"], [1, "activity-action"], [1, "activity-user"], [1, "activity-time"], [1, "fa-solid", "fa-inbox"], [1, "quick-actions-title"], [1, "quick-actions-grid"], [1, "quick-action", 3, "click"], [1, "fa-solid", "fa-folder-tree"], [1, "fa-solid", "fa-clipboard-list"]], template: function CredentialsOverviewResourceComponent_Template(rf, ctx) { if (rf & 1) {
903
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "mj-refresh-button", 2);
904
+ i0.ɵɵlistener("Clicked", function CredentialsOverviewResourceComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.refresh(); });
921
905
  i0.ɵɵelementEnd();
906
+ i0.ɵɵconditionalCreate(4, CredentialsOverviewResourceComponent_Conditional_4_Template, 3, 0, "button", 3);
907
+ i0.ɵɵelementEnd()();
908
+ i0.ɵɵelementStart(5, "mj-page-body");
909
+ i0.ɵɵconditionalCreate(6, CredentialsOverviewResourceComponent_Conditional_6_Template, 1, 0, "mj-loading", 4);
910
+ i0.ɵɵconditionalCreate(7, CredentialsOverviewResourceComponent_Conditional_7_Template, 105, 25);
911
+ i0.ɵɵelementEnd()();
922
912
  } if (rf & 2) {
913
+ i0.ɵɵadvance(3);
914
+ i0.ɵɵproperty("Loading", ctx.isLoading);
923
915
  i0.ɵɵadvance();
924
- i0.ɵɵconditional(ctx.isLoading ? 1 : -1);
916
+ i0.ɵɵconditional(ctx.UserCanCreateCredentials ? 4 : -1);
917
+ i0.ɵɵadvance(2);
918
+ i0.ɵɵconditional(ctx.isLoading ? 6 : -1);
925
919
  i0.ɵɵadvance();
926
- i0.ɵɵconditional(!ctx.isLoading ? 2 : -1);
927
- } }, dependencies: [i1.NgClass, i2.LoadingComponent], styles: [".overview-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.overview-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.overview-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 4px 0;\n}\n\n.overview-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n}\n\n.btn-refresh[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-refresh[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.btn-refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.health-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 20px 24px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n border-radius: 16px;\n margin-bottom: 24px;\n}\n\n.health-banner.health-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.health-banner.health-critical[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.health-score-container[_ngcontent-%COMP%] {\n margin-right: 24px;\n}\n\n.health-score-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.circular-chart[_ngcontent-%COMP%] {\n display: block;\n margin: 0 auto;\n max-height: 80px;\n transform: rotate(-90deg);\n}\n\n.circle-bg[_ngcontent-%COMP%] {\n fill: none;\n stroke: var(--mj-border-default);\n stroke-width: 3.8;\n}\n\n.circle[_ngcontent-%COMP%] {\n fill: none;\n stroke-width: 3.8;\n stroke-linecap: round;\n stroke: var(--mj-status-success);\n animation: _ngcontent-%COMP%_progress 1s ease-out forwards;\n}\n\n.health-banner.health-warning[_ngcontent-%COMP%] .circle[_ngcontent-%COMP%] {\n stroke: var(--mj-status-warning);\n}\n\n.health-banner.health-critical[_ngcontent-%COMP%] .circle[_ngcontent-%COMP%] {\n stroke: var(--mj-status-error);\n}\n\n@keyframes _ngcontent-%COMP%_progress {\n 0% {\n stroke-dasharray: 0 100;\n }\n}\n\n.health-score-value[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.health-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.health-label[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-status-success);\n margin-bottom: 4px;\n}\n\n.health-banner.health-warning[_ngcontent-%COMP%] .health-label[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.health-banner.health-critical[_ngcontent-%COMP%] .health-label[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.health-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.health-alert[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-error);\n font-weight: 500;\n font-size: 14px;\n}\n\n.health-warning-text[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-warning);\n font-weight: 500;\n font-size: 14px;\n cursor: pointer;\n}\n\n.health-warning-text[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.health-ok[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-success);\n font-weight: 500;\n font-size: 14px;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.kpi-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.kpi-card.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.kpi-card.active[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.kpi-card.warning[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.kpi-card.danger[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-right: 14px;\n flex-shrink: 0;\n}\n\n.kpi-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-text-inverse);\n}\n\n.kpi-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n}\n\n.kpi-trend[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n margin-left: 8px;\n color: var(--mj-text-disabled);\n}\n\n.kpi-trend.success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-trend.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.kpi-trend[_ngcontent-%COMP%] .percentage[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.content-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.category-panel[_ngcontent-%COMP%] {\n grid-row: span 2;\n}\n\n.panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.panel-subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.panel-action[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.panel-action[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n.category-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n height: 100%;\n}\n\n.donut-chart-container[_ngcontent-%COMP%] {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n}\n\n.donut-chart[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n transform: rotate(-90deg);\n}\n\n.donut-segment[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.donut-segment[_ngcontent-%COMP%]:hover {\n opacity: 0.8;\n}\n\n.donut-center[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}\n\n.donut-total[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.donut-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.category-legend[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.legend-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n transform: translateX(4px);\n}\n\n.legend-color[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.legend-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.legend-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.legend-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-value[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n\n\n.type-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.type-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.type-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-category[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n}\n\n.type-stats[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n margin-left: 16px;\n}\n\n.type-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.count-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.type-bar[_ngcontent-%COMP%] {\n width: 100px;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.type-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.type-indicators[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n}\n\n.indicator.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.indicator.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 6px;\n}\n\n\n\n.activity-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.activity-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.activity-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.activity-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.activity-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-created[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-created[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.activity-icon.action-updated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-updated[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-accessed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-accessed[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.activity-icon.action-rotated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-rotated[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.activity-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.activity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.activity-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.activity-type[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n.activity-action[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.activity-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n\n\n.quick-actions[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.quick-actions-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 12px;\n}\n\n.quick-actions-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n}\n\n.quick-action[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.quick-action[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n transform: translateY(-2px);\n}\n\n.quick-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.quick-action[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\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;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n\n\n.security-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n padding: 16px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.security-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n margin-right: 12px;\n margin-top: 2px;\n}\n\n.notice-content[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.notice-content[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n\n\n@media (max-width: 1024px) {\n .content-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .category-panel[_ngcontent-%COMP%] {\n grid-row: auto;\n }\n\n .category-chart[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .donut-chart-container[_ngcontent-%COMP%] {\n width: 160px;\n height: 160px;\n }\n\n .category-legend[_ngcontent-%COMP%] {\n flex: 1;\n }\n}\n\n@media (max-width: 768px) {\n .overview-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .overview-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: flex-end;\n }\n\n .health-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n\n .health-score-container[_ngcontent-%COMP%] {\n margin-right: 0;\n margin-bottom: 16px;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .category-chart[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .quick-actions-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}"], changeDetection: 0 });
920
+ i0.ɵɵconditional(!ctx.isLoading ? 7 : -1);
921
+ } }, dependencies: [i1.NgClass, i2.MJButtonDirective, i2.MJPageHeaderComponent, i2.MJPageLayoutComponent, i2.MJPageBodyComponent, i2.MJRefreshButtonComponent, i3.LoadingComponent], styles: ["\n\n.health-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 20px 24px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n border-radius: 16px;\n margin-bottom: 24px;\n}\n\n.health-banner.health-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.health-banner.health-critical[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.health-score-container[_ngcontent-%COMP%] {\n margin-right: 24px;\n}\n\n.health-score-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.circular-chart[_ngcontent-%COMP%] {\n display: block;\n margin: 0 auto;\n max-height: 80px;\n transform: rotate(-90deg);\n}\n\n.circle-bg[_ngcontent-%COMP%] {\n fill: none;\n stroke: var(--mj-border-default);\n stroke-width: 3.8;\n}\n\n.circle[_ngcontent-%COMP%] {\n fill: none;\n stroke-width: 3.8;\n stroke-linecap: round;\n stroke: var(--mj-status-success);\n animation: _ngcontent-%COMP%_progress 1s ease-out forwards;\n}\n\n.health-banner.health-warning[_ngcontent-%COMP%] .circle[_ngcontent-%COMP%] {\n stroke: var(--mj-status-warning);\n}\n\n.health-banner.health-critical[_ngcontent-%COMP%] .circle[_ngcontent-%COMP%] {\n stroke: var(--mj-status-error);\n}\n\n@keyframes _ngcontent-%COMP%_progress {\n 0% {\n stroke-dasharray: 0 100;\n }\n}\n\n.health-score-value[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.health-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.health-label[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-status-success);\n margin-bottom: 4px;\n}\n\n.health-banner.health-warning[_ngcontent-%COMP%] .health-label[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.health-banner.health-critical[_ngcontent-%COMP%] .health-label[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.health-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.health-alert[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-error);\n font-weight: 500;\n font-size: 14px;\n}\n\n.health-warning-text[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-warning);\n font-weight: 500;\n font-size: 14px;\n cursor: pointer;\n}\n\n.health-warning-text[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.health-ok[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-success);\n font-weight: 500;\n font-size: 14px;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.kpi-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.kpi-card.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.kpi-card.active[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.kpi-card.warning[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.kpi-card.danger[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-right: 14px;\n flex-shrink: 0;\n}\n\n.kpi-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-text-inverse);\n}\n\n.kpi-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n}\n\n.kpi-trend[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n margin-left: 8px;\n color: var(--mj-text-disabled);\n}\n\n.kpi-trend.success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-trend.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.kpi-trend[_ngcontent-%COMP%] .percentage[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.content-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.category-panel[_ngcontent-%COMP%] {\n grid-row: span 2;\n}\n\n.panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.panel-subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.panel-action[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.panel-action[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n.category-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n height: 100%;\n}\n\n.donut-chart-container[_ngcontent-%COMP%] {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n}\n\n.donut-chart[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n transform: rotate(-90deg);\n}\n\n.donut-segment[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.donut-segment[_ngcontent-%COMP%]:hover {\n opacity: 0.8;\n}\n\n.donut-center[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}\n\n.donut-total[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.donut-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.category-legend[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.legend-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n transform: translateX(4px);\n}\n\n.legend-color[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.legend-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.legend-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.legend-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-value[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n\n\n.type-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.type-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.type-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-category[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n}\n\n.type-stats[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n margin-left: 16px;\n}\n\n.type-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.count-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.type-bar[_ngcontent-%COMP%] {\n width: 100px;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.type-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.type-indicators[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n}\n\n.indicator.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.indicator.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 6px;\n}\n\n\n\n.activity-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.activity-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.activity-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.activity-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.activity-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-created[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-created[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.activity-icon.action-updated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-updated[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-accessed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-accessed[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.activity-icon.action-rotated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-rotated[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.activity-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.activity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.activity-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.activity-type[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n.activity-action[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.activity-time[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n\n\n.quick-actions[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.quick-actions-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 12px;\n}\n\n.quick-actions-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n}\n\n.quick-action[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.quick-action[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n transform: translateY(-2px);\n}\n\n.quick-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.quick-action[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\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;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n\n\n.security-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n padding: 16px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.security-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n margin-right: 12px;\n margin-top: 2px;\n}\n\n.notice-content[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.notice-content[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n\n\n@media (max-width: 1024px) {\n .content-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .category-panel[_ngcontent-%COMP%] {\n grid-row: auto;\n }\n\n .category-chart[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .donut-chart-container[_ngcontent-%COMP%] {\n width: 160px;\n height: 160px;\n }\n\n .category-legend[_ngcontent-%COMP%] {\n flex: 1;\n }\n}\n\n@media (max-width: 768px) {\n .overview-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .overview-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: flex-end;\n }\n\n .health-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n\n .health-score-container[_ngcontent-%COMP%] {\n margin-right: 0;\n margin-bottom: 16px;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .category-chart[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .quick-actions-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}"], changeDetection: 0 });
928
922
  };
929
923
  CredentialsOverviewResourceComponent = __decorate([
930
924
  RegisterClass(BaseResourceComponent, 'CredentialsOverviewResource')
@@ -932,7 +926,7 @@ CredentialsOverviewResourceComponent = __decorate([
932
926
  export { CredentialsOverviewResourceComponent };
933
927
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsOverviewResourceComponent, [{
934
928
  type: Component,
935
- args: [{ standalone: false, selector: 'mj-credentials-overview-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overview-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading overview...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header with Actions -->\n <div class=\"overview-header\">\n <div class=\"header-left\">\n <h2 class=\"overview-title\">Credential Overview</h2>\n <p class=\"overview-subtitle\">Monitor and manage your organization's credentials</p>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-refresh\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n @if (UserCanCreateCredentials) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n }\n </div>\n </div>\n <!-- Health Score Banner -->\n <div class=\"health-banner\" [ngClass]=\"getHealthClass()\">\n <div class=\"health-score-container\">\n <div class=\"health-score-ring\">\n <svg viewBox=\"0 0 36 36\" class=\"circular-chart\">\n <path class=\"circle-bg\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n <path class=\"circle\"\n [attr.stroke-dasharray]=\"getHealthScore() + ', 100'\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n </svg>\n <div class=\"health-score-value\">{{getHealthScore()}}</div>\n </div>\n </div>\n <div class=\"health-info\">\n <div class=\"health-label\">{{getHealthLabel()}}</div>\n <div class=\"health-details\">\n @if (expiredCredentials > 0) {\n <span class=\"health-alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{expiredCredentials}} expired\n </span>\n }\n @if (expiringSoonCount > 0) {\n <span class=\"health-warning-text\" (click)=\"viewExpiringCredentials()\">\n <i class=\"fa-solid fa-clock\"></i>\n {{expiringSoonCount}} expiring soon\n </span>\n }\n @if (expiredCredentials === 0 && expiringSoonCount === 0) {\n <span class=\"health-ok\">\n <i class=\"fa-solid fa-check-circle\"></i>\n All credentials healthy\n </span>\n }\n </div>\n </div>\n </div>\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{totalCredentials}}</div>\n <div class=\"kpi-label\">Total Credentials</div>\n </div>\n <div class=\"kpi-trend\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"kpi-card active clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{activeCredentials}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n <div class=\"kpi-trend success\">\n <span class=\"percentage\">{{totalCredentials > 0 ? (activeCredentials / totalCredentials * 100).toFixed(0) : 0}}%</span>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-cubes\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{credentialTypes}}</div>\n <div class=\"kpi-label\">Types</div>\n </div>\n </div>\n <div class=\"kpi-card clickable\" [class.warning]=\"expiringSoonCount > 0\" (click)=\"viewExpiringCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiringSoonCount}}</div>\n <div class=\"kpi-label\">Expiring Soon</div>\n </div>\n @if (expiringSoonCount > 0) {\n <div class=\"kpi-trend warning\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n </div>\n <div class=\"kpi-card\" [class.danger]=\"expiredCredentials > 0\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-circle-xmark\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiredCredentials}}</div>\n <div class=\"kpi-label\">Expired</div>\n </div>\n </div>\n </div>\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Distribution Chart -->\n <div class=\"panel category-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-chart-pie\"></i>\n <span>Credentials by Category</span>\n </div>\n <span class=\"panel-subtitle\">Click to filter by category</span>\n </div>\n <div class=\"panel-body\">\n @if (categoryStats.length > 0) {\n <div class=\"category-chart\">\n <!-- Visual Donut Chart -->\n <div class=\"donut-chart-container\">\n <svg viewBox=\"0 0 100 100\" class=\"donut-chart\">\n <circle cx=\"50\" cy=\"50\" r=\"40\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"12\"/>\n @for (stat of categoryStats; track stat; let i = $index) {\n <ng-container>\n <circle\n cx=\"50\" cy=\"50\" r=\"40\"\n fill=\"none\"\n [attr.stroke]=\"stat.color\"\n stroke-width=\"12\"\n [attr.stroke-dasharray]=\"stat.percentage * 2.51 + ' ' + (251 - stat.percentage * 2.51)\"\n [attr.stroke-dashoffset]=\"getDonutOffset(i)\"\n class=\"donut-segment\"\n (click)=\"onCategoryClick(stat)\"\n />\n </ng-container>\n }\n </svg>\n <div class=\"donut-center\">\n <div class=\"donut-total\">{{totalCredentials}}</div>\n <div class=\"donut-label\">Total</div>\n </div>\n </div>\n <!-- Legend -->\n <div class=\"category-legend\">\n @for (stat of categoryStats; track stat) {\n <div class=\"legend-item\" (click)=\"onCategoryClick(stat)\">\n <div class=\"legend-color\" [style.backgroundColor]=\"stat.color\"></div>\n <div class=\"legend-info\">\n <div class=\"legend-name\">\n <i [class]=\"stat.iconClass\"></i>\n {{stat.category}}\n </div>\n <div class=\"legend-value\">{{stat.count}} ({{stat.percentage}}%)</div>\n </div>\n <i class=\"fa-solid fa-chevron-right legend-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n @if (categoryStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>No credentials configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Types Breakdown -->\n <div class=\"panel types-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-cubes\"></i>\n <span>Top Credential Types</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAllTypes()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (typeStats.length > 0) {\n <div class=\"type-list\">\n @for (type of typeStats.slice(0, 6); track type) {\n <div class=\"type-item\" (click)=\"onTypeClick(type)\">\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.typeName}}</div>\n <div class=\"type-category\">{{type.category}}</div>\n </div>\n <div class=\"type-stats\">\n <div class=\"type-count\">\n <span class=\"count-value\">{{type.credentialCount}}</span>\n <span class=\"count-label\">credentials</span>\n </div>\n <div class=\"type-bar\">\n <div class=\"type-bar-fill\"\n [style.width.%]=\"totalCredentials > 0 ? (type.credentialCount / totalCredentials * 100) : 0\">\n </div>\n </div>\n <div class=\"type-indicators\">\n @if (type.activeCount > 0) {\n <span class=\"indicator active\" title=\"Active\">\n <i class=\"fa-solid fa-circle\"></i> {{type.activeCount}}\n </span>\n }\n @if (type.expiringCount > 0) {\n <span class=\"indicator warning\" title=\"Expiring Soon\">\n <i class=\"fa-solid fa-clock\"></i> {{type.expiringCount}}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (typeStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>No credential types configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Recent Activity -->\n <div class=\"panel activity-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Recent Activity</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAuditLog()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (recentActivity.length > 0) {\n <div class=\"activity-list\">\n @for (activity of recentActivity; track activity) {\n <div class=\"activity-item\" (click)=\"onActivityClick(activity)\">\n <div class=\"activity-icon\" [ngClass]=\"getActionClass(activity.action)\">\n <i [class]=\"getActionIcon(activity.action)\"></i>\n </div>\n <div class=\"activity-info\">\n <div class=\"activity-name\">{{activity.credentialName}}</div>\n <div class=\"activity-meta\">\n <span class=\"activity-type\">{{activity.typeName}}</span>\n <span class=\"activity-action\">{{activity.action}}</span>\n @if (activity.user) {\n <span class=\"activity-user\">by {{activity.user}}</span>\n }\n </div>\n </div>\n <div class=\"activity-time\">\n {{formatDate(activity.date)}}\n </div>\n </div>\n }\n </div>\n }\n @if (recentActivity.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent activity</span>\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Quick Actions -->\n @if (UserCanCreateCredentials) {\n <div class=\"quick-actions\">\n <div class=\"quick-actions-title\">Quick Actions</div>\n <div class=\"quick-actions-grid\">\n <button class=\"quick-action\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Add Credential</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllTypes()\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>Manage Types</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllCategories()\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n <span>Categories</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAuditLog()\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n <span>Audit Log</span>\n </button>\n </div>\n </div>\n }\n <!-- Security Notice -->\n <div class=\"security-notice\">\n <i class=\"fa-solid fa-shield-check\"></i>\n <div class=\"notice-content\">\n <strong>Security Note:</strong> All credential values are encrypted.\n Access to credentials is logged in the audit trail for compliance and security monitoring.\n </div>\n </div>\n }\n</div>\n", styles: [".overview-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n/* Header */\n.overview-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left {\n flex: 1;\n}\n\n.overview-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 4px 0;\n}\n\n.overview-subtitle {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.btn-refresh {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-refresh:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.btn-refresh i {\n color: var(--mj-text-secondary);\n}\n\n.btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Health Banner */\n.health-banner {\n display: flex;\n align-items: center;\n padding: 20px 24px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n border-radius: 16px;\n margin-bottom: 24px;\n}\n\n.health-banner.health-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.health-banner.health-critical {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.health-score-container {\n margin-right: 24px;\n}\n\n.health-score-ring {\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.circular-chart {\n display: block;\n margin: 0 auto;\n max-height: 80px;\n transform: rotate(-90deg);\n}\n\n.circle-bg {\n fill: none;\n stroke: var(--mj-border-default);\n stroke-width: 3.8;\n}\n\n.circle {\n fill: none;\n stroke-width: 3.8;\n stroke-linecap: round;\n stroke: var(--mj-status-success);\n animation: progress 1s ease-out forwards;\n}\n\n.health-banner.health-warning .circle {\n stroke: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .circle {\n stroke: var(--mj-status-error);\n}\n\n@keyframes progress {\n 0% {\n stroke-dasharray: 0 100;\n }\n}\n\n.health-score-value {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.health-info {\n flex: 1;\n}\n\n.health-label {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-status-success);\n margin-bottom: 4px;\n}\n\n.health-banner.health-warning .health-label {\n color: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .health-label {\n color: var(--mj-status-error);\n}\n\n.health-details {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.health-alert {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-error);\n font-weight: 500;\n font-size: 14px;\n}\n\n.health-warning-text {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-warning);\n font-weight: 500;\n font-size: 14px;\n cursor: pointer;\n}\n\n.health-warning-text:hover {\n text-decoration: underline;\n}\n\n.health-ok {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-success);\n font-weight: 500;\n font-size: 14px;\n}\n\n/* KPI Cards */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.kpi-card.clickable {\n cursor: pointer;\n}\n\n.kpi-card.clickable:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.kpi-card.active .kpi-icon {\n background: var(--mj-status-success);\n}\n\n.kpi-card.warning .kpi-icon {\n background: var(--mj-status-warning);\n}\n\n.kpi-card.danger .kpi-icon {\n background: var(--mj-status-error);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-right: 14px;\n flex-shrink: 0;\n}\n\n.kpi-icon i {\n font-size: 20px;\n color: var(--mj-text-inverse);\n}\n\n.kpi-content {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.kpi-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n}\n\n.kpi-trend {\n display: flex;\n align-items: center;\n margin-left: 8px;\n color: var(--mj-text-disabled);\n}\n\n.kpi-trend.success {\n color: var(--mj-status-success);\n}\n\n.kpi-trend.warning {\n color: var(--mj-status-warning);\n}\n\n.kpi-trend .percentage {\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Content Grid */\n.content-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.category-panel {\n grid-row: span 2;\n}\n\n.panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.panel-title i {\n color: var(--mj-brand-primary);\n}\n\n.panel-subtitle {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.panel-action {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.panel-action:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.panel-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Category Chart */\n.category-chart {\n display: flex;\n flex-direction: column;\n gap: 24px;\n height: 100%;\n}\n\n.donut-chart-container {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n}\n\n.donut-chart {\n width: 100%;\n height: 100%;\n transform: rotate(-90deg);\n}\n\n.donut-segment {\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.donut-segment:hover {\n opacity: 0.8;\n}\n\n.donut-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}\n\n.donut-total {\n font-size: 32px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.donut-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Category Legend */\n.category-legend {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.legend-item:hover {\n background: var(--mj-bg-surface-sunken);\n transform: translateX(4px);\n}\n\n.legend-color {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.legend-info {\n flex: 1;\n}\n\n.legend-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.legend-name i {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-value {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-arrow {\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n/* Type List */\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-category {\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n}\n\n.type-stats {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n margin-left: 16px;\n}\n\n.type-count {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.count-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.type-bar {\n width: 100px;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.type-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.type-indicators {\n display: flex;\n gap: 8px;\n}\n\n.indicator {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n}\n\n.indicator.active {\n color: var(--mj-status-success);\n}\n\n.indicator.warning {\n color: var(--mj-status-warning);\n}\n\n.indicator i {\n font-size: 6px;\n}\n\n/* Activity List */\n.activity-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.activity-item {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.activity-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.activity-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.activity-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-created i {\n color: var(--mj-status-success);\n}\n\n.activity-icon.action-updated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-updated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-accessed {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-accessed i {\n color: var(--mj-status-warning);\n}\n\n.activity-icon.action-rotated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-rotated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-info {\n flex: 1;\n min-width: 0;\n}\n\n.activity-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.activity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.activity-type {\n background: var(--mj-border-default);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n.activity-action {\n font-weight: 500;\n}\n\n.activity-time {\n font-size: 11px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n/* Quick Actions */\n.quick-actions {\n margin-bottom: 24px;\n}\n\n.quick-actions-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 12px;\n}\n\n.quick-actions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n}\n\n.quick-action {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.quick-action:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n transform: translateY(-2px);\n}\n\n.quick-action i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.quick-action span {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n/* Security Notice */\n.security-notice {\n display: flex;\n align-items: flex-start;\n padding: 16px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.security-notice i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n margin-right: 12px;\n margin-top: 2px;\n}\n\n.notice-content {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.notice-content strong {\n font-weight: 600;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .content-grid {\n grid-template-columns: 1fr;\n }\n\n .category-panel {\n grid-row: auto;\n }\n\n .category-chart {\n flex-direction: row;\n align-items: center;\n }\n\n .donut-chart-container {\n width: 160px;\n height: 160px;\n }\n\n .category-legend {\n flex: 1;\n }\n}\n\n@media (max-width: 768px) {\n .overview-container {\n padding: 16px;\n }\n\n .overview-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: flex-end;\n }\n\n .health-banner {\n flex-direction: column;\n text-align: center;\n }\n\n .health-score-container {\n margin-right: 0;\n margin-bottom: 16px;\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .category-chart {\n flex-direction: column;\n }\n\n .quick-actions-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n"] }]
929
+ args: [{ standalone: false, selector: 'mj-credentials-overview-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Credential Overview\"\n Icon=\"fa-solid fa-chart-pie\"\n Subtitle=\"Monitor and manage your organization's credentials\">\n <div actions>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreateCredentials) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading overview...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Health Score Banner -->\n <div class=\"health-banner\" [ngClass]=\"getHealthClass()\">\n <div class=\"health-score-container\">\n <div class=\"health-score-ring\">\n <svg viewBox=\"0 0 36 36\" class=\"circular-chart\">\n <path class=\"circle-bg\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n <path class=\"circle\"\n [attr.stroke-dasharray]=\"getHealthScore() + ', 100'\"\n d=\"M18 2.0845\n a 15.9155 15.9155 0 0 1 0 31.831\n a 15.9155 15.9155 0 0 1 0 -31.831\"\n />\n </svg>\n <div class=\"health-score-value\">{{getHealthScore()}}</div>\n </div>\n </div>\n <div class=\"health-info\">\n <div class=\"health-label\">{{getHealthLabel()}}</div>\n <div class=\"health-details\">\n @if (expiredCredentials > 0) {\n <span class=\"health-alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{expiredCredentials}} expired\n </span>\n }\n @if (expiringSoonCount > 0) {\n <span class=\"health-warning-text\" (click)=\"viewExpiringCredentials()\">\n <i class=\"fa-solid fa-clock\"></i>\n {{expiringSoonCount}} expiring soon\n </span>\n }\n @if (expiredCredentials === 0 && expiringSoonCount === 0) {\n <span class=\"health-ok\">\n <i class=\"fa-solid fa-check-circle\"></i>\n All credentials healthy\n </span>\n }\n </div>\n </div>\n </div>\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{totalCredentials}}</div>\n <div class=\"kpi-label\">Total Credentials</div>\n </div>\n <div class=\"kpi-trend\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"kpi-card active clickable\" (click)=\"viewAllCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{activeCredentials}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n <div class=\"kpi-trend success\">\n <span class=\"percentage\">{{totalCredentials > 0 ? (activeCredentials / totalCredentials * 100).toFixed(0) : 0}}%</span>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-cubes\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{credentialTypes}}</div>\n <div class=\"kpi-label\">Types</div>\n </div>\n </div>\n <div class=\"kpi-card clickable\" [class.warning]=\"expiringSoonCount > 0\" (click)=\"viewExpiringCredentials()\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiringSoonCount}}</div>\n <div class=\"kpi-label\">Expiring Soon</div>\n </div>\n @if (expiringSoonCount > 0) {\n <div class=\"kpi-trend warning\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n }\n </div>\n <div class=\"kpi-card\" [class.danger]=\"expiredCredentials > 0\">\n <div class=\"kpi-icon\">\n <i class=\"fa-solid fa-circle-xmark\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{expiredCredentials}}</div>\n <div class=\"kpi-label\">Expired</div>\n </div>\n </div>\n </div>\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Distribution Chart -->\n <div class=\"panel category-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-chart-pie\"></i>\n <span>Credentials by Category</span>\n </div>\n <span class=\"panel-subtitle\">Click to filter by category</span>\n </div>\n <div class=\"panel-body\">\n @if (categoryStats.length > 0) {\n <div class=\"category-chart\">\n <!-- Visual Donut Chart -->\n <div class=\"donut-chart-container\">\n <svg viewBox=\"0 0 100 100\" class=\"donut-chart\">\n <circle cx=\"50\" cy=\"50\" r=\"40\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"12\"/>\n @for (stat of categoryStats; track stat; let i = $index) {\n <ng-container>\n <circle\n cx=\"50\" cy=\"50\" r=\"40\"\n fill=\"none\"\n [attr.stroke]=\"stat.color\"\n stroke-width=\"12\"\n [attr.stroke-dasharray]=\"stat.percentage * 2.51 + ' ' + (251 - stat.percentage * 2.51)\"\n [attr.stroke-dashoffset]=\"getDonutOffset(i)\"\n class=\"donut-segment\"\n (click)=\"onCategoryClick(stat)\"\n />\n </ng-container>\n }\n </svg>\n <div class=\"donut-center\">\n <div class=\"donut-total\">{{totalCredentials}}</div>\n <div class=\"donut-label\">Total</div>\n </div>\n </div>\n <!-- Legend -->\n <div class=\"category-legend\">\n @for (stat of categoryStats; track stat) {\n <div class=\"legend-item\" (click)=\"onCategoryClick(stat)\">\n <div class=\"legend-color\" [style.backgroundColor]=\"stat.color\"></div>\n <div class=\"legend-info\">\n <div class=\"legend-name\">\n <i [class]=\"stat.iconClass\"></i>\n {{stat.category}}\n </div>\n <div class=\"legend-value\">{{stat.count}} ({{stat.percentage}}%)</div>\n </div>\n <i class=\"fa-solid fa-chevron-right legend-arrow\"></i>\n </div>\n }\n </div>\n </div>\n }\n @if (categoryStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>No credentials configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Types Breakdown -->\n <div class=\"panel types-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-cubes\"></i>\n <span>Top Credential Types</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAllTypes()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (typeStats.length > 0) {\n <div class=\"type-list\">\n @for (type of typeStats.slice(0, 6); track type) {\n <div class=\"type-item\" (click)=\"onTypeClick(type)\">\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.typeName}}</div>\n <div class=\"type-category\">{{type.category}}</div>\n </div>\n <div class=\"type-stats\">\n <div class=\"type-count\">\n <span class=\"count-value\">{{type.credentialCount}}</span>\n <span class=\"count-label\">credentials</span>\n </div>\n <div class=\"type-bar\">\n <div class=\"type-bar-fill\"\n [style.width.%]=\"totalCredentials > 0 ? (type.credentialCount / totalCredentials * 100) : 0\">\n </div>\n </div>\n <div class=\"type-indicators\">\n @if (type.activeCount > 0) {\n <span class=\"indicator active\" title=\"Active\">\n <i class=\"fa-solid fa-circle\"></i> {{type.activeCount}}\n </span>\n }\n @if (type.expiringCount > 0) {\n <span class=\"indicator warning\" title=\"Expiring Soon\">\n <i class=\"fa-solid fa-clock\"></i> {{type.expiringCount}}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (typeStats.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>No credential types configured</span>\n </div>\n }\n </div>\n </div>\n <!-- Recent Activity -->\n <div class=\"panel activity-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Recent Activity</span>\n </div>\n <button class=\"panel-action\" (click)=\"viewAuditLog()\">\n View All <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n </div>\n <div class=\"panel-body\">\n @if (recentActivity.length > 0) {\n <div class=\"activity-list\">\n @for (activity of recentActivity; track activity) {\n <div class=\"activity-item\" (click)=\"onActivityClick(activity)\">\n <div class=\"activity-icon\" [ngClass]=\"getActionClass(activity.action)\">\n <i [class]=\"getActionIcon(activity.action)\"></i>\n </div>\n <div class=\"activity-info\">\n <div class=\"activity-name\">{{activity.credentialName}}</div>\n <div class=\"activity-meta\">\n <span class=\"activity-type\">{{activity.typeName}}</span>\n <span class=\"activity-action\">{{activity.action}}</span>\n @if (activity.user) {\n <span class=\"activity-user\">by {{activity.user}}</span>\n }\n </div>\n </div>\n <div class=\"activity-time\">\n {{formatDate(activity.date)}}\n </div>\n </div>\n }\n </div>\n }\n @if (recentActivity.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent activity</span>\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Quick Actions -->\n @if (UserCanCreateCredentials) {\n <div class=\"quick-actions\">\n <div class=\"quick-actions-title\">Quick Actions</div>\n <div class=\"quick-actions-grid\">\n <button class=\"quick-action\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Add Credential</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllTypes()\">\n <i class=\"fa-solid fa-shapes\"></i>\n <span>Manage Types</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAllCategories()\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n <span>Categories</span>\n </button>\n <button class=\"quick-action\" (click)=\"viewAuditLog()\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n <span>Audit Log</span>\n </button>\n </div>\n </div>\n }\n <!-- Security Notice -->\n <div class=\"security-notice\">\n <i class=\"fa-solid fa-shield-check\"></i>\n <div class=\"notice-content\">\n <strong>Security Note:</strong> All credential values are encrypted.\n Access to credentials is logged in the audit trail for compliance and security monitoring.\n </div>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Health Banner */\n.health-banner {\n display: flex;\n align-items: center;\n padding: 20px 24px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n border-radius: 16px;\n margin-bottom: 24px;\n}\n\n.health-banner.health-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.health-banner.health-critical {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.health-score-container {\n margin-right: 24px;\n}\n\n.health-score-ring {\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.circular-chart {\n display: block;\n margin: 0 auto;\n max-height: 80px;\n transform: rotate(-90deg);\n}\n\n.circle-bg {\n fill: none;\n stroke: var(--mj-border-default);\n stroke-width: 3.8;\n}\n\n.circle {\n fill: none;\n stroke-width: 3.8;\n stroke-linecap: round;\n stroke: var(--mj-status-success);\n animation: progress 1s ease-out forwards;\n}\n\n.health-banner.health-warning .circle {\n stroke: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .circle {\n stroke: var(--mj-status-error);\n}\n\n@keyframes progress {\n 0% {\n stroke-dasharray: 0 100;\n }\n}\n\n.health-score-value {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.health-info {\n flex: 1;\n}\n\n.health-label {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-status-success);\n margin-bottom: 4px;\n}\n\n.health-banner.health-warning .health-label {\n color: var(--mj-status-warning);\n}\n\n.health-banner.health-critical .health-label {\n color: var(--mj-status-error);\n}\n\n.health-details {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.health-alert {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-error);\n font-weight: 500;\n font-size: 14px;\n}\n\n.health-warning-text {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-warning);\n font-weight: 500;\n font-size: 14px;\n cursor: pointer;\n}\n\n.health-warning-text:hover {\n text-decoration: underline;\n}\n\n.health-ok {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-status-success);\n font-weight: 500;\n font-size: 14px;\n}\n\n/* KPI Cards */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.kpi-card.clickable {\n cursor: pointer;\n}\n\n.kpi-card.clickable:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.kpi-card.active .kpi-icon {\n background: var(--mj-status-success);\n}\n\n.kpi-card.warning .kpi-icon {\n background: var(--mj-status-warning);\n}\n\n.kpi-card.danger .kpi-icon {\n background: var(--mj-status-error);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-right: 14px;\n flex-shrink: 0;\n}\n\n.kpi-icon i {\n font-size: 20px;\n color: var(--mj-text-inverse);\n}\n\n.kpi-content {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.kpi-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n}\n\n.kpi-trend {\n display: flex;\n align-items: center;\n margin-left: 8px;\n color: var(--mj-text-disabled);\n}\n\n.kpi-trend.success {\n color: var(--mj-status-success);\n}\n\n.kpi-trend.warning {\n color: var(--mj-status-warning);\n}\n\n.kpi-trend .percentage {\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Content Grid */\n.content-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.category-panel {\n grid-row: span 2;\n}\n\n.panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.panel-title i {\n color: var(--mj-brand-primary);\n}\n\n.panel-subtitle {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.panel-action {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.panel-action:hover {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.panel-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Category Chart */\n.category-chart {\n display: flex;\n flex-direction: column;\n gap: 24px;\n height: 100%;\n}\n\n.donut-chart-container {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n}\n\n.donut-chart {\n width: 100%;\n height: 100%;\n transform: rotate(-90deg);\n}\n\n.donut-segment {\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.donut-segment:hover {\n opacity: 0.8;\n}\n\n.donut-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n}\n\n.donut-total {\n font-size: 32px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.donut-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n/* Category Legend */\n.category-legend {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.legend-item:hover {\n background: var(--mj-bg-surface-sunken);\n transform: translateX(4px);\n}\n\n.legend-color {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.legend-info {\n flex: 1;\n}\n\n.legend-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.legend-name i {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-value {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.legend-arrow {\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n/* Type List */\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-category {\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 2px;\n}\n\n.type-stats {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n margin-left: 16px;\n}\n\n.type-count {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.count-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.count-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.type-bar {\n width: 100px;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.type-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.type-indicators {\n display: flex;\n gap: 8px;\n}\n\n.indicator {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n}\n\n.indicator.active {\n color: var(--mj-status-success);\n}\n\n.indicator.warning {\n color: var(--mj-status-warning);\n}\n\n.indicator i {\n font-size: 6px;\n}\n\n/* Activity List */\n.activity-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.activity-item {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.activity-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.activity-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.activity-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-created {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-created i {\n color: var(--mj-status-success);\n}\n\n.activity-icon.action-updated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-updated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-icon.action-accessed {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-accessed i {\n color: var(--mj-status-warning);\n}\n\n.activity-icon.action-rotated {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.activity-icon.action-rotated i {\n color: var(--mj-brand-primary);\n}\n\n.activity-info {\n flex: 1;\n min-width: 0;\n}\n\n.activity-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.activity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 2px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.activity-type {\n background: var(--mj-border-default);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n.activity-action {\n font-weight: 500;\n}\n\n.activity-time {\n font-size: 11px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n/* Quick Actions */\n.quick-actions {\n margin-bottom: 24px;\n}\n\n.quick-actions-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 12px;\n}\n\n.quick-actions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n}\n\n.quick-action {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.quick-action:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n transform: translateY(-2px);\n}\n\n.quick-action i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.quick-action span {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n/* Security Notice */\n.security-notice {\n display: flex;\n align-items: flex-start;\n padding: 16px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.security-notice i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n margin-right: 12px;\n margin-top: 2px;\n}\n\n.notice-content {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.notice-content strong {\n font-weight: 600;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .content-grid {\n grid-template-columns: 1fr;\n }\n\n .category-panel {\n grid-row: auto;\n }\n\n .category-chart {\n flex-direction: row;\n align-items: center;\n }\n\n .donut-chart-container {\n width: 160px;\n height: 160px;\n }\n\n .category-legend {\n flex: 1;\n }\n}\n\n@media (max-width: 768px) {\n .overview-container {\n padding: 16px;\n }\n\n .overview-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: flex-end;\n }\n\n .health-banner {\n flex-direction: column;\n text-align: center;\n }\n\n .health-score-container {\n margin-right: 0;\n margin-bottom: 16px;\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .category-chart {\n flex-direction: column;\n }\n\n .quick-actions-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n"] }]
936
930
  }], () => [{ type: i0.ChangeDetectorRef }], null); })();
937
931
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsOverviewResourceComponent, { className: "CredentialsOverviewResourceComponent", filePath: "src/Credentials/components/credentials-overview-resource.component.ts", lineNumber: 50 }); })();
938
932
  //# sourceMappingURL=credentials-overview-resource.component.js.map