@memberjunction/ng-dashboards 3.4.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/dist/AI/ai-dashboard.component.d.ts +62 -0
  2. package/dist/AI/ai-dashboard.component.d.ts.map +1 -0
  3. package/dist/AI/ai-dashboard.component.js +338 -0
  4. package/dist/AI/ai-dashboard.component.js.map +1 -0
  5. package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
  6. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-configuration.component.js +103 -44
  8. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  9. package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
  10. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  11. package/dist/AI/components/agents/agent-editor.component.js +149 -211
  12. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  13. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  14. package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
  15. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  16. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  17. package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
  18. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  19. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  20. package/dist/AI/components/charts/time-series-chart.component.js +6 -7
  21. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  22. package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
  23. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  24. package/dist/AI/components/execution-monitoring.component.js +33 -37
  25. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  26. package/dist/AI/components/models/model-management-v2.component.d.ts +96 -0
  27. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -0
  28. package/dist/AI/components/models/model-management-v2.component.js +981 -0
  29. package/dist/AI/components/models/model-management-v2.component.js.map +1 -0
  30. package/dist/AI/components/models/model-management.component.d.ts +3 -6
  31. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  32. package/dist/AI/components/models/model-management.component.js +34 -27
  33. package/dist/AI/components/models/model-management.component.js.map +1 -1
  34. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  35. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
  36. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  37. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
  39. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  40. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +97 -0
  41. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -0
  42. package/dist/AI/components/prompts/prompt-management-v2.component.js +811 -0
  43. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -0
  44. package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
  45. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/prompts/prompt-management.component.js +34 -32
  47. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  49. package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
  50. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  51. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  52. package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
  53. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  54. package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
  55. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.js +26 -27
  57. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  58. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  59. package/dist/AI/components/widgets/kpi-card.component.js +52 -42
  60. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  61. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  62. package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
  63. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  64. package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
  65. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  66. package/dist/APIKeys/api-applications-panel.component.js +193 -189
  67. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  68. package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
  69. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  70. package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
  71. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  72. package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
  73. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  74. package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
  75. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  76. package/dist/APIKeys/api-key-list.component.d.ts +0 -2
  77. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  78. package/dist/APIKeys/api-key-list.component.js +113 -114
  79. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  80. package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
  81. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  82. package/dist/APIKeys/api-keys-resource.component.js +294 -302
  83. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  84. package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
  85. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  86. package/dist/APIKeys/api-scopes-panel.component.js +151 -155
  87. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  88. package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
  89. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  90. package/dist/APIKeys/api-usage-panel.component.js +237 -234
  91. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  92. package/dist/Actions/actions-management-dashboard.component.d.ts +52 -0
  93. package/dist/Actions/actions-management-dashboard.component.d.ts.map +1 -0
  94. package/dist/Actions/actions-management-dashboard.component.js +308 -0
  95. package/dist/Actions/actions-management-dashboard.component.js.map +1 -0
  96. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  97. package/dist/Actions/components/actions-list-view.component.js +15 -14
  98. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  99. package/dist/Actions/components/actions-overview.component.d.ts +3 -6
  100. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  101. package/dist/Actions/components/actions-overview.component.js +17 -19
  102. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  103. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  104. package/dist/Actions/components/categories-list-view.component.js +6 -6
  105. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  106. package/dist/Actions/components/code-management.component.d.ts +0 -4
  107. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  108. package/dist/Actions/components/code-management.component.js +3 -9
  109. package/dist/Actions/components/code-management.component.js.map +1 -1
  110. package/dist/Actions/components/entity-integration.component.d.ts +0 -4
  111. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  112. package/dist/Actions/components/entity-integration.component.js +3 -9
  113. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  114. package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
  115. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  116. package/dist/Actions/components/execution-monitoring.component.js +13 -16
  117. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  118. package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
  119. package/dist/Actions/components/executions-list-view.component.js +3 -3
  120. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  121. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
  122. package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
  123. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
  124. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/action-card.component.js +11 -10
  126. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  127. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
  128. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  129. package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
  130. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  131. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
  132. package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
  133. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  134. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
  135. package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
  136. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  137. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
  138. package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
  139. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  140. package/dist/Actions/components/explorer/index.d.ts +0 -1
  141. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  142. package/dist/Actions/components/explorer/index.js +0 -4
  143. package/dist/Actions/components/explorer/index.js.map +1 -1
  144. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  145. package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
  146. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  147. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  148. package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
  149. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  150. package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
  151. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  152. package/dist/Actions/components/scheduled-actions.component.js +3 -9
  153. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  154. package/dist/Actions/components/security-permissions.component.d.ts +0 -4
  155. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  156. package/dist/Actions/components/security-permissions.component.js +3 -9
  157. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  158. package/dist/Actions/index.d.ts +0 -7
  159. package/dist/Actions/index.d.ts.map +1 -1
  160. package/dist/Actions/index.js +0 -8
  161. package/dist/Actions/index.js.map +1 -1
  162. package/dist/Communication/communication-dashboard.component.d.ts +0 -1
  163. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  164. package/dist/Communication/communication-dashboard.component.js +38 -51
  165. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  166. package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
  167. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  168. package/dist/Communication/communication-logs-resource.component.js +112 -108
  169. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  170. package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
  171. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  172. package/dist/Communication/communication-monitor-resource.component.js +210 -201
  173. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  174. package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
  175. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  176. package/dist/Communication/communication-providers-resource.component.js +136 -124
  177. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  178. package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
  179. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  180. package/dist/Communication/communication-runs-resource.component.js +91 -88
  181. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  182. package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
  183. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  184. package/dist/Communication/communication-templates-resource.component.js +139 -122
  185. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  186. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
  187. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  188. package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
  189. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  190. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  191. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
  192. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  193. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  194. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
  195. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  196. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  197. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
  198. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  199. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
  200. package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
  201. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  202. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
  203. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
  204. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  205. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  206. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
  207. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  208. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
  209. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
  210. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  211. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
  212. package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
  213. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  214. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
  215. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
  216. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  217. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  218. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
  219. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  220. package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
  221. package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
  222. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  223. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  224. package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
  225. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  226. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  227. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
  228. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  229. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +44 -0
  230. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +1 -0
  231. package/dist/Credentials/components/credential-category-edit-panel.component.js +456 -0
  232. package/dist/Credentials/components/credential-category-edit-panel.component.js.map +1 -0
  233. package/dist/Credentials/components/credential-edit-panel.component.d.ts +70 -0
  234. package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +1 -0
  235. package/dist/Credentials/components/credential-edit-panel.component.js +694 -0
  236. package/dist/Credentials/components/credential-edit-panel.component.js.map +1 -0
  237. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +56 -0
  238. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +1 -0
  239. package/dist/Credentials/components/credential-type-edit-panel.component.js +563 -0
  240. package/dist/Credentials/components/credential-type-edit-panel.component.js.map +1 -0
  241. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
  242. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  243. package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
  244. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  245. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
  246. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  247. package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
  248. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  249. package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
  250. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  251. package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
  252. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  253. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
  254. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  255. package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
  256. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  257. package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
  258. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  259. package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
  260. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  261. package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
  262. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  263. package/dist/Credentials/credentials-dashboard.component.js +31 -44
  264. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  265. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
  266. package/dist/Credentials/pipes/group-by.pipe.js +2 -1
  267. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
  268. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
  269. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  270. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
  271. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  272. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  273. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
  274. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  275. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
  276. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
  277. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
  278. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  279. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
  280. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  281. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +245 -0
  282. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  283. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +1143 -0
  284. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  285. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  286. package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
  287. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  288. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +0 -4
  289. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  290. package/dist/DataExplorer/data-explorer-dashboard.component.js +49 -54
  291. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  292. package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
  293. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  294. package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
  295. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  296. package/dist/DataExplorer/index.d.ts +2 -2
  297. package/dist/DataExplorer/index.d.ts.map +1 -1
  298. package/dist/DataExplorer/index.js +2 -2
  299. package/dist/DataExplorer/index.js.map +1 -1
  300. package/dist/EntityAdmin/components/entity-details.component.d.ts +50 -0
  301. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -0
  302. package/dist/EntityAdmin/components/entity-details.component.js +680 -0
  303. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -0
  304. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +31 -0
  305. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +1 -0
  306. package/dist/EntityAdmin/components/entity-filter-panel.component.js +160 -0
  307. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -0
  308. package/dist/EntityAdmin/components/erd-composite.component.d.ts +73 -0
  309. package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +1 -0
  310. package/dist/EntityAdmin/components/erd-composite.component.js +271 -0
  311. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -0
  312. package/dist/EntityAdmin/components/erd-diagram.component.d.ts +47 -0
  313. package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +1 -0
  314. package/dist/EntityAdmin/components/erd-diagram.component.js +618 -0
  315. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -0
  316. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
  317. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  318. package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
  319. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  320. package/dist/Home/home-application.d.ts +0 -5
  321. package/dist/Home/home-application.d.ts.map +1 -1
  322. package/dist/Home/home-application.js +0 -9
  323. package/dist/Home/home-application.js.map +1 -1
  324. package/dist/Home/home-dashboard.component.d.ts +0 -4
  325. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  326. package/dist/Home/home-dashboard.component.js +141 -139
  327. package/dist/Home/home-dashboard.component.js.map +1 -1
  328. package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
  329. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  330. package/dist/Lists/components/lists-browse-resource.component.js +761 -685
  331. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  332. package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
  333. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  334. package/dist/Lists/components/lists-categories-resource.component.js +340 -316
  335. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  336. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
  337. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  338. package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
  339. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  340. package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
  341. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  342. package/dist/Lists/components/lists-operations-resource.component.js +508 -455
  343. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  344. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  345. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
  346. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  347. package/dist/Lists/index.d.ts +0 -1
  348. package/dist/Lists/index.d.ts.map +1 -1
  349. package/dist/Lists/index.js +0 -11
  350. package/dist/Lists/index.js.map +1 -1
  351. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
  352. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  353. package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
  354. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  355. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
  356. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
  357. package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
  358. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  359. package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
  360. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  361. package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
  362. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  363. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
  364. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  365. package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
  366. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  367. package/dist/MCP/index.d.ts +5 -5
  368. package/dist/MCP/index.d.ts.map +1 -1
  369. package/dist/MCP/index.js +5 -5
  370. package/dist/MCP/index.js.map +1 -1
  371. package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
  372. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  373. package/dist/MCP/mcp-dashboard.component.js +976 -697
  374. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  375. package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
  376. package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
  377. package/dist/MCP/mcp-filter-panel.component.js +288 -0
  378. package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
  379. package/dist/MCP/mcp-resource.component.d.ts +11 -5
  380. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  381. package/dist/MCP/mcp-resource.component.js +8 -9
  382. package/dist/MCP/mcp-resource.component.js.map +1 -1
  383. package/dist/MCP/mcp.module.d.ts +16 -19
  384. package/dist/MCP/mcp.module.d.ts.map +1 -1
  385. package/dist/MCP/mcp.module.js +17 -26
  386. package/dist/MCP/mcp.module.js.map +1 -1
  387. package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
  388. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
  389. package/dist/MCP/services/mcp-tools.service.js +5 -6
  390. package/dist/MCP/services/mcp-tools.service.js.map +1 -1
  391. package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
  392. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  393. package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
  394. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  395. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
  396. package/dist/Scheduling/components/job-slideout.component.js +117 -116
  397. package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
  398. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
  399. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  400. package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
  401. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  402. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  403. package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
  404. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  405. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
  406. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
  407. package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
  408. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
  409. package/dist/Scheduling/components/scheduling-health.component.d.ts +30 -0
  410. package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
  411. package/dist/Scheduling/components/scheduling-health.component.js +315 -0
  412. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
  413. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
  414. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
  415. package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
  416. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
  417. package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
  418. package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
  419. package/dist/Scheduling/components/scheduling-history.component.js +377 -0
  420. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
  421. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
  422. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  423. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
  424. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  425. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  426. package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
  427. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  428. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
  429. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
  430. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
  431. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
  432. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
  433. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
  434. package/dist/Scheduling/components/scheduling-monitoring.component.js +488 -0
  435. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
  436. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
  437. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  438. package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
  439. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  440. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  441. package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
  442. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  443. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
  444. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
  445. package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
  446. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
  447. package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
  448. package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
  449. package/dist/Scheduling/components/scheduling-types.component.js +165 -0
  450. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
  451. package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
  452. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  453. package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
  454. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  455. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
  456. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  457. package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
  458. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  459. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  460. package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
  461. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  462. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  463. package/dist/Testing/components/testing-analytics.component.js +30 -30
  464. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  465. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  466. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +3 -3
  467. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  468. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  469. package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
  470. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  471. package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
  472. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
  473. package/dist/Testing/components/testing-execution-resource.component.js +55 -0
  474. package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
  475. package/dist/Testing/components/testing-execution.component.d.ts +71 -0
  476. package/dist/Testing/components/testing-execution.component.d.ts.map +1 -0
  477. package/dist/Testing/components/testing-execution.component.js +845 -0
  478. package/dist/Testing/components/testing-execution.component.js.map +1 -0
  479. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  480. package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
  481. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  482. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  483. package/dist/Testing/components/testing-explorer.component.js +42 -35
  484. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  485. package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
  486. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
  487. package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
  488. package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
  489. package/dist/Testing/components/testing-feedback.component.d.ts +111 -0
  490. package/dist/Testing/components/testing-feedback.component.d.ts.map +1 -0
  491. package/dist/Testing/components/testing-feedback.component.js +1486 -0
  492. package/dist/Testing/components/testing-feedback.component.js.map +1 -0
  493. package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
  494. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
  495. package/dist/Testing/components/testing-overview-resource.component.js +55 -0
  496. package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
  497. package/dist/Testing/components/testing-overview.component.d.ts +30 -0
  498. package/dist/Testing/components/testing-overview.component.d.ts.map +1 -0
  499. package/dist/Testing/components/testing-overview.component.js +361 -0
  500. package/dist/Testing/components/testing-overview.component.js.map +1 -0
  501. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  502. package/dist/Testing/components/testing-review-resource.component.js +3 -3
  503. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  504. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  505. package/dist/Testing/components/testing-review.component.js +16 -16
  506. package/dist/Testing/components/testing-review.component.js.map +1 -1
  507. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  508. package/dist/Testing/components/testing-runs-resource.component.js +3 -3
  509. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  510. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  511. package/dist/Testing/components/testing-runs.component.js +15 -15
  512. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  513. package/dist/Testing/components/testing-version-comparison.component.d.ts +62 -0
  514. package/dist/Testing/components/testing-version-comparison.component.d.ts.map +1 -0
  515. package/dist/Testing/components/testing-version-comparison.component.js +815 -0
  516. package/dist/Testing/components/testing-version-comparison.component.js.map +1 -0
  517. package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
  518. package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
  519. package/dist/Testing/components/testing-version-resource.component.js +55 -0
  520. package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
  521. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
  522. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
  523. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  524. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
  525. package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
  526. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  527. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  528. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
  529. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  530. package/dist/Testing/testing-dashboard.component.d.ts +0 -1
  531. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  532. package/dist/Testing/testing-dashboard.component.js +9 -8
  533. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  534. package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
  535. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
  536. package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
  537. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
  538. package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
  539. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
  540. package/dist/VersionHistory/components/graph-resource.component.js +521 -0
  541. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
  542. package/dist/VersionHistory/components/index.d.ts +5 -0
  543. package/dist/VersionHistory/components/index.d.ts.map +1 -0
  544. package/dist/VersionHistory/components/index.js +5 -0
  545. package/dist/VersionHistory/components/index.js.map +1 -0
  546. package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
  547. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
  548. package/dist/VersionHistory/components/labels-resource.component.js +968 -0
  549. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
  550. package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
  551. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
  552. package/dist/VersionHistory/components/restore-resource.component.js +472 -0
  553. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
  554. package/dist/VersionHistory/index.d.ts +2 -0
  555. package/dist/VersionHistory/index.d.ts.map +1 -0
  556. package/dist/VersionHistory/index.js +2 -0
  557. package/dist/VersionHistory/index.js.map +1 -0
  558. package/dist/generic/base-dashboard.d.ts +65 -0
  559. package/dist/generic/base-dashboard.d.ts.map +1 -0
  560. package/dist/generic/base-dashboard.js +74 -0
  561. package/dist/generic/base-dashboard.js.map +1 -0
  562. package/dist/module.d.ts +42 -36
  563. package/dist/module.d.ts.map +1 -1
  564. package/dist/module.js +41 -7
  565. package/dist/module.js.map +1 -1
  566. package/dist/public-api.d.ts +20 -19
  567. package/dist/public-api.d.ts.map +1 -1
  568. package/dist/public-api.js +22 -120
  569. package/dist/public-api.js.map +1 -1
  570. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
  571. package/dist/shared/pipes/highlight-search.pipe.js +2 -1
  572. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
  573. package/package.json +64 -62
@@ -16,12 +16,12 @@ import * as i2 from "@angular/forms";
16
16
  import * as i3 from "@memberjunction/ng-shared-generic";
17
17
  import * as i4 from "@memberjunction/ng-credentials";
18
18
  const _c0 = ["editPanel"];
19
- function CredentialsListResourceComponent_mj_loading_1_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelement(0, "mj-loading", 5);
19
+ function CredentialsListResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelement(0, "mj-loading", 2);
21
21
  } }
22
- function CredentialsListResourceComponent_ng_container_2_span_12_Template(rf, ctx) { if (rf & 1) {
23
- i0.ɵɵelementStart(0, "span", 44);
24
- i0.ɵɵelement(1, "i", 45);
22
+ function CredentialsListResourceComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "span", 12);
24
+ i0.ɵɵelement(1, "i", 42);
25
25
  i0.ɵɵtext(2);
26
26
  i0.ɵɵelementEnd();
27
27
  } if (rf & 2) {
@@ -29,9 +29,9 @@ function CredentialsListResourceComponent_ng_container_2_span_12_Template(rf, ct
29
29
  i0.ɵɵadvance(2);
30
30
  i0.ɵɵtextInterpolate1(" ", ctx_r2.getExpiringSoonCount(), " expiring ");
31
31
  } }
32
- function CredentialsListResourceComponent_ng_container_2_span_13_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵelementStart(0, "span", 46);
34
- i0.ɵɵelement(1, "i", 47);
32
+ function CredentialsListResourceComponent_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵelementStart(0, "span", 13);
34
+ i0.ɵɵelement(1, "i", 43);
35
35
  i0.ɵɵtext(2);
36
36
  i0.ɵɵelementEnd();
37
37
  } if (rf & 2) {
@@ -39,24 +39,24 @@ function CredentialsListResourceComponent_ng_container_2_span_13_Template(rf, ct
39
39
  i0.ɵɵadvance(2);
40
40
  i0.ɵɵtextInterpolate1(" ", ctx_r2.getExpiredCount(), " expired ");
41
41
  } }
42
- function CredentialsListResourceComponent_ng_container_2_button_15_Template(rf, ctx) { if (rf & 1) {
42
+ function CredentialsListResourceComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
43
43
  const _r4 = i0.ɵɵgetCurrentView();
44
- i0.ɵɵelementStart(0, "button", 48);
45
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_button_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
46
- i0.ɵɵelement(1, "i", 49);
44
+ i0.ɵɵelementStart(0, "button", 44);
45
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
46
+ i0.ɵɵelement(1, "i", 45);
47
47
  i0.ɵɵelementStart(2, "span");
48
48
  i0.ɵɵtext(3, "New Credential");
49
49
  i0.ɵɵelementEnd()();
50
50
  } }
51
- function CredentialsListResourceComponent_ng_container_2_button_21_Template(rf, ctx) { if (rf & 1) {
51
+ function CredentialsListResourceComponent_Conditional_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
52
52
  const _r5 = i0.ɵɵgetCurrentView();
53
- i0.ɵɵelementStart(0, "button", 50);
54
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_button_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onSearchChange("")); });
55
- i0.ɵɵelement(1, "i", 51);
53
+ i0.ɵɵelementStart(0, "button", 46);
54
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onSearchChange("")); });
55
+ i0.ɵɵelement(1, "i", 47);
56
56
  i0.ɵɵelementEnd();
57
57
  } }
58
- function CredentialsListResourceComponent_ng_container_2_option_25_Template(rf, ctx) { if (rf & 1) {
59
- i0.ɵɵelementStart(0, "option", 52);
58
+ function CredentialsListResourceComponent_Conditional_2_For_25_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵelementStart(0, "option", 24);
60
60
  i0.ɵɵtext(1);
61
61
  i0.ɵɵelementEnd();
62
62
  } if (rf & 2) {
@@ -65,57 +65,59 @@ function CredentialsListResourceComponent_ng_container_2_option_25_Template(rf,
65
65
  i0.ɵɵadvance();
66
66
  i0.ɵɵtextInterpolate(type_r6.Name);
67
67
  } }
68
- function CredentialsListResourceComponent_ng_container_2_div_47_button_7_Template(rf, ctx) { if (rf & 1) {
68
+ function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_7_Template(rf, ctx) { if (rf & 1) {
69
69
  const _r8 = i0.ɵɵgetCurrentView();
70
- i0.ɵɵelementStart(0, "button", 60);
71
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_47_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkToggleActive(true)); });
72
- i0.ɵɵelement(1, "i", 61);
70
+ i0.ɵɵelementStart(0, "button", 54);
71
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkToggleActive(true)); });
72
+ i0.ɵɵelement(1, "i", 55);
73
73
  i0.ɵɵtext(2, " Activate ");
74
74
  i0.ɵɵelementEnd();
75
75
  } }
76
- function CredentialsListResourceComponent_ng_container_2_div_47_button_8_Template(rf, ctx) { if (rf & 1) {
76
+ function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_8_Template(rf, ctx) { if (rf & 1) {
77
77
  const _r9 = i0.ɵɵgetCurrentView();
78
- i0.ɵɵelementStart(0, "button", 60);
79
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_47_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkToggleActive(false)); });
80
- i0.ɵɵelement(1, "i", 62);
78
+ i0.ɵɵelementStart(0, "button", 54);
79
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkToggleActive(false)); });
80
+ i0.ɵɵelement(1, "i", 56);
81
81
  i0.ɵɵtext(2, " Deactivate ");
82
82
  i0.ɵɵelementEnd();
83
83
  } }
84
- function CredentialsListResourceComponent_ng_container_2_div_47_button_9_Template(rf, ctx) { if (rf & 1) {
84
+ function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_9_Template(rf, ctx) { if (rf & 1) {
85
85
  const _r10 = i0.ɵɵgetCurrentView();
86
- i0.ɵɵelementStart(0, "button", 63);
87
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_47_button_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkDelete()); });
88
- i0.ɵɵelement(1, "i", 64);
86
+ i0.ɵɵelementStart(0, "button", 57);
87
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.bulkDelete()); });
88
+ i0.ɵɵelement(1, "i", 58);
89
89
  i0.ɵɵtext(2, " Delete ");
90
90
  i0.ɵɵelementEnd();
91
91
  } }
92
- function CredentialsListResourceComponent_ng_container_2_div_47_Template(rf, ctx) { if (rf & 1) {
92
+ function CredentialsListResourceComponent_Conditional_2_Conditional_47_Template(rf, ctx) { if (rf & 1) {
93
93
  const _r7 = i0.ɵɵgetCurrentView();
94
- i0.ɵɵelementStart(0, "div", 53)(1, "div", 54)(2, "span", 55);
94
+ i0.ɵɵelementStart(0, "div", 38)(1, "div", 48)(2, "span", 49);
95
95
  i0.ɵɵtext(3);
96
96
  i0.ɵɵelementEnd();
97
- i0.ɵɵelementStart(4, "button", 56);
98
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_47_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.clearSelection()); });
97
+ i0.ɵɵelementStart(4, "button", 50);
98
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_47_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.clearSelection()); });
99
99
  i0.ɵɵtext(5, "Clear selection");
100
100
  i0.ɵɵelementEnd()();
101
- i0.ɵɵelementStart(6, "div", 57);
102
- i0.ɵɵtemplate(7, CredentialsListResourceComponent_ng_container_2_div_47_button_7_Template, 3, 0, "button", 58)(8, CredentialsListResourceComponent_ng_container_2_div_47_button_8_Template, 3, 0, "button", 58)(9, CredentialsListResourceComponent_ng_container_2_div_47_button_9_Template, 3, 0, "button", 59);
101
+ i0.ɵɵelementStart(6, "div", 51);
102
+ i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_7_Template, 3, 0, "button", 52);
103
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_8_Template, 3, 0, "button", 52);
104
+ i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_2_Conditional_47_Conditional_9_Template, 3, 0, "button", 53);
103
105
  i0.ɵɵelementEnd()();
104
106
  } if (rf & 2) {
105
107
  const ctx_r2 = i0.ɵɵnextContext(2);
106
108
  i0.ɵɵadvance(3);
107
109
  i0.ɵɵtextInterpolate1("", ctx_r2.selectedCredentials.size, " selected");
108
110
  i0.ɵɵadvance(4);
109
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate);
111
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 7 : -1);
110
112
  i0.ɵɵadvance();
111
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate);
113
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 8 : -1);
112
114
  i0.ɵɵadvance();
113
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanDelete);
115
+ i0.ɵɵconditional(ctx_r2.UserCanDelete ? 9 : -1);
114
116
  } }
115
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
117
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
116
118
  const _r12 = i0.ɵɵgetCurrentView();
117
- i0.ɵɵelementStart(0, "div", 87)(1, "input", 88);
118
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r12); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelection(credential_r13)); });
119
+ i0.ɵɵelementStart(0, "div", 61)(1, "input", 80);
120
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r12); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelection(credential_r13)); });
119
121
  i0.ɵɵelementEnd()();
120
122
  } if (rf & 2) {
121
123
  const credential_r13 = i0.ɵɵnextContext().$implicit;
@@ -123,10 +125,10 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_1_Temp
123
125
  i0.ɵɵadvance();
124
126
  i0.ɵɵproperty("checked", ctx_r2.selectedCredentials.has(credential_r13.ID));
125
127
  } }
126
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_11_Template(rf, ctx) { if (rf & 1) {
128
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
127
129
  const _r14 = i0.ɵɵgetCurrentView();
128
- i0.ɵɵelementStart(0, "button", 89);
129
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleCredentialActive(credential_r13, $event)); });
130
+ i0.ɵɵelementStart(0, "button", 81);
131
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleCredentialActive(credential_r13, $event)); });
130
132
  i0.ɵɵelement(1, "i");
131
133
  i0.ɵɵelementEnd();
132
134
  } if (rf & 2) {
@@ -135,22 +137,22 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_11_
135
137
  i0.ɵɵadvance();
136
138
  i0.ɵɵclassMap(credential_r13.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
137
139
  } }
138
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_12_Template(rf, ctx) { if (rf & 1) {
140
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
139
141
  const _r15 = i0.ɵɵgetCurrentView();
140
- i0.ɵɵelementStart(0, "button", 90);
141
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_12_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r13, $event)); });
142
- i0.ɵɵelement(1, "i", 91);
142
+ i0.ɵɵelementStart(0, "button", 82);
143
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_12_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r13, $event)); });
144
+ i0.ɵɵelement(1, "i", 83);
143
145
  i0.ɵɵelementEnd();
144
146
  } }
145
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_13_Template(rf, ctx) { if (rf & 1) {
147
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
146
148
  const _r16 = i0.ɵɵgetCurrentView();
147
- i0.ɵɵelementStart(0, "button", 92);
148
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_13_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCredential(credential_r13, $event)); });
149
- i0.ɵɵelement(1, "i", 64);
149
+ i0.ɵɵelementStart(0, "button", 84);
150
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_13_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const credential_r13 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCredential(credential_r13, $event)); });
151
+ i0.ɵɵelement(1, "i", 58);
150
152
  i0.ɵɵelementEnd();
151
153
  } }
152
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_p_18_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelementStart(0, "p", 93);
154
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
155
+ i0.ɵɵelementStart(0, "p", 73);
154
156
  i0.ɵɵtext(1);
155
157
  i0.ɵɵelementEnd();
156
158
  } if (rf & 2) {
@@ -158,16 +160,16 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_p_18_Templ
158
160
  i0.ɵɵadvance();
159
161
  i0.ɵɵtextInterpolate1(" ", credential_r13.Description, " ");
160
162
  } }
161
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_20_Template(rf, ctx) { if (rf & 1) {
162
- i0.ɵɵelementStart(0, "div", 94);
163
- i0.ɵɵelement(1, "i", 95);
163
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
164
+ i0.ɵɵelementStart(0, "div", 75);
165
+ i0.ɵɵelement(1, "i", 85);
164
166
  i0.ɵɵelementStart(2, "span");
165
167
  i0.ɵɵtext(3, "Default");
166
168
  i0.ɵɵelementEnd()();
167
169
  } }
168
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_21_Template(rf, ctx) { if (rf & 1) {
169
- i0.ɵɵelementStart(0, "div", 94);
170
- i0.ɵɵelement(1, "i", 96);
170
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
171
+ i0.ɵɵelementStart(0, "div", 75);
172
+ i0.ɵɵelement(1, "i", 86);
171
173
  i0.ɵɵelementStart(2, "span");
172
174
  i0.ɵɵtext(3);
173
175
  i0.ɵɵelementEnd()();
@@ -176,11 +178,11 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_21_Tem
176
178
  const ctx_r2 = i0.ɵɵnextContext(3);
177
179
  i0.ɵɵclassProp("warning", ctx_r2.isExpiringSoon(credential_r13))("danger", ctx_r2.isExpired(credential_r13));
178
180
  i0.ɵɵadvance(3);
179
- i0.ɵɵtextInterpolate2("", ctx_r2.isExpired(credential_r13) ? "Expired" : "Expires", ": ", ctx_r2.formatDate(credential_r13.ExpiresAt), "");
181
+ i0.ɵɵtextInterpolate2("", ctx_r2.isExpired(credential_r13) ? "Expired" : "Expires", ": ", ctx_r2.formatDate(credential_r13.ExpiresAt));
180
182
  } }
181
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_22_Template(rf, ctx) { if (rf & 1) {
182
- i0.ɵɵelementStart(0, "div", 94);
183
- i0.ɵɵelement(1, "i", 45);
183
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "div", 75);
185
+ i0.ɵɵelement(1, "i", 42);
184
186
  i0.ɵɵelementStart(2, "span");
185
187
  i0.ɵɵtext(3);
186
188
  i0.ɵɵelementEnd()();
@@ -188,11 +190,11 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_22_Tem
188
190
  const credential_r13 = i0.ɵɵnextContext().$implicit;
189
191
  const ctx_r2 = i0.ɵɵnextContext(3);
190
192
  i0.ɵɵadvance(3);
191
- i0.ɵɵtextInterpolate1("Last used: ", ctx_r2.formatDate(credential_r13.LastUsedAt), "");
193
+ i0.ɵɵtextInterpolate1("Last used: ", ctx_r2.formatDate(credential_r13.LastUsedAt));
192
194
  } }
193
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_24_Template(rf, ctx) { if (rf & 1) {
194
- i0.ɵɵelementStart(0, "div", 97);
195
- i0.ɵɵelement(1, "i", 98);
195
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
196
+ i0.ɵɵelementStart(0, "div", 78);
197
+ i0.ɵɵelement(1, "i", 87);
196
198
  i0.ɵɵtext(2);
197
199
  i0.ɵɵelementEnd();
198
200
  } if (rf & 2) {
@@ -200,35 +202,39 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_24_Tem
200
202
  i0.ɵɵadvance(2);
201
203
  i0.ɵɵtextInterpolate1(" ", credential_r13.Category, " ");
202
204
  } }
203
- function CredentialsListResourceComponent_ng_container_2_div_48_div_1_Template(rf, ctx) { if (rf & 1) {
205
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Template(rf, ctx) { if (rf & 1) {
204
206
  const _r11 = i0.ɵɵgetCurrentView();
205
- i0.ɵɵelementStart(0, "div", 67);
206
- i0.ɵɵtemplate(1, CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_1_Template, 2, 1, "div", 68);
207
- i0.ɵɵelementStart(2, "div", 69)(3, "div", 70);
207
+ i0.ɵɵelementStart(0, "div", 60);
208
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_1_Template, 2, 1, "div", 61);
209
+ i0.ɵɵelementStart(2, "div", 62)(3, "div", 63);
208
210
  i0.ɵɵelement(4, "i");
209
211
  i0.ɵɵelementEnd();
210
- i0.ɵɵelementStart(5, "div", 71)(6, "div", 72);
212
+ i0.ɵɵelementStart(5, "div", 64)(6, "div", 65);
211
213
  i0.ɵɵtext(7);
212
214
  i0.ɵɵelementEnd();
213
- i0.ɵɵelementStart(8, "div", 73);
215
+ i0.ɵɵelementStart(8, "div", 66);
214
216
  i0.ɵɵtext(9);
215
217
  i0.ɵɵelementEnd()();
216
- i0.ɵɵelementStart(10, "div", 74);
217
- i0.ɵɵtemplate(11, CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_11_Template, 2, 3, "button", 75)(12, CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_12_Template, 2, 0, "button", 76)(13, CredentialsListResourceComponent_ng_container_2_div_48_div_1_button_13_Template, 2, 0, "button", 77);
218
+ i0.ɵɵelementStart(10, "div", 67);
219
+ i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_11_Template, 2, 3, "button", 68);
220
+ i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_12_Template, 2, 0, "button", 69);
221
+ i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_13_Template, 2, 0, "button", 70);
218
222
  i0.ɵɵelementEnd()();
219
- i0.ɵɵelementStart(14, "div", 78);
220
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_48_div_1_Template_div_click_14_listener() { const credential_r13 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r13)); });
221
- i0.ɵɵelementStart(15, "div", 79);
223
+ i0.ɵɵelementStart(14, "div", 71);
224
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Template_div_click_14_listener() { const credential_r13 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r13)); });
225
+ i0.ɵɵelementStart(15, "div", 72);
222
226
  i0.ɵɵelement(16, "i");
223
227
  i0.ɵɵtext(17);
224
228
  i0.ɵɵelementEnd();
225
- i0.ɵɵtemplate(18, CredentialsListResourceComponent_ng_container_2_div_48_div_1_p_18_Template, 2, 1, "p", 80);
226
- i0.ɵɵelementStart(19, "div", 81);
227
- i0.ɵɵtemplate(20, CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_20_Template, 4, 0, "div", 82)(21, CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_21_Template, 4, 6, "div", 83)(22, CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_22_Template, 4, 1, "div", 82);
229
+ i0.ɵɵconditionalCreate(18, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_18_Template, 2, 1, "p", 73);
230
+ i0.ɵɵelementStart(19, "div", 74);
231
+ i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_20_Template, 4, 0, "div", 75);
232
+ i0.ɵɵconditionalCreate(21, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_21_Template, 4, 6, "div", 76);
233
+ i0.ɵɵconditionalCreate(22, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_22_Template, 4, 1, "div", 75);
228
234
  i0.ɵɵelementEnd()();
229
- i0.ɵɵelementStart(23, "div", 84);
230
- i0.ɵɵtemplate(24, CredentialsListResourceComponent_ng_container_2_div_48_div_1_div_24_Template, 3, 1, "div", 85);
231
- i0.ɵɵelementStart(25, "div", 86);
235
+ i0.ɵɵelementStart(23, "div", 77);
236
+ i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Conditional_24_Template, 3, 1, "div", 78);
237
+ i0.ɵɵelementStart(25, "div", 79);
232
238
  i0.ɵɵtext(26);
233
239
  i0.ɵɵelementEnd()()();
234
240
  } if (rf & 2) {
@@ -236,7 +242,7 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_Template(r
236
242
  const ctx_r2 = i0.ɵɵnextContext(3);
237
243
  i0.ɵɵclassProp("selected", ctx_r2.selectedCredentials.has(credential_r13.ID))("expired", ctx_r2.isExpired(credential_r13))("expiring", ctx_r2.isExpiringSoon(credential_r13));
238
244
  i0.ɵɵadvance();
239
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete);
245
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete ? 1 : -1);
240
246
  i0.ɵɵadvance(2);
241
247
  i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r13));
242
248
  i0.ɵɵadvance();
@@ -246,11 +252,11 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_Template(r
246
252
  i0.ɵɵadvance(2);
247
253
  i0.ɵɵtextInterpolate(credential_r13.CredentialType || "Unknown Type");
248
254
  i0.ɵɵadvance(2);
249
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate);
255
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 11 : -1);
250
256
  i0.ɵɵadvance();
251
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate);
257
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 12 : -1);
252
258
  i0.ɵɵadvance();
253
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanDelete);
259
+ i0.ɵɵconditional(ctx_r2.UserCanDelete ? 13 : -1);
254
260
  i0.ɵɵadvance(2);
255
261
  i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r13));
256
262
  i0.ɵɵadvance();
@@ -258,41 +264,41 @@ function CredentialsListResourceComponent_ng_container_2_div_48_div_1_Template(r
258
264
  i0.ɵɵadvance();
259
265
  i0.ɵɵtextInterpolate1(" ", ctx_r2.getStatusLabel(credential_r13), " ");
260
266
  i0.ɵɵadvance();
261
- i0.ɵɵproperty("ngIf", credential_r13.Description);
267
+ i0.ɵɵconditional(credential_r13.Description ? 18 : -1);
262
268
  i0.ɵɵadvance(2);
263
- i0.ɵɵproperty("ngIf", credential_r13.IsDefault);
269
+ i0.ɵɵconditional(credential_r13.IsDefault ? 20 : -1);
264
270
  i0.ɵɵadvance();
265
- i0.ɵɵproperty("ngIf", credential_r13.ExpiresAt);
271
+ i0.ɵɵconditional(credential_r13.ExpiresAt ? 21 : -1);
266
272
  i0.ɵɵadvance();
267
- i0.ɵɵproperty("ngIf", credential_r13.LastUsedAt);
273
+ i0.ɵɵconditional(credential_r13.LastUsedAt ? 22 : -1);
268
274
  i0.ɵɵadvance(2);
269
- i0.ɵɵproperty("ngIf", credential_r13.Category);
275
+ i0.ɵɵconditional(credential_r13.Category ? 24 : -1);
270
276
  i0.ɵɵadvance(2);
271
277
  i0.ɵɵtextInterpolate1(" Created ", ctx_r2.formatDate(credential_r13.__mj_CreatedAt), " ");
272
278
  } }
273
- function CredentialsListResourceComponent_ng_container_2_div_48_Template(rf, ctx) { if (rf & 1) {
274
- i0.ɵɵelementStart(0, "div", 65);
275
- i0.ɵɵtemplate(1, CredentialsListResourceComponent_ng_container_2_div_48_div_1_Template, 27, 25, "div", 66);
279
+ function CredentialsListResourceComponent_Conditional_2_Conditional_48_Template(rf, ctx) { if (rf & 1) {
280
+ i0.ɵɵelementStart(0, "div", 39);
281
+ i0.ɵɵrepeaterCreate(1, CredentialsListResourceComponent_Conditional_2_Conditional_48_For_2_Template, 27, 25, "div", 59, i0.ɵɵrepeaterTrackByIdentity);
276
282
  i0.ɵɵelementEnd();
277
283
  } if (rf & 2) {
278
284
  const ctx_r2 = i0.ɵɵnextContext(2);
279
285
  i0.ɵɵadvance();
280
- i0.ɵɵproperty("ngForOf", ctx_r2.filteredCredentials);
286
+ i0.ɵɵrepeater(ctx_r2.filteredCredentials);
281
287
  } }
282
- function CredentialsListResourceComponent_ng_container_2_div_49_th_4_Template(rf, ctx) { if (rf & 1) {
288
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_Conditional_4_Template(rf, ctx) { if (rf & 1) {
283
289
  const _r17 = i0.ɵɵgetCurrentView();
284
- i0.ɵɵelementStart(0, "th", 110)(1, "input", 88);
285
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_ng_container_2_div_49_th_4_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelectAll()); });
290
+ i0.ɵɵelementStart(0, "th", 89)(1, "input", 80);
291
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Conditional_49_Conditional_4_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelectAll()); });
286
292
  i0.ɵɵelementEnd()();
287
293
  } if (rf & 2) {
288
294
  const ctx_r2 = i0.ɵɵnextContext(3);
289
295
  i0.ɵɵadvance();
290
296
  i0.ɵɵproperty("checked", ctx_r2.isAllSelected());
291
297
  } }
292
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_td_1_Template(rf, ctx) { if (rf & 1) {
298
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
293
299
  const _r19 = i0.ɵɵgetCurrentView();
294
- i0.ɵɵelementStart(0, "td", 110)(1, "input", 88);
295
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_td_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r19); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelection(credential_r20)); });
300
+ i0.ɵɵelementStart(0, "td", 89)(1, "input", 80);
301
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_1_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r19); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleSelection(credential_r20)); });
296
302
  i0.ɵɵelementEnd()();
297
303
  } if (rf & 2) {
298
304
  const credential_r20 = i0.ɵɵnextContext().$implicit;
@@ -300,8 +306,8 @@ function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_td_1_Templ
300
306
  i0.ɵɵadvance();
301
307
  i0.ɵɵproperty("checked", ctx_r2.selectedCredentials.has(credential_r20.ID));
302
308
  } }
303
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_8_Template(rf, ctx) { if (rf & 1) {
304
- i0.ɵɵelementStart(0, "span", 123);
309
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_8_Template(rf, ctx) { if (rf & 1) {
310
+ i0.ɵɵelementStart(0, "span", 102);
305
311
  i0.ɵɵtext(1);
306
312
  i0.ɵɵelementEnd();
307
313
  } if (rf & 2) {
@@ -309,13 +315,13 @@ function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_8_Tem
309
315
  i0.ɵɵadvance();
310
316
  i0.ɵɵtextInterpolate(credential_r20.Description);
311
317
  } }
312
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_9_Template(rf, ctx) { if (rf & 1) {
313
- i0.ɵɵelementStart(0, "span", 124);
318
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
319
+ i0.ɵɵelementStart(0, "span", 103);
314
320
  i0.ɵɵtext(1, "Default");
315
321
  i0.ɵɵelementEnd();
316
322
  } }
317
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_13_Template(rf, ctx) { if (rf & 1) {
318
- i0.ɵɵelementStart(0, "span", 125);
323
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_13_Template(rf, ctx) { if (rf & 1) {
324
+ i0.ɵɵelementStart(0, "span", 104);
319
325
  i0.ɵɵtext(1);
320
326
  i0.ɵɵelementEnd();
321
327
  } if (rf & 2) {
@@ -323,15 +329,15 @@ function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_13_Te
323
329
  i0.ɵɵadvance();
324
330
  i0.ɵɵtextInterpolate(credential_r20.Category);
325
331
  } }
326
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_14_Template(rf, ctx) { if (rf & 1) {
332
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_14_Template(rf, ctx) { if (rf & 1) {
327
333
  i0.ɵɵelementStart(0, "span");
328
334
  i0.ɵɵtext(1, "-");
329
335
  i0.ɵɵelementEnd();
330
336
  } }
331
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_24_Template(rf, ctx) { if (rf & 1) {
337
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
332
338
  const _r21 = i0.ɵɵgetCurrentView();
333
- i0.ɵɵelementStart(0, "button", 126);
334
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r21); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleCredentialActive(credential_r20, $event)); });
339
+ i0.ɵɵelementStart(0, "button", 110);
340
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r21); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleCredentialActive(credential_r20, $event)); });
335
341
  i0.ɵɵelement(1, "i");
336
342
  i0.ɵɵelementEnd();
337
343
  } if (rf & 2) {
@@ -340,74 +346,77 @@ function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_24_
340
346
  i0.ɵɵadvance();
341
347
  i0.ɵɵclassMap(credential_r20.IsActive ? "fa-solid fa-toggle-on" : "fa-solid fa-toggle-off");
342
348
  } }
343
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_25_Template(rf, ctx) { if (rf & 1) {
349
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
344
350
  const _r22 = i0.ɵɵgetCurrentView();
345
- i0.ɵɵelementStart(0, "button", 127);
346
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r22); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r20, $event)); });
347
- i0.ɵɵelement(1, "i", 91);
351
+ i0.ɵɵelementStart(0, "button", 111);
352
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r22); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r20, $event)); });
353
+ i0.ɵɵelement(1, "i", 83);
348
354
  i0.ɵɵelementEnd();
349
355
  } }
350
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_26_Template(rf, ctx) { if (rf & 1) {
356
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
351
357
  const _r23 = i0.ɵɵgetCurrentView();
352
- i0.ɵɵelementStart(0, "button", 128);
353
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r23); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCredential(credential_r20, $event)); });
354
- i0.ɵɵelement(1, "i", 64);
358
+ i0.ɵɵelementStart(0, "button", 112);
359
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r23); const credential_r20 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCredential(credential_r20, $event)); });
360
+ i0.ɵɵelement(1, "i", 58);
355
361
  i0.ɵɵelementEnd();
356
362
  } }
357
- function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_Template(rf, ctx) { if (rf & 1) {
363
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Template(rf, ctx) { if (rf & 1) {
358
364
  const _r18 = i0.ɵɵgetCurrentView();
359
365
  i0.ɵɵelementStart(0, "tr");
360
- i0.ɵɵtemplate(1, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_td_1_Template, 2, 1, "td", 101);
361
- i0.ɵɵelementStart(2, "td", 111);
362
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_Template_td_click_2_listener() { const credential_r20 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r20)); });
363
- i0.ɵɵelementStart(3, "div", 112);
364
- i0.ɵɵelement(4, "i", 113);
365
- i0.ɵɵelementStart(5, "div", 114)(6, "span", 72);
366
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_1_Template, 2, 1, "td", 89);
367
+ i0.ɵɵelementStart(2, "td", 98);
368
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Template_td_click_2_listener() { const credential_r20 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCredential(credential_r20)); });
369
+ i0.ɵɵelementStart(3, "div", 99);
370
+ i0.ɵɵelement(4, "i", 100);
371
+ i0.ɵɵelementStart(5, "div", 101)(6, "span", 65);
366
372
  i0.ɵɵtext(7);
367
373
  i0.ɵɵelementEnd();
368
- i0.ɵɵtemplate(8, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_8_Template, 2, 1, "span", 115);
374
+ i0.ɵɵconditionalCreate(8, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_8_Template, 2, 1, "span", 102);
369
375
  i0.ɵɵelementEnd();
370
- i0.ɵɵtemplate(9, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_9_Template, 2, 0, "span", 116);
376
+ i0.ɵɵconditionalCreate(9, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_9_Template, 2, 0, "span", 103);
371
377
  i0.ɵɵelementEnd()();
372
- i0.ɵɵelementStart(10, "td", 103);
378
+ i0.ɵɵelementStart(10, "td", 91);
373
379
  i0.ɵɵtext(11);
374
380
  i0.ɵɵelementEnd();
375
- i0.ɵɵelementStart(12, "td", 104);
376
- i0.ɵɵtemplate(13, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_13_Template, 2, 1, "span", 117)(14, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_span_14_Template, 2, 0, "span", 3);
381
+ i0.ɵɵelementStart(12, "td", 92);
382
+ i0.ɵɵconditionalCreate(13, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_13_Template, 2, 1, "span", 104);
383
+ i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_14_Template, 2, 0, "span");
377
384
  i0.ɵɵelementEnd();
378
- i0.ɵɵelementStart(15, "td", 105)(16, "span", 118);
385
+ i0.ɵɵelementStart(15, "td", 93)(16, "span", 105);
379
386
  i0.ɵɵtext(17);
380
387
  i0.ɵɵelementEnd()();
381
- i0.ɵɵelementStart(18, "td", 106);
388
+ i0.ɵɵelementStart(18, "td", 94);
382
389
  i0.ɵɵtext(19);
383
390
  i0.ɵɵelementEnd();
384
- i0.ɵɵelementStart(20, "td", 107);
391
+ i0.ɵɵelementStart(20, "td", 95);
385
392
  i0.ɵɵtext(21);
386
393
  i0.ɵɵelementEnd();
387
- i0.ɵɵelementStart(22, "td", 108)(23, "div", 119);
388
- i0.ɵɵtemplate(24, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_24_Template, 2, 3, "button", 120)(25, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_25_Template, 2, 0, "button", 121)(26, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_button_26_Template, 2, 0, "button", 122);
394
+ i0.ɵɵelementStart(22, "td", 96)(23, "div", 106);
395
+ i0.ɵɵconditionalCreate(24, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_24_Template, 2, 3, "button", 107);
396
+ i0.ɵɵconditionalCreate(25, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_25_Template, 2, 0, "button", 108);
397
+ i0.ɵɵconditionalCreate(26, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Conditional_26_Template, 2, 0, "button", 109);
389
398
  i0.ɵɵelementEnd()()();
390
399
  } if (rf & 2) {
391
400
  const credential_r20 = ctx.$implicit;
392
401
  const ctx_r2 = i0.ɵɵnextContext(3);
393
402
  i0.ɵɵclassProp("selected", ctx_r2.selectedCredentials.has(credential_r20.ID))("expired", ctx_r2.isExpired(credential_r20));
394
403
  i0.ɵɵadvance();
395
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete);
404
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete ? 1 : -1);
396
405
  i0.ɵɵadvance(3);
397
406
  i0.ɵɵclassMap(credential_r20.IconClass || "fa-solid fa-key");
398
407
  i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r20));
399
408
  i0.ɵɵadvance(3);
400
409
  i0.ɵɵtextInterpolate(credential_r20.Name);
401
410
  i0.ɵɵadvance();
402
- i0.ɵɵproperty("ngIf", credential_r20.Description);
411
+ i0.ɵɵconditional(credential_r20.Description ? 8 : -1);
403
412
  i0.ɵɵadvance();
404
- i0.ɵɵproperty("ngIf", credential_r20.IsDefault);
413
+ i0.ɵɵconditional(credential_r20.IsDefault ? 9 : -1);
405
414
  i0.ɵɵadvance(2);
406
415
  i0.ɵɵtextInterpolate(credential_r20.CredentialType || "-");
407
416
  i0.ɵɵadvance(2);
408
- i0.ɵɵproperty("ngIf", credential_r20.Category);
417
+ i0.ɵɵconditional(credential_r20.Category ? 13 : -1);
409
418
  i0.ɵɵadvance();
410
- i0.ɵɵproperty("ngIf", !credential_r20.Category);
419
+ i0.ɵɵconditional(!credential_r20.Category ? 14 : -1);
411
420
  i0.ɵɵadvance(2);
412
421
  i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(credential_r20));
413
422
  i0.ɵɵadvance();
@@ -419,174 +428,178 @@ function CredentialsListResourceComponent_ng_container_2_div_49_tr_20_Template(r
419
428
  i0.ɵɵadvance(2);
420
429
  i0.ɵɵtextInterpolate1(" ", credential_r20.LastUsedAt ? ctx_r2.formatDate(credential_r20.LastUsedAt) : "Never", " ");
421
430
  i0.ɵɵadvance(3);
422
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate);
431
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 24 : -1);
423
432
  i0.ɵɵadvance();
424
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate);
433
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate ? 25 : -1);
425
434
  i0.ɵɵadvance();
426
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanDelete);
435
+ i0.ɵɵconditional(ctx_r2.UserCanDelete ? 26 : -1);
427
436
  } }
428
- function CredentialsListResourceComponent_ng_container_2_div_49_Template(rf, ctx) { if (rf & 1) {
429
- i0.ɵɵelementStart(0, "div", 99)(1, "table", 100)(2, "thead")(3, "tr");
430
- i0.ɵɵtemplate(4, CredentialsListResourceComponent_ng_container_2_div_49_th_4_Template, 2, 1, "th", 101);
431
- i0.ɵɵelementStart(5, "th", 102);
437
+ function CredentialsListResourceComponent_Conditional_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
438
+ i0.ɵɵelementStart(0, "div", 40)(1, "table", 88)(2, "thead")(3, "tr");
439
+ i0.ɵɵconditionalCreate(4, CredentialsListResourceComponent_Conditional_2_Conditional_49_Conditional_4_Template, 2, 1, "th", 89);
440
+ i0.ɵɵelementStart(5, "th", 90);
432
441
  i0.ɵɵtext(6, "Name");
433
442
  i0.ɵɵelementEnd();
434
- i0.ɵɵelementStart(7, "th", 103);
443
+ i0.ɵɵelementStart(7, "th", 91);
435
444
  i0.ɵɵtext(8, "Type");
436
445
  i0.ɵɵelementEnd();
437
- i0.ɵɵelementStart(9, "th", 104);
446
+ i0.ɵɵelementStart(9, "th", 92);
438
447
  i0.ɵɵtext(10, "Category");
439
448
  i0.ɵɵelementEnd();
440
- i0.ɵɵelementStart(11, "th", 105);
449
+ i0.ɵɵelementStart(11, "th", 93);
441
450
  i0.ɵɵtext(12, "Status");
442
451
  i0.ɵɵelementEnd();
443
- i0.ɵɵelementStart(13, "th", 106);
452
+ i0.ɵɵelementStart(13, "th", 94);
444
453
  i0.ɵɵtext(14, "Expires");
445
454
  i0.ɵɵelementEnd();
446
- i0.ɵɵelementStart(15, "th", 107);
455
+ i0.ɵɵelementStart(15, "th", 95);
447
456
  i0.ɵɵtext(16, "Last Used");
448
457
  i0.ɵɵelementEnd();
449
- i0.ɵɵelementStart(17, "th", 108);
458
+ i0.ɵɵelementStart(17, "th", 96);
450
459
  i0.ɵɵtext(18, "Actions");
451
460
  i0.ɵɵelementEnd()()();
452
461
  i0.ɵɵelementStart(19, "tbody");
453
- i0.ɵɵtemplate(20, CredentialsListResourceComponent_ng_container_2_div_49_tr_20_Template, 27, 25, "tr", 109);
462
+ i0.ɵɵrepeaterCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_49_For_21_Template, 27, 25, "tr", 97, i0.ɵɵrepeaterTrackByIdentity);
454
463
  i0.ɵɵelementEnd()()();
455
464
  } if (rf & 2) {
456
465
  const ctx_r2 = i0.ɵɵnextContext(2);
457
466
  i0.ɵɵadvance(4);
458
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete);
467
+ i0.ɵɵconditional(ctx_r2.UserCanUpdate || ctx_r2.UserCanDelete ? 4 : -1);
459
468
  i0.ɵɵadvance(16);
460
- i0.ɵɵproperty("ngForOf", ctx_r2.filteredCredentials);
469
+ i0.ɵɵrepeater(ctx_r2.filteredCredentials);
461
470
  } }
462
- function CredentialsListResourceComponent_ng_container_2_div_50_p_5_Template(rf, ctx) { if (rf & 1) {
471
+ function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_5_Template(rf, ctx) { if (rf & 1) {
463
472
  const _r24 = i0.ɵɵgetCurrentView();
464
473
  i0.ɵɵelementStart(0, "p");
465
474
  i0.ɵɵtext(1, " No credentials match your current filters. ");
466
- i0.ɵɵelementStart(2, "button", 56);
467
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_50_p_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearFilters()); });
475
+ i0.ɵɵelementStart(2, "button", 50);
476
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearFilters()); });
468
477
  i0.ɵɵtext(3, "Clear filters");
469
478
  i0.ɵɵelementEnd()();
470
479
  } }
471
- function CredentialsListResourceComponent_ng_container_2_div_50_p_6_Template(rf, ctx) { if (rf & 1) {
480
+ function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_6_Template(rf, ctx) { if (rf & 1) {
472
481
  i0.ɵɵelementStart(0, "p");
473
482
  i0.ɵɵtext(1, " Get started by creating your first credential. ");
474
483
  i0.ɵɵelementEnd();
475
484
  } }
476
- function CredentialsListResourceComponent_ng_container_2_div_50_button_7_Template(rf, ctx) { if (rf & 1) {
485
+ function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_7_Template(rf, ctx) { if (rf & 1) {
477
486
  const _r25 = i0.ɵɵgetCurrentView();
478
- i0.ɵɵelementStart(0, "button", 48);
479
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_div_50_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
480
- i0.ɵɵelement(1, "i", 49);
487
+ i0.ɵɵelementStart(0, "button", 44);
488
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCredential()); });
489
+ i0.ɵɵelement(1, "i", 45);
481
490
  i0.ɵɵtext(2, " Create Credential ");
482
491
  i0.ɵɵelementEnd();
483
492
  } }
484
- function CredentialsListResourceComponent_ng_container_2_div_50_Template(rf, ctx) { if (rf & 1) {
485
- i0.ɵɵelementStart(0, "div", 129)(1, "div", 130);
486
- i0.ɵɵelement(2, "i", 11);
493
+ function CredentialsListResourceComponent_Conditional_2_Conditional_50_Template(rf, ctx) { if (rf & 1) {
494
+ i0.ɵɵelementStart(0, "div", 41)(1, "div", 113);
495
+ i0.ɵɵelement(2, "i", 9);
487
496
  i0.ɵɵelementEnd();
488
497
  i0.ɵɵelementStart(3, "h3");
489
498
  i0.ɵɵtext(4, "No Credentials Found");
490
499
  i0.ɵɵelementEnd();
491
- i0.ɵɵtemplate(5, CredentialsListResourceComponent_ng_container_2_div_50_p_5_Template, 4, 0, "p", 3)(6, CredentialsListResourceComponent_ng_container_2_div_50_p_6_Template, 2, 0, "p", 3)(7, CredentialsListResourceComponent_ng_container_2_div_50_button_7_Template, 3, 0, "button", 17);
500
+ i0.ɵɵconditionalCreate(5, CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_5_Template, 4, 0, "p");
501
+ i0.ɵɵconditionalCreate(6, CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_6_Template, 2, 0, "p");
502
+ i0.ɵɵconditionalCreate(7, CredentialsListResourceComponent_Conditional_2_Conditional_50_Conditional_7_Template, 3, 0, "button", 15);
492
503
  i0.ɵɵelementEnd();
493
504
  } if (rf & 2) {
494
505
  const ctx_r2 = i0.ɵɵnextContext(2);
495
506
  i0.ɵɵadvance(5);
496
- i0.ɵɵproperty("ngIf", ctx_r2.searchText || ctx_r2.selectedTypeFilter || ctx_r2.selectedStatusFilter);
507
+ i0.ɵɵconditional(ctx_r2.searchText || ctx_r2.selectedTypeFilter || ctx_r2.selectedStatusFilter ? 5 : -1);
497
508
  i0.ɵɵadvance();
498
- i0.ɵɵproperty("ngIf", !ctx_r2.searchText && !ctx_r2.selectedTypeFilter && !ctx_r2.selectedStatusFilter);
509
+ i0.ɵɵconditional(!ctx_r2.searchText && !ctx_r2.selectedTypeFilter && !ctx_r2.selectedStatusFilter ? 6 : -1);
499
510
  i0.ɵɵadvance();
500
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanCreate && !ctx_r2.searchText && !ctx_r2.selectedTypeFilter && !ctx_r2.selectedStatusFilter);
511
+ i0.ɵɵconditional(ctx_r2.UserCanCreate && !ctx_r2.searchText && !ctx_r2.selectedTypeFilter && !ctx_r2.selectedStatusFilter ? 7 : -1);
501
512
  } }
502
- function CredentialsListResourceComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
513
+ function CredentialsListResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
503
514
  const _r2 = i0.ɵɵgetCurrentView();
504
- i0.ɵɵelementContainerStart(0);
505
- i0.ɵɵelementStart(1, "div", 6)(2, "div", 7)(3, "h2", 8);
506
- i0.ɵɵtext(4, "Credentials");
515
+ i0.ɵɵelementStart(0, "div", 4)(1, "div", 5)(2, "h2", 6);
516
+ i0.ɵɵtext(3, "Credentials");
507
517
  i0.ɵɵelementEnd();
508
- i0.ɵɵelementStart(5, "div", 9)(6, "span", 10);
509
- i0.ɵɵelement(7, "i", 11);
510
- i0.ɵɵtext(8);
518
+ i0.ɵɵelementStart(4, "div", 7)(5, "span", 8);
519
+ i0.ɵɵelement(6, "i", 9);
520
+ i0.ɵɵtext(7);
511
521
  i0.ɵɵelementEnd();
512
- i0.ɵɵelementStart(9, "span", 12);
513
- i0.ɵɵelement(10, "i", 13);
514
- i0.ɵɵtext(11);
522
+ i0.ɵɵelementStart(8, "span", 10);
523
+ i0.ɵɵelement(9, "i", 11);
524
+ i0.ɵɵtext(10);
515
525
  i0.ɵɵelementEnd();
516
- i0.ɵɵtemplate(12, CredentialsListResourceComponent_ng_container_2_span_12_Template, 3, 1, "span", 14)(13, CredentialsListResourceComponent_ng_container_2_span_13_Template, 3, 1, "span", 15);
526
+ i0.ɵɵconditionalCreate(11, CredentialsListResourceComponent_Conditional_2_Conditional_11_Template, 3, 1, "span", 12);
527
+ i0.ɵɵconditionalCreate(12, CredentialsListResourceComponent_Conditional_2_Conditional_12_Template, 3, 1, "span", 13);
517
528
  i0.ɵɵelementEnd()();
518
- i0.ɵɵelementStart(14, "div", 16);
519
- i0.ɵɵtemplate(15, CredentialsListResourceComponent_ng_container_2_button_15_Template, 4, 0, "button", 17);
529
+ i0.ɵɵelementStart(13, "div", 14);
530
+ i0.ɵɵconditionalCreate(14, CredentialsListResourceComponent_Conditional_2_Conditional_14_Template, 4, 0, "button", 15);
520
531
  i0.ɵɵelementEnd()();
521
- i0.ɵɵelementStart(16, "div", 18)(17, "div", 19)(18, "div", 20);
522
- i0.ɵɵelement(19, "i", 21);
523
- i0.ɵɵelementStart(20, "input", 22);
524
- i0.ɵɵlistener("input", function CredentialsListResourceComponent_ng_container_2_Template_input_input_20_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSearchChange($event.target.value)); });
532
+ i0.ɵɵelementStart(15, "div", 16)(16, "div", 17)(17, "div", 18);
533
+ i0.ɵɵelement(18, "i", 19);
534
+ i0.ɵɵelementStart(19, "input", 20);
535
+ i0.ɵɵlistener("input", function CredentialsListResourceComponent_Conditional_2_Template_input_input_19_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSearchChange($event.target.value)); });
525
536
  i0.ɵɵelementEnd();
526
- i0.ɵɵtemplate(21, CredentialsListResourceComponent_ng_container_2_button_21_Template, 2, 0, "button", 23);
537
+ i0.ɵɵconditionalCreate(20, CredentialsListResourceComponent_Conditional_2_Conditional_20_Template, 2, 0, "button", 21);
527
538
  i0.ɵɵelementEnd();
528
- i0.ɵɵelementStart(22, "select", 24);
529
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_ng_container_2_Template_select_change_22_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTypeFilterChange($event.target.value)); });
530
- i0.ɵɵelementStart(23, "option", 25);
531
- i0.ɵɵtext(24, "All Types");
539
+ i0.ɵɵelementStart(21, "select", 22);
540
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Template_select_change_21_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTypeFilterChange($event.target.value)); });
541
+ i0.ɵɵelementStart(22, "option", 23);
542
+ i0.ɵɵtext(23, "All Types");
532
543
  i0.ɵɵelementEnd();
533
- i0.ɵɵtemplate(25, CredentialsListResourceComponent_ng_container_2_option_25_Template, 2, 2, "option", 26);
544
+ i0.ɵɵrepeaterCreate(24, CredentialsListResourceComponent_Conditional_2_For_25_Template, 2, 2, "option", 24, i0.ɵɵrepeaterTrackByIdentity);
534
545
  i0.ɵɵelementEnd();
535
- i0.ɵɵelementStart(26, "select", 24);
536
- i0.ɵɵlistener("change", function CredentialsListResourceComponent_ng_container_2_Template_select_change_26_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onStatusFilterChange($event.target.value)); });
537
- i0.ɵɵelementStart(27, "option", 25);
546
+ i0.ɵɵelementStart(26, "select", 22);
547
+ i0.ɵɵlistener("change", function CredentialsListResourceComponent_Conditional_2_Template_select_change_26_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onStatusFilterChange($event.target.value)); });
548
+ i0.ɵɵelementStart(27, "option", 23);
538
549
  i0.ɵɵtext(28, "All Statuses");
539
550
  i0.ɵɵelementEnd();
540
- i0.ɵɵelementStart(29, "option", 27);
551
+ i0.ɵɵelementStart(29, "option", 25);
541
552
  i0.ɵɵtext(30, "Active");
542
553
  i0.ɵɵelementEnd();
543
- i0.ɵɵelementStart(31, "option", 28);
554
+ i0.ɵɵelementStart(31, "option", 26);
544
555
  i0.ɵɵtext(32, "Inactive");
545
556
  i0.ɵɵelementEnd();
546
- i0.ɵɵelementStart(33, "option", 29);
557
+ i0.ɵɵelementStart(33, "option", 27);
547
558
  i0.ɵɵtext(34, "Expiring Soon");
548
559
  i0.ɵɵelementEnd();
549
- i0.ɵɵelementStart(35, "option", 30);
560
+ i0.ɵɵelementStart(35, "option", 28);
550
561
  i0.ɵɵtext(36, "Expired");
551
562
  i0.ɵɵelementEnd()()();
552
- i0.ɵɵelementStart(37, "div", 31)(38, "div", 32);
563
+ i0.ɵɵelementStart(37, "div", 29)(38, "div", 30);
553
564
  i0.ɵɵtext(39);
554
565
  i0.ɵɵelementEnd();
555
- i0.ɵɵelementStart(40, "div", 33)(41, "button", 34);
556
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("grid")); });
557
- i0.ɵɵelement(42, "i", 35);
566
+ i0.ɵɵelementStart(40, "div", 31)(41, "button", 32);
567
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("grid")); });
568
+ i0.ɵɵelement(42, "i", 33);
558
569
  i0.ɵɵelementEnd();
559
- i0.ɵɵelementStart(43, "button", 36);
560
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_Template_button_click_43_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("list")); });
561
- i0.ɵɵelement(44, "i", 37);
570
+ i0.ɵɵelementStart(43, "button", 34);
571
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_43_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setViewMode("list")); });
572
+ i0.ɵɵelement(44, "i", 35);
562
573
  i0.ɵɵelementEnd()();
563
- i0.ɵɵelementStart(45, "button", 38);
564
- i0.ɵɵlistener("click", function CredentialsListResourceComponent_ng_container_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.refresh()); });
565
- i0.ɵɵelement(46, "i", 39);
574
+ i0.ɵɵelementStart(45, "button", 36);
575
+ i0.ɵɵlistener("click", function CredentialsListResourceComponent_Conditional_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.refresh()); });
576
+ i0.ɵɵelement(46, "i", 37);
566
577
  i0.ɵɵelementEnd()()();
567
- i0.ɵɵtemplate(47, CredentialsListResourceComponent_ng_container_2_div_47_Template, 10, 4, "div", 40)(48, CredentialsListResourceComponent_ng_container_2_div_48_Template, 2, 1, "div", 41)(49, CredentialsListResourceComponent_ng_container_2_div_49_Template, 21, 2, "div", 42)(50, CredentialsListResourceComponent_ng_container_2_div_50_Template, 8, 3, "div", 43);
568
- i0.ɵɵelementContainerEnd();
578
+ i0.ɵɵconditionalCreate(47, CredentialsListResourceComponent_Conditional_2_Conditional_47_Template, 10, 4, "div", 38);
579
+ i0.ɵɵconditionalCreate(48, CredentialsListResourceComponent_Conditional_2_Conditional_48_Template, 3, 0, "div", 39);
580
+ i0.ɵɵconditionalCreate(49, CredentialsListResourceComponent_Conditional_2_Conditional_49_Template, 22, 1, "div", 40);
581
+ i0.ɵɵconditionalCreate(50, CredentialsListResourceComponent_Conditional_2_Conditional_50_Template, 8, 3, "div", 41);
569
582
  } if (rf & 2) {
570
583
  const ctx_r2 = i0.ɵɵnextContext();
571
- i0.ɵɵadvance(8);
584
+ i0.ɵɵadvance(7);
572
585
  i0.ɵɵtextInterpolate1(" ", ctx_r2.credentials.length, " total ");
573
586
  i0.ɵɵadvance(3);
574
587
  i0.ɵɵtextInterpolate1(" ", ctx_r2.getActiveCount(), " active ");
575
588
  i0.ɵɵadvance();
576
- i0.ɵɵproperty("ngIf", ctx_r2.getExpiringSoonCount() > 0);
589
+ i0.ɵɵconditional(ctx_r2.getExpiringSoonCount() > 0 ? 11 : -1);
577
590
  i0.ɵɵadvance();
578
- i0.ɵɵproperty("ngIf", ctx_r2.getExpiredCount() > 0);
591
+ i0.ɵɵconditional(ctx_r2.getExpiredCount() > 0 ? 12 : -1);
579
592
  i0.ɵɵadvance(2);
580
- i0.ɵɵproperty("ngIf", ctx_r2.UserCanCreate);
593
+ i0.ɵɵconditional(ctx_r2.UserCanCreate ? 14 : -1);
581
594
  i0.ɵɵadvance(5);
582
595
  i0.ɵɵproperty("value", ctx_r2.searchText);
583
596
  i0.ɵɵadvance();
584
- i0.ɵɵproperty("ngIf", ctx_r2.searchText);
597
+ i0.ɵɵconditional(ctx_r2.searchText ? 20 : -1);
585
598
  i0.ɵɵadvance();
586
599
  i0.ɵɵproperty("value", ctx_r2.selectedTypeFilter);
587
600
  i0.ɵɵadvance(3);
588
- i0.ɵɵproperty("ngForOf", ctx_r2.types);
589
- i0.ɵɵadvance();
601
+ i0.ɵɵrepeater(ctx_r2.types);
602
+ i0.ɵɵadvance(2);
590
603
  i0.ɵɵproperty("value", ctx_r2.selectedStatusFilter);
591
604
  i0.ɵɵadvance(13);
592
605
  i0.ɵɵtextInterpolate2(" ", ctx_r2.filteredCredentials.length, " of ", ctx_r2.credentials.length, " ");
@@ -595,17 +608,14 @@ function CredentialsListResourceComponent_ng_container_2_Template(rf, ctx) { if
595
608
  i0.ɵɵadvance(2);
596
609
  i0.ɵɵclassProp("active", ctx_r2.viewMode === "list");
597
610
  i0.ɵɵadvance(4);
598
- i0.ɵɵproperty("ngIf", ctx_r2.selectedCredentials.size > 0);
611
+ i0.ɵɵconditional(ctx_r2.selectedCredentials.size > 0 ? 47 : -1);
599
612
  i0.ɵɵadvance();
600
- i0.ɵɵproperty("ngIf", ctx_r2.viewMode === "grid" && ctx_r2.filteredCredentials.length > 0);
613
+ i0.ɵɵconditional(ctx_r2.viewMode === "grid" && ctx_r2.filteredCredentials.length > 0 ? 48 : -1);
601
614
  i0.ɵɵadvance();
602
- i0.ɵɵproperty("ngIf", ctx_r2.viewMode === "list" && ctx_r2.filteredCredentials.length > 0);
615
+ i0.ɵɵconditional(ctx_r2.viewMode === "list" && ctx_r2.filteredCredentials.length > 0 ? 49 : -1);
603
616
  i0.ɵɵadvance();
604
- i0.ɵɵproperty("ngIf", ctx_r2.filteredCredentials.length === 0);
617
+ i0.ɵɵconditional(ctx_r2.filteredCredentials.length === 0 ? 50 : -1);
605
618
  } }
606
- export function LoadCredentialsListResource() {
607
- // Prevents tree-shaking
608
- }
609
619
  let CredentialsListResourceComponent = class CredentialsListResourceComponent extends BaseResourceComponent {
610
620
  cdr;
611
621
  isLoading = true;
@@ -1222,21 +1232,22 @@ let CredentialsListResourceComponent = class CredentialsListResourceComponent ex
1222
1232
  } if (rf & 2) {
1223
1233
  let _t;
1224
1234
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.editPanel = _t.first);
1225
- } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 3, consts: [["editPanel", ""], [1, "list-container"], ["text", "Loading credentials...", 4, "ngIf"], [4, "ngIf"], [3, "saved", "deleted", "credentialTypes"], ["text", "Loading credentials..."], [1, "list-header"], [1, "header-info"], [1, "list-title"], [1, "header-stats"], [1, "stat-item"], [1, "fa-solid", "fa-key"], [1, "stat-item", "active"], [1, "fa-solid", "fa-check-circle"], ["class", "stat-item warning", 4, "ngIf"], ["class", "stat-item danger", 4, "ngIf"], [1, "header-actions"], ["class", "btn-primary", 3, "click", 4, "ngIf"], [1, "toolbar"], [1, "toolbar-left"], [1, "search-container"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search credentials...", 3, "input", "value"], ["class", "search-clear", 3, "click", 4, "ngIf"], [1, "filter-select", 3, "change", "value"], ["value", ""], [3, "value", 4, "ngFor", "ngForOf"], ["value", "active"], ["value", "inactive"], ["value", "expiring"], ["value", "expired"], [1, "toolbar-right"], [1, "results-info"], [1, "view-toggle"], ["title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grid-2"], ["title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fa-solid", "fa-refresh"], ["class", "bulk-actions", 4, "ngIf"], ["class", "credentials-grid", 4, "ngIf"], ["class", "credentials-table-container", 4, "ngIf"], ["class", "empty-state", 4, "ngIf"], [1, "stat-item", "warning"], [1, "fa-solid", "fa-clock"], [1, "stat-item", "danger"], [1, "fa-solid", "fa-exclamation-circle"], [1, "btn-primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "search-clear", 3, "click"], [1, "fa-solid", "fa-times"], [3, "value"], [1, "bulk-actions"], [1, "bulk-info"], [1, "bulk-count"], [1, "btn-link", 3, "click"], [1, "bulk-buttons"], ["class", "btn-bulk", 3, "click", 4, "ngIf"], ["class", "btn-bulk danger", 3, "click", 4, "ngIf"], [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, "credentials-grid"], ["class", "credential-card", 3, "selected", "expired", "expiring", 4, "ngFor", "ngForOf"], [1, "credential-card"], ["class", "card-select", 4, "ngIf"], [1, "card-header"], [1, "card-icon", 3, "ngClass"], [1, "card-title"], [1, "credential-name"], [1, "credential-type"], [1, "card-actions"], ["class", "action-btn", 3, "title", "click", 4, "ngIf"], ["class", "action-btn", "title", "Edit", 3, "click", 4, "ngIf"], ["class", "action-btn danger", "title", "Delete", 3, "click", 4, "ngIf"], [1, "card-body", 3, "click"], [1, "status-badge", 3, "ngClass"], ["class", "credential-description", 4, "ngIf"], [1, "credential-meta"], ["class", "meta-item", 4, "ngIf"], ["class", "meta-item", 3, "warning", "danger", 4, "ngIf"], [1, "card-footer"], ["class", "category-tag", 4, "ngIf"], [1, "created-info"], [1, "card-select"], ["type", "checkbox", 3, "change", "checked"], [1, "action-btn", 3, "click", "title"], ["title", "Edit", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-pen"], ["title", "Delete", 1, "action-btn", "danger", 3, "click"], [1, "credential-description"], [1, "meta-item"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-calendar"], [1, "category-tag"], [1, "fa-solid", "fa-folder"], [1, "credentials-table-container"], [1, "credentials-table"], ["class", "col-select", 4, "ngIf"], [1, "col-name"], [1, "col-type"], [1, "col-category"], [1, "col-status"], [1, "col-expires"], [1, "col-used"], [1, "col-actions"], [3, "selected", "expired", 4, "ngFor", "ngForOf"], [1, "col-select"], [1, "col-name", 3, "click"], [1, "name-cell"], [3, "ngClass"], [1, "name-info"], ["class", "credential-desc", 4, "ngIf"], ["class", "default-badge", 4, "ngIf"], ["class", "category-pill", 4, "ngIf"], [1, "status-pill", 3, "ngClass"], [1, "table-actions"], ["class", "table-action-btn", 3, "title", "click", 4, "ngIf"], ["class", "table-action-btn", "title", "Edit", 3, "click", 4, "ngIf"], ["class", "table-action-btn danger", "title", "Delete", 3, "click", 4, "ngIf"], [1, "credential-desc"], [1, "default-badge"], [1, "category-pill"], [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-state"], [1, "empty-icon"]], template: function CredentialsListResourceComponent_Template(rf, ctx) { if (rf & 1) {
1235
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 3, consts: [["editPanel", ""], [1, "list-container"], ["text", "Loading credentials..."], [3, "saved", "deleted", "credentialTypes"], [1, "list-header"], [1, "header-info"], [1, "list-title"], [1, "header-stats"], [1, "stat-item"], [1, "fa-solid", "fa-key"], [1, "stat-item", "active"], [1, "fa-solid", "fa-check-circle"], [1, "stat-item", "warning"], [1, "stat-item", "danger"], [1, "header-actions"], [1, "btn-primary"], [1, "toolbar"], [1, "toolbar-left"], [1, "search-container"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search credentials...", 3, "input", "value"], [1, "search-clear"], [1, "filter-select", 3, "change", "value"], ["value", ""], [3, "value"], ["value", "active"], ["value", "inactive"], ["value", "expiring"], ["value", "expired"], [1, "toolbar-right"], [1, "results-info"], [1, "view-toggle"], ["title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grid-2"], ["title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "bulk-actions"], [1, "credentials-grid"], [1, "credentials-table-container"], [1, "empty-state"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-exclamation-circle"], [1, "btn-primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "search-clear", 3, "click"], [1, "fa-solid", "fa-times"], [1, "bulk-info"], [1, "bulk-count"], [1, "btn-link", 3, "click"], [1, "bulk-buttons"], [1, "btn-bulk"], [1, "btn-bulk", "danger"], [1, "btn-bulk", 3, "click"], [1, "fa-solid", "fa-toggle-on"], [1, "fa-solid", "fa-toggle-off"], [1, "btn-bulk", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "credential-card", 3, "selected", "expired", "expiring"], [1, "credential-card"], [1, "card-select"], [1, "card-header"], [1, "card-icon", 3, "ngClass"], [1, "card-title"], [1, "credential-name"], [1, "credential-type"], [1, "card-actions"], [1, "action-btn", 3, "title"], ["title", "Edit", 1, "action-btn"], ["title", "Delete", 1, "action-btn", "danger"], [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"], [1, "action-btn", 3, "click", "title"], ["title", "Edit", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-pen"], ["title", "Delete", 1, "action-btn", "danger", 3, "click"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-folder"], [1, "credentials-table"], [1, "col-select"], [1, "col-name"], [1, "col-type"], [1, "col-category"], [1, "col-status"], [1, "col-expires"], [1, "col-used"], [1, "col-actions"], [3, "selected", "expired"], [1, "col-name", 3, "click"], [1, "name-cell"], [3, "ngClass"], [1, "name-info"], [1, "credential-desc"], [1, "default-badge"], [1, "category-pill"], [1, "status-pill", 3, "ngClass"], [1, "table-actions"], [1, "table-action-btn", 3, "title"], ["title", "Edit", 1, "table-action-btn"], ["title", "Delete", 1, "table-action-btn", "danger"], [1, "table-action-btn", 3, "click", "title"], ["title", "Edit", 1, "table-action-btn", 3, "click"], ["title", "Delete", 1, "table-action-btn", "danger", 3, "click"], [1, "empty-icon"]], template: function CredentialsListResourceComponent_Template(rf, ctx) { if (rf & 1) {
1226
1236
  const _r1 = i0.ɵɵgetCurrentView();
1227
1237
  i0.ɵɵelementStart(0, "div", 1);
1228
- i0.ɵɵtemplate(1, CredentialsListResourceComponent_mj_loading_1_Template, 1, 0, "mj-loading", 2)(2, CredentialsListResourceComponent_ng_container_2_Template, 51, 20, "ng-container", 3);
1229
- i0.ɵɵelementStart(3, "mj-credential-edit-panel", 4, 0);
1238
+ i0.ɵɵconditionalCreate(1, CredentialsListResourceComponent_Conditional_1_Template, 1, 0, "mj-loading", 2);
1239
+ i0.ɵɵconditionalCreate(2, CredentialsListResourceComponent_Conditional_2_Template, 51, 19);
1240
+ i0.ɵɵelementStart(3, "mj-credential-edit-panel", 3, 0);
1230
1241
  i0.ɵɵlistener("saved", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_saved_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialSaved($event)); })("deleted", function CredentialsListResourceComponent_Template_mj_credential_edit_panel_deleted_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCredentialDeleted($event)); });
1231
1242
  i0.ɵɵelementEnd()();
1232
1243
  } if (rf & 2) {
1233
1244
  i0.ɵɵadvance();
1234
- i0.ɵɵproperty("ngIf", ctx.isLoading);
1245
+ i0.ɵɵconditional(ctx.isLoading ? 1 : -1);
1235
1246
  i0.ɵɵadvance();
1236
- i0.ɵɵproperty("ngIf", !ctx.isLoading);
1247
+ i0.ɵɵconditional(!ctx.isLoading ? 2 : -1);
1237
1248
  i0.ɵɵadvance();
1238
1249
  i0.ɵɵproperty("credentialTypes", ctx.types);
1239
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.LoadingComponent, i4.CredentialEditPanelComponent], styles: [".list-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--page-background, #f8fafc);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.stat-item.active[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.stat-item.warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.stat-item.danger[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px rgba(99, 102, 241, 0.4);\n}\n\n.btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--card-background, #ffffff);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n background: var(--input-background, #f9fafb);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-secondary, #6b7280);\n margin-right: 8px;\n}\n\n.search-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n}\n\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--border-color, #e5e7eb);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--text-secondary, #6b7280);\n font-size: 10px;\n}\n\n.search-clear[_ngcontent-%COMP%]:hover {\n background: var(--text-secondary, #6b7280);\n color: white;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--input-background, #ffffff);\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--accent-color, #6366f1);\n}\n\n.results-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n white-space: nowrap;\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--input-background, #f3f4f6);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: var(--accent-color, #6366f1);\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: var(--accent-color, #6366f1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--button-background, #ffffff);\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--button-hover, #f3f4f6);\n color: var(--accent-color, #6366f1);\n}\n\n\n\n.bulk-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n border-radius: 10px;\n margin-bottom: 16px;\n color: white;\n}\n\n.bulk-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: rgba(255, 255, 255, 0.8);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: white;\n}\n\n.bulk-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: rgba(255, 255, 255, 0.2);\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.3);\n border-color: rgba(239, 68, 68, 0.5);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%]:hover {\n background: rgba(239, 68, 68, 0.5);\n}\n\n\n\n.credentials-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected[_ngcontent-%COMP%] {\n border-color: var(--accent-color, #6366f1);\n background: linear-gradient(to bottom, rgba(99, 102, 241, 0.03), white);\n}\n\n.credential-card.expired[_ngcontent-%COMP%] {\n border-color: rgba(239, 68, 68, 0.3);\n}\n\n.credential-card.expiring[_ngcontent-%COMP%] {\n border-color: rgba(245, 158, 11, 0.3);\n}\n\n.card-select[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--accent-color, #6366f1);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n}\n\n.card-icon.inactive[_ngcontent-%COMP%] {\n background: var(--icon-inactive, #e5e7eb);\n color: var(--text-secondary, #6b7280);\n}\n\n.card-icon.expired[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n}\n\n.card-icon.expiring[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n color: white;\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-secondary, #6b7280);\n margin-top: 2px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: #ef4444;\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-badge.expired[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-badge.expiring[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.credential-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-secondary, #6b7280);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--accent-color, #6366f1);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.meta-item.warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.meta-item.danger[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.meta-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--footer-background, #f9fafb);\n border-top: 1px solid var(--border-color, #f3f4f6);\n}\n\n.category-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.created-info[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-tertiary, #9ca3af);\n}\n\n\n\n.credentials-table-container[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--header-background, #f9fafb);\n}\n\n.credentials-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-secondary, #6b7280);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.credentials-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--row-hover, #f9fafb);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.05);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expired[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.03);\n}\n\n.col-select[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n.col-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--accent-color, #6366f1);\n}\n\n.col-name[_ngcontent-%COMP%] {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell[_ngcontent-%COMP%] i.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.name-cell[_ngcontent-%COMP%] i.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.name-cell[_ngcontent-%COMP%] i.expired[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.name-cell[_ngcontent-%COMP%] i.expiring[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info[_ngcontent-%COMP%] .credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n}\n\n.name-info[_ngcontent-%COMP%] .credential-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-secondary, #9ca3af);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: white;\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type[_ngcontent-%COMP%], \n.col-category[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.category-pill[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-pill.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-pill.expired[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-pill.expiring[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.col-expires[_ngcontent-%COMP%], \n.col-used[_ngcontent-%COMP%] {\n white-space: nowrap;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.col-expires.warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n font-weight: 500;\n}\n\n.col-expires.danger[_ngcontent-%COMP%] {\n color: #ef4444;\n font-weight: 500;\n}\n\n.col-actions[_ngcontent-%COMP%] {\n width: 120px;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover .table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.table-action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.table-action-btn.danger[_ngcontent-%COMP%]:hover {\n background: #ef4444;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--card-background, #ffffff);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--accent-color, #6366f1);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n color: var(--accent-color, #6366f1);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n color: var(--accent-hover, #4f46e5);\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 12px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .header-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .search-container[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n\n .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .credentials-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n \n\n .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .bulk-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .credentials-table[_ngcontent-%COMP%] {\n min-width: 800px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 48px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin: 0;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n padding: 10px;\n }\n\n .view-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .results-info[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .credential-card[_ngcontent-%COMP%] {\n border-radius: 10px;\n }\n\n .card-select[_ngcontent-%COMP%] {\n top: 10px;\n left: 10px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .credential-type[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .category-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}"], changeDetection: 0 });
1250
+ } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.LoadingComponent, i4.CredentialEditPanelComponent], styles: [".list-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--page-background, #f8fafc);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.stat-item.active[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.stat-item.warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.stat-item.danger[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px rgba(99, 102, 241, 0.4);\n}\n\n.btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--card-background, #ffffff);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n background: var(--input-background, #f9fafb);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-secondary, #6b7280);\n margin-right: 8px;\n}\n\n.search-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n}\n\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--border-color, #e5e7eb);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--text-secondary, #6b7280);\n font-size: 10px;\n}\n\n.search-clear[_ngcontent-%COMP%]:hover {\n background: var(--text-secondary, #6b7280);\n color: white;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--input-background, #ffffff);\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--accent-color, #6366f1);\n}\n\n.results-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n white-space: nowrap;\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--input-background, #f3f4f6);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: var(--accent-color, #6366f1);\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: var(--accent-color, #6366f1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--button-background, #ffffff);\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--button-hover, #f3f4f6);\n color: var(--accent-color, #6366f1);\n}\n\n\n\n.bulk-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n border-radius: 10px;\n margin-bottom: 16px;\n color: white;\n}\n\n.bulk-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bulk-count[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: rgba(255, 255, 255, 0.8);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: white;\n}\n\n.bulk-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: rgba(255, 255, 255, 0.2);\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.3);\n border-color: rgba(239, 68, 68, 0.5);\n}\n\n.btn-bulk.danger[_ngcontent-%COMP%]:hover {\n background: rgba(239, 68, 68, 0.5);\n}\n\n\n\n.credentials-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 20px;\n}\n\n.credential-card[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n transition: all 0.2s ease;\n position: relative;\n border: 2px solid transparent;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n}\n\n.credential-card.selected[_ngcontent-%COMP%] {\n border-color: var(--accent-color, #6366f1);\n background: linear-gradient(to bottom, rgba(99, 102, 241, 0.03), white);\n}\n\n.credential-card.expired[_ngcontent-%COMP%] {\n border-color: rgba(239, 68, 68, 0.3);\n}\n\n.credential-card.expiring[_ngcontent-%COMP%] {\n border-color: rgba(245, 158, 11, 0.3);\n}\n\n.card-select[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 10;\n}\n\n.card-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--accent-color, #6366f1);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px;\n padding-left: 40px;\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 10px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.card-icon.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n}\n\n.card-icon.inactive[_ngcontent-%COMP%] {\n background: var(--icon-inactive, #e5e7eb);\n color: var(--text-secondary, #6b7280);\n}\n\n.card-icon.expired[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n}\n\n.card-icon.expiring[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n color: white;\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-secondary, #6b7280);\n margin-top: 2px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 8px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credential-card[_ngcontent-%COMP%]:hover .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: #ef4444;\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n padding-left: 40px;\n cursor: pointer;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-badge.expired[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-badge.expiring[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.credential-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n line-height: 1.5;\n margin: 0 0 12px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.credential-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-secondary, #6b7280);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--accent-color, #6366f1);\n}\n\n.meta-item.warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.meta-item.warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.meta-item.danger[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.meta-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n padding-left: 40px;\n background: var(--footer-background, #f9fafb);\n border-top: 1px solid var(--border-color, #f3f4f6);\n}\n\n.category-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.category-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.created-info[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-tertiary, #9ca3af);\n}\n\n\n\n.credentials-table-container[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.credentials-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.credentials-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--header-background, #f9fafb);\n}\n\n.credentials-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-secondary, #6b7280);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.credentials-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--row-hover, #f9fafb);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.05);\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expired[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.03);\n}\n\n.col-select[_ngcontent-%COMP%] {\n width: 40px;\n}\n\n.col-select[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n accent-color: var(--accent-color, #6366f1);\n}\n\n.col-name[_ngcontent-%COMP%] {\n min-width: 240px;\n cursor: pointer;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n.name-cell[_ngcontent-%COMP%] i.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.name-cell[_ngcontent-%COMP%] i.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.name-cell[_ngcontent-%COMP%] i.expired[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.name-cell[_ngcontent-%COMP%] i.expiring[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.name-info[_ngcontent-%COMP%] .credential-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n}\n\n.name-info[_ngcontent-%COMP%] .credential-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-secondary, #9ca3af);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: white;\n font-size: 10px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.col-type[_ngcontent-%COMP%], \n.col-category[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.category-pill[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.col-status[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-pill.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-pill.expired[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-pill.expiring[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.col-expires[_ngcontent-%COMP%], \n.col-used[_ngcontent-%COMP%] {\n white-space: nowrap;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.col-expires.warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n font-weight: 500;\n}\n\n.col-expires.danger[_ngcontent-%COMP%] {\n color: #ef4444;\n font-weight: 500;\n}\n\n.col-actions[_ngcontent-%COMP%] {\n width: 120px;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.credentials-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover .table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.table-action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: var(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.table-action-btn.danger[_ngcontent-%COMP%]:hover {\n background: #ef4444;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 24px;\n text-align: center;\n background: var(--card-background, #ffffff);\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--accent-color, #6366f1);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0 0 24px 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n color: var(--accent-color, #6366f1);\n text-decoration: underline;\n cursor: pointer;\n background: none;\n border: none;\n font-size: 14px;\n padding: 0;\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n color: var(--accent-hover, #4f46e5);\n}\n\n.empty-state[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n margin-top: 0;\n}\n\n\n\n@media (max-width: 768px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 12px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .header-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .search-container[_ngcontent-%COMP%] {\n min-width: 100%;\n }\n\n .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n\n .credentials-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n \n\n .card-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 14px;\n padding-left: 36px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 14px;\n padding-left: 36px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .bulk-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n text-align: center;\n }\n\n .bulk-info[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n\n .bulk-buttons[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .credentials-table-container[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n\n .credentials-table[_ngcontent-%COMP%] {\n min-width: 800px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 48px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .list-container[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .list-title[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 6px;\n }\n\n .btn-primary[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-primary[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n\n .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin: 0;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n padding: 10px;\n }\n\n .view-toggle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .results-info[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .credential-card[_ngcontent-%COMP%] {\n border-radius: 10px;\n }\n\n .card-select[_ngcontent-%COMP%] {\n top: 10px;\n left: 10px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 12px;\n padding-left: 32px;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n padding: 10px 12px;\n padding-left: 32px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n margin-right: 10px;\n }\n\n .credential-name[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .credential-type[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .credential-meta[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .category-tag[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 3px 8px;\n }\n\n .created-info[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 32px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n margin-bottom: 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n}"], changeDetection: 0 });
1240
1251
  };
1241
1252
  CredentialsListResourceComponent = __decorate([
1242
1253
  RegisterClass(BaseResourceComponent, 'CredentialsListResource')
@@ -1244,10 +1255,10 @@ CredentialsListResourceComponent = __decorate([
1244
1255
  export { CredentialsListResourceComponent };
1245
1256
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsListResourceComponent, [{
1246
1257
  type: Component,
1247
- args: [{ selector: 'mj-credentials-list-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"list-container\">\n <mj-loading *ngIf=\"isLoading\" text=\"Loading credentials...\"></mj-loading>\n\n <ng-container *ngIf=\"!isLoading\">\n <!-- Header with Stats -->\n <div class=\"list-header\">\n <div class=\"header-info\">\n <h2 class=\"list-title\">Credentials</h2>\n <div class=\"header-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-key\"></i>\n {{credentials.length}} total\n </span>\n <span class=\"stat-item active\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{getActiveCount()}} active\n </span>\n <span class=\"stat-item warning\" *ngIf=\"getExpiringSoonCount() > 0\">\n <i class=\"fa-solid fa-clock\"></i>\n {{getExpiringSoonCount()}} expiring\n </span>\n <span class=\"stat-item danger\" *ngIf=\"getExpiredCount() > 0\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{getExpiredCount()}} expired\n </span>\n </div>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-primary\" *ngIf=\"UserCanCreate\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n </div>\n </div>\n\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search credentials...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n <button class=\"search-clear\" *ngIf=\"searchText\" (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <select\n class=\"filter-select\"\n [value]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Types</option>\n <option *ngFor=\"let type of types\" [value]=\"type.ID\">{{type.Name}}</option>\n </select>\n\n <select\n class=\"filter-select\"\n [value]=\"selectedStatusFilter\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"expiring\">Expiring Soon</option>\n <option value=\"expired\">Expired</option>\n </select>\n </div>\n\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredCredentials.length}} of {{credentials.length}}\n </div>\n\n <div class=\"view-toggle\">\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n\n <!-- Bulk Actions Bar -->\n <div class=\"bulk-actions\" *ngIf=\"selectedCredentials.size > 0\">\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 <button class=\"btn-bulk\" *ngIf=\"UserCanUpdate\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n <button class=\"btn-bulk\" *ngIf=\"UserCanUpdate\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n <button class=\"btn-bulk danger\" *ngIf=\"UserCanDelete\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n </div>\n </div>\n\n <!-- Grid View -->\n <div class=\"credentials-grid\" *ngIf=\"viewMode === 'grid' && filteredCredentials.length > 0\">\n <div\n class=\"credential-card\"\n *ngFor=\"let credential of filteredCredentials\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n <div class=\"card-select\" *ngIf=\"UserCanUpdate || UserCanDelete\">\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 <button\n class=\"action-btn\"\n *ngIf=\"UserCanUpdate\"\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 <button\n class=\"action-btn\"\n *ngIf=\"UserCanUpdate\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button\n class=\"action-btn danger\"\n *ngIf=\"UserCanDelete\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n\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\n <p class=\"credential-description\" *ngIf=\"credential.Description\">\n {{credential.Description}}\n </p>\n\n <div class=\"credential-meta\">\n <div class=\"meta-item\" *ngIf=\"credential.IsDefault\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n <div class=\"meta-item\" *ngIf=\"credential.ExpiresAt\" [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 <div class=\"meta-item\" *ngIf=\"credential.LastUsedAt\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"card-footer\">\n <div class=\"category-tag\" *ngIf=\"credential.Category\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n </div>\n\n <!-- List View -->\n <div class=\"credentials-table-container\" *ngIf=\"viewMode === 'list' && filteredCredentials.length > 0\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n <th class=\"col-select\" *ngIf=\"UserCanUpdate || UserCanDelete\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\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 <tr\n *ngFor=\"let credential of filteredCredentials\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n <td class=\"col-select\" *ngIf=\"UserCanUpdate || UserCanDelete\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\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 <span class=\"credential-desc\" *ngIf=\"credential.Description\">{{credential.Description}}</span>\n </div>\n <span class=\"default-badge\" *ngIf=\"credential.IsDefault\">Default</span>\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n <span class=\"category-pill\" *ngIf=\"credential.Category\">{{credential.Category}}</span>\n <span *ngIf=\"!credential.Category\">-</span>\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 <button\n class=\"table-action-btn\"\n *ngIf=\"UserCanUpdate\"\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 <button\n class=\"table-action-btn\"\n *ngIf=\"UserCanUpdate\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button\n class=\"table-action-btn danger\"\n *ngIf=\"UserCanDelete\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"filteredCredentials.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n <p *ngIf=\"searchText || selectedTypeFilter || selectedStatusFilter\">\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n <p *ngIf=\"!searchText && !selectedTypeFilter && !selectedStatusFilter\">\n Get started by creating your first credential.\n </p>\n <button class=\"btn-primary\" *ngIf=\"UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </ng-container>\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n</div>\n", styles: [".list-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--page-background, #f8fafc);\n}\n\n/* Header */\n.list-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0;\n}\n\n.header-stats {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.stat-item i {\n font-size: 12px;\n}\n\n.stat-item.active {\n color: #10b981;\n}\n\n.stat-item.warning {\n color: #f59e0b;\n}\n\n.stat-item.danger {\n color: #ef4444;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n.btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px rgba(99, 102, 241, 0.4);\n}\n\n.btn-primary i {\n font-size: 13px;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--card-background, #ffffff);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container {\n display: flex;\n align-items: center;\n background: var(--input-background, #f9fafb);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container i {\n color: var(--text-secondary, #6b7280);\n margin-right: 8px;\n}\n\n.search-container input {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n}\n\n.search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--border-color, #e5e7eb);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--text-secondary, #6b7280);\n font-size: 10px;\n}\n\n.search-clear:hover {\n background: var(--text-secondary, #6b7280);\n color: white;\n}\n\n.filter-select {\n padding: 8px 12px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--input-background, #ffffff);\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--accent-color, #6366f1);\n}\n\n.results-info {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n white-space: nowrap;\n}\n\n.view-toggle {\n display: flex;\n background: var(--input-background, #f3f4f6);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn:hover {\n color: var(--accent-color, #6366f1);\n}\n\n.view-btn.active {\n background: white;\n color: var(--accent-color, #6366f1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--button-background, #ffffff);\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon:hover {\n background: var(--button-hover, #f3f4f6);\n color: var(--accent-color, #6366f1);\n}\n\n/* Bulk Actions Bar */\n.bulk-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n border-radius: 10px;\n margin-bottom: 16px;\n color: white;\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: rgba(255, 255, 255, 0.8);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link:hover {\n color: white;\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: rgba(255, 255, 255, 0.2);\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n\n.btn-bulk.danger {\n background: rgba(239, 68, 68, 0.3);\n border-color: rgba(239, 68, 68, 0.5);\n}\n\n.btn-bulk.danger:hover {\n background: rgba(239, 68, 68, 0.5);\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(--card-background, #ffffff);\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(--accent-color, #6366f1);\n background: linear-gradient(to bottom, rgba(99, 102, 241, 0.03), white);\n}\n\n.credential-card.expired {\n border-color: rgba(239, 68, 68, 0.3);\n}\n\n.credential-card.expiring {\n border-color: rgba(245, 158, 11, 0.3);\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(--accent-color, #6366f1);\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(--border-color, #f3f4f6);\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: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n}\n\n.card-icon.inactive {\n background: var(--icon-inactive, #e5e7eb);\n color: var(--text-secondary, #6b7280);\n}\n\n.card-icon.expired {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n}\n\n.card-icon.expiring {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n color: white;\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(--text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type {\n font-size: 12px;\n color: var(--text-secondary, #6b7280);\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(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.action-btn.danger:hover {\n background: #ef4444;\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: #d1fae5;\n color: #059669;\n}\n\n.status-badge.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-badge.expired {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-badge.expiring {\n background: #fef3c7;\n color: #d97706;\n}\n\n.credential-description {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\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(--text-secondary, #6b7280);\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--accent-color, #6366f1);\n}\n\n.meta-item.warning {\n color: #f59e0b;\n}\n\n.meta-item.warning i {\n color: #f59e0b;\n}\n\n.meta-item.danger {\n color: #ef4444;\n}\n\n.meta-item.danger i {\n color: #ef4444;\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(--footer-background, #f9fafb);\n border-top: 1px solid var(--border-color, #f3f4f6);\n}\n\n.category-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\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(--text-tertiary, #9ca3af);\n}\n\n/* Table View */\n.credentials-table-container {\n background: var(--card-background, #ffffff);\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(--header-background, #f9fafb);\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(--text-secondary, #6b7280);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.credentials-table td {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n}\n\n.credentials-table tbody tr {\n transition: background 0.2s ease;\n}\n\n.credentials-table tbody tr:hover {\n background: var(--row-hover, #f9fafb);\n}\n\n.credentials-table tbody tr.selected {\n background: rgba(99, 102, 241, 0.05);\n}\n\n.credentials-table tbody tr.expired {\n background: rgba(239, 68, 68, 0.03);\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(--accent-color, #6366f1);\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: #d1fae5;\n color: #059669;\n}\n\n.name-cell i.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.name-cell i.expired {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.name-cell i.expiring {\n background: #fef3c7;\n color: #d97706;\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(--text-primary, #1f2937);\n}\n\n.name-info .credential-desc {\n font-size: 12px;\n color: var(--text-secondary, #9ca3af);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: white;\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: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\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: #d1fae5;\n color: #059669;\n}\n\n.status-pill.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-pill.expired {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-pill.expiring {\n background: #fef3c7;\n color: #d97706;\n}\n\n.col-expires,\n.col-used {\n white-space: nowrap;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.col-expires.warning {\n color: #f59e0b;\n font-weight: 500;\n}\n\n.col-expires.danger {\n color: #ef4444;\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(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.table-action-btn.danger:hover {\n background: #ef4444;\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(--card-background, #ffffff);\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: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--accent-color, #6366f1);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\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(--accent-color, #6366f1);\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(--accent-hover, #4f46e5);\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"] }]
1258
+ args: [{ standalone: false, selector: 'mj-credentials-list-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"list-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header with Stats -->\n <div class=\"list-header\">\n <div class=\"header-info\">\n <h2 class=\"list-title\">Credentials</h2>\n <div class=\"header-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-key\"></i>\n {{credentials.length}} total\n </span>\n <span class=\"stat-item active\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{getActiveCount()}} active\n </span>\n @if (getExpiringSoonCount() > 0) {\n <span class=\"stat-item warning\">\n <i class=\"fa-solid fa-clock\"></i>\n {{getExpiringSoonCount()}} expiring\n </span>\n }\n @if (getExpiredCount() > 0) {\n <span class=\"stat-item danger\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{getExpiredCount()}} expired\n </span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (UserCanCreate) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n }\n </div>\n </div>\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search credentials...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Types</option>\n @for (type of types; track type) {\n <option [value]=\"type.ID\">{{type.Name}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatusFilter\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"expiring\">Expiring Soon</option>\n <option value=\"expired\">Expired</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredCredentials.length}} of {{credentials.length}}\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"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=\"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=\"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 </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n</div>\n", styles: [".list-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n background: var(--page-background, #f8fafc);\n}\n\n/* Header */\n.list-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n margin-bottom: 24px;\n flex-wrap: wrap;\n gap: 16px;\n}\n\n.header-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.list-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0;\n}\n\n.header-stats {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.stat-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.stat-item i {\n font-size: 12px;\n}\n\n.stat-item.active {\n color: #10b981;\n}\n\n.stat-item.warning {\n color: #f59e0b;\n}\n\n.stat-item.danger {\n color: #ef4444;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n color: white;\n border: none;\n border-radius: 10px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);\n}\n\n.btn-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 16px rgba(99, 102, 241, 0.4);\n}\n\n.btn-primary i {\n font-size: 13px;\n}\n\n/* Toolbar */\n.toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n background: var(--card-background, #ffffff);\n padding: 16px;\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.toolbar-left {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n flex: 1;\n}\n\n.toolbar-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-container {\n display: flex;\n align-items: center;\n background: var(--input-background, #f9fafb);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n padding: 8px 12px;\n min-width: 280px;\n position: relative;\n}\n\n.search-container i {\n color: var(--text-secondary, #6b7280);\n margin-right: 8px;\n}\n\n.search-container input {\n border: none;\n background: transparent;\n outline: none;\n flex: 1;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n}\n\n.search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--border-color, #e5e7eb);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n color: var(--text-secondary, #6b7280);\n font-size: 10px;\n}\n\n.search-clear:hover {\n background: var(--text-secondary, #6b7280);\n color: white;\n}\n\n.filter-select {\n padding: 8px 12px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--input-background, #ffffff);\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n cursor: pointer;\n min-width: 140px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--accent-color, #6366f1);\n}\n\n.results-info {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n white-space: nowrap;\n}\n\n.view-toggle {\n display: flex;\n background: var(--input-background, #f3f4f6);\n border-radius: 8px;\n padding: 4px;\n}\n\n.view-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.view-btn:hover {\n color: var(--accent-color, #6366f1);\n}\n\n.view-btn.active {\n background: white;\n color: var(--accent-color, #6366f1);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n background: var(--button-background, #ffffff);\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-icon:hover {\n background: var(--button-hover, #f3f4f6);\n color: var(--accent-color, #6366f1);\n}\n\n/* Bulk Actions Bar */\n.bulk-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: linear-gradient(135deg, #6366f1 0%, #4f46e5 100%);\n border-radius: 10px;\n margin-bottom: 16px;\n color: white;\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: rgba(255, 255, 255, 0.8);\n font-size: 13px;\n cursor: pointer;\n text-decoration: underline;\n padding: 0;\n}\n\n.btn-link:hover {\n color: white;\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: rgba(255, 255, 255, 0.2);\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-bulk:hover {\n background: rgba(255, 255, 255, 0.3);\n}\n\n.btn-bulk.danger {\n background: rgba(239, 68, 68, 0.3);\n border-color: rgba(239, 68, 68, 0.5);\n}\n\n.btn-bulk.danger:hover {\n background: rgba(239, 68, 68, 0.5);\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(--card-background, #ffffff);\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(--accent-color, #6366f1);\n background: linear-gradient(to bottom, rgba(99, 102, 241, 0.03), white);\n}\n\n.credential-card.expired {\n border-color: rgba(239, 68, 68, 0.3);\n}\n\n.credential-card.expiring {\n border-color: rgba(245, 158, 11, 0.3);\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(--accent-color, #6366f1);\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(--border-color, #f3f4f6);\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: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n}\n\n.card-icon.inactive {\n background: var(--icon-inactive, #e5e7eb);\n color: var(--text-secondary, #6b7280);\n}\n\n.card-icon.expired {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n}\n\n.card-icon.expiring {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n color: white;\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(--text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.credential-type {\n font-size: 12px;\n color: var(--text-secondary, #6b7280);\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(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.action-btn.danger:hover {\n background: #ef4444;\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: #d1fae5;\n color: #059669;\n}\n\n.status-badge.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-badge.expired {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-badge.expiring {\n background: #fef3c7;\n color: #d97706;\n}\n\n.credential-description {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\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(--text-secondary, #6b7280);\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--accent-color, #6366f1);\n}\n\n.meta-item.warning {\n color: #f59e0b;\n}\n\n.meta-item.warning i {\n color: #f59e0b;\n}\n\n.meta-item.danger {\n color: #ef4444;\n}\n\n.meta-item.danger i {\n color: #ef4444;\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(--footer-background, #f9fafb);\n border-top: 1px solid var(--border-color, #f3f4f6);\n}\n\n.category-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\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(--text-tertiary, #9ca3af);\n}\n\n/* Table View */\n.credentials-table-container {\n background: var(--card-background, #ffffff);\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(--header-background, #f9fafb);\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(--text-secondary, #6b7280);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.credentials-table td {\n padding: 12px 16px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n}\n\n.credentials-table tbody tr {\n transition: background 0.2s ease;\n}\n\n.credentials-table tbody tr:hover {\n background: var(--row-hover, #f9fafb);\n}\n\n.credentials-table tbody tr.selected {\n background: rgba(99, 102, 241, 0.05);\n}\n\n.credentials-table tbody tr.expired {\n background: rgba(239, 68, 68, 0.03);\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(--accent-color, #6366f1);\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: #d1fae5;\n color: #059669;\n}\n\n.name-cell i.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.name-cell i.expired {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.name-cell i.expiring {\n background: #fef3c7;\n color: #d97706;\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(--text-primary, #1f2937);\n}\n\n.name-info .credential-desc {\n font-size: 12px;\n color: var(--text-secondary, #9ca3af);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.default-badge {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: white;\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: var(--tag-background, #e0e7ff);\n color: var(--accent-color, #6366f1);\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: #d1fae5;\n color: #059669;\n}\n\n.status-pill.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.status-pill.expired {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-pill.expiring {\n background: #fef3c7;\n color: #d97706;\n}\n\n.col-expires,\n.col-used {\n white-space: nowrap;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.col-expires.warning {\n color: #f59e0b;\n font-weight: 500;\n}\n\n.col-expires.danger {\n color: #ef4444;\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(--input-background, #f3f4f6);\n border-radius: 6px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 13px;\n}\n\n.table-action-btn:hover {\n background: var(--accent-color, #6366f1);\n color: white;\n}\n\n.table-action-btn.danger:hover {\n background: #ef4444;\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(--card-background, #ffffff);\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: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%);\n border-radius: 20px;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--accent-color, #6366f1);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\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(--accent-color, #6366f1);\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(--accent-hover, #4f46e5);\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"] }]
1248
1259
  }], () => [{ type: i0.ChangeDetectorRef }], { editPanel: [{
1249
1260
  type: ViewChild,
1250
1261
  args: ['editPanel']
1251
1262
  }] }); })();
1252
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsListResourceComponent, { className: "CredentialsListResourceComponent", filePath: "src/Credentials/components/credentials-list-resource.component.ts", lineNumber: 24 }); })();
1263
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CredentialsListResourceComponent, { className: "CredentialsListResourceComponent", filePath: "src/credentials/components/credentials-list-resource.component.ts", lineNumber: 20 }); })();
1253
1264
  //# sourceMappingURL=credentials-list-resource.component.js.map