@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
@@ -12,610 +12,492 @@ import { RunView } from '@memberjunction/core';
12
12
  import { MJNotificationService } from '@memberjunction/ng-notifications';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@angular/common";
15
- import * as i2 from "@angular/forms";
16
- import * as i3 from "@memberjunction/ng-ui-components";
17
- import * as i4 from "@memberjunction/ng-shared-generic";
18
- import * as i5 from "@memberjunction/ng-credentials";
15
+ import * as i2 from "@memberjunction/ng-ui-components";
16
+ import * as i3 from "@memberjunction/ng-shared-generic";
17
+ import * as i4 from "@memberjunction/ng-credentials";
19
18
  const _c0 = ["editPanel"];
20
- function CredentialsListResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
21
- i0.ɵɵelement(0, "mj-loading", 2);
22
- } }
23
- function CredentialsListResourceComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵelementStart(0, "span", 12);
25
- i0.ɵɵelement(1, "i", 42);
26
- i0.ɵɵtext(2);
27
- i0.ɵɵelementEnd();
19
+ function CredentialsListResourceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelement(0, "mj-stat-badge", 4);
28
21
  } if (rf & 2) {
29
- const ctx_r2 = i0.ɵɵnextContext(2);
30
- i0.ɵɵadvance(2);
31
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getExpiringSoonCount(), " expiring ");
22
+ const ctx_r1 = i0.ɵɵnextContext();
23
+ i0.ɵɵproperty("Count", ctx_r1.getExpiringSoonCount());
32
24
  } }
33
- function CredentialsListResourceComponent_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "span", 13);
35
- i0.ɵɵelement(1, "i", 43);
36
- i0.ɵɵtext(2);
37
- i0.ɵɵelementEnd();
25
+ function CredentialsListResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelement(0, "mj-stat-badge", 5);
38
27
  } if (rf & 2) {
39
- const ctx_r2 = i0.ɵɵnextContext(2);
40
- i0.ɵɵadvance(2);
41
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getExpiredCount(), " expired ");
42
- } }
43
- function CredentialsListResourceComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
44
- const _r4 = i0.ɵɵgetCurrentView();
45
- i0.ɵɵelementStart(0, "button", 44);
46
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
47
- i0.ɵɵelement(1, "i", 45);
48
- i0.ɵɵelementStart(2, "span");
49
- i0.ɵɵtext(3, "New Credential");
50
- i0.ɵɵelementEnd()();
28
+ const ctx_r1 = i0.ɵɵnextContext();
29
+ i0.ɵɵproperty("Count", ctx_r1.getExpiredCount());
51
30
  } }
52
- function CredentialsListResourceComponent_Conditional_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
53
- const _r5 = i0.ɵɵgetCurrentView();
54
- i0.ɵɵelementStart(0, "button", 46);
55
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onSearchChange("")); });
56
- i0.ɵɵelement(1, "i", 47);
31
+ function CredentialsListResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
32
+ const _r3 = i0.ɵɵgetCurrentView();
33
+ i0.ɵɵelementStart(0, "button", 16);
34
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
35
+ i0.ɵɵelement(1, "i", 17);
36
+ i0.ɵɵtext(2, " New Credential ");
57
37
  i0.ɵɵelementEnd();
58
38
  } }
59
- function CredentialsListResourceComponent_Conditional_2_For_25_Template(rf, ctx) { if (rf & 1) {
60
- i0.ɵɵelementStart(0, "option", 24);
61
- i0.ɵɵtext(1);
62
- i0.ɵɵelementEnd();
63
- } if (rf & 2) {
64
- const type_r6 = ctx.$implicit;
65
- i0.ɵɵproperty("value", type_r6.ID);
66
- i0.ɵɵadvance();
67
- i0.ɵɵtextInterpolate(type_r6.Name);
39
+ function CredentialsListResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelement(0, "mj-loading", 14);
68
41
  } }
69
- function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_7_Template(rf, ctx) { if (rf & 1) {
70
- const _r8 = i0.ɵɵgetCurrentView();
71
- i0.ɵɵelementStart(0, "button", 54);
72
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkToggleActive(true)); });
73
- i0.ɵɵelement(1, "i", 55);
42
+ function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
43
+ const _r5 = i0.ɵɵgetCurrentView();
44
+ i0.ɵɵelementStart(0, "button", 28);
45
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.bulkToggleActive(true)); });
46
+ i0.ɵɵelement(1, "i", 29);
74
47
  i0.ɵɵtext(2, " Activate ");
75
48
  i0.ɵɵelementEnd();
76
49
  } }
77
- function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_8_Template(rf, ctx) { if (rf & 1) {
78
- const _r9 = i0.ɵɵgetCurrentView();
79
- i0.ɵɵelementStart(0, "button", 54);
80
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkToggleActive(false)); });
81
- i0.ɵɵelement(1, "i", 56);
50
+ function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
51
+ const _r6 = i0.ɵɵgetCurrentView();
52
+ i0.ɵɵelementStart(0, "button", 28);
53
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.bulkToggleActive(false)); });
54
+ i0.ɵɵelement(1, "i", 30);
82
55
  i0.ɵɵtext(2, " Deactivate ");
83
56
  i0.ɵɵelementEnd();
84
57
  } }
85
- function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_9_Template(rf, ctx) { if (rf & 1) {
86
- const _r10 = i0.ɵɵgetCurrentView();
87
- i0.ɵɵelementStart(0, "button", 57);
88
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkDelete()); });
89
- i0.ɵɵelement(1, "i", 58);
58
+ function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
59
+ const _r7 = i0.ɵɵgetCurrentView();
60
+ i0.ɵɵelementStart(0, "button", 31);
61
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.bulkDelete()); });
62
+ i0.ɵɵelement(1, "i", 32);
90
63
  i0.ɵɵtext(2, " Delete ");
91
64
  i0.ɵɵelementEnd();
92
65
  } }
93
- function CredentialsListResourceComponent_Conditional_2_Conditional_47_Template(rf, ctx) { if (rf & 1) {
94
- const _r7 = i0.ɵɵgetCurrentView();
95
- i0.ɵɵelementStart(0, "div", 38)(1, "div", 48)(2, "span", 49);
66
+ function CredentialsListResourceComponent_Conditional_16_Conditional_0_Template(rf, ctx) { if (rf & 1) {
67
+ const _r4 = i0.ɵɵgetCurrentView();
68
+ i0.ɵɵelementStart(0, "div", 18)(1, "div", 22)(2, "span", 23);
96
69
  i0.ɵɵtext(3);
97
70
  i0.ɵɵelementEnd();
98
- i0.ɵɵelementStart(4, "button", 50);
99
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.clearSelection()); });
71
+ i0.ɵɵelementStart(4, "button", 24);
72
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.clearSelection()); });
100
73
  i0.ɵɵtext(5, "Clear selection");
101
74
  i0.ɵɵelementEnd()();
102
- i0.ɵɵelementStart(6, "div", 51);
103
- i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_7_Template, 3, 0, "button", 52);
104
- i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_8_Template, 3, 0, "button", 52);
105
- i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_9_Template, 3, 0, "button", 53);
75
+ i0.ɵɵelementStart(6, "div", 25);
76
+ i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template, 3, 0, "button", 26);
77
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template, 3, 0, "button", 26);
78
+ i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template, 3, 0, "button", 27);
106
79
  i0.ɵɵelementEnd()();
107
80
  } if (rf & 2) {
108
- const ctx_r2 = i0.ɵɵnextContext(2);
81
+ const ctx_r1 = i0.ɵɵnextContext(2);
109
82
  i0.ɵɵadvance(3);
110
- i0.ɵɵtextInterpolate1("", ctx_r2.selectedCredentials.size, " selected");
83
+ i0.ɵɵtextInterpolate1("", ctx_r1.selectedCredentials.size, " selected");
111
84
  i0.ɵɵadvance(4);
112
- i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 7 : -1);
85
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 7 : -1);
113
86
  i0.ɵɵadvance();
114
- i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 8 : -1);
87
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 8 : -1);
115
88
  i0.ɵɵadvance();
116
- i0.ɵɵconditional(ctx_r2.UserCanDelete ? 9 : -1);
89
+ i0.ɵɵconditional(ctx_r1.UserCanDelete ? 9 : -1);
117
90
  } }
118
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
119
- const _r12 = i0.ɵɵgetCurrentView();
120
- i0.ɵɵelementStart(0, "div", 61)(1, "input", 80);
121
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r12); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelection(credential_r13)); });
91
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
92
+ const _r9 = i0.ɵɵgetCurrentView();
93
+ i0.ɵɵelementStart(0, "div", 35)(1, "input", 54);
94
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r9); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleSelection(credential_r10)); });
122
95
  i0.ɵɵelementEnd()();
123
96
  } if (rf & 2) {
124
- const credential_r13 = i0.ɵɵnextContext().$implicit;
125
- const ctx_r2 = i0.ɵɵnextContext(3);
97
+ const credential_r10 = i0.ɵɵnextContext().$implicit;
98
+ const ctx_r1 = i0.ɵɵnextContext(3);
126
99
  i0.ɵɵadvance();
127
- i0.ɵɵproperty("checked", ctx_r2.selectedCredentials.has(credential_r13.ID));
100
+ i0.ɵɵproperty("checked", ctx_r1.selectedCredentials.has(credential_r10.ID));
128
101
  } }
129
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
130
- const _r14 = i0.ɵɵgetCurrentView();
131
- i0.ɵɵelementStart(0, "button", 81);
132
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleCredentialActive(credential_r13, $event)); });
102
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
103
+ const _r11 = i0.ɵɵgetCurrentView();
104
+ i0.ɵɵelementStart(0, "button", 55);
105
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCredentialActive(credential_r10, $event)); });
133
106
  i0.ɵɵelement(1, "i");
134
107
  i0.ɵɵelementEnd();
135
108
  } if (rf & 2) {
136
- const credential_r13 = i0.ɵɵnextContext().$implicit;
137
- i0.ɵɵproperty("title", credential_r13.IsActive ? "Deactivate" : "Activate");
109
+ const credential_r10 = i0.ɵɵnextContext().$implicit;
110
+ i0.ɵɵproperty("title", credential_r10.IsActive ? "Deactivate" : "Activate");
138
111
  i0.ɵɵadvance();
139
- i0.ɵɵclassMap(credential_r13.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
112
+ i0.ɵɵclassMap(credential_r10.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
140
113
  } }
141
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
142
- const _r15 = i0.ɵɵgetCurrentView();
143
- i0.ɵɵelementStart(0, "button", 82);
144
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_12_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r13, $event)); });
145
- i0.ɵɵelement(1, "i", 83);
114
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
115
+ const _r12 = i0.ɵɵgetCurrentView();
116
+ i0.ɵɵelementStart(0, "button", 56);
117
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r12); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r10, $event)); });
118
+ i0.ɵɵelement(1, "i", 57);
146
119
  i0.ɵɵelementEnd();
147
120
  } }
148
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
149
- const _r16 = i0.ɵɵgetCurrentView();
150
- i0.ɵɵelementStart(0, "button", 84);
151
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_13_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCredential(credential_r13, $event)); });
152
- i0.ɵɵelement(1, "i", 58);
121
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
122
+ const _r13 = i0.ɵɵgetCurrentView();
123
+ i0.ɵɵelementStart(0, "button", 58);
124
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r13); const credential_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.deleteCredential(credential_r10, $event)); });
125
+ i0.ɵɵelement(1, "i", 32);
153
126
  i0.ɵɵelementEnd();
154
127
  } }
155
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
156
- i0.ɵɵelementStart(0, "p", 73);
128
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
129
+ i0.ɵɵelementStart(0, "p", 47);
157
130
  i0.ɵɵtext(1);
158
131
  i0.ɵɵelementEnd();
159
132
  } if (rf & 2) {
160
- const credential_r13 = i0.ɵɵnextContext().$implicit;
133
+ const credential_r10 = i0.ɵɵnextContext().$implicit;
161
134
  i0.ɵɵadvance();
162
- i0.ɵɵtextInterpolate1(" ", credential_r13.Description, " ");
135
+ i0.ɵɵtextInterpolate1(" ", credential_r10.Description, " ");
163
136
  } }
164
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
165
- i0.ɵɵelementStart(0, "div", 75);
166
- i0.ɵɵelement(1, "i", 85);
137
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "div", 49);
139
+ i0.ɵɵelement(1, "i", 59);
167
140
  i0.ɵɵelementStart(2, "span");
168
141
  i0.ɵɵtext(3, "Default");
169
142
  i0.ɵɵelementEnd()();
170
143
  } }
171
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
172
- i0.ɵɵelementStart(0, "div", 75);
173
- i0.ɵɵelement(1, "i", 86);
144
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
145
+ i0.ɵɵelementStart(0, "div", 49);
146
+ i0.ɵɵelement(1, "i", 60);
174
147
  i0.ɵɵelementStart(2, "span");
175
148
  i0.ɵɵtext(3);
176
149
  i0.ɵɵelementEnd()();
177
150
  } if (rf & 2) {
178
- const credential_r13 = i0.ɵɵnextContext().$implicit;
179
- const ctx_r2 = i0.ɵɵnextContext(3);
180
- i0.ɵɵclassProp("warning", ctx_r2.isExpiringSoon(credential_r13))("danger", ctx_r2.isExpired(credential_r13));
151
+ const credential_r10 = i0.ɵɵnextContext().$implicit;
152
+ const ctx_r1 = i0.ɵɵnextContext(3);
153
+ i0.ɵɵclassProp("warning", ctx_r1.isExpiringSoon(credential_r10))("danger", ctx_r1.isExpired(credential_r10));
181
154
  i0.ɵɵadvance(3);
182
- i0.ɵɵtextInterpolate2("", ctx_r2.isExpired(credential_r13) ? "Expired" : "Expires", ": ", ctx_r2.formatDate(credential_r13.ExpiresAt));
155
+ i0.ɵɵtextInterpolate2("", ctx_r1.isExpired(credential_r10) ? "Expired" : "Expires", ": ", ctx_r1.formatDate(credential_r10.ExpiresAt));
183
156
  } }
184
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
185
- i0.ɵɵelementStart(0, "div", 75);
186
- i0.ɵɵelement(1, "i", 42);
157
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
158
+ i0.ɵɵelementStart(0, "div", 49);
159
+ i0.ɵɵelement(1, "i", 61);
187
160
  i0.ɵɵelementStart(2, "span");
188
161
  i0.ɵɵtext(3);
189
162
  i0.ɵɵelementEnd()();
190
163
  } if (rf & 2) {
191
- const credential_r13 = i0.ɵɵnextContext().$implicit;
192
- const ctx_r2 = i0.ɵɵnextContext(3);
164
+ const credential_r10 = i0.ɵɵnextContext().$implicit;
165
+ const ctx_r1 = i0.ɵɵnextContext(3);
193
166
  i0.ɵɵadvance(3);
194
- i0.ɵɵtextInterpolate1("Last used: ", ctx_r2.formatDate(credential_r13.LastUsedAt));
167
+ i0.ɵɵtextInterpolate1("Last used: ", ctx_r1.formatDate(credential_r10.LastUsedAt));
195
168
  } }
196
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
197
- i0.ɵɵelementStart(0, "div", 78);
198
- i0.ɵɵelement(1, "i", 87);
169
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵelementStart(0, "div", 52);
171
+ i0.ɵɵelement(1, "i", 62);
199
172
  i0.ɵɵtext(2);
200
173
  i0.ɵɵelementEnd();
201
174
  } if (rf & 2) {
202
- const credential_r13 = i0.ɵɵnextContext().$implicit;
175
+ const credential_r10 = i0.ɵɵnextContext().$implicit;
203
176
  i0.ɵɵadvance(2);
204
- i0.ɵɵtextInterpolate1(" ", credential_r13.Category, " ");
177
+ i0.ɵɵtextInterpolate1(" ", credential_r10.Category, " ");
205
178
  } }
206
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Template(rf, ctx) { if (rf & 1) {
207
- const _r11 = i0.ɵɵgetCurrentView();
208
- i0.ɵɵelementStart(0, "div", 60);
209
- i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_1_Template, 2, 1, "div", 61);
210
- i0.ɵɵelementStart(2, "div", 62)(3, "div", 63);
179
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
180
+ const _r8 = i0.ɵɵgetCurrentView();
181
+ i0.ɵɵelementStart(0, "div", 34);
182
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template, 2, 1, "div", 35);
183
+ i0.ɵɵelementStart(2, "div", 36)(3, "div", 37);
211
184
  i0.ɵɵelement(4, "i");
212
185
  i0.ɵɵelementEnd();
213
- i0.ɵɵelementStart(5, "div", 64)(6, "div", 65);
186
+ i0.ɵɵelementStart(5, "div", 38)(6, "div", 39);
214
187
  i0.ɵɵtext(7);
215
188
  i0.ɵɵelementEnd();
216
- i0.ɵɵelementStart(8, "div", 66);
189
+ i0.ɵɵelementStart(8, "div", 40);
217
190
  i0.ɵɵtext(9);
218
191
  i0.ɵɵelementEnd()();
219
- i0.ɵɵelementStart(10, "div", 67);
220
- i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_11_Template, 2, 3, "button", 68);
221
- i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_12_Template, 2, 0, "button", 69);
222
- i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_13_Template, 2, 0, "button", 70);
192
+ i0.ɵɵelementStart(10, "div", 41);
193
+ i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template, 2, 3, "button", 42);
194
+ i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template, 2, 0, "button", 43);
195
+ i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template, 2, 0, "button", 44);
223
196
  i0.ɵɵelementEnd()();
224
- i0.ɵɵelementStart(14, "div", 71);
225
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Template_div_click_14_listener() { const credential_r13 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r13)); });
226
- i0.ɵɵelementStart(15, "div", 72);
197
+ i0.ɵɵelementStart(14, "div", 45);
198
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template_div_click_14_listener() { const credential_r10 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r10)); });
199
+ i0.ɵɵelementStart(15, "div", 46);
227
200
  i0.ɵɵelement(16, "i");
228
201
  i0.ɵɵtext(17);
229
202
  i0.ɵɵelementEnd();
230
- i0.ɵɵconditionalCreate(18, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_18_Template, 2, 1, "p", 73);
231
- i0.ɵɵelementStart(19, "div", 74);
232
- i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_20_Template, 4, 0, "div", 75);
233
- i0.ɵɵconditionalCreate(21, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_21_Template, 4, 6, "div", 76);
234
- i0.ɵɵconditionalCreate(22, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_22_Template, 4, 1, "div", 75);
203
+ i0.ɵɵconditionalCreate(18, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_18_Template, 2, 1, "p", 47);
204
+ i0.ɵɵelementStart(19, "div", 48);
205
+ i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_20_Template, 4, 0, "div", 49);
206
+ i0.ɵɵconditionalCreate(21, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_21_Template, 4, 6, "div", 50);
207
+ i0.ɵɵconditionalCreate(22, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_22_Template, 4, 1, "div", 49);
235
208
  i0.ɵɵelementEnd()();
236
- i0.ɵɵelementStart(23, "div", 77);
237
- i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_24_Template, 3, 1, "div", 78);
238
- i0.ɵɵelementStart(25, "div", 79);
209
+ i0.ɵɵelementStart(23, "div", 51);
210
+ i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_24_Template, 3, 1, "div", 52);
211
+ i0.ɵɵelementStart(25, "div", 53);
239
212
  i0.ɵɵtext(26);
240
213
  i0.ɵɵelementEnd()()();
241
214
  } if (rf & 2) {
242
- const credential_r13 = ctx.$implicit;
243
- const ctx_r2 = i0.ɵɵnextContext(3);
244
- i0.ɵɵclassProp("selected", ctx_r2.selectedCredentials.has(credential_r13.ID))("expired", ctx_r2.isExpired(credential_r13))("expiring", ctx_r2.isExpiringSoon(credential_r13));
215
+ const credential_r10 = ctx.$implicit;
216
+ const ctx_r1 = i0.ɵɵnextContext(3);
217
+ i0.ɵɵclassProp("selected", ctx_r1.selectedCredentials.has(credential_r10.ID))("expired", ctx_r1.isExpired(credential_r10))("expiring", ctx_r1.isExpiringSoon(credential_r10));
245
218
  i0.ɵɵadvance();
246
- i0.ɵɵconditional(ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete ? 1 : -1);
219
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate || ctx_r1.UserCanDelete ? 1 : -1);
247
220
  i0.ɵɵadvance(2);
248
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r13));
221
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r10));
249
222
  i0.ɵɵadvance();
250
- i0.ɵɵclassMap(credential_r13.IconClass || "fa-solid fa-key");
223
+ i0.ɵɵclassMap(credential_r10.IconClass || "fa-solid fa-key");
251
224
  i0.ɵɵadvance(3);
252
- i0.ɵɵtextInterpolate(credential_r13.Name);
225
+ i0.ɵɵtextInterpolate(credential_r10.Name);
253
226
  i0.ɵɵadvance(2);
254
- i0.ɵɵtextInterpolate(credential_r13.CredentialType || "Unknown Type");
227
+ i0.ɵɵtextInterpolate(credential_r10.CredentialType || "Unknown Type");
255
228
  i0.ɵɵadvance(2);
256
- i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 11 : -1);
229
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 11 : -1);
257
230
  i0.ɵɵadvance();
258
- i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 12 : -1);
231
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 12 : -1);
259
232
  i0.ɵɵadvance();
260
- i0.ɵɵconditional(ctx_r2.UserCanDelete ? 13 : -1);
233
+ i0.ɵɵconditional(ctx_r1.UserCanDelete ? 13 : -1);
261
234
  i0.ɵɵadvance(2);
262
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r13));
235
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r10));
263
236
  i0.ɵɵadvance();
264
- i0.ɵɵclassMap(ctx_r2.getStatusIcon(credential_r13));
237
+ i0.ɵɵclassMap(ctx_r1.getStatusIcon(credential_r10));
265
238
  i0.ɵɵadvance();
266
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getStatusLabel(credential_r13), " ");
239
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusLabel(credential_r10), " ");
267
240
  i0.ɵɵadvance();
268
- i0.ɵɵconditional(credential_r13.Description ? 18 : -1);
241
+ i0.ɵɵconditional(credential_r10.Description ? 18 : -1);
269
242
  i0.ɵɵadvance(2);
270
- i0.ɵɵconditional(credential_r13.IsDefault ? 20 : -1);
243
+ i0.ɵɵconditional(credential_r10.IsDefault ? 20 : -1);
271
244
  i0.ɵɵadvance();
272
- i0.ɵɵconditional(credential_r13.ExpiresAt ? 21 : -1);
245
+ i0.ɵɵconditional(credential_r10.ExpiresAt ? 21 : -1);
273
246
  i0.ɵɵadvance();
274
- i0.ɵɵconditional(credential_r13.LastUsedAt ? 22 : -1);
247
+ i0.ɵɵconditional(credential_r10.LastUsedAt ? 22 : -1);
275
248
  i0.ɵɵadvance(2);
276
- i0.ɵɵconditional(credential_r13.Category ? 24 : -1);
249
+ i0.ɵɵconditional(credential_r10.Category ? 24 : -1);
277
250
  i0.ɵɵadvance(2);
278
- i0.ɵɵtextInterpolate1(" Created ", ctx_r2.formatDate(credential_r13.__mj_CreatedAt), " ");
251
+ i0.ɵɵtextInterpolate1(" Created ", ctx_r1.formatDate(credential_r10.__mj_CreatedAt), " ");
279
252
  } }
280
- function CredentialsListResourceComponent_Conditional_2_Conditional_48_Template(rf, ctx) { if (rf & 1) {
281
- i0.ɵɵelementStart(0, "div", 39);
282
- i0.ɵɵrepeaterCreate(1, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Template, 27, 25, "div", 59, i0.ɵɵrepeaterTrackByIdentity);
253
+ function CredentialsListResourceComponent_Conditional_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵelementStart(0, "div", 19);
255
+ i0.ɵɵrepeaterCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template, 27, 25, "div", 33, i0.ɵɵrepeaterTrackByIdentity);
283
256
  i0.ɵɵelementEnd();
284
257
  } if (rf & 2) {
285
- const ctx_r2 = i0.ɵɵnextContext(2);
258
+ const ctx_r1 = i0.ɵɵnextContext(2);
286
259
  i0.ɵɵadvance();
287
- i0.ɵɵrepeater(ctx_r2.filteredCredentials);
260
+ i0.ɵɵrepeater(ctx_r1.filteredCredentials);
288
261
  } }
289
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_Conditional_4_Template(rf, ctx) { if (rf & 1) {
290
- const _r17 = i0.ɵɵgetCurrentView();
291
- i0.ɵɵelementStart(0, "th", 89)(1, "input", 80);
292
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Conditional_49_Conditional_4_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelectAll()); });
262
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
263
+ const _r14 = i0.ɵɵgetCurrentView();
264
+ i0.ɵɵelementStart(0, "th", 64)(1, "input", 54);
265
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleSelectAll()); });
293
266
  i0.ɵɵelementEnd()();
294
267
  } if (rf & 2) {
295
- const ctx_r2 = i0.ɵɵnextContext(3);
268
+ const ctx_r1 = i0.ɵɵnextContext(3);
296
269
  i0.ɵɵadvance();
297
- i0.ɵɵproperty("checked", ctx_r2.isAllSelected());
270
+ i0.ɵɵproperty("checked", ctx_r1.isAllSelected());
298
271
  } }
299
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
300
- const _r19 = i0.ɵɵgetCurrentView();
301
- i0.ɵɵelementStart(0, "td", 89)(1, "input", 80);
302
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r19); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelection(credential_r20)); });
272
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
273
+ const _r16 = i0.ɵɵgetCurrentView();
274
+ i0.ɵɵelementStart(0, "td", 64)(1, "input", 54);
275
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r16); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleSelection(credential_r17)); });
303
276
  i0.ɵɵelementEnd()();
304
277
  } if (rf & 2) {
305
- const credential_r20 = i0.ɵɵnextContext().$implicit;
306
- const ctx_r2 = i0.ɵɵnextContext(3);
278
+ const credential_r17 = i0.ɵɵnextContext().$implicit;
279
+ const ctx_r1 = i0.ɵɵnextContext(3);
307
280
  i0.ɵɵadvance();
308
- i0.ɵɵproperty("checked", ctx_r2.selectedCredentials.has(credential_r20.ID));
281
+ i0.ɵɵproperty("checked", ctx_r1.selectedCredentials.has(credential_r17.ID));
309
282
  } }
310
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_8_Template(rf, ctx) { if (rf & 1) {
311
- i0.ɵɵelementStart(0, "span", 102);
283
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template(rf, ctx) { if (rf & 1) {
284
+ i0.ɵɵelementStart(0, "span", 77);
312
285
  i0.ɵɵtext(1);
313
286
  i0.ɵɵelementEnd();
314
287
  } if (rf & 2) {
315
- const credential_r20 = i0.ɵɵnextContext().$implicit;
288
+ const credential_r17 = i0.ɵɵnextContext().$implicit;
316
289
  i0.ɵɵadvance();
317
- i0.ɵɵtextInterpolate(credential_r20.Description);
290
+ i0.ɵɵtextInterpolate(credential_r17.Description);
318
291
  } }
319
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
320
- i0.ɵɵelementStart(0, "span", 103);
292
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
293
+ i0.ɵɵelementStart(0, "span", 78);
321
294
  i0.ɵɵtext(1, "Default");
322
295
  i0.ɵɵelementEnd();
323
296
  } }
324
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_13_Template(rf, ctx) { if (rf & 1) {
325
- i0.ɵɵelementStart(0, "span", 104);
297
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template(rf, ctx) { if (rf & 1) {
298
+ i0.ɵɵelementStart(0, "span", 79);
326
299
  i0.ɵɵtext(1);
327
300
  i0.ɵɵelementEnd();
328
301
  } if (rf & 2) {
329
- const credential_r20 = i0.ɵɵnextContext().$implicit;
302
+ const credential_r17 = i0.ɵɵnextContext().$implicit;
330
303
  i0.ɵɵadvance();
331
- i0.ɵɵtextInterpolate(credential_r20.Category);
304
+ i0.ɵɵtextInterpolate(credential_r17.Category);
332
305
  } }
333
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_14_Template(rf, ctx) { if (rf & 1) {
306
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_14_Template(rf, ctx) { if (rf & 1) {
334
307
  i0.ɵɵelementStart(0, "span");
335
308
  i0.ɵɵtext(1, "-");
336
309
  i0.ɵɵelementEnd();
337
310
  } }
338
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
339
- const _r21 = i0.ɵɵgetCurrentView();
340
- i0.ɵɵelementStart(0, "button", 110);
341
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r21); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleCredentialActive(credential_r20, $event)); });
311
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
312
+ const _r18 = i0.ɵɵgetCurrentView();
313
+ i0.ɵɵelementStart(0, "button", 85);
314
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r18); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCredentialActive(credential_r17, $event)); });
342
315
  i0.ɵɵelement(1, "i");
343
316
  i0.ɵɵelementEnd();
344
317
  } if (rf & 2) {
345
- const credential_r20 = i0.ɵɵnextContext().$implicit;
346
- i0.ɵɵproperty("title", credential_r20.IsActive ? "Deactivate" : "Activate");
318
+ const credential_r17 = i0.ɵɵnextContext().$implicit;
319
+ i0.ɵɵproperty("title", credential_r17.IsActive ? "Deactivate" : "Activate");
347
320
  i0.ɵɵadvance();
348
- i0.ɵɵclassMap(credential_r20.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
321
+ i0.ɵɵclassMap(credential_r17.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
349
322
  } }
350
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
351
- const _r22 = i0.ɵɵgetCurrentView();
352
- i0.ɵɵelementStart(0, "button", 111);
353
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r22); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r20, $event)); });
354
- i0.ɵɵelement(1, "i", 83);
323
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
324
+ const _r19 = i0.ɵɵgetCurrentView();
325
+ i0.ɵɵelementStart(0, "button", 86);
326
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r19); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r17, $event)); });
327
+ i0.ɵɵelement(1, "i", 57);
355
328
  i0.ɵɵelementEnd();
356
329
  } }
357
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
358
- const _r23 = i0.ɵɵgetCurrentView();
359
- i0.ɵɵelementStart(0, "button", 112);
360
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r23); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCredential(credential_r20, $event)); });
361
- i0.ɵɵelement(1, "i", 58);
330
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
331
+ const _r20 = i0.ɵɵgetCurrentView();
332
+ i0.ɵɵelementStart(0, "button", 87);
333
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r20); const credential_r17 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.deleteCredential(credential_r17, $event)); });
334
+ i0.ɵɵelement(1, "i", 32);
362
335
  i0.ɵɵelementEnd();
363
336
  } }
364
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Template(rf, ctx) { if (rf & 1) {
365
- const _r18 = i0.ɵɵgetCurrentView();
337
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template(rf, ctx) { if (rf & 1) {
338
+ const _r15 = i0.ɵɵgetCurrentView();
366
339
  i0.ɵɵelementStart(0, "tr");
367
- i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_1_Template, 2, 1, "td", 89);
368
- i0.ɵɵelementStart(2, "td", 98);
369
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Template_td_click_2_listener() { const credential_r20 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r20)); });
370
- i0.ɵɵelementStart(3, "div", 99);
371
- i0.ɵɵelement(4, "i", 100);
372
- i0.ɵɵelementStart(5, "div", 101)(6, "span", 65);
340
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template, 2, 1, "td", 64);
341
+ i0.ɵɵelementStart(2, "td", 73);
342
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template_td_click_2_listener() { const credential_r17 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editCredential(credential_r17)); });
343
+ i0.ɵɵelementStart(3, "div", 74);
344
+ i0.ɵɵelement(4, "i", 75);
345
+ i0.ɵɵelementStart(5, "div", 76)(6, "span", 39);
373
346
  i0.ɵɵtext(7);
374
347
  i0.ɵɵelementEnd();
375
- i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_8_Template, 2, 1, "span", 102);
348
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template, 2, 1, "span", 77);
376
349
  i0.ɵɵelementEnd();
377
- i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_9_Template, 2, 0, "span", 103);
350
+ i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template, 2, 0, "span", 78);
378
351
  i0.ɵɵelementEnd()();
379
- i0.ɵɵelementStart(10, "td", 91);
352
+ i0.ɵɵelementStart(10, "td", 66);
380
353
  i0.ɵɵtext(11);
381
354
  i0.ɵɵelementEnd();
382
- i0.ɵɵelementStart(12, "td", 92);
383
- i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_13_Template, 2, 1, "span", 104);
384
- i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_14_Template, 2, 0, "span");
355
+ i0.ɵɵelementStart(12, "td", 67);
356
+ i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template, 2, 1, "span", 79);
357
+ i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_14_Template, 2, 0, "span");
385
358
  i0.ɵɵelementEnd();
386
- i0.ɵɵelementStart(15, "td", 93)(16, "span", 105);
359
+ i0.ɵɵelementStart(15, "td", 68)(16, "span", 80);
387
360
  i0.ɵɵtext(17);
388
361
  i0.ɵɵelementEnd()();
389
- i0.ɵɵelementStart(18, "td", 94);
362
+ i0.ɵɵelementStart(18, "td", 69);
390
363
  i0.ɵɵtext(19);
391
364
  i0.ɵɵelementEnd();
392
- i0.ɵɵelementStart(20, "td", 95);
365
+ i0.ɵɵelementStart(20, "td", 70);
393
366
  i0.ɵɵtext(21);
394
367
  i0.ɵɵelementEnd();
395
- i0.ɵɵelementStart(22, "td", 96)(23, "div", 106);
396
- i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_24_Template, 2, 3, "button", 107);
397
- i0.ɵɵconditionalCreate(25, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_25_Template, 2, 0, "button", 108);
398
- i0.ɵɵconditionalCreate(26, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_26_Template, 2, 0, "button", 109);
368
+ i0.ɵɵelementStart(22, "td", 71)(23, "div", 81);
369
+ i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template, 2, 3, "button", 82);
370
+ i0.ɵɵconditionalCreate(25, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template, 2, 0, "button", 83);
371
+ i0.ɵɵconditionalCreate(26, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template, 2, 0, "button", 84);
399
372
  i0.ɵɵelementEnd()()();
400
373
  } if (rf & 2) {
401
- const credential_r20 = ctx.$implicit;
402
- const ctx_r2 = i0.ɵɵnextContext(3);
403
- i0.ɵɵclassProp("selected", ctx_r2.selectedCredentials.has(credential_r20.ID))("expired", ctx_r2.isExpired(credential_r20));
374
+ const credential_r17 = ctx.$implicit;
375
+ const ctx_r1 = i0.ɵɵnextContext(3);
376
+ i0.ɵɵclassProp("selected", ctx_r1.selectedCredentials.has(credential_r17.ID))("expired", ctx_r1.isExpired(credential_r17));
404
377
  i0.ɵɵadvance();
405
- i0.ɵɵconditional(ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete ? 1 : -1);
378
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate || ctx_r1.UserCanDelete ? 1 : -1);
406
379
  i0.ɵɵadvance(3);
407
- i0.ɵɵclassMap(credential_r20.IconClass || "fa-solid fa-key");
408
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r20));
380
+ i0.ɵɵclassMap(credential_r17.IconClass || "fa-solid fa-key");
381
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r17));
409
382
  i0.ɵɵadvance(3);
410
- i0.ɵɵtextInterpolate(credential_r20.Name);
383
+ i0.ɵɵtextInterpolate(credential_r17.Name);
411
384
  i0.ɵɵadvance();
412
- i0.ɵɵconditional(credential_r20.Description ? 8 : -1);
385
+ i0.ɵɵconditional(credential_r17.Description ? 8 : -1);
413
386
  i0.ɵɵadvance();
414
- i0.ɵɵconditional(credential_r20.IsDefault ? 9 : -1);
387
+ i0.ɵɵconditional(credential_r17.IsDefault ? 9 : -1);
415
388
  i0.ɵɵadvance(2);
416
- i0.ɵɵtextInterpolate(credential_r20.CredentialType || "-");
389
+ i0.ɵɵtextInterpolate(credential_r17.CredentialType || "-");
417
390
  i0.ɵɵadvance(2);
418
- i0.ɵɵconditional(credential_r20.Category ? 13 : -1);
391
+ i0.ɵɵconditional(credential_r17.Category ? 13 : -1);
419
392
  i0.ɵɵadvance();
420
- i0.ɵɵconditional(!credential_r20.Category ? 14 : -1);
393
+ i0.ɵɵconditional(!credential_r17.Category ? 14 : -1);
421
394
  i0.ɵɵadvance(2);
422
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r20));
395
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(credential_r17));
423
396
  i0.ɵɵadvance();
424
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getStatusLabel(credential_r20), " ");
397
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getStatusLabel(credential_r17), " ");
425
398
  i0.ɵɵadvance();
426
- i0.ɵɵclassProp("warning", ctx_r2.isExpiringSoon(credential_r20))("danger", ctx_r2.isExpired(credential_r20));
399
+ i0.ɵɵclassProp("warning", ctx_r1.isExpiringSoon(credential_r17))("danger", ctx_r1.isExpired(credential_r17));
427
400
  i0.ɵɵadvance();
428
- i0.ɵɵtextInterpolate1(" ", credential_r20.ExpiresAt ? ctx_r2.formatDate(credential_r20.ExpiresAt) : "Never", " ");
401
+ i0.ɵɵtextInterpolate1(" ", credential_r17.ExpiresAt ? ctx_r1.formatDate(credential_r17.ExpiresAt) : "Never", " ");
429
402
  i0.ɵɵadvance(2);
430
- i0.ɵɵtextInterpolate1(" ", credential_r20.LastUsedAt ? ctx_r2.formatDate(credential_r20.LastUsedAt) : "Never", " ");
403
+ i0.ɵɵtextInterpolate1(" ", credential_r17.LastUsedAt ? ctx_r1.formatDate(credential_r17.LastUsedAt) : "Never", " ");
431
404
  i0.ɵɵadvance(3);
432
- i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 24 : -1);
405
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 24 : -1);
433
406
  i0.ɵɵadvance();
434
- i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 25 : -1);
407
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate ? 25 : -1);
435
408
  i0.ɵɵadvance();
436
- i0.ɵɵconditional(ctx_r2.UserCanDelete ? 26 : -1);
409
+ i0.ɵɵconditional(ctx_r1.UserCanDelete ? 26 : -1);
437
410
  } }
438
- function CredentialsListResourceComponent_Conditional_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
439
- i0.ɵɵelementStart(0, "div", 40)(1, "table", 88)(2, "thead")(3, "tr");
440
- i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_2_Conditional_49_Conditional_4_Template, 2, 1, "th", 89);
441
- i0.ɵɵelementStart(5, "th", 90);
411
+ function CredentialsListResourceComponent_Conditional_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
412
+ i0.ɵɵelementStart(0, "div", 20)(1, "table", 63)(2, "thead")(3, "tr");
413
+ i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template, 2, 1, "th", 64);
414
+ i0.ɵɵelementStart(5, "th", 65);
442
415
  i0.ɵɵtext(6, "Name");
443
416
  i0.ɵɵelementEnd();
444
- i0.ɵɵelementStart(7, "th", 91);
417
+ i0.ɵɵelementStart(7, "th", 66);
445
418
  i0.ɵɵtext(8, "Type");
446
419
  i0.ɵɵelementEnd();
447
- i0.ɵɵelementStart(9, "th", 92);
420
+ i0.ɵɵelementStart(9, "th", 67);
448
421
  i0.ɵɵtext(10, "Category");
449
422
  i0.ɵɵelementEnd();
450
- i0.ɵɵelementStart(11, "th", 93);
423
+ i0.ɵɵelementStart(11, "th", 68);
451
424
  i0.ɵɵtext(12, "Status");
452
425
  i0.ɵɵelementEnd();
453
- i0.ɵɵelementStart(13, "th", 94);
426
+ i0.ɵɵelementStart(13, "th", 69);
454
427
  i0.ɵɵtext(14, "Expires");
455
428
  i0.ɵɵelementEnd();
456
- i0.ɵɵelementStart(15, "th", 95);
429
+ i0.ɵɵelementStart(15, "th", 70);
457
430
  i0.ɵɵtext(16, "Last Used");
458
431
  i0.ɵɵelementEnd();
459
- i0.ɵɵelementStart(17, "th", 96);
432
+ i0.ɵɵelementStart(17, "th", 71);
460
433
  i0.ɵɵtext(18, "Actions");
461
434
  i0.ɵɵelementEnd()()();
462
435
  i0.ɵɵelementStart(19, "tbody");
463
- i0.ɵɵrepeaterCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Template, 27, 25, "tr", 97, i0.ɵɵrepeaterTrackByIdentity);
436
+ i0.ɵɵrepeaterCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template, 27, 25, "tr", 72, i0.ɵɵrepeaterTrackByIdentity);
464
437
  i0.ɵɵelementEnd()()();
465
438
  } if (rf & 2) {
466
- const ctx_r2 = i0.ɵɵnextContext(2);
439
+ const ctx_r1 = i0.ɵɵnextContext(2);
467
440
  i0.ɵɵadvance(4);
468
- i0.ɵɵconditional(ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete ? 4 : -1);
441
+ i0.ɵɵconditional(ctx_r1.UserCanUpdate || ctx_r1.UserCanDelete ? 4 : -1);
469
442
  i0.ɵɵadvance(16);
470
- i0.ɵɵrepeater(ctx_r2.filteredCredentials);
443
+ i0.ɵɵrepeater(ctx_r1.filteredCredentials);
471
444
  } }
472
- function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_5_Template(rf, ctx) { if (rf & 1) {
473
- const _r24 = i0.ɵɵgetCurrentView();
445
+ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
446
+ const _r21 = i0.ɵɵgetCurrentView();
474
447
  i0.ɵɵelementStart(0, "p");
475
448
  i0.ɵɵtext(1, " No credentials match your current filters. ");
476
- i0.ɵɵelementStart(2, "button", 50);
477
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearFilters()); });
449
+ i0.ɵɵelementStart(2, "button", 24);
450
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.clearFilters()); });
478
451
  i0.ɵɵtext(3, "Clear filters");
479
452
  i0.ɵɵelementEnd()();
480
453
  } }
481
- function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_6_Template(rf, ctx) { if (rf & 1) {
454
+ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
482
455
  i0.ɵɵelementStart(0, "p");
483
456
  i0.ɵɵtext(1, " Get started by creating your first credential. ");
484
457
  i0.ɵɵelementEnd();
485
458
  } }
486
- function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_7_Template(rf, ctx) { if (rf & 1) {
487
- const _r25 = i0.ɵɵgetCurrentView();
488
- i0.ɵɵelementStart(0, "button", 44);
489
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
490
- i0.ɵɵelement(1, "i", 45);
459
+ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
460
+ const _r22 = i0.ɵɵgetCurrentView();
461
+ i0.ɵɵelementStart(0, "button", 91);
462
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
463
+ i0.ɵɵelement(1, "i", 17);
491
464
  i0.ɵɵtext(2, " Create Credential ");
492
465
  i0.ɵɵelementEnd();
493
466
  } }
494
- function CredentialsListResourceComponent_Conditional_2_Conditional_50_Template(rf, ctx) { if (rf & 1) {
495
- i0.ɵɵelementStart(0, "div", 41)(1, "div", 113);
496
- i0.ɵɵelement(2, "i", 9);
467
+ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Template(rf, ctx) { if (rf & 1) {
468
+ i0.ɵɵelementStart(0, "div", 21)(1, "div", 88);
469
+ i0.ɵɵelement(2, "i", 89);
497
470
  i0.ɵɵelementEnd();
498
471
  i0.ɵɵelementStart(3, "h3");
499
472
  i0.ɵɵtext(4, "No Credentials Found");
500
473
  i0.ɵɵelementEnd();
501
- i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_5_Template, 4, 0, "p");
502
- i0.ɵɵconditionalCreate(6, CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_6_Template, 2, 0, "p");
503
- i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_7_Template, 3, 0, "button", 15);
474
+ i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template, 4, 0, "p");
475
+ i0.ɵɵconditionalCreate(6, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_6_Template, 2, 0, "p");
476
+ i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template, 3, 0, "button", 90);
504
477
  i0.ɵɵelementEnd();
505
478
  } if (rf & 2) {
506
- const ctx_r2 = i0.ɵɵnextContext(2);
479
+ const ctx_r1 = i0.ɵɵnextContext(2);
507
480
  i0.ɵɵadvance(5);
508
- i0.ɵɵconditional(ctx_r2.searchText || ctx_r2.selectedTypeFilter || ctx_r2.selectedStatusFilter ? 5 : -1);
481
+ i0.ɵɵconditional(ctx_r1.searchText || ctx_r1.selectedTypeFilter || ctx_r1.selectedStatusFilter ? 5 : -1);
509
482
  i0.ɵɵadvance();
510
- i0.ɵɵconditional(!ctx_r2.searchText && !ctx_r2.selectedTypeFilter && !ctx_r2.selectedStatusFilter ? 6 : -1);
483
+ i0.ɵɵconditional(!ctx_r1.searchText && !ctx_r1.selectedTypeFilter && !ctx_r1.selectedStatusFilter ? 6 : -1);
511
484
  i0.ɵɵadvance();
512
- i0.ɵɵconditional(ctx_r2.UserCanCreate && !ctx_r2.searchText && !ctx_r2.selectedTypeFilter && !ctx_r2.selectedStatusFilter ? 7 : -1);
485
+ i0.ɵɵconditional(ctx_r1.UserCanCreate && !ctx_r1.searchText && !ctx_r1.selectedTypeFilter && !ctx_r1.selectedStatusFilter ? 7 : -1);
513
486
  } }
514
- function CredentialsListResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
515
- const _r2 = i0.ɵɵgetCurrentView();
516
- i0.ɵɵelementStart(0, "div", 4)(1, "div", 5)(2, "h2", 6);
517
- i0.ɵɵtext(3, "Credentials");
518
- i0.ɵɵelementEnd();
519
- i0.ɵɵelementStart(4, "div", 7)(5, "span", 8);
520
- i0.ɵɵelement(6, "i", 9);
521
- i0.ɵɵtext(7);
522
- i0.ɵɵelementEnd();
523
- i0.ɵɵelementStart(8, "span", 10);
524
- i0.ɵɵelement(9, "i", 11);
525
- i0.ɵɵtext(10);
526
- i0.ɵɵelementEnd();
527
- i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_2_Conditional_11_Template, 3, 1, "span", 12);
528
- i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_2_Conditional_12_Template, 3, 1, "span", 13);
529
- i0.ɵɵelementEnd()();
530
- i0.ɵɵelementStart(13, "div", 14);
531
- i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_2_Conditional_14_Template, 4, 0, "button", 15);
532
- i0.ɵɵelementEnd()();
533
- i0.ɵɵelementStart(15, "div", 16)(16, "div", 17)(17, "div", 18);
534
- i0.ɵɵelement(18, "i", 19);
535
- i0.ɵɵelementStart(19, "input", 20);
536
- i0.ɵɵlistener("input", function CredentialsListResourceComponent_Conditional_2_Template_input_input_19_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSearchChange($event.target.value)); });
537
- i0.ɵɵelementEnd();
538
- i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_20_Template, 2, 0, "button", 21);
539
- i0.ɵɵelementEnd();
540
- i0.ɵɵelementStart(21, "select", 22);
541
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Template_select_change_21_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTypeFilterChange($event.target.value)); });
542
- i0.ɵɵelementStart(22, "option", 23);
543
- i0.ɵɵtext(23, "All Types");
544
- i0.ɵɵelementEnd();
545
- i0.ɵɵrepeaterCreate(24, CredentialsListResourceComponent_Conditional_2_For_25_Template, 2, 2, "option", 24, i0.ɵɵrepeaterTrackByIdentity);
546
- i0.ɵɵelementEnd();
547
- i0.ɵɵelementStart(26, "select", 22);
548
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Template_select_change_26_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onStatusFilterChange($event.target.value)); });
549
- i0.ɵɵelementStart(27, "option", 23);
550
- i0.ɵɵtext(28, "All Statuses");
551
- i0.ɵɵelementEnd();
552
- i0.ɵɵelementStart(29, "option", 25);
553
- i0.ɵɵtext(30, "Active");
554
- i0.ɵɵelementEnd();
555
- i0.ɵɵelementStart(31, "option", 26);
556
- i0.ɵɵtext(32, "Inactive");
557
- i0.ɵɵelementEnd();
558
- i0.ɵɵelementStart(33, "option", 27);
559
- i0.ɵɵtext(34, "Expiring Soon");
560
- i0.ɵɵelementEnd();
561
- i0.ɵɵelementStart(35, "option", 28);
562
- i0.ɵɵtext(36, "Expired");
563
- i0.ɵɵelementEnd()()();
564
- i0.ɵɵelementStart(37, "div", 29)(38, "div", 30);
565
- i0.ɵɵtext(39);
566
- i0.ɵɵelementEnd();
567
- i0.ɵɵelementStart(40, "div", 31)(41, "button", 32);
568
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("grid")); });
569
- i0.ɵɵelement(42, "i", 33);
570
- i0.ɵɵelementEnd();
571
- i0.ɵɵelementStart(43, "button", 34);
572
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_43_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("list")); });
573
- i0.ɵɵelement(44, "i", 35);
574
- i0.ɵɵelementEnd()();
575
- i0.ɵɵelementStart(45, "button", 36);
576
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.refresh()); });
577
- i0.ɵɵelement(46, "i", 37);
578
- i0.ɵɵelementEnd()()();
579
- i0.ɵɵconditionalCreate(47, CredentialsListResourceComponent_Conditional_2_Conditional_47_Template, 10, 4, "div", 38);
580
- i0.ɵɵconditionalCreate(48, CredentialsListResourceComponent_Conditional_2_Conditional_48_Template, 3, 0, "div", 39);
581
- i0.ɵɵconditionalCreate(49, CredentialsListResourceComponent_Conditional_2_Conditional_49_Template, 22, 1, "div", 40);
582
- i0.ɵɵconditionalCreate(50, CredentialsListResourceComponent_Conditional_2_Conditional_50_Template, 8, 3, "div", 41);
487
+ function CredentialsListResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
488
+ i0.ɵɵconditionalCreate(0, CredentialsListResourceComponent_Conditional_16_Conditional_0_Template, 10, 4, "div", 18);
489
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_Template, 3, 0, "div", 19);
490
+ i0.ɵɵconditionalCreate(2, CredentialsListResourceComponent_Conditional_16_Conditional_2_Template, 22, 1, "div", 20);
491
+ i0.ɵɵconditionalCreate(3, CredentialsListResourceComponent_Conditional_16_Conditional_3_Template, 8, 3, "div", 21);
583
492
  } if (rf & 2) {
584
- const ctx_r2 = i0.ɵɵnextContext();
585
- i0.ɵɵadvance(7);
586
- i0.ɵɵtextInterpolate1(" ", ctx_r2.credentials.length, " total ");
587
- i0.ɵɵadvance(3);
588
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getActiveCount(), " active ");
589
- i0.ɵɵadvance();
590
- i0.ɵɵconditional(ctx_r2.getExpiringSoonCount() > 0 ? 11 : -1);
493
+ const ctx_r1 = i0.ɵɵnextContext();
494
+ i0.ɵɵconditional(ctx_r1.selectedCredentials.size > 0 ? 0 : -1);
591
495
  i0.ɵɵadvance();
592
- i0.ɵɵconditional(ctx_r2.getExpiredCount() > 0 ? 12 : -1);
593
- i0.ɵɵadvance(2);
594
- i0.ɵɵconditional(ctx_r2.UserCanCreate ? 14 : -1);
595
- i0.ɵɵadvance(5);
596
- i0.ɵɵproperty("value", ctx_r2.searchText);
496
+ i0.ɵɵconditional(ctx_r1.viewMode === "grid" && ctx_r1.filteredCredentials.length > 0 ? 1 : -1);
597
497
  i0.ɵɵadvance();
598
- i0.ɵɵconditional(ctx_r2.searchText ? 20 : -1);
498
+ i0.ɵɵconditional(ctx_r1.viewMode === "list" && ctx_r1.filteredCredentials.length > 0 ? 2 : -1);
599
499
  i0.ɵɵadvance();
600
- i0.ɵɵproperty("value", ctx_r2.selectedTypeFilter);
601
- i0.ɵɵadvance(3);
602
- i0.ɵɵrepeater(ctx_r2.types);
603
- i0.ɵɵadvance(2);
604
- i0.ɵɵproperty("value", ctx_r2.selectedStatusFilter);
605
- i0.ɵɵadvance(13);
606
- i0.ɵɵtextInterpolate2(" ", ctx_r2.filteredCredentials.length, " of ", ctx_r2.credentials.length, " ");
607
- i0.ɵɵadvance(2);
608
- i0.ɵɵclassProp("active", ctx_r2.viewMode === "grid");
609
- i0.ɵɵadvance(2);
610
- i0.ɵɵclassProp("active", ctx_r2.viewMode === "list");
611
- i0.ɵɵadvance(4);
612
- i0.ɵɵconditional(ctx_r2.selectedCredentials.size > 0 ? 47 : -1);
613
- i0.ɵɵadvance();
614
- i0.ɵɵconditional(ctx_r2.viewMode === "grid" && ctx_r2.filteredCredentials.length > 0 ? 48 : -1);
615
- i0.ɵɵadvance();
616
- i0.ɵɵconditional(ctx_r2.viewMode === "list" && ctx_r2.filteredCredentials.length > 0 ? 49 : -1);
617
- i0.ɵɵadvance();
618
- i0.ɵɵconditional(ctx_r2.filteredCredentials.length === 0 ? 50 : -1);
500
+ i0.ɵɵconditional(ctx_r1.filteredCredentials.length === 0 ? 3 : -1);
619
501
  } }
620
502
  let CredentialsListResourceComponent = class CredentialsListResourceComponent extends BaseResourceComponent {
621
503
  cdr;
@@ -637,6 +519,67 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
637
519
  _permissionCache = new Map();
638
520
  destroy$ = new Subject();
639
521
  editPanel;
522
+ viewOptions = [
523
+ { key: 'grid', icon: 'fa-solid fa-grip', title: 'Grid view' },
524
+ { key: 'list', icon: 'fa-solid fa-list', title: 'List view' }
525
+ ];
526
+ get FilterFields() {
527
+ const typeOptions = [
528
+ { text: 'All Types', value: '' },
529
+ ...this.types.map(t => ({ text: t.Name, value: t.ID }))
530
+ ];
531
+ return [
532
+ {
533
+ key: 'typeFilter',
534
+ type: 'dropdown',
535
+ label: 'Type',
536
+ icon: 'fa-solid fa-shapes',
537
+ placeholder: 'All Types',
538
+ filterable: true,
539
+ options: typeOptions
540
+ },
541
+ {
542
+ key: 'statusFilter',
543
+ type: 'dropdown',
544
+ label: 'Status',
545
+ icon: 'fa-solid fa-circle-info',
546
+ placeholder: 'All Statuses',
547
+ options: [
548
+ { text: 'All Statuses', value: '' },
549
+ { text: 'Active', value: 'active' },
550
+ { text: 'Inactive', value: 'inactive' },
551
+ { text: 'Expiring Soon', value: 'expiring' },
552
+ { text: 'Expired', value: 'expired' }
553
+ ]
554
+ }
555
+ ];
556
+ }
557
+ get FilterValues() {
558
+ return { typeFilter: this.selectedTypeFilter, statusFilter: this.selectedStatusFilter };
559
+ }
560
+ get ActiveFilterCount() {
561
+ let n = 0;
562
+ if (this.selectedTypeFilter)
563
+ n++;
564
+ if (this.selectedStatusFilter)
565
+ n++;
566
+ return n;
567
+ }
568
+ onFilterValuesChange(v) {
569
+ const next = (v ?? {});
570
+ if ((next.typeFilter ?? '') !== this.selectedTypeFilter) {
571
+ this.onTypeFilterChange(next.typeFilter ?? '');
572
+ }
573
+ if ((next.statusFilter ?? '') !== this.selectedStatusFilter) {
574
+ this.onStatusFilterChange(next.statusFilter ?? '');
575
+ }
576
+ }
577
+ resetFilters() {
578
+ if (this.selectedTypeFilter)
579
+ this.onTypeFilterChange('');
580
+ if (this.selectedStatusFilter)
581
+ this.onStatusFilterChange('');
582
+ }
640
583
  constructor(cdr) {
641
584
  super();
642
585
  this.cdr = cdr;
@@ -1220,22 +1163,61 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
1220
1163
  } if (rf & 2) {
1221
1164
  let _t;
1222
1165
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.editPanel = _t.first);
1223
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 3, consts: [["editPanel", ""], [1, "list-container"], ["text", "Loading credentials..."], [3, "saved", "deleted", "credentialTypes"], [1, "list-header"], [1, "header-info"], [1, "list-title"], [1, "header-stats"], [1, "stat-item"], [1, "fa-solid", "fa-key"], [1, "stat-item", "active"], [1, "fa-solid", "fa-check-circle"], [1, "stat-item", "warning"], [1, "stat-item", "danger"], [1, "header-actions"], [1, "btn-primary"], [1, "toolbar"], [1, "toolbar-left"], [1, "search-container"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search credentials...", 3, "input", "value"], [1, "search-clear"], [1, "filter-select", 3, "change", "value"], ["value", ""], [3, "value"], ["value", "active"], ["value", "inactive"], ["value", "expiring"], ["value", "expired"], [1, "toolbar-right"], [1, "results-info"], [1, "view-toggle"], ["title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grid-2"], ["title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "bulk-actions"], [1, "credentials-grid"], [1, "credentials-table-container"], [1, "empty-state"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-exclamation-circle"], [1, "btn-primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "search-clear", 3, "click"], [1, "fa-solid", "fa-times"], [1, "bulk-info"], [1, "bulk-count"], [1, "btn-link", 3, "click"], [1, "bulk-buttons"], [1, "btn-bulk"], [1, "btn-bulk", "danger"], [1, "btn-bulk", 3, "click"], [1, "fa-solid", "fa-toggle-on"], [1, "fa-solid", "fa-toggle-off"], [1, "btn-bulk", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "credential-card", 3, "selected", "expired", "expiring"], [1, "credential-card"], [1, "card-select"], [1, "card-header"], [1, "card-icon", 3, "ngClass"], [1, "card-title"], [1, "credential-name"], [1, "credential-type"], [1, "card-actions"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "card-body", 3, "click"], [1, "status-badge", 3, "ngClass"], [1, "credential-description"], [1, "credential-meta"], [1, "meta-item"], [1, "meta-item", 3, "warning", "danger"], [1, "card-footer"], [1, "category-tag"], [1, "created-info"], ["type", "checkbox", 3, "change", "checked"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click", "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-folder"], [1, "credentials-table"], [1, "col-select"], [1, "col-name"], [1, "col-type"], [1, "col-category"], [1, "col-status"], [1, "col-expires"], [1, "col-used"], [1, "col-actions"], [3, "selected", "expired"], [1, "col-name", 3, "click"], [1, "name-cell"], [3, "ngClass"], [1, "name-info"], [1, "credential-desc"], [1, "default-badge"], [1, "category-pill"], [1, "status-pill", 3, "ngClass"], [1, "table-actions"], [1, "table-action-btn", 3, "title"], ["title", "Edit", 1, "table-action-btn"], ["title", "Delete", 1, "table-action-btn", "danger"], [1, "table-action-btn", 3, "click", "title"], ["title", "Edit", 1, "table-action-btn", 3, "click"], ["title", "Delete", 1, "table-action-btn", "danger", 3, "click"], [1, "empty-icon"]], template: function CredentialsListResourceComponent_Template(rf, ctx) { if (rf & 1) {
1166
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 16, consts: [["editPanel", ""], ["Title", "Credentials", "Icon", "fa-solid fa-key"], ["meta", ""], ["Label", "credentials", 3, "Count", "Total"], ["Icon", "fa-solid fa-clock", "Label", "expiring", "Variant", "warning", 3, "Count"], ["Icon", "fa-solid fa-exclamation-circle", "Label", "expired", "Variant", "error", 3, "Count"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "KeyChange", "Options", "ActiveKey"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search credentials...", 3, "ValueChange", "Value"], ["text", "Loading credentials..."], [3, "saved", "deleted", "credentialTypes"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "bulk-actions"], [1, "credentials-grid"], [1, "credentials-table-container"], [1, "empty-state"], [1, "bulk-info"], [1, "bulk-count"], [1, "btn-link", 3, "click"], [1, "bulk-buttons"], [1, "btn-bulk"], [1, "btn-bulk", "danger"], [1, "btn-bulk", 3, "click"], [1, "fa-solid", "fa-toggle-on"], [1, "fa-solid", "fa-toggle-off"], [1, "btn-bulk", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "credential-card", 3, "selected", "expired", "expiring"], [1, "credential-card"], [1, "card-select"], [1, "card-header"], [1, "card-icon", 3, "ngClass"], [1, "card-title"], [1, "credential-name"], [1, "credential-type"], [1, "card-actions"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "card-body", 3, "click"], [1, "status-badge", 3, "ngClass"], [1, "credential-description"], [1, "credential-meta"], [1, "meta-item"], [1, "meta-item", 3, "warning", "danger"], [1, "card-footer"], [1, "category-tag"], [1, "created-info"], ["type", "checkbox", 3, "change", "checked"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click", "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-folder"], [1, "credentials-table"], [1, "col-select"], [1, "col-name"], [1, "col-type"], [1, "col-category"], [1, "col-status"], [1, "col-expires"], [1, "col-used"], [1, "col-actions"], [3, "selected", "expired"], [1, "col-name", 3, "click"], [1, "name-cell"], [3, "ngClass"], [1, "name-info"], [1, "credential-desc"], [1, "default-badge"], [1, "category-pill"], [1, "status-pill", 3, "ngClass"], [1, "table-actions"], [1, "table-action-btn", 3, "title"], ["title", "Edit", 1, "table-action-btn"], ["title", "Delete", 1, "table-action-btn", "danger"], [1, "table-action-btn", 3, "click", "title"], ["title", "Edit", 1, "table-action-btn", 3, "click"], ["title", "Delete", 1, "table-action-btn", "danger", 3, "click"], [1, "empty-icon"], [1, "fa-solid", "fa-key"], [1, "btn-primary"], [1, "btn-primary", 3, "click"]], template: function CredentialsListResourceComponent_Template(rf, ctx) { if (rf & 1) {
1224
1167
  const _r1 = i0.ɵɵgetCurrentView();
1225
- i0.ɵɵelementStart(0, "div", 1);
1226
- i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_1_Template, 1, 0, "mj-loading", 2);
1227
- i0.ɵɵconditionalCreate(2, CredentialsListResourceComponent_Conditional_2_Template, 51, 19);
1228
- i0.ɵɵelementStart(3, "mj-credential-edit-panel", 3, 0);
1229
- i0.ɵɵlistener("saved", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_saved_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialSaved($event)); })("deleted", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_deleted_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialDeleted($event)); });
1168
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2);
1169
+ i0.ɵɵelement(3, "mj-stat-badge", 3);
1170
+ i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_4_Template, 1, 1, "mj-stat-badge", 4);
1171
+ i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_5_Template, 1, 1, "mj-stat-badge", 5);
1172
+ i0.ɵɵelementEnd();
1173
+ i0.ɵɵelementStart(6, "div", 6)(7, "mj-filter-popover", 7);
1174
+ i0.ɵɵlistener("ClearAllRequested", function CredentialsListResourceComponent_Template_mj_filter_popover_ClearAllRequested_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetFilters()); });
1175
+ i0.ɵɵelementStart(8, "mj-filter-panel", 8);
1176
+ i0.ɵɵlistener("ValuesChange", function CredentialsListResourceComponent_Template_mj_filter_panel_ValuesChange_8_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFilterValuesChange($event)); })("Reset", function CredentialsListResourceComponent_Template_mj_filter_panel_Reset_8_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetFilters()); });
1230
1177
  i0.ɵɵelementEnd()();
1178
+ i0.ɵɵelementStart(9, "mj-view-toggle", 9);
1179
+ i0.ɵɵlistener("KeyChange", function CredentialsListResourceComponent_Template_mj_view_toggle_KeyChange_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setViewMode($event)); });
1180
+ i0.ɵɵelementEnd();
1181
+ i0.ɵɵelementStart(10, "mj-refresh-button", 10);
1182
+ i0.ɵɵlistener("Clicked", function CredentialsListResourceComponent_Template_mj_refresh_button_Clicked_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
1183
+ i0.ɵɵelementEnd();
1184
+ i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_11_Template, 3, 0, "button", 11);
1185
+ i0.ɵɵelementEnd();
1186
+ i0.ɵɵelementStart(12, "div", 12)(13, "mj-page-search", 13);
1187
+ i0.ɵɵlistener("ValueChange", function CredentialsListResourceComponent_Template_mj_page_search_ValueChange_13_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
1188
+ i0.ɵɵelementEnd()()();
1189
+ i0.ɵɵelementStart(14, "mj-page-body");
1190
+ i0.ɵɵconditionalCreate(15, CredentialsListResourceComponent_Conditional_15_Template, 1, 0, "mj-loading", 14);
1191
+ i0.ɵɵconditionalCreate(16, CredentialsListResourceComponent_Conditional_16_Template, 4, 4);
1192
+ i0.ɵɵelementStart(17, "mj-credential-edit-panel", 15, 0);
1193
+ i0.ɵɵlistener("saved", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_saved_17_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialSaved($event)); })("deleted", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_deleted_17_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialDeleted($event)); });
1194
+ i0.ɵɵelementEnd()()();
1231
1195
  } if (rf & 2) {
1196
+ i0.ɵɵadvance(3);
1197
+ i0.ɵɵproperty("Count", ctx.filteredCredentials.length)("Total", ctx.credentials.length);
1198
+ i0.ɵɵadvance();
1199
+ i0.ɵɵconditional(ctx.getExpiringSoonCount() > 0 ? 4 : -1);
1200
+ i0.ɵɵadvance();
1201
+ i0.ɵɵconditional(ctx.getExpiredCount() > 0 ? 5 : -1);
1202
+ i0.ɵɵadvance(2);
1203
+ i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
1204
+ i0.ɵɵadvance();
1205
+ i0.ɵɵproperty("Fields", ctx.FilterFields)("Values", ctx.FilterValues);
1206
+ i0.ɵɵadvance();
1207
+ i0.ɵɵproperty("Options", ctx.viewOptions)("ActiveKey", ctx.viewMode);
1208
+ i0.ɵɵadvance();
1209
+ i0.ɵɵproperty("Loading", ctx.isLoading);
1232
1210
  i0.ɵɵadvance();
1233
- i0.ɵɵconditional(ctx.isLoading ? 1 : -1);
1211
+ i0.ɵɵconditional(ctx.UserCanCreate ? 11 : -1);
1212
+ i0.ɵɵadvance(2);
1213
+ i0.ɵɵproperty("Value", ctx.searchText);
1214
+ i0.ɵɵadvance(2);
1215
+ i0.ɵɵconditional(ctx.isLoading ? 15 : -1);
1234
1216
  i0.ɵɵadvance();
1235
- i0.ɵɵconditional(!ctx.isLoading ? 2 : -1);
1217
+ i0.ɵɵconditional(!ctx.isLoading ? 16 : -1);
1236
1218
  i0.ɵɵadvance();
1237
1219
  i0.ɵɵproperty("credentialTypes", ctx.types);
1238
- } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.MJButtonDirective, i4.LoadingComponent, i5.CredentialEditPanelComponent], styles: [".list-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.stat-item.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.stat-item.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.stat-item.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--mj-bg-surface);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin-right: 8px;\n}\n\n.search-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-border-default);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 10px;\n}\n\n.search-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-text-secondary);\n color: var(--mj-text-inverse);\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n font-size: 14px;\n color: var(--mj-text-primary);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.results-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n\n\n.bulk-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n\n\n.credentials-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.created-info[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.credentials-table-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n.col-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name[_ngcontent-%COMP%] {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell[_ngcontent-%COMP%] i.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell[_ngcontent-%COMP%] i.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info[_ngcontent-%COMP%] .credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info[_ngcontent-%COMP%] .credential-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type[_ngcontent-%COMP%], \n.col-category[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.category-pill[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires[_ngcontent-%COMP%], \n.col-used[_ngcontent-%COMP%] {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions[_ngcontent-%COMP%] {\n width: 120px;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover .table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.table-action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 12px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .header-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .search-container[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n\n .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .credentials-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n \n\n .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .bulk-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .credentials-table[_ngcontent-%COMP%] {\n min-width: 800px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 48px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin: 0;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n padding: 10px;\n }\n\n .view-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .results-info[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .credential-card[_ngcontent-%COMP%] {\n border-radius: 10px;\n }\n\n .card-select[_ngcontent-%COMP%] {\n top: 10px;\n left: 10px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .credential-type[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .category-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}"], changeDetection: 0 });
1220
+ } }, dependencies: [i1.NgClass, i2.MJButtonDirective, i2.MJPageHeaderComponent, i2.MJPageLayoutComponent, i2.MJPageBodyComponent, i2.MJPageSearchComponent, i2.MJFilterPopoverComponent, i2.MJFilterPanelComponent, i2.MJViewToggleComponent, i2.MJStatBadgeComponent, i2.MJRefreshButtonComponent, i3.LoadingComponent, i4.CredentialEditPanelComponent], styles: ["\n\n.bulk-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n\n\n.credentials-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.created-info[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.credentials-table-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n.col-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name[_ngcontent-%COMP%] {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell[_ngcontent-%COMP%] i.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell[_ngcontent-%COMP%] i.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell[_ngcontent-%COMP%] i.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info[_ngcontent-%COMP%] .credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info[_ngcontent-%COMP%] .credential-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type[_ngcontent-%COMP%], \n.col-category[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.category-pill[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires[_ngcontent-%COMP%], \n.col-used[_ngcontent-%COMP%] {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions[_ngcontent-%COMP%] {\n width: 120px;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover .table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.table-action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 12px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .header-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .search-container[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n\n .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .credentials-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n \n\n .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .bulk-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .credentials-table[_ngcontent-%COMP%] {\n min-width: 800px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 48px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin: 0;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n padding: 10px;\n }\n\n .view-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .results-info[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .credential-card[_ngcontent-%COMP%] {\n border-radius: 10px;\n }\n\n .card-select[_ngcontent-%COMP%] {\n top: 10px;\n left: 10px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .credential-type[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .category-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}"], changeDetection: 0 });
1239
1221
  };
1240
1222
  CredentialsListResourceComponent = __decorate([
1241
1223
  RegisterClass(BaseResourceComponent, 'CredentialsListResource')
@@ -1243,10 +1225,10 @@ CredentialsListResourceComponent = __decorate([
1243
1225
  export { CredentialsListResourceComponent };
1244
1226
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsListResourceComponent, [{
1245
1227
  type: Component,
1246
- args: [{ standalone: false, selector: 'mj-credentials-list-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".list-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n/* Header */\n.list-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n.header-stats {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.stat-item i {\n font-size: 12px;\n}\n\n.stat-item.active {\n color: var(--mj-status-success);\n}\n\n.stat-item.warning {\n color: var(--mj-status-warning);\n}\n\n.stat-item.danger {\n color: var(--mj-status-error);\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.btn-primary i {\n font-size: 13px;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--mj-bg-surface);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container {\n display: flex;\n align-items: center;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container i {\n color: var(--mj-text-secondary);\n margin-right: 8px;\n}\n\n.search-container input {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-border-default);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 10px;\n}\n\n.search-clear:hover {\n background: var(--mj-text-secondary);\n color: var(--mj-text-inverse);\n}\n\n.filter-select {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n font-size: 14px;\n color: var(--mj-text-primary);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n}\n\n.results-info {\n font-size: 13px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.view-toggle {\n display: flex;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn:hover {\n color: var(--mj-brand-primary);\n}\n\n.view-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n/* Bulk Actions Bar */\n.bulk-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n/* Credentials Grid */\n.credentials-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon i {\n font-size: 18px;\n}\n\n.card-title {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card:hover .card-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n}\n\n.card-body {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge i {\n font-size: 10px;\n}\n\n.status-badge.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning i {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger i {\n color: var(--mj-status-error);\n}\n\n.card-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag i {\n font-size: 10px;\n}\n\n.created-info {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n/* Table View */\n.credentials-table-container {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table thead {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table td {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table tbody tr {\n transition: background 0.2s ease;\n}\n\n.credentials-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table tbody tr.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table tbody tr.expired {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select {\n width: 40px;\n}\n\n.col-select input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell i {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell i.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell i.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell i.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell i.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info .credential-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info .credential-desc {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type,\n.col-category {\n white-space: nowrap;\n}\n\n.category-pill {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status {\n white-space: nowrap;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires,\n.col-used {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions {\n width: 120px;\n}\n\n.table-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table tbody tr:hover .table-actions {\n opacity: 1;\n}\n\n.table-action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger:hover {\n background: var(--mj-status-error);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state .btn-link {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state .btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state .btn-primary {\n margin-top: 0;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .list-container {\n padding: 16px;\n }\n\n .list-header {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title {\n font-size: 20px;\n }\n\n .header-stats {\n gap: 12px;\n }\n\n .stat-item {\n font-size: 12px;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .header-actions .btn-primary {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left {\n flex-direction: column;\n }\n\n .search-container {\n min-width: 100%;\n }\n\n .filter-select {\n width: 100%;\n }\n\n .toolbar-right {\n justify-content: space-between;\n }\n\n .credentials-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n /* Make card actions always visible on mobile */\n .card-actions {\n opacity: 1;\n }\n\n .card-header {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon {\n width: 38px;\n height: 38px;\n }\n\n .card-icon i {\n font-size: 16px;\n }\n\n .bulk-actions {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container {\n overflow-x: auto;\n }\n\n .credentials-table {\n min-width: 800px;\n }\n\n .empty-state {\n padding: 48px 20px;\n }\n\n .empty-icon {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon i {\n font-size: 28px;\n }\n\n .empty-state h3 {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container {\n padding: 12px;\n }\n\n .list-title {\n font-size: 18px;\n }\n\n .header-stats {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary span {\n display: none;\n }\n\n .btn-primary i {\n margin: 0;\n }\n\n .toolbar {\n padding: 10px;\n }\n\n .view-toggle {\n display: none;\n }\n\n .results-info {\n font-size: 12px;\n }\n\n .credential-card {\n border-radius: 10px;\n }\n\n .card-select {\n top: 10px;\n left: 10px;\n }\n\n .card-header {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name {\n font-size: 14px;\n }\n\n .credential-type {\n font-size: 11px;\n }\n\n .action-btn {\n width: 28px;\n height: 28px;\n }\n\n .status-badge {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta {\n gap: 8px;\n }\n\n .meta-item {\n font-size: 11px;\n }\n\n .category-tag {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info {\n font-size: 10px;\n }\n\n .empty-state {\n padding: 32px 16px;\n }\n\n .empty-icon {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon i {\n font-size: 24px;\n }\n\n .empty-state h3 {\n font-size: 16px;\n }\n\n .empty-state p {\n font-size: 13px;\n }\n}\n"] }]
1228
+ args: [{ standalone: false, selector: 'mj-credentials-list-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["/* Bulk Actions Bar */\n.bulk-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-brand-primary);\n border-radius: 10px;\n margin-bottom: 16px;\n color: var(--mj-text-inverse);\n}\n\n.bulk-info {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link:hover {\n color: var(--mj-text-inverse);\n}\n\n.bulk-buttons {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-bg-surface) 20%, transparent);\n border: 1px solid color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 30%, transparent);\n}\n\n.btn-bulk.danger {\n background: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.btn-bulk.danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n/* Credentials Grid */\n.credentials-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.credential-card.expired {\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n}\n\n.credential-card.expiring {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, transparent);\n}\n\n.card-select {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.card-icon {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.card-icon.expired {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.card-icon.expiring {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n}\n\n.card-icon i {\n font-size: 18px;\n}\n\n.card-title {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.card-actions {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card:hover .card-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n}\n\n.card-body {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge i {\n font-size: 10px;\n}\n\n.status-badge.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.credential-description {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.warning {\n color: var(--mj-status-warning);\n}\n\n.meta-item.warning i {\n color: var(--mj-status-warning);\n}\n\n.meta-item.danger {\n color: var(--mj-status-error);\n}\n\n.meta-item.danger i {\n color: var(--mj-status-error);\n}\n\n.card-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.category-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag i {\n font-size: 10px;\n}\n\n.created-info {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n/* Table View */\n.credentials-table-container {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table thead {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.credentials-table td {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.credentials-table tbody tr {\n transition: background 0.2s ease;\n}\n\n.credentials-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.credentials-table tbody tr.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.credentials-table tbody tr.expired {\n background: color-mix(in srgb, var(--mj-status-error) 3%, transparent);\n}\n\n.col-select {\n width: 40px;\n}\n\n.col-select input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.col-name {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell i {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell i.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.name-cell i.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.name-cell i.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.name-cell i.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.name-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info .credential-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.name-info .credential-desc {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type,\n.col-category {\n white-space: nowrap;\n}\n\n.category-pill {\n display: inline-block;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status {\n white-space: nowrap;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-pill.inactive {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-pill.expired {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-pill.expiring {\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.col-expires,\n.col-used {\n white-space: nowrap;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.col-expires.warning {\n color: var(--mj-status-warning);\n font-weight: 500;\n}\n\n.col-expires.danger {\n color: var(--mj-status-error);\n font-weight: 500;\n}\n\n.col-actions {\n width: 120px;\n}\n\n.table-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table tbody tr:hover .table-actions {\n opacity: 1;\n}\n\n.table-action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.table-action-btn.danger:hover {\n background: var(--mj-status-error);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state .btn-link {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state .btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.empty-state .btn-primary {\n margin-top: 0;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .list-container {\n padding: 16px;\n }\n\n .list-header {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title {\n font-size: 20px;\n }\n\n .header-stats {\n gap: 12px;\n }\n\n .stat-item {\n font-size: 12px;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .header-actions .btn-primary {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left {\n flex-direction: column;\n }\n\n .search-container {\n min-width: 100%;\n }\n\n .filter-select {\n width: 100%;\n }\n\n .toolbar-right {\n justify-content: space-between;\n }\n\n .credentials-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n /* Make card actions always visible on mobile */\n .card-actions {\n opacity: 1;\n }\n\n .card-header {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon {\n width: 38px;\n height: 38px;\n }\n\n .card-icon i {\n font-size: 16px;\n }\n\n .bulk-actions {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container {\n overflow-x: auto;\n }\n\n .credentials-table {\n min-width: 800px;\n }\n\n .empty-state {\n padding: 48px 20px;\n }\n\n .empty-icon {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon i {\n font-size: 28px;\n }\n\n .empty-state h3 {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container {\n padding: 12px;\n }\n\n .list-title {\n font-size: 18px;\n }\n\n .header-stats {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary span {\n display: none;\n }\n\n .btn-primary i {\n margin: 0;\n }\n\n .toolbar {\n padding: 10px;\n }\n\n .view-toggle {\n display: none;\n }\n\n .results-info {\n font-size: 12px;\n }\n\n .credential-card {\n border-radius: 10px;\n }\n\n .card-select {\n top: 10px;\n left: 10px;\n }\n\n .card-header {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name {\n font-size: 14px;\n }\n\n .credential-type {\n font-size: 11px;\n }\n\n .action-btn {\n width: 28px;\n height: 28px;\n }\n\n .status-badge {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta {\n gap: 8px;\n }\n\n .meta-item {\n font-size: 11px;\n }\n\n .category-tag {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info {\n font-size: 10px;\n }\n\n .empty-state {\n padding: 32px 16px;\n }\n\n .empty-icon {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon i {\n font-size: 24px;\n }\n\n .empty-state h3 {\n font-size: 16px;\n }\n\n .empty-state p {\n font-size: 13px;\n }\n}\n"] }]
1247
1229
  }], () => [{ type: i0.ChangeDetectorRef }], { editPanel: [{
1248
1230
  type: ViewChild,
1249
1231
  args: ['editPanel']
1250
1232
  }] }); })();
1251
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsListResourceComponent, { className: "CredentialsListResourceComponent", filePath: "src/Credentials/components/credentials-list-resource.component.ts", lineNumber: 20 }); })();
1233
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsListResourceComponent, { className: "CredentialsListResourceComponent", filePath: "src/Credentials/components/credentials-list-resource.component.ts", lineNumber: 21 }); })();
1252
1234
  //# sourceMappingURL=credentials-list-resource.component.js.map