@memberjunction/ng-dashboards 5.37.0 → 5.39.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 (328) hide show
  1. package/README.md +46 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +89 -842
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1353 -7683
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  31. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  33. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  35. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  37. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  39. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  41. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +235 -0
  43. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1735 -0
  45. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  47. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  49. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  50. package/dist/AI/components/autotagging/shared/classify.format.d.ts +43 -0
  51. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/shared/classify.format.js +209 -0
  53. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  54. package/dist/AI/components/autotagging/shared/classify.types.d.ts +276 -0
  55. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  57. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  58. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  59. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  61. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +40 -0
  63. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/tabs/history-tab.component.js +402 -0
  65. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  67. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  69. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +122 -0
  71. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +752 -0
  73. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  74. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +166 -0
  75. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1384 -0
  77. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  78. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +70 -0
  79. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +448 -0
  81. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  83. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  85. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +47 -0
  87. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/types-tab.component.js +220 -0
  89. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  90. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +293 -289
  91. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  92. package/dist/AI/components/models/model-management.component.js +209 -208
  93. package/dist/AI/components/models/model-management.component.js.map +1 -1
  94. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  95. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  96. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  97. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  98. package/dist/AI/components/system/system-configuration.component.js +17 -17
  99. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  100. package/dist/AI/components/tags/tags-resource.component.js +550 -532
  101. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  102. package/dist/AI/components/vectors/vector-management-resource.component.js +1 -1
  103. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  104. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  105. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  106. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  107. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  108. package/dist/AI/services/cache-metrics.d.ts +50 -0
  109. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  110. package/dist/AI/services/cache-metrics.js +43 -0
  111. package/dist/AI/services/cache-metrics.js.map +1 -0
  112. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  113. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  114. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  115. package/dist/Actions/components/actions-overview.component.js +141 -141
  116. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  117. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  118. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  120. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  122. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  123. package/dist/Admin/admin-data-schema.component.js +2 -2
  124. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  125. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  126. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  127. package/dist/Admin/admin-identity-access.component.js +2 -2
  128. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  129. package/dist/Admin/admin-monitoring.component.js +2 -2
  130. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  131. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  132. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  133. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  134. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  135. package/dist/Communication/communication-logs-resource.component.js +72 -50
  136. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  137. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  138. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  139. package/dist/Communication/communication-providers-resource.component.js +52 -51
  140. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  141. package/dist/Communication/communication-runs-resource.component.js +39 -38
  142. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  143. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  144. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  145. package/dist/Communication/communication-templates-resource.component.js +92 -89
  146. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  147. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +73 -1
  148. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  149. package/dist/ComponentStudio/component-studio-dashboard.component.js +512 -127
  150. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  151. package/dist/ComponentStudio/component-studio-resource.component.d.ts +22 -0
  152. package/dist/ComponentStudio/component-studio-resource.component.d.ts.map +1 -0
  153. package/dist/ComponentStudio/component-studio-resource.component.js +55 -0
  154. package/dist/ComponentStudio/component-studio-resource.component.js.map +1 -0
  155. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +104 -45
  156. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  157. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +234 -331
  158. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.d.ts +54 -0
  160. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.d.ts.map +1 -0
  161. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.js +339 -0
  162. package/dist/ComponentStudio/components/form-builder/form-builder-canvas.component.js.map +1 -0
  163. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.d.ts +65 -0
  164. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.d.ts.map +1 -0
  165. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.js +492 -0
  166. package/dist/ComponentStudio/components/form-builder/form-builder-right-panel.component.js.map +1 -0
  167. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.d.ts +88 -0
  168. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.d.ts.map +1 -0
  169. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.js +457 -0
  170. package/dist/ComponentStudio/components/form-builder/form-builder-tab.component.js.map +1 -0
  171. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +106 -0
  172. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -0
  173. package/dist/ComponentStudio/components/form-override-dialog.component.js +478 -0
  174. package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -0
  175. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +54 -0
  176. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  177. package/dist/ComponentStudio/components/workspace/component-preview.component.js +361 -50
  178. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  179. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +10 -0
  180. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  181. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +114 -45
  182. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  183. package/dist/ComponentStudio/services/canvas-to-code.d.ts +32 -0
  184. package/dist/ComponentStudio/services/canvas-to-code.d.ts.map +1 -0
  185. package/dist/ComponentStudio/services/canvas-to-code.js +347 -0
  186. package/dist/ComponentStudio/services/canvas-to-code.js.map +1 -0
  187. package/dist/ComponentStudio/services/code-to-canvas.d.ts +32 -0
  188. package/dist/ComponentStudio/services/code-to-canvas.d.ts.map +1 -0
  189. package/dist/ComponentStudio/services/code-to-canvas.js +92 -0
  190. package/dist/ComponentStudio/services/code-to-canvas.js.map +1 -0
  191. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +29 -0
  192. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  193. package/dist/ComponentStudio/services/component-studio-state.service.js +76 -0
  194. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  195. package/dist/ComponentStudio/services/entity-form-override.service.d.ts +86 -0
  196. package/dist/ComponentStudio/services/entity-form-override.service.d.ts.map +1 -0
  197. package/dist/ComponentStudio/services/entity-form-override.service.js +246 -0
  198. package/dist/ComponentStudio/services/entity-form-override.service.js.map +1 -0
  199. package/dist/ComponentStudio/services/field-binding-scanner.d.ts +29 -0
  200. package/dist/ComponentStudio/services/field-binding-scanner.d.ts.map +1 -0
  201. package/dist/ComponentStudio/services/field-binding-scanner.js +110 -0
  202. package/dist/ComponentStudio/services/field-binding-scanner.js.map +1 -0
  203. package/dist/ComponentStudio/services/form-canvas-model.d.ts +56 -0
  204. package/dist/ComponentStudio/services/form-canvas-model.d.ts.map +1 -0
  205. package/dist/ComponentStudio/services/form-canvas-model.js +35 -0
  206. package/dist/ComponentStudio/services/form-canvas-model.js.map +1 -0
  207. package/dist/ComponentStudio/services/form-host-props-fixture.d.ts +10 -0
  208. package/dist/ComponentStudio/services/form-host-props-fixture.d.ts.map +1 -0
  209. package/dist/ComponentStudio/services/form-host-props-fixture.js +10 -0
  210. package/dist/ComponentStudio/services/form-host-props-fixture.js.map +1 -0
  211. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  212. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  213. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  214. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  215. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  216. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  217. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  218. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  219. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  220. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  221. package/dist/DataExplorer/data-explorer-dashboard.component.js +2 -2
  222. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  223. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  224. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  225. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  226. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  227. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  228. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  229. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  230. package/dist/DevTools/app-state-inspector.component.js +18 -17
  231. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  232. package/dist/DevTools/class-registry.component.js +88 -85
  233. package/dist/DevTools/class-registry.component.js.map +1 -1
  234. package/dist/DevTools/event-monitor.component.js +155 -150
  235. package/dist/DevTools/event-monitor.component.js.map +1 -1
  236. package/dist/DevTools/graphql-console.component.js +245 -243
  237. package/dist/DevTools/graphql-console.component.js.map +1 -1
  238. package/dist/DevTools/layout-inspector.component.js +18 -17
  239. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  240. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  241. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  242. package/dist/FormBuilder/form-builder-resource.component.d.ts +964 -0
  243. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -0
  244. package/dist/FormBuilder/form-builder-resource.component.js +4487 -0
  245. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -0
  246. package/dist/FormBuilder/form-builder-version-rail.helpers.d.ts +55 -0
  247. package/dist/FormBuilder/form-builder-version-rail.helpers.d.ts.map +1 -0
  248. package/dist/FormBuilder/form-builder-version-rail.helpers.js +73 -0
  249. package/dist/FormBuilder/form-builder-version-rail.helpers.js.map +1 -0
  250. package/dist/Home/home-application.d.ts +21 -1
  251. package/dist/Home/home-application.d.ts.map +1 -1
  252. package/dist/Home/home-application.js +60 -8
  253. package/dist/Home/home-application.js.map +1 -1
  254. package/dist/Home/home-dashboard.component.js +2 -2
  255. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  256. package/dist/Integration/components/activity/activity.component.js +236 -229
  257. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  258. package/dist/Integration/components/connections/connections.component.js +390 -389
  259. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  260. package/dist/Integration/components/overview/overview.component.js +2 -2
  261. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +2 -2
  262. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  263. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +45 -44
  264. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  265. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  266. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  267. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  268. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  269. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  270. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  271. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  272. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  273. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  274. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  275. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  276. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  277. package/dist/MCP/mcp-dashboard.component.js +443 -438
  278. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  279. package/dist/QueryBrowser/query-browser-resource.component.d.ts +14 -14
  280. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  281. package/dist/QueryBrowser/query-browser-resource.component.js +11 -10
  282. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  283. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  284. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  285. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  286. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  287. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  288. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  289. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  290. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  291. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  292. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  293. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  294. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  295. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  296. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  297. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  298. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  299. package/dist/Testing/components/testing-explorer.component.js +436 -427
  300. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  301. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  302. package/dist/Testing/components/testing-runs.component.js +116 -115
  303. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  304. package/dist/Testing/testing-dashboard.component.js +6 -7
  305. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  306. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  307. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  308. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  309. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  310. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  311. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  312. package/dist/ai-dashboards.module.d.ts +47 -35
  313. package/dist/ai-dashboards.module.d.ts.map +1 -1
  314. package/dist/ai-dashboards.module.js +40 -1
  315. package/dist/ai-dashboards.module.js.map +1 -1
  316. package/dist/communication-dashboards.module.d.ts +1 -1
  317. package/dist/communication-dashboards.module.d.ts.map +1 -1
  318. package/dist/communication-dashboards.module.js +7 -1
  319. package/dist/communication-dashboards.module.js.map +1 -1
  320. package/dist/component-studio-dashboards.module.d.ts +34 -22
  321. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  322. package/dist/component-studio-dashboards.module.js +65 -9
  323. package/dist/component-studio-dashboards.module.js.map +1 -1
  324. package/dist/testing-dashboards.module.d.ts +4 -5
  325. package/dist/testing-dashboards.module.d.ts.map +1 -1
  326. package/dist/testing-dashboards.module.js +7 -5
  327. package/dist/testing-dashboards.module.js.map +1 -1
  328. package/package.json +55 -53
@@ -28,54 +28,55 @@ function CredentialsListResourceComponent_Conditional_5_Template(rf, ctx) { if (
28
28
  const ctx_r1 = i0.ɵɵnextContext();
29
29
  i0.ɵɵproperty("Count", ctx_r1.getExpiredCount());
30
30
  } }
31
- function CredentialsListResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
31
+ function CredentialsListResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
32
32
  const _r3 = i0.ɵɵgetCurrentView();
33
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()); });
34
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewCredential()); });
35
35
  i0.ɵɵelement(1, "i", 17);
36
- i0.ɵɵtext(2, " New Credential ");
37
- i0.ɵɵelementEnd();
36
+ i0.ɵɵelementStart(2, "span", 18);
37
+ i0.ɵɵtext(3, "New Credential");
38
+ i0.ɵɵelementEnd()();
38
39
  } }
39
40
  function CredentialsListResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
40
41
  i0.ɵɵelement(0, "mj-loading", 14);
41
42
  } }
42
43
  function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
43
44
  const _r5 = i0.ɵɵgetCurrentView();
44
- i0.ɵɵelementStart(0, "button", 28);
45
+ i0.ɵɵelementStart(0, "button", 29);
45
46
  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);
47
+ i0.ɵɵelement(1, "i", 30);
47
48
  i0.ɵɵtext(2, " Activate ");
48
49
  i0.ɵɵelementEnd();
49
50
  } }
50
51
  function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
51
52
  const _r6 = i0.ɵɵgetCurrentView();
52
- i0.ɵɵelementStart(0, "button", 28);
53
+ i0.ɵɵelementStart(0, "button", 29);
53
54
  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);
55
+ i0.ɵɵelement(1, "i", 31);
55
56
  i0.ɵɵtext(2, " Deactivate ");
56
57
  i0.ɵɵelementEnd();
57
58
  } }
58
59
  function CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
59
60
  const _r7 = i0.ɵɵgetCurrentView();
60
- i0.ɵɵelementStart(0, "button", 31);
61
+ i0.ɵɵelementStart(0, "button", 32);
61
62
  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);
63
+ i0.ɵɵelement(1, "i", 33);
63
64
  i0.ɵɵtext(2, " Delete ");
64
65
  i0.ɵɵelementEnd();
65
66
  } }
66
67
  function CredentialsListResourceComponent_Conditional_16_Conditional_0_Template(rf, ctx) { if (rf & 1) {
67
68
  const _r4 = i0.ɵɵgetCurrentView();
68
- i0.ɵɵelementStart(0, "div", 18)(1, "div", 22)(2, "span", 23);
69
+ i0.ɵɵelementStart(0, "div", 19)(1, "div", 23)(2, "span", 24);
69
70
  i0.ɵɵtext(3);
70
71
  i0.ɵɵelementEnd();
71
- i0.ɵɵelementStart(4, "button", 24);
72
+ i0.ɵɵelementStart(4, "button", 25);
72
73
  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()); });
73
74
  i0.ɵɵtext(5, "Clear selection");
74
75
  i0.ɵɵelementEnd()();
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);
76
+ i0.ɵɵelementStart(6, "div", 26);
77
+ i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_7_Template, 3, 0, "button", 27);
78
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_8_Template, 3, 0, "button", 27);
79
+ i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_0_Conditional_9_Template, 3, 0, "button", 28);
79
80
  i0.ɵɵelementEnd()();
80
81
  } if (rf & 2) {
81
82
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -90,7 +91,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_0_Template(
90
91
  } }
91
92
  function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
92
93
  const _r9 = i0.ɵɵgetCurrentView();
93
- i0.ɵɵelementStart(0, "div", 35)(1, "input", 54);
94
+ i0.ɵɵelementStart(0, "div", 36)(1, "input", 55);
94
95
  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)); });
95
96
  i0.ɵɵelementEnd()();
96
97
  } if (rf & 2) {
@@ -101,7 +102,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Con
101
102
  } }
102
103
  function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
103
104
  const _r11 = i0.ɵɵgetCurrentView();
104
- i0.ɵɵelementStart(0, "button", 55);
105
+ i0.ɵɵelementStart(0, "button", 56);
105
106
  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)); });
106
107
  i0.ɵɵelement(1, "i");
107
108
  i0.ɵɵelementEnd();
@@ -113,20 +114,20 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Con
113
114
  } }
114
115
  function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
115
116
  const _r12 = i0.ɵɵgetCurrentView();
116
- i0.ɵɵelementStart(0, "button", 56);
117
+ i0.ɵɵelementStart(0, "button", 57);
117
118
  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);
119
+ i0.ɵɵelement(1, "i", 58);
119
120
  i0.ɵɵelementEnd();
120
121
  } }
121
122
  function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
122
123
  const _r13 = i0.ɵɵgetCurrentView();
123
- i0.ɵɵelementStart(0, "button", 58);
124
+ i0.ɵɵelementStart(0, "button", 59);
124
125
  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);
126
+ i0.ɵɵelement(1, "i", 33);
126
127
  i0.ɵɵelementEnd();
127
128
  } }
128
129
  function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
129
- i0.ɵɵelementStart(0, "p", 47);
130
+ i0.ɵɵelementStart(0, "p", 48);
130
131
  i0.ɵɵtext(1);
131
132
  i0.ɵɵelementEnd();
132
133
  } if (rf & 2) {
@@ -135,15 +136,15 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Con
135
136
  i0.ɵɵtextInterpolate1(" ", credential_r10.Description, " ");
136
137
  } }
137
138
  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);
139
+ i0.ɵɵelementStart(0, "div", 50);
140
+ i0.ɵɵelement(1, "i", 60);
140
141
  i0.ɵɵelementStart(2, "span");
141
142
  i0.ɵɵtext(3, "Default");
142
143
  i0.ɵɵelementEnd()();
143
144
  } }
144
145
  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);
146
+ i0.ɵɵelementStart(0, "div", 50);
147
+ i0.ɵɵelement(1, "i", 61);
147
148
  i0.ɵɵelementStart(2, "span");
148
149
  i0.ɵɵtext(3);
149
150
  i0.ɵɵelementEnd()();
@@ -155,8 +156,8 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Con
155
156
  i0.ɵɵtextInterpolate2("", ctx_r1.isExpired(credential_r10) ? "Expired" : "Expires", ": ", ctx_r1.formatDate(credential_r10.ExpiresAt));
156
157
  } }
157
158
  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);
159
+ i0.ɵɵelementStart(0, "div", 50);
160
+ i0.ɵɵelement(1, "i", 62);
160
161
  i0.ɵɵelementStart(2, "span");
161
162
  i0.ɵɵtext(3);
162
163
  i0.ɵɵelementEnd()();
@@ -167,8 +168,8 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Con
167
168
  i0.ɵɵtextInterpolate1("Last used: ", ctx_r1.formatDate(credential_r10.LastUsedAt));
168
169
  } }
169
170
  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);
171
+ i0.ɵɵelementStart(0, "div", 53);
172
+ i0.ɵɵelement(1, "i", 63);
172
173
  i0.ɵɵtext(2);
173
174
  i0.ɵɵelementEnd();
174
175
  } if (rf & 2) {
@@ -178,37 +179,37 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Con
178
179
  } }
179
180
  function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
180
181
  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);
182
+ i0.ɵɵelementStart(0, "div", 35);
183
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_1_Template, 2, 1, "div", 36);
184
+ i0.ɵɵelementStart(2, "div", 37)(3, "div", 38);
184
185
  i0.ɵɵelement(4, "i");
185
186
  i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(5, "div", 38)(6, "div", 39);
187
+ i0.ɵɵelementStart(5, "div", 39)(6, "div", 40);
187
188
  i0.ɵɵtext(7);
188
189
  i0.ɵɵelementEnd();
189
- i0.ɵɵelementStart(8, "div", 40);
190
+ i0.ɵɵelementStart(8, "div", 41);
190
191
  i0.ɵɵtext(9);
191
192
  i0.ɵɵelementEnd()();
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);
193
+ i0.ɵɵelementStart(10, "div", 42);
194
+ i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_11_Template, 2, 3, "button", 43);
195
+ i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_12_Template, 2, 0, "button", 44);
196
+ i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_13_Template, 2, 0, "button", 45);
196
197
  i0.ɵɵelementEnd()();
197
- i0.ɵɵelementStart(14, "div", 45);
198
+ i0.ɵɵelementStart(14, "div", 46);
198
199
  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);
200
+ i0.ɵɵelementStart(15, "div", 47);
200
201
  i0.ɵɵelement(16, "i");
201
202
  i0.ɵɵtext(17);
202
203
  i0.ɵɵelementEnd();
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);
204
+ i0.ɵɵconditionalCreate(18, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_18_Template, 2, 1, "p", 48);
205
+ i0.ɵɵelementStart(19, "div", 49);
206
+ i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_20_Template, 4, 0, "div", 50);
207
+ i0.ɵɵconditionalCreate(21, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_21_Template, 4, 6, "div", 51);
208
+ i0.ɵɵconditionalCreate(22, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_22_Template, 4, 1, "div", 50);
208
209
  i0.ɵɵelementEnd()();
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);
210
+ i0.ɵɵelementStart(23, "div", 52);
211
+ i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Conditional_24_Template, 3, 1, "div", 53);
212
+ i0.ɵɵelementStart(25, "div", 54);
212
213
  i0.ɵɵtext(26);
213
214
  i0.ɵɵelementEnd()()();
214
215
  } if (rf & 2) {
@@ -251,8 +252,8 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Tem
251
252
  i0.ɵɵtextInterpolate1(" Created ", ctx_r1.formatDate(credential_r10.__mj_CreatedAt), " ");
252
253
  } }
253
254
  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);
255
+ i0.ɵɵelementStart(0, "div", 20);
256
+ i0.ɵɵrepeaterCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_For_2_Template, 27, 25, "div", 34, i0.ɵɵrepeaterTrackByIdentity);
256
257
  i0.ɵɵelementEnd();
257
258
  } if (rf & 2) {
258
259
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -261,7 +262,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_1_Template(
261
262
  } }
262
263
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
263
264
  const _r14 = i0.ɵɵgetCurrentView();
264
- i0.ɵɵelementStart(0, "th", 64)(1, "input", 54);
265
+ i0.ɵɵelementStart(0, "th", 65)(1, "input", 55);
265
266
  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()); });
266
267
  i0.ɵɵelementEnd()();
267
268
  } if (rf & 2) {
@@ -271,7 +272,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_2_Condition
271
272
  } }
272
273
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
273
274
  const _r16 = i0.ɵɵgetCurrentView();
274
- i0.ɵɵelementStart(0, "td", 64)(1, "input", 54);
275
+ i0.ɵɵelementStart(0, "td", 65)(1, "input", 55);
275
276
  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)); });
276
277
  i0.ɵɵelementEnd()();
277
278
  } if (rf & 2) {
@@ -281,7 +282,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Co
281
282
  i0.ɵɵproperty("checked", ctx_r1.selectedCredentials.has(credential_r17.ID));
282
283
  } }
283
284
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template(rf, ctx) { if (rf & 1) {
284
- i0.ɵɵelementStart(0, "span", 77);
285
+ i0.ɵɵelementStart(0, "span", 78);
285
286
  i0.ɵɵtext(1);
286
287
  i0.ɵɵelementEnd();
287
288
  } if (rf & 2) {
@@ -290,12 +291,12 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Co
290
291
  i0.ɵɵtextInterpolate(credential_r17.Description);
291
292
  } }
292
293
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
293
- i0.ɵɵelementStart(0, "span", 78);
294
+ i0.ɵɵelementStart(0, "span", 79);
294
295
  i0.ɵɵtext(1, "Default");
295
296
  i0.ɵɵelementEnd();
296
297
  } }
297
298
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template(rf, ctx) { if (rf & 1) {
298
- i0.ɵɵelementStart(0, "span", 79);
299
+ i0.ɵɵelementStart(0, "span", 80);
299
300
  i0.ɵɵtext(1);
300
301
  i0.ɵɵelementEnd();
301
302
  } if (rf & 2) {
@@ -310,7 +311,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Co
310
311
  } }
311
312
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
312
313
  const _r18 = i0.ɵɵgetCurrentView();
313
- i0.ɵɵelementStart(0, "button", 85);
314
+ i0.ɵɵelementStart(0, "button", 86);
314
315
  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)); });
315
316
  i0.ɵɵelement(1, "i");
316
317
  i0.ɵɵelementEnd();
@@ -322,53 +323,53 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Co
322
323
  } }
323
324
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
324
325
  const _r19 = i0.ɵɵgetCurrentView();
325
- i0.ɵɵelementStart(0, "button", 86);
326
+ i0.ɵɵelementStart(0, "button", 87);
326
327
  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);
328
+ i0.ɵɵelement(1, "i", 58);
328
329
  i0.ɵɵelementEnd();
329
330
  } }
330
331
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
331
332
  const _r20 = i0.ɵɵgetCurrentView();
332
- i0.ɵɵelementStart(0, "button", 87);
333
+ i0.ɵɵelementStart(0, "button", 88);
333
334
  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);
335
+ i0.ɵɵelement(1, "i", 33);
335
336
  i0.ɵɵelementEnd();
336
337
  } }
337
338
  function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template(rf, ctx) { if (rf & 1) {
338
339
  const _r15 = i0.ɵɵgetCurrentView();
339
340
  i0.ɵɵelementStart(0, "tr");
340
- i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template, 2, 1, "td", 64);
341
- i0.ɵɵelementStart(2, "td", 73);
341
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_1_Template, 2, 1, "td", 65);
342
+ i0.ɵɵelementStart(2, "td", 74);
342
343
  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);
344
+ i0.ɵɵelementStart(3, "div", 75);
345
+ i0.ɵɵelement(4, "i", 76);
346
+ i0.ɵɵelementStart(5, "div", 77)(6, "span", 40);
346
347
  i0.ɵɵtext(7);
347
348
  i0.ɵɵelementEnd();
348
- i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template, 2, 1, "span", 77);
349
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_8_Template, 2, 1, "span", 78);
349
350
  i0.ɵɵelementEnd();
350
- i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template, 2, 0, "span", 78);
351
+ i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_9_Template, 2, 0, "span", 79);
351
352
  i0.ɵɵelementEnd()();
352
- i0.ɵɵelementStart(10, "td", 66);
353
+ i0.ɵɵelementStart(10, "td", 67);
353
354
  i0.ɵɵtext(11);
354
355
  i0.ɵɵelementEnd();
355
- i0.ɵɵelementStart(12, "td", 67);
356
- i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template, 2, 1, "span", 79);
356
+ i0.ɵɵelementStart(12, "td", 68);
357
+ i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_13_Template, 2, 1, "span", 80);
357
358
  i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_14_Template, 2, 0, "span");
358
359
  i0.ɵɵelementEnd();
359
- i0.ɵɵelementStart(15, "td", 68)(16, "span", 80);
360
+ i0.ɵɵelementStart(15, "td", 69)(16, "span", 81);
360
361
  i0.ɵɵtext(17);
361
362
  i0.ɵɵelementEnd()();
362
- i0.ɵɵelementStart(18, "td", 69);
363
+ i0.ɵɵelementStart(18, "td", 70);
363
364
  i0.ɵɵtext(19);
364
365
  i0.ɵɵelementEnd();
365
- i0.ɵɵelementStart(20, "td", 70);
366
+ i0.ɵɵelementStart(20, "td", 71);
366
367
  i0.ɵɵtext(21);
367
368
  i0.ɵɵelementEnd();
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);
369
+ i0.ɵɵelementStart(22, "td", 72)(23, "div", 82);
370
+ i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_24_Template, 2, 3, "button", 83);
371
+ i0.ɵɵconditionalCreate(25, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_25_Template, 2, 0, "button", 84);
372
+ i0.ɵɵconditionalCreate(26, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Conditional_26_Template, 2, 0, "button", 85);
372
373
  i0.ɵɵelementEnd()()();
373
374
  } if (rf & 2) {
374
375
  const credential_r17 = ctx.$implicit;
@@ -409,31 +410,31 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Te
409
410
  i0.ɵɵconditional(ctx_r1.UserCanDelete ? 26 : -1);
410
411
  } }
411
412
  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);
413
+ i0.ɵɵelementStart(0, "div", 21)(1, "table", 64)(2, "thead")(3, "tr");
414
+ i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_16_Conditional_2_Conditional_4_Template, 2, 1, "th", 65);
415
+ i0.ɵɵelementStart(5, "th", 66);
415
416
  i0.ɵɵtext(6, "Name");
416
417
  i0.ɵɵelementEnd();
417
- i0.ɵɵelementStart(7, "th", 66);
418
+ i0.ɵɵelementStart(7, "th", 67);
418
419
  i0.ɵɵtext(8, "Type");
419
420
  i0.ɵɵelementEnd();
420
- i0.ɵɵelementStart(9, "th", 67);
421
+ i0.ɵɵelementStart(9, "th", 68);
421
422
  i0.ɵɵtext(10, "Category");
422
423
  i0.ɵɵelementEnd();
423
- i0.ɵɵelementStart(11, "th", 68);
424
+ i0.ɵɵelementStart(11, "th", 69);
424
425
  i0.ɵɵtext(12, "Status");
425
426
  i0.ɵɵelementEnd();
426
- i0.ɵɵelementStart(13, "th", 69);
427
+ i0.ɵɵelementStart(13, "th", 70);
427
428
  i0.ɵɵtext(14, "Expires");
428
429
  i0.ɵɵelementEnd();
429
- i0.ɵɵelementStart(15, "th", 70);
430
+ i0.ɵɵelementStart(15, "th", 71);
430
431
  i0.ɵɵtext(16, "Last Used");
431
432
  i0.ɵɵelementEnd();
432
- i0.ɵɵelementStart(17, "th", 71);
433
+ i0.ɵɵelementStart(17, "th", 72);
433
434
  i0.ɵɵtext(18, "Actions");
434
435
  i0.ɵɵelementEnd()()();
435
436
  i0.ɵɵelementStart(19, "tbody");
436
- i0.ɵɵrepeaterCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template, 27, 25, "tr", 72, i0.ɵɵrepeaterTrackByIdentity);
437
+ i0.ɵɵrepeaterCreate(20, CredentialsListResourceComponent_Conditional_16_Conditional_2_For_21_Template, 27, 25, "tr", 73, i0.ɵɵrepeaterTrackByIdentity);
437
438
  i0.ɵɵelementEnd()()();
438
439
  } if (rf & 2) {
439
440
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -446,7 +447,7 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Condition
446
447
  const _r21 = i0.ɵɵgetCurrentView();
447
448
  i0.ɵɵelementStart(0, "p");
448
449
  i0.ɵɵtext(1, " No credentials match your current filters. ");
449
- i0.ɵɵelementStart(2, "button", 24);
450
+ i0.ɵɵelementStart(2, "button", 25);
450
451
  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()); });
451
452
  i0.ɵɵtext(3, "Clear filters");
452
453
  i0.ɵɵelementEnd()();
@@ -458,22 +459,22 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Condition
458
459
  } }
459
460
  function CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
460
461
  const _r22 = i0.ɵɵgetCurrentView();
461
- i0.ɵɵelementStart(0, "button", 91);
462
+ i0.ɵɵelementStart(0, "button", 92);
462
463
  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
464
  i0.ɵɵelement(1, "i", 17);
464
465
  i0.ɵɵtext(2, " Create Credential ");
465
466
  i0.ɵɵelementEnd();
466
467
  } }
467
468
  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);
469
+ i0.ɵɵelementStart(0, "div", 22)(1, "div", 89);
470
+ i0.ɵɵelement(2, "i", 90);
470
471
  i0.ɵɵelementEnd();
471
472
  i0.ɵɵelementStart(3, "h3");
472
473
  i0.ɵɵtext(4, "No Credentials Found");
473
474
  i0.ɵɵelementEnd();
474
475
  i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_5_Template, 4, 0, "p");
475
476
  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);
477
+ i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_16_Conditional_3_Conditional_7_Template, 3, 0, "button", 91);
477
478
  i0.ɵɵelementEnd();
478
479
  } if (rf & 2) {
479
480
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -485,10 +486,10 @@ function CredentialsListResourceComponent_Conditional_16_Conditional_3_Template(
485
486
  i0.ɵɵconditional(ctx_r1.UserCanCreate && !ctx_r1.searchText && !ctx_r1.selectedTypeFilter && !ctx_r1.selectedStatusFilter ? 7 : -1);
486
487
  } }
487
488
  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);
489
+ i0.ɵɵconditionalCreate(0, CredentialsListResourceComponent_Conditional_16_Conditional_0_Template, 10, 4, "div", 19);
490
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_16_Conditional_1_Template, 3, 0, "div", 20);
491
+ i0.ɵɵconditionalCreate(2, CredentialsListResourceComponent_Conditional_16_Conditional_2_Template, 22, 1, "div", 21);
492
+ i0.ɵɵconditionalCreate(3, CredentialsListResourceComponent_Conditional_16_Conditional_3_Template, 8, 3, "div", 22);
492
493
  } if (rf & 2) {
493
494
  const ctx_r1 = i0.ɵɵnextContext();
494
495
  i0.ɵɵconditional(ctx_r1.selectedCredentials.size > 0 ? 0 : -1);
@@ -1163,28 +1164,28 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
1163
1164
  } if (rf & 2) {
1164
1165
  let _t;
1165
1166
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.editPanel = _t.first);
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) {
1167
+ } }, 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, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search credentials...", 3, "ValueChange", "Value"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "KeyChange", "Options", "ActiveKey"], ["text", "Loading credentials..."], [3, "saved", "deleted", "credentialTypes"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "action-btn-label"], [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) {
1167
1168
  const _r1 = i0.ɵɵgetCurrentView();
1168
1169
  i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2);
1169
1170
  i0.ɵɵelement(3, "mj-stat-badge", 3);
1170
1171
  i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_4_Template, 1, 1, "mj-stat-badge", 4);
1171
1172
  i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_5_Template, 1, 1, "mj-stat-badge", 5);
1172
1173
  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()); });
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)); });
1174
+ i0.ɵɵelementStart(6, "div", 6)(7, "mj-refresh-button", 7);
1175
+ i0.ɵɵlistener("Clicked", function CredentialsListResourceComponent_Template_mj_refresh_button_Clicked_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
1180
1176
  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()); });
1177
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_8_Template, 4, 0, "button", 8);
1183
1178
  i0.ɵɵelementEnd();
1184
- i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_11_Template, 3, 0, "button", 11);
1179
+ i0.ɵɵelementStart(9, "div", 9)(10, "mj-page-search", 10);
1180
+ i0.ɵɵlistener("ValueChange", function CredentialsListResourceComponent_Template_mj_page_search_ValueChange_10_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
1185
1181
  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)); });
1182
+ i0.ɵɵelementStart(11, "mj-filter-popover", 11);
1183
+ i0.ɵɵlistener("ClearAllRequested", function CredentialsListResourceComponent_Template_mj_filter_popover_ClearAllRequested_11_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetFilters()); });
1184
+ i0.ɵɵelementStart(12, "mj-filter-panel", 12);
1185
+ i0.ɵɵlistener("ValuesChange", function CredentialsListResourceComponent_Template_mj_filter_panel_ValuesChange_12_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFilterValuesChange($event)); })("Reset", function CredentialsListResourceComponent_Template_mj_filter_panel_Reset_12_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetFilters()); });
1186
+ i0.ɵɵelementEnd()();
1187
+ i0.ɵɵelementStart(13, "mj-view-toggle", 13);
1188
+ i0.ɵɵlistener("KeyChange", function CredentialsListResourceComponent_Template_mj_view_toggle_KeyChange_13_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setViewMode($event)); });
1188
1189
  i0.ɵɵelementEnd()()();
1189
1190
  i0.ɵɵelementStart(14, "mj-page-body");
1190
1191
  i0.ɵɵconditionalCreate(15, CredentialsListResourceComponent_Conditional_15_Template, 1, 0, "mj-loading", 14);
@@ -1200,17 +1201,17 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
1200
1201
  i0.ɵɵadvance();
1201
1202
  i0.ɵɵconditional(ctx.getExpiredCount() > 0 ? 5 : -1);
1202
1203
  i0.ɵɵadvance(2);
1204
+ i0.ɵɵproperty("Loading", ctx.isLoading);
1205
+ i0.ɵɵadvance();
1206
+ i0.ɵɵconditional(ctx.UserCanCreate ? 8 : -1);
1207
+ i0.ɵɵadvance(2);
1208
+ i0.ɵɵproperty("Value", ctx.searchText);
1209
+ i0.ɵɵadvance();
1203
1210
  i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
1204
1211
  i0.ɵɵadvance();
1205
1212
  i0.ɵɵproperty("Fields", ctx.FilterFields)("Values", ctx.FilterValues);
1206
1213
  i0.ɵɵadvance();
1207
1214
  i0.ɵɵproperty("Options", ctx.viewOptions)("ActiveKey", ctx.viewMode);
1208
- i0.ɵɵadvance();
1209
- i0.ɵɵproperty("Loading", ctx.isLoading);
1210
- i0.ɵɵadvance();
1211
- i0.ɵɵconditional(ctx.UserCanCreate ? 11 : -1);
1212
- i0.ɵɵadvance(2);
1213
- i0.ɵɵproperty("Value", ctx.searchText);
1214
1215
  i0.ɵɵadvance(2);
1215
1216
  i0.ɵɵconditional(ctx.isLoading ? 15 : -1);
1216
1217
  i0.ɵɵadvance();
@@ -1225,7 +1226,7 @@ CredentialsListResourceComponent = __decorate([
1225
1226
  export { CredentialsListResourceComponent };
1226
1227
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsListResourceComponent, [{
1227
1228
  type: Component,
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"] }]
1229
+ 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-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> <span class=\"action-btn-label\">New Credential</span>\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 <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 </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"] }]
1229
1230
  }], () => [{ type: i0.ChangeDetectorRef }], { editPanel: [{
1230
1231
  type: ViewChild,
1231
1232
  args: ['editPanel']