@memberjunction/ng-dashboards 5.34.1 → 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 (346) 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.js +773 -783
  235. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  236. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  237. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  239. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  241. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.js +420 -393
  243. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  244. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  245. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  249. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  251. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  252. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  253. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  255. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  256. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  257. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.js +587 -608
  259. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  260. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  261. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  263. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  264. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  265. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  266. package/dist/Testing/components/testing-review.component.js +310 -274
  267. package/dist/Testing/components/testing-review.component.js.map +1 -1
  268. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  269. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  271. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  272. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  273. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.js +307 -273
  275. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  276. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  277. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.js +107 -93
  279. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  280. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  281. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  282. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  283. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  285. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  287. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  288. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  289. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  290. package/dist/actions-dashboards.module.d.ts +15 -16
  291. package/dist/actions-dashboards.module.d.ts.map +1 -1
  292. package/dist/actions-dashboards.module.js +34 -11
  293. package/dist/actions-dashboards.module.js.map +1 -1
  294. package/dist/ai-dashboards.module.d.ts +45 -48
  295. package/dist/ai-dashboards.module.d.ts.map +1 -1
  296. package/dist/ai-dashboards.module.js +36 -10
  297. package/dist/ai-dashboards.module.js.map +1 -1
  298. package/dist/archiving-dashboards.module.d.ts +2 -1
  299. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  300. package/dist/archiving-dashboards.module.js +12 -2
  301. package/dist/archiving-dashboards.module.js.map +1 -1
  302. package/dist/communication-dashboards.module.d.ts +2 -1
  303. package/dist/communication-dashboards.module.d.ts.map +1 -1
  304. package/dist/communication-dashboards.module.js +24 -3
  305. package/dist/communication-dashboards.module.js.map +1 -1
  306. package/dist/core-dashboards.module.d.ts +1 -1
  307. package/dist/core-dashboards.module.d.ts.map +1 -1
  308. package/dist/core-dashboards.module.js +31 -1
  309. package/dist/core-dashboards.module.js.map +1 -1
  310. package/dist/credentials-dashboards.module.d.ts +1 -1
  311. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  312. package/dist/credentials-dashboards.module.js +28 -1
  313. package/dist/credentials-dashboards.module.js.map +1 -1
  314. package/dist/lists-dashboards.module.d.ts +1 -1
  315. package/dist/lists-dashboards.module.d.ts.map +1 -1
  316. package/dist/lists-dashboards.module.js +28 -1
  317. package/dist/lists-dashboards.module.js.map +1 -1
  318. package/dist/public-api.d.ts +2 -2
  319. package/dist/public-api.d.ts.map +1 -1
  320. package/dist/public-api.js +3 -3
  321. package/dist/public-api.js.map +1 -1
  322. package/dist/scheduling-dashboards.module.d.ts +1 -1
  323. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  324. package/dist/scheduling-dashboards.module.js +31 -1
  325. package/dist/scheduling-dashboards.module.js.map +1 -1
  326. package/dist/testing-dashboards.module.d.ts +8 -7
  327. package/dist/testing-dashboards.module.d.ts.map +1 -1
  328. package/dist/testing-dashboards.module.js +30 -0
  329. package/dist/testing-dashboards.module.js.map +1 -1
  330. package/package.json +52 -52
  331. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  332. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  333. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  334. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  335. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  336. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  339. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  340. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  342. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  343. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  344. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  346. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"credentials-list-resource.component.js","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-list-resource.component.ts","../../../src/Credentials/components/credentials-list-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ResourceData, MJCredentialEntity, MJCredentialTypeEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CredentialEditPanelComponent } from '@memberjunction/ng-credentials';\ntype ViewMode = 'grid' | 'list';\ntype StatusFilter = '' | 'active' | 'inactive' | 'expired' | 'expiring';\n\n@RegisterClass(BaseResourceComponent, 'CredentialsListResource')\n@Component({\n standalone: false,\n selector: 'mj-credentials-list-resource',\n templateUrl: './credentials-list-resource.component.html',\n styleUrls: ['./credentials-list-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CredentialsListResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public credentials: MJCredentialEntity[] = [];\n public filteredCredentials: MJCredentialEntity[] = [];\n public types: MJCredentialTypeEntity[] = [];\n\n // View state\n public viewMode: ViewMode = 'grid';\n public searchText = '';\n public selectedTypeFilter = '';\n public selectedStatusFilter: StatusFilter = '';\n public showActiveOnly = false;\n\n // Selection for bulk operations\n public selectedCredentials = new Set<string>();\n private _isAllSelected = false;\n\n // Permissions\n private _metadata = this.ProviderToUse;\n private _permissionCache = new Map<string, boolean>();\n\n protected override destroy$ = new Subject<void>();\n\n @ViewChild('editPanel') editPanel!: CredentialEditPanelComponent;\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Credentials';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-key';\n }\n\n // === Permission Checks ===\n public get UserCanCreate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Create');\n }\n\n public get UserCanUpdate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Update');\n }\n\n public get UserCanDelete(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Delete');\n }\n\n private checkEntityPermission(entityName: string, permissionType: 'Create' | 'Read' | 'Update' | 'Delete'): boolean {\n const cacheKey = `${entityName}_${permissionType}`;\n\n if (this._permissionCache.has(cacheKey)) {\n return this._permissionCache.get(cacheKey)!;\n }\n\n try {\n const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);\n if (!entityInfo) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n\n const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);\n let hasPermission = false;\n\n switch (permissionType) {\n case 'Create': hasPermission = userPermissions.CanCreate; break;\n case 'Read': hasPermission = userPermissions.CanRead; break;\n case 'Update': hasPermission = userPermissions.CanUpdate; break;\n case 'Delete': hasPermission = userPermissions.CanDelete; break;\n }\n\n this._permissionCache.set(cacheKey, hasPermission);\n return hasPermission;\n } catch (error) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n const [credResult, typeResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Credentials',\n OrderBy: '__mj_UpdatedAt DESC',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Credential Types',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object'\n }\n ]);\n\n if (credResult.Success) {\n this.credentials = credResult.Results as MJCredentialEntity[];\n }\n\n if (typeResult.Success) {\n this.types = typeResult.Results as MJCredentialTypeEntity[];\n }\n\n this.applyFilters();\n\n } catch (error) {\n console.error('Error loading credentials:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error loading credentials', 'error', 3000);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n\n // Handle navigation params from Data.Configuration (passed via NavigationService)\n this.handleNavigationConfig();\n }\n }\n\n // === Navigation Handling ===\n\n private handleNavigationConfig(): void {\n const config = this.Data?.Configuration;\n if (!config) {\n return;\n }\n\n // Apply filters from navigation config\n if (config.typeId) {\n this.selectedTypeFilter = config.typeId as string;\n this.applyFilters();\n }\n\n if (config.openCreatePanel) {\n // Open create panel (optionally with type/category pre-selected)\n setTimeout(() => {\n if (config.categoryId) {\n this.createNewCredentialWithType(config.typeId as string, config.categoryId as string);\n } else if (config.typeId) {\n this.createNewCredentialWithType(config.typeId as string);\n } else {\n this.createNewCredential();\n }\n }, 100);\n }\n }\n\n // === CRUD Operations ===\n\n public createNewCredential(): void {\n if (this.editPanel) {\n this.editPanel.open(null);\n }\n }\n\n public createNewCredentialWithType(typeId?: string, categoryId?: string): void {\n if (this.editPanel) {\n this.editPanel.open(null, typeId, categoryId);\n }\n }\n\n public editCredential(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.editPanel) {\n this.editPanel.open(credential);\n }\n }\n\n public onCredentialSaved(credential: MJCredentialEntity): void {\n // Check if it's a new credential or update\n const existingIndex = this.credentials.findIndex(c => UUIDsEqual(c.ID, credential.ID));\n if (existingIndex >= 0) {\n // Update existing\n this.credentials[existingIndex] = credential;\n } else {\n // Add new\n this.credentials.unshift(credential);\n }\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public onCredentialDeleted(credentialId: string): void {\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credentialId));\n this.selectedCredentials.delete(credentialId);\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public async deleteCredential(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanDelete) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to delete credentials', 'warning', 3000);\n return;\n }\n\n const confirmed = confirm(`Are you sure you want to delete \"${credential.Name}\"? This action cannot be undone.`);\n if (!confirmed) return;\n\n try {\n const success = await credential.Delete();\n if (success) {\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" deleted successfully`, 'success', 3000);\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credential.ID));\n this.selectedCredentials.delete(credential.ID);\n this.applyFilters();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error deleting credential:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error deleting credential', 'error', 3000);\n }\n }\n\n public async toggleCredentialActive(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanUpdate) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to update credentials', 'warning', 3000);\n return;\n }\n\n try {\n credential.IsActive = !credential.IsActive;\n const success = await credential.Save();\n\n if (success) {\n const status = credential.IsActive ? 'activated' : 'deactivated';\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" ${status}`, 'success', 2000);\n this.applyFilters();\n } else {\n // Revert on failure\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Failed to update credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error updating credential:', error);\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Error updating credential', 'error', 3000);\n }\n this.cdr.markForCheck();\n }\n\n // === Selection ===\n\n public toggleSelection(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.selectedCredentials.has(credential.ID)) {\n this.selectedCredentials.delete(credential.ID);\n } else {\n this.selectedCredentials.add(credential.ID);\n }\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n public toggleSelectAll(): void {\n if (this._isAllSelected) {\n this.selectedCredentials.clear();\n } else {\n this.filteredCredentials.forEach(c => this.selectedCredentials.add(c.ID));\n }\n this._isAllSelected = !this._isAllSelected;\n this.cdr.markForCheck();\n }\n\n public isAllSelected(): boolean {\n return this._isAllSelected;\n }\n\n public isSelected(credential: MJCredentialEntity): boolean {\n return this.selectedCredentials.has(credential.ID);\n }\n\n public clearSelection(): void {\n this.selectedCredentials.clear();\n this._isAllSelected = false;\n this.cdr.markForCheck();\n }\n\n private updateAllSelectedState(): void {\n this._isAllSelected = this.filteredCredentials.length > 0 &&\n this.filteredCredentials.every(c => this.selectedCredentials.has(c.ID));\n }\n\n public async deleteSelected(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n const toDelete = Array.from(this.selectedCredentials)\n .map(id => this.credentials.find(c => UUIDsEqual(c.ID, id)))\n .filter((c): c is MJCredentialEntity => c != null);\n\n if (toDelete.length === 0) return;\n\n const tg = await this._metadata.CreateTransactionGroup();\n for (const credential of toDelete) {\n credential.TransactionGroup = tg;\n await credential.Delete();\n }\n\n if (await tg.Submit()) {\n const deletedIds = new Set(toDelete.map(c => c.ID));\n this.credentials = this.credentials.filter(c => !deletedIds.has(c.ID));\n this.selectedCredentials.clear();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `${toDelete.length} credential(s) deleted`,\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete credentials — all changes have been rolled back',\n 'error',\n 3000\n );\n }\n }\n\n // === Filtering ===\n\n public onSearchChange(value: string): void {\n this.searchText = value;\n this.applyFilters();\n }\n\n public onTypeFilterChange(typeId: string): void {\n this.selectedTypeFilter = typeId;\n this.applyFilters();\n }\n\n public onStatusFilterChange(status: StatusFilter): void {\n this.selectedStatusFilter = status;\n this.applyFilters();\n }\n\n public onActiveFilterChange(showActive: boolean): void {\n this.showActiveOnly = showActive;\n this.applyFilters();\n }\n\n public clearFilters(): void {\n this.searchText = '';\n this.selectedTypeFilter = '';\n this.selectedStatusFilter = '';\n this.showActiveOnly = false;\n this.applyFilters();\n }\n\n public get hasActiveFilters(): boolean {\n return this.searchText !== '' ||\n this.selectedTypeFilter !== '' ||\n this.selectedStatusFilter !== '' ||\n this.showActiveOnly;\n }\n\n private applyFilters(): void {\n let filtered = [...this.credentials];\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n\n // Filter by active status\n if (this.showActiveOnly) {\n filtered = filtered.filter(c => c.IsActive);\n }\n\n // Filter by status\n if (this.selectedStatusFilter) {\n filtered = filtered.filter(c => {\n const statusClass = this.getStatusClass(c);\n switch (this.selectedStatusFilter) {\n case 'active': return statusClass === 'active';\n case 'inactive': return statusClass === 'inactive';\n case 'expired': return statusClass === 'expired';\n case 'expiring': return statusClass === 'expiring';\n default: return true;\n }\n });\n }\n\n // Filter by type\n if (this.selectedTypeFilter) {\n filtered = filtered.filter(c => UUIDsEqual(c.CredentialTypeID, this.selectedTypeFilter));\n }\n\n // Filter by search text\n if (this.searchText.trim()) {\n const search = this.searchText.toLowerCase().trim();\n filtered = filtered.filter(c =>\n c.Name.toLowerCase().includes(search) ||\n (c.Description && c.Description.toLowerCase().includes(search)) ||\n (c.CredentialType && c.CredentialType.toLowerCase().includes(search))\n );\n }\n\n this.filteredCredentials = filtered;\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n // === View Mode ===\n\n public setViewMode(mode: ViewMode): void {\n this.viewMode = mode;\n this.cdr.markForCheck();\n }\n\n // === Helpers ===\n\n public getTypeById(typeId: string): MJCredentialTypeEntity | undefined {\n return this.types.find(t => UUIDsEqual(t.ID, typeId));\n }\n\n public getTypesByCategory(): Map<string, MJCredentialTypeEntity[]> {\n const grouped = new Map<string, MJCredentialTypeEntity[]>();\n for (const type of this.types) {\n const category = type.Category;\n if (!grouped.has(category)) {\n grouped.set(category, []);\n }\n grouped.get(category)!.push(type);\n }\n return grouped;\n }\n\n public getStatusClass(credential: MJCredentialEntity): string {\n if (!credential.IsActive) {\n return 'inactive';\n }\n if (credential.ExpiresAt) {\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDays = 30 * 24 * 60 * 60 * 1000;\n if (expiresAt < now) {\n return 'expired';\n }\n if (expiresAt.getTime() - now.getTime() < thirtyDays) {\n return 'expiring';\n }\n }\n return 'active';\n }\n\n public getStatusLabel(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const labels: Record<string, string> = {\n 'active': 'Active',\n 'inactive': 'Inactive',\n 'expired': 'Expired',\n 'expiring': 'Expiring Soon'\n };\n return labels[statusClass] || 'Unknown';\n }\n\n public getStatusIcon(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const icons: Record<string, string> = {\n 'active': 'fa-solid fa-check-circle',\n 'inactive': 'fa-solid fa-minus-circle',\n 'expired': 'fa-solid fa-times-circle',\n 'expiring': 'fa-solid fa-clock'\n };\n return icons[statusClass] || 'fa-solid fa-circle';\n }\n\n public formatDate(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public formatDateTime(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public getTimeAgo(date: Date | null | undefined): string {\n if (!date) return 'Never';\n const now = new Date();\n const then = new Date(date);\n const diffMs = now.getTime() - then.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 30) return `${diffDays}d ago`;\n return this.formatDate(date);\n }\n\n public getTypeIcon(credential: MJCredentialEntity): string {\n const type = this.getTypeById(credential.CredentialTypeID);\n if (!type) return 'fa-solid fa-key';\n\n const iconMap: Record<string, string> = {\n 'AI': 'fa-solid fa-brain',\n 'Communication': 'fa-solid fa-envelope',\n 'Storage': 'fa-solid fa-cloud',\n 'Database': 'fa-solid fa-database',\n 'Authentication': 'fa-solid fa-shield-halved',\n 'Integration': 'fa-solid fa-plug'\n };\n return iconMap[type.Category] || 'fa-solid fa-key';\n }\n\n public refresh(): void {\n this.selectedCredentials.clear();\n this.loadData();\n }\n\n // === Stats ===\n\n public get activeCount(): number {\n return this.credentials.filter(c => c.IsActive).length;\n }\n\n public getActiveCount(): number {\n return this.activeCount;\n }\n\n public get expiringCount(): number {\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return this.credentials.filter(c =>\n c.ExpiresAt &&\n new Date(c.ExpiresAt) >= now &&\n new Date(c.ExpiresAt) <= thirtyDaysFromNow &&\n c.IsActive\n ).length;\n }\n\n public getExpiringSoonCount(): number {\n return this.expiringCount;\n }\n\n public get expiredCount(): number {\n const now = new Date();\n return this.credentials.filter(c =>\n c.ExpiresAt && new Date(c.ExpiresAt) < now\n ).length;\n }\n\n public getExpiredCount(): number {\n return this.expiredCount;\n }\n\n // === Status Helpers ===\n\n public isExpired(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n return new Date(credential.ExpiresAt) < new Date();\n }\n\n public isExpiringSoon(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return expiresAt >= now && expiresAt <= thirtyDaysFromNow;\n }\n\n // === Bulk Operations ===\n\n public async bulkToggleActive(active: boolean): Promise<void> {\n if (!this.UserCanUpdate || this.selectedCredentials.size === 0) return;\n\n const toUpdate: MJCredentialEntity[] = [];\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential && credential.IsActive !== active) {\n toUpdate.push(credential);\n }\n }\n\n const action = active ? 'activated' : 'deactivated';\n\n if (toUpdate.length === 0) {\n this.clearSelection();\n return;\n }\n\n const tg = await this._metadata.CreateTransactionGroup();\n for (const credential of toUpdate) {\n credential.IsActive = active;\n credential.TransactionGroup = tg;\n await credential.Save();\n }\n\n if (await tg.Submit()) {\n this.clearSelection();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `${toUpdate.length} credential(s) ${action}`,\n 'success',\n 3000\n );\n } else {\n // Server rolled back — revert the client-side state to match\n for (const credential of toUpdate) {\n credential.IsActive = !active;\n }\n this.clearSelection();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to ${action.slice(0, -1)} credentials — all changes have been rolled back`,\n 'error',\n 3000\n );\n }\n }\n\n public async bulkDelete(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n const toDelete = Array.from(this.selectedCredentials)\n .map(id => this.credentials.find(c => UUIDsEqual(c.ID, id)))\n .filter((c): c is MJCredentialEntity => c != null);\n\n if (toDelete.length === 0) return;\n\n const tg = await this._metadata.CreateTransactionGroup();\n for (const credential of toDelete) {\n credential.TransactionGroup = tg;\n await credential.Delete();\n }\n\n if (await tg.Submit()) {\n const deletedIds = new Set(toDelete.map(c => c.ID));\n this.credentials = this.credentials.filter(c => !deletedIds.has(c.ID));\n this.clearSelection();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `${toDelete.length} credential(s) deleted`,\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete credentials — all changes have been rolled back',\n 'error',\n 3000\n );\n }\n }\n}\n","<div class=\"list-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header with Stats -->\n <div class=\"list-header\">\n <div class=\"header-info\">\n <h2 class=\"list-title\">Credentials</h2>\n <div class=\"header-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-key\"></i>\n {{credentials.length}} total\n </span>\n <span class=\"stat-item active\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{getActiveCount()}} active\n </span>\n @if (getExpiringSoonCount() > 0) {\n <span class=\"stat-item warning\">\n <i class=\"fa-solid fa-clock\"></i>\n {{getExpiringSoonCount()}} expiring\n </span>\n }\n @if (getExpiredCount() > 0) {\n <span class=\"stat-item danger\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{getExpiredCount()}} expired\n </span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (UserCanCreate) {\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 <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search credentials...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Types</option>\n @for (type of types; track type) {\n <option [value]=\"type.ID\">{{type.Name}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatusFilter\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"expiring\">Expiring Soon</option>\n <option value=\"expired\">Expired</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredCredentials.length}} of {{credentials.length}}\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\">\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n</div>\n"]}
1
+ {"version":3,"file":"credentials-list-resource.component.js","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-list-resource.component.ts","../../../src/Credentials/components/credentials-list-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ResourceData, MJCredentialEntity, MJCredentialTypeEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CredentialEditPanelComponent } from '@memberjunction/ng-credentials';\nimport { FilterFieldConfig, ViewToggleOption } from '@memberjunction/ng-ui-components';\ntype ViewMode = 'grid' | 'list';\ntype StatusFilter = '' | 'active' | 'inactive' | 'expired' | 'expiring';\n\n@RegisterClass(BaseResourceComponent, 'CredentialsListResource')\n@Component({\n standalone: false,\n selector: 'mj-credentials-list-resource',\n templateUrl: './credentials-list-resource.component.html',\n styleUrls: ['./credentials-list-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CredentialsListResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public credentials: MJCredentialEntity[] = [];\n public filteredCredentials: MJCredentialEntity[] = [];\n public types: MJCredentialTypeEntity[] = [];\n\n // View state\n public viewMode: ViewMode = 'grid';\n public searchText = '';\n public selectedTypeFilter = '';\n public selectedStatusFilter: StatusFilter = '';\n public showActiveOnly = false;\n\n // Selection for bulk operations\n public selectedCredentials = new Set<string>();\n private _isAllSelected = false;\n\n // Permissions\n private _metadata = this.ProviderToUse;\n private _permissionCache = new Map<string, boolean>();\n\n protected override destroy$ = new Subject<void>();\n\n @ViewChild('editPanel') editPanel!: CredentialEditPanelComponent;\n\n public readonly viewOptions: ViewToggleOption[] = [\n { key: 'grid', icon: 'fa-solid fa-grip', title: 'Grid view' },\n { key: 'list', icon: 'fa-solid fa-list', title: 'List view' }\n ];\n\n public get FilterFields(): FilterFieldConfig[] {\n const typeOptions = [\n { text: 'All Types', value: '' as const },\n ...this.types.map(t => ({ text: t.Name, value: t.ID as string }))\n ];\n return [\n {\n key: 'typeFilter',\n type: 'dropdown',\n label: 'Type',\n icon: 'fa-solid fa-shapes',\n placeholder: 'All Types',\n filterable: true,\n options: typeOptions\n },\n {\n key: 'statusFilter',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-circle-info',\n placeholder: 'All Statuses',\n options: [\n { text: 'All Statuses', value: '' },\n { text: 'Active', value: 'active' },\n { text: 'Inactive', value: 'inactive' },\n { text: 'Expiring Soon', value: 'expiring' },\n { text: 'Expired', value: 'expired' }\n ]\n }\n ];\n }\n public get FilterValues(): Record<string, unknown> {\n return { typeFilter: this.selectedTypeFilter, statusFilter: this.selectedStatusFilter };\n }\n public get ActiveFilterCount(): number {\n let n = 0;\n if (this.selectedTypeFilter) n++;\n if (this.selectedStatusFilter) n++;\n return n;\n }\n public onFilterValuesChange(v: Record<string, unknown>): void {\n const next = (v ?? {}) as { typeFilter?: string; statusFilter?: StatusFilter };\n if ((next.typeFilter ?? '') !== this.selectedTypeFilter) {\n this.onTypeFilterChange(next.typeFilter ?? '');\n }\n if ((next.statusFilter ?? '') !== this.selectedStatusFilter) {\n this.onStatusFilterChange(next.statusFilter ?? '');\n }\n }\n public resetFilters(): void {\n if (this.selectedTypeFilter) this.onTypeFilterChange('');\n if (this.selectedStatusFilter) this.onStatusFilterChange('');\n }\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Credentials';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-key';\n }\n\n // === Permission Checks ===\n public get UserCanCreate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Create');\n }\n\n public get UserCanUpdate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Update');\n }\n\n public get UserCanDelete(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Delete');\n }\n\n private checkEntityPermission(entityName: string, permissionType: 'Create' | 'Read' | 'Update' | 'Delete'): boolean {\n const cacheKey = `${entityName}_${permissionType}`;\n\n if (this._permissionCache.has(cacheKey)) {\n return this._permissionCache.get(cacheKey)!;\n }\n\n try {\n const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);\n if (!entityInfo) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n\n const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);\n let hasPermission = false;\n\n switch (permissionType) {\n case 'Create': hasPermission = userPermissions.CanCreate; break;\n case 'Read': hasPermission = userPermissions.CanRead; break;\n case 'Update': hasPermission = userPermissions.CanUpdate; break;\n case 'Delete': hasPermission = userPermissions.CanDelete; break;\n }\n\n this._permissionCache.set(cacheKey, hasPermission);\n return hasPermission;\n } catch (error) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n const [credResult, typeResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Credentials',\n OrderBy: '__mj_UpdatedAt DESC',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Credential Types',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object'\n }\n ]);\n\n if (credResult.Success) {\n this.credentials = credResult.Results as MJCredentialEntity[];\n }\n\n if (typeResult.Success) {\n this.types = typeResult.Results as MJCredentialTypeEntity[];\n }\n\n this.applyFilters();\n\n } catch (error) {\n console.error('Error loading credentials:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error loading credentials', 'error', 3000);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n\n // Handle navigation params from Data.Configuration (passed via NavigationService)\n this.handleNavigationConfig();\n }\n }\n\n // === Navigation Handling ===\n\n private handleNavigationConfig(): void {\n const config = this.Data?.Configuration;\n if (!config) {\n return;\n }\n\n // Apply filters from navigation config\n if (config.typeId) {\n this.selectedTypeFilter = config.typeId as string;\n this.applyFilters();\n }\n\n if (config.openCreatePanel) {\n // Open create panel (optionally with type/category pre-selected)\n setTimeout(() => {\n if (config.categoryId) {\n this.createNewCredentialWithType(config.typeId as string, config.categoryId as string);\n } else if (config.typeId) {\n this.createNewCredentialWithType(config.typeId as string);\n } else {\n this.createNewCredential();\n }\n }, 100);\n }\n }\n\n // === CRUD Operations ===\n\n public createNewCredential(): void {\n if (this.editPanel) {\n this.editPanel.open(null);\n }\n }\n\n public createNewCredentialWithType(typeId?: string, categoryId?: string): void {\n if (this.editPanel) {\n this.editPanel.open(null, typeId, categoryId);\n }\n }\n\n public editCredential(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.editPanel) {\n this.editPanel.open(credential);\n }\n }\n\n public onCredentialSaved(credential: MJCredentialEntity): void {\n // Check if it's a new credential or update\n const existingIndex = this.credentials.findIndex(c => UUIDsEqual(c.ID, credential.ID));\n if (existingIndex >= 0) {\n // Update existing\n this.credentials[existingIndex] = credential;\n } else {\n // Add new\n this.credentials.unshift(credential);\n }\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public onCredentialDeleted(credentialId: string): void {\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credentialId));\n this.selectedCredentials.delete(credentialId);\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public async deleteCredential(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanDelete) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to delete credentials', 'warning', 3000);\n return;\n }\n\n const confirmed = confirm(`Are you sure you want to delete \"${credential.Name}\"? This action cannot be undone.`);\n if (!confirmed) return;\n\n try {\n const success = await credential.Delete();\n if (success) {\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" deleted successfully`, 'success', 3000);\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credential.ID));\n this.selectedCredentials.delete(credential.ID);\n this.applyFilters();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error deleting credential:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error deleting credential', 'error', 3000);\n }\n }\n\n public async toggleCredentialActive(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanUpdate) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to update credentials', 'warning', 3000);\n return;\n }\n\n try {\n credential.IsActive = !credential.IsActive;\n const success = await credential.Save();\n\n if (success) {\n const status = credential.IsActive ? 'activated' : 'deactivated';\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" ${status}`, 'success', 2000);\n this.applyFilters();\n } else {\n // Revert on failure\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Failed to update credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error updating credential:', error);\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Error updating credential', 'error', 3000);\n }\n this.cdr.markForCheck();\n }\n\n // === Selection ===\n\n public toggleSelection(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.selectedCredentials.has(credential.ID)) {\n this.selectedCredentials.delete(credential.ID);\n } else {\n this.selectedCredentials.add(credential.ID);\n }\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n public toggleSelectAll(): void {\n if (this._isAllSelected) {\n this.selectedCredentials.clear();\n } else {\n this.filteredCredentials.forEach(c => this.selectedCredentials.add(c.ID));\n }\n this._isAllSelected = !this._isAllSelected;\n this.cdr.markForCheck();\n }\n\n public isAllSelected(): boolean {\n return this._isAllSelected;\n }\n\n public isSelected(credential: MJCredentialEntity): boolean {\n return this.selectedCredentials.has(credential.ID);\n }\n\n public clearSelection(): void {\n this.selectedCredentials.clear();\n this._isAllSelected = false;\n this.cdr.markForCheck();\n }\n\n private updateAllSelectedState(): void {\n this._isAllSelected = this.filteredCredentials.length > 0 &&\n this.filteredCredentials.every(c => this.selectedCredentials.has(c.ID));\n }\n\n public async deleteSelected(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n const toDelete = Array.from(this.selectedCredentials)\n .map(id => this.credentials.find(c => UUIDsEqual(c.ID, id)))\n .filter((c): c is MJCredentialEntity => c != null);\n\n if (toDelete.length === 0) return;\n\n const tg = await this._metadata.CreateTransactionGroup();\n for (const credential of toDelete) {\n credential.TransactionGroup = tg;\n await credential.Delete();\n }\n\n if (await tg.Submit()) {\n const deletedIds = new Set(toDelete.map(c => c.ID));\n this.credentials = this.credentials.filter(c => !deletedIds.has(c.ID));\n this.selectedCredentials.clear();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `${toDelete.length} credential(s) deleted`,\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete credentials — all changes have been rolled back',\n 'error',\n 3000\n );\n }\n }\n\n // === Filtering ===\n\n public onSearchChange(value: string): void {\n this.searchText = value;\n this.applyFilters();\n }\n\n public onTypeFilterChange(typeId: string): void {\n this.selectedTypeFilter = typeId;\n this.applyFilters();\n }\n\n public onStatusFilterChange(status: StatusFilter): void {\n this.selectedStatusFilter = status;\n this.applyFilters();\n }\n\n public onActiveFilterChange(showActive: boolean): void {\n this.showActiveOnly = showActive;\n this.applyFilters();\n }\n\n public clearFilters(): void {\n this.searchText = '';\n this.selectedTypeFilter = '';\n this.selectedStatusFilter = '';\n this.showActiveOnly = false;\n this.applyFilters();\n }\n\n public get hasActiveFilters(): boolean {\n return this.searchText !== '' ||\n this.selectedTypeFilter !== '' ||\n this.selectedStatusFilter !== '' ||\n this.showActiveOnly;\n }\n\n private applyFilters(): void {\n let filtered = [...this.credentials];\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n\n // Filter by active status\n if (this.showActiveOnly) {\n filtered = filtered.filter(c => c.IsActive);\n }\n\n // Filter by status\n if (this.selectedStatusFilter) {\n filtered = filtered.filter(c => {\n const statusClass = this.getStatusClass(c);\n switch (this.selectedStatusFilter) {\n case 'active': return statusClass === 'active';\n case 'inactive': return statusClass === 'inactive';\n case 'expired': return statusClass === 'expired';\n case 'expiring': return statusClass === 'expiring';\n default: return true;\n }\n });\n }\n\n // Filter by type\n if (this.selectedTypeFilter) {\n filtered = filtered.filter(c => UUIDsEqual(c.CredentialTypeID, this.selectedTypeFilter));\n }\n\n // Filter by search text\n if (this.searchText.trim()) {\n const search = this.searchText.toLowerCase().trim();\n filtered = filtered.filter(c =>\n c.Name.toLowerCase().includes(search) ||\n (c.Description && c.Description.toLowerCase().includes(search)) ||\n (c.CredentialType && c.CredentialType.toLowerCase().includes(search))\n );\n }\n\n this.filteredCredentials = filtered;\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n // === View Mode ===\n\n public setViewMode(mode: ViewMode): void {\n this.viewMode = mode;\n this.cdr.markForCheck();\n }\n\n // === Helpers ===\n\n public getTypeById(typeId: string): MJCredentialTypeEntity | undefined {\n return this.types.find(t => UUIDsEqual(t.ID, typeId));\n }\n\n public getTypesByCategory(): Map<string, MJCredentialTypeEntity[]> {\n const grouped = new Map<string, MJCredentialTypeEntity[]>();\n for (const type of this.types) {\n const category = type.Category;\n if (!grouped.has(category)) {\n grouped.set(category, []);\n }\n grouped.get(category)!.push(type);\n }\n return grouped;\n }\n\n public getStatusClass(credential: MJCredentialEntity): string {\n if (!credential.IsActive) {\n return 'inactive';\n }\n if (credential.ExpiresAt) {\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDays = 30 * 24 * 60 * 60 * 1000;\n if (expiresAt < now) {\n return 'expired';\n }\n if (expiresAt.getTime() - now.getTime() < thirtyDays) {\n return 'expiring';\n }\n }\n return 'active';\n }\n\n public getStatusLabel(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const labels: Record<string, string> = {\n 'active': 'Active',\n 'inactive': 'Inactive',\n 'expired': 'Expired',\n 'expiring': 'Expiring Soon'\n };\n return labels[statusClass] || 'Unknown';\n }\n\n public getStatusIcon(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const icons: Record<string, string> = {\n 'active': 'fa-solid fa-check-circle',\n 'inactive': 'fa-solid fa-minus-circle',\n 'expired': 'fa-solid fa-times-circle',\n 'expiring': 'fa-solid fa-clock'\n };\n return icons[statusClass] || 'fa-solid fa-circle';\n }\n\n public formatDate(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public formatDateTime(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public getTimeAgo(date: Date | null | undefined): string {\n if (!date) return 'Never';\n const now = new Date();\n const then = new Date(date);\n const diffMs = now.getTime() - then.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 30) return `${diffDays}d ago`;\n return this.formatDate(date);\n }\n\n public getTypeIcon(credential: MJCredentialEntity): string {\n const type = this.getTypeById(credential.CredentialTypeID);\n if (!type) return 'fa-solid fa-key';\n\n const iconMap: Record<string, string> = {\n 'AI': 'fa-solid fa-brain',\n 'Communication': 'fa-solid fa-envelope',\n 'Storage': 'fa-solid fa-cloud',\n 'Database': 'fa-solid fa-database',\n 'Authentication': 'fa-solid fa-shield-halved',\n 'Integration': 'fa-solid fa-plug'\n };\n return iconMap[type.Category] || 'fa-solid fa-key';\n }\n\n public refresh(): void {\n this.selectedCredentials.clear();\n this.loadData();\n }\n\n // === Stats ===\n\n public get activeCount(): number {\n return this.credentials.filter(c => c.IsActive).length;\n }\n\n public getActiveCount(): number {\n return this.activeCount;\n }\n\n public get expiringCount(): number {\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return this.credentials.filter(c =>\n c.ExpiresAt &&\n new Date(c.ExpiresAt) >= now &&\n new Date(c.ExpiresAt) <= thirtyDaysFromNow &&\n c.IsActive\n ).length;\n }\n\n public getExpiringSoonCount(): number {\n return this.expiringCount;\n }\n\n public get expiredCount(): number {\n const now = new Date();\n return this.credentials.filter(c =>\n c.ExpiresAt && new Date(c.ExpiresAt) < now\n ).length;\n }\n\n public getExpiredCount(): number {\n return this.expiredCount;\n }\n\n // === Status Helpers ===\n\n public isExpired(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n return new Date(credential.ExpiresAt) < new Date();\n }\n\n public isExpiringSoon(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return expiresAt >= now && expiresAt <= thirtyDaysFromNow;\n }\n\n // === Bulk Operations ===\n\n public async bulkToggleActive(active: boolean): Promise<void> {\n if (!this.UserCanUpdate || this.selectedCredentials.size === 0) return;\n\n const toUpdate: MJCredentialEntity[] = [];\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential && credential.IsActive !== active) {\n toUpdate.push(credential);\n }\n }\n\n const action = active ? 'activated' : 'deactivated';\n\n if (toUpdate.length === 0) {\n this.clearSelection();\n return;\n }\n\n const tg = await this._metadata.CreateTransactionGroup();\n for (const credential of toUpdate) {\n credential.IsActive = active;\n credential.TransactionGroup = tg;\n await credential.Save();\n }\n\n if (await tg.Submit()) {\n this.clearSelection();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `${toUpdate.length} credential(s) ${action}`,\n 'success',\n 3000\n );\n } else {\n // Server rolled back — revert the client-side state to match\n for (const credential of toUpdate) {\n credential.IsActive = !active;\n }\n this.clearSelection();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `Failed to ${action.slice(0, -1)} credentials — all changes have been rolled back`,\n 'error',\n 3000\n );\n }\n }\n\n public async bulkDelete(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n const toDelete = Array.from(this.selectedCredentials)\n .map(id => this.credentials.find(c => UUIDsEqual(c.ID, id)))\n .filter((c): c is MJCredentialEntity => c != null);\n\n if (toDelete.length === 0) return;\n\n const tg = await this._metadata.CreateTransactionGroup();\n for (const credential of toDelete) {\n credential.TransactionGroup = tg;\n await credential.Delete();\n }\n\n if (await tg.Submit()) {\n const deletedIds = new Set(toDelete.map(c => c.ID));\n this.credentials = this.credentials.filter(c => !deletedIds.has(c.ID));\n this.clearSelection();\n this.applyFilters();\n MJNotificationService.Instance.CreateSimpleNotification(\n `${toDelete.length} credential(s) deleted`,\n 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to delete credentials — all changes have been rolled back',\n 'error',\n 3000\n );\n }\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Credentials\"\n Icon=\"fa-solid fa-key\">\n <div meta>\n <mj-stat-badge\n [Count]=\"filteredCredentials.length\"\n [Total]=\"credentials.length\"\n Label=\"credentials\">\n </mj-stat-badge>\n @if (getExpiringSoonCount() > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-clock\"\n [Count]=\"getExpiringSoonCount()\"\n Label=\"expiring\"\n Variant=\"warning\">\n </mj-stat-badge>\n }\n @if (getExpiredCount() > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-exclamation-circle\"\n [Count]=\"getExpiredCount()\"\n Label=\"expired\"\n Variant=\"error\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-view-toggle\n [Options]=\"viewOptions\"\n [ActiveKey]=\"viewMode\"\n (KeyChange)=\"setViewMode($any($event))\">\n </mj-view-toggle>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\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 <div toolbar>\n <mj-page-search\n Placeholder=\"Search credentials...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\">\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n </mj-page-body>\n</mj-page-layout>\n"]}