@memberjunction/ng-dashboards 3.4.0 → 4.1.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 (458) hide show
  1. package/README.md +102 -339
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
  3. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  4. package/dist/AI/components/agents/agent-configuration.component.js +103 -44
  5. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
  7. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-editor.component.js +149 -211
  9. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  10. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  11. package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
  12. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  13. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  14. package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
  15. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  17. package/dist/AI/components/charts/time-series-chart.component.js +6 -7
  18. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  19. package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
  20. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  21. package/dist/AI/components/execution-monitoring.component.js +33 -37
  22. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  23. package/dist/AI/components/models/model-management.component.d.ts +3 -6
  24. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  25. package/dist/AI/components/models/model-management.component.js +34 -27
  26. package/dist/AI/components/models/model-management.component.js.map +1 -1
  27. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  28. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
  29. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
  32. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  33. package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
  34. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  35. package/dist/AI/components/prompts/prompt-management.component.js +34 -32
  36. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  37. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
  39. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  40. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  41. package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
  42. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  43. package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
  44. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  45. package/dist/AI/components/system/system-configuration.component.js +26 -27
  46. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  47. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  48. package/dist/AI/components/widgets/kpi-card.component.js +52 -42
  49. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  50. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  51. package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
  52. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  53. package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
  54. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  55. package/dist/APIKeys/api-applications-panel.component.js +193 -189
  56. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  57. package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
  58. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  59. package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
  60. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  61. package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
  62. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  63. package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
  64. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  65. package/dist/APIKeys/api-key-list.component.d.ts +0 -2
  66. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  67. package/dist/APIKeys/api-key-list.component.js +113 -114
  68. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  69. package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
  70. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  71. package/dist/APIKeys/api-keys-resource.component.js +294 -302
  72. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  73. package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
  74. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  75. package/dist/APIKeys/api-scopes-panel.component.js +151 -155
  76. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  77. package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
  78. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  79. package/dist/APIKeys/api-usage-panel.component.js +237 -234
  80. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  81. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  82. package/dist/Actions/components/actions-list-view.component.js +15 -14
  83. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  84. package/dist/Actions/components/actions-overview.component.d.ts +3 -6
  85. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  86. package/dist/Actions/components/actions-overview.component.js +17 -19
  87. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  88. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  89. package/dist/Actions/components/categories-list-view.component.js +6 -6
  90. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  91. package/dist/Actions/components/code-management.component.d.ts +0 -4
  92. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  93. package/dist/Actions/components/code-management.component.js +3 -9
  94. package/dist/Actions/components/code-management.component.js.map +1 -1
  95. package/dist/Actions/components/entity-integration.component.d.ts +0 -4
  96. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  97. package/dist/Actions/components/entity-integration.component.js +3 -9
  98. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  99. package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
  100. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  101. package/dist/Actions/components/execution-monitoring.component.js +13 -16
  102. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  103. package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
  104. package/dist/Actions/components/executions-list-view.component.js +3 -3
  105. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  106. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
  107. package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
  108. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
  109. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  110. package/dist/Actions/components/explorer/action-card.component.js +11 -10
  111. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  112. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
  113. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  114. package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
  115. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  116. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
  117. package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
  118. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
  120. package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
  121. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  122. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
  123. package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
  124. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  125. package/dist/Actions/components/explorer/index.d.ts +0 -1
  126. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  127. package/dist/Actions/components/explorer/index.js +0 -4
  128. package/dist/Actions/components/explorer/index.js.map +1 -1
  129. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  130. package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
  131. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  132. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  133. package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
  134. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  135. package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
  136. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  137. package/dist/Actions/components/scheduled-actions.component.js +3 -9
  138. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  139. package/dist/Actions/components/security-permissions.component.d.ts +0 -4
  140. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  141. package/dist/Actions/components/security-permissions.component.js +3 -9
  142. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  143. package/dist/Actions/index.d.ts +0 -7
  144. package/dist/Actions/index.d.ts.map +1 -1
  145. package/dist/Actions/index.js +0 -8
  146. package/dist/Actions/index.js.map +1 -1
  147. package/dist/Communication/communication-dashboard.component.d.ts +0 -1
  148. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  149. package/dist/Communication/communication-dashboard.component.js +38 -51
  150. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  151. package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
  152. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  153. package/dist/Communication/communication-logs-resource.component.js +112 -108
  154. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  155. package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
  156. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  157. package/dist/Communication/communication-monitor-resource.component.js +210 -201
  158. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  159. package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
  160. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  161. package/dist/Communication/communication-providers-resource.component.js +136 -124
  162. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  163. package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
  164. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  165. package/dist/Communication/communication-runs-resource.component.js +91 -88
  166. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
  168. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-templates-resource.component.js +139 -122
  170. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  171. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
  172. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  173. package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
  174. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  175. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  176. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
  177. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  178. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  179. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
  180. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  181. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  182. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
  183. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  184. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
  185. package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
  186. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  187. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
  188. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
  189. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  190. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  191. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
  192. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  193. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
  194. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
  195. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  196. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
  197. package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
  198. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  199. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
  200. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
  201. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  202. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  203. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
  204. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  205. package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
  206. package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
  207. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  208. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  209. package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
  210. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  211. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  212. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
  213. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  214. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
  215. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  216. package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
  217. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  218. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
  219. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  220. package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
  221. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  222. package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
  223. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  224. package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
  225. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  226. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
  227. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  228. package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
  229. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  230. package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
  231. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  232. package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
  233. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  234. package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
  235. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  236. package/dist/Credentials/credentials-dashboard.component.js +31 -44
  237. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  238. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
  239. package/dist/Credentials/pipes/group-by.pipe.js +2 -1
  240. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
  241. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
  242. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  243. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
  244. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  245. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  246. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
  247. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  248. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
  249. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
  250. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
  251. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  252. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
  253. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  254. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  255. package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
  256. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  257. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +2 -4
  258. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  259. package/dist/DataExplorer/data-explorer-dashboard.component.js +83 -64
  260. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  261. package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
  262. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  263. package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
  264. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  265. package/dist/DataExplorer/index.d.ts +2 -2
  266. package/dist/DataExplorer/index.d.ts.map +1 -1
  267. package/dist/DataExplorer/index.js +2 -2
  268. package/dist/DataExplorer/index.js.map +1 -1
  269. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
  270. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  271. package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
  272. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  273. package/dist/Home/home-application.d.ts +109 -27
  274. package/dist/Home/home-application.d.ts.map +1 -1
  275. package/dist/Home/home-application.js +351 -75
  276. package/dist/Home/home-application.js.map +1 -1
  277. package/dist/Home/home-dashboard.component.d.ts +48 -12
  278. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  279. package/dist/Home/home-dashboard.component.js +267 -187
  280. package/dist/Home/home-dashboard.component.js.map +1 -1
  281. package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
  282. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  283. package/dist/Lists/components/lists-browse-resource.component.js +761 -685
  284. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  285. package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
  286. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  287. package/dist/Lists/components/lists-categories-resource.component.js +340 -316
  288. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  289. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
  290. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  291. package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
  292. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  293. package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
  294. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  295. package/dist/Lists/components/lists-operations-resource.component.js +508 -455
  296. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  297. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  298. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
  299. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  300. package/dist/Lists/index.d.ts +0 -1
  301. package/dist/Lists/index.d.ts.map +1 -1
  302. package/dist/Lists/index.js +0 -11
  303. package/dist/Lists/index.js.map +1 -1
  304. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
  305. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  306. package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
  307. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  308. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
  309. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
  310. package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
  311. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  312. package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
  313. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  314. package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
  315. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  316. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
  317. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  318. package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
  319. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  320. package/dist/MCP/index.d.ts +5 -5
  321. package/dist/MCP/index.d.ts.map +1 -1
  322. package/dist/MCP/index.js +5 -5
  323. package/dist/MCP/index.js.map +1 -1
  324. package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
  325. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  326. package/dist/MCP/mcp-dashboard.component.js +976 -697
  327. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  328. package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
  329. package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
  330. package/dist/MCP/mcp-filter-panel.component.js +288 -0
  331. package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
  332. package/dist/MCP/mcp-resource.component.d.ts +11 -5
  333. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  334. package/dist/MCP/mcp-resource.component.js +8 -9
  335. package/dist/MCP/mcp-resource.component.js.map +1 -1
  336. package/dist/MCP/mcp.module.d.ts +16 -19
  337. package/dist/MCP/mcp.module.d.ts.map +1 -1
  338. package/dist/MCP/mcp.module.js +17 -26
  339. package/dist/MCP/mcp.module.js.map +1 -1
  340. package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
  341. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
  342. package/dist/MCP/services/mcp-tools.service.js +5 -6
  343. package/dist/MCP/services/mcp-tools.service.js.map +1 -1
  344. package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
  345. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  346. package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
  347. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  348. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
  349. package/dist/Scheduling/components/job-slideout.component.js +117 -116
  350. package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
  351. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
  352. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  353. package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
  354. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  355. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  356. package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
  357. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  358. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
  359. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  360. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
  361. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  362. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  363. package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
  364. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  365. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
  366. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  367. package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
  368. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  369. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  370. package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
  371. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  372. package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
  373. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  374. package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
  375. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  376. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
  377. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  378. package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
  379. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  380. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  381. package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
  382. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  383. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  384. package/dist/Testing/components/testing-analytics.component.js +30 -30
  385. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  386. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +3 -3
  388. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  389. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  390. package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
  391. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  392. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  393. package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
  394. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  395. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  396. package/dist/Testing/components/testing-explorer.component.js +42 -35
  397. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  398. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  399. package/dist/Testing/components/testing-review-resource.component.js +3 -3
  400. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  401. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  402. package/dist/Testing/components/testing-review.component.js +16 -16
  403. package/dist/Testing/components/testing-review.component.js.map +1 -1
  404. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  405. package/dist/Testing/components/testing-runs-resource.component.js +3 -3
  406. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  407. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  408. package/dist/Testing/components/testing-runs.component.js +15 -15
  409. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  410. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
  411. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
  412. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  413. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
  414. package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
  415. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  416. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  417. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
  418. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  419. package/dist/Testing/testing-dashboard.component.d.ts +0 -1
  420. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  421. package/dist/Testing/testing-dashboard.component.js +9 -8
  422. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  423. package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
  424. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
  425. package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
  426. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
  427. package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
  428. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
  429. package/dist/VersionHistory/components/graph-resource.component.js +521 -0
  430. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
  431. package/dist/VersionHistory/components/index.d.ts +5 -0
  432. package/dist/VersionHistory/components/index.d.ts.map +1 -0
  433. package/dist/VersionHistory/components/index.js +5 -0
  434. package/dist/VersionHistory/components/index.js.map +1 -0
  435. package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
  436. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
  437. package/dist/VersionHistory/components/labels-resource.component.js +968 -0
  438. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
  439. package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
  440. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
  441. package/dist/VersionHistory/components/restore-resource.component.js +472 -0
  442. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
  443. package/dist/VersionHistory/index.d.ts +2 -0
  444. package/dist/VersionHistory/index.d.ts.map +1 -0
  445. package/dist/VersionHistory/index.js +2 -0
  446. package/dist/VersionHistory/index.js.map +1 -0
  447. package/dist/module.d.ts +42 -36
  448. package/dist/module.d.ts.map +1 -1
  449. package/dist/module.js +41 -7
  450. package/dist/module.js.map +1 -1
  451. package/dist/public-api.d.ts +20 -19
  452. package/dist/public-api.d.ts.map +1 -1
  453. package/dist/public-api.js +22 -120
  454. package/dist/public-api.js.map +1 -1
  455. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
  456. package/dist/shared/pipes/highlight-search.pipe.js +2 -1
  457. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
  458. package/package.json +64 -62
@@ -5,20 +5,20 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
6
  import * as i2 from "@angular/forms";
7
7
  import * as i3 from "@memberjunction/ng-shared-generic";
8
- function APIKeyListComponent_button_11_Template(rf, ctx) { if (rf & 1) {
8
+ function APIKeyListComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
9
9
  const _r1 = i0.ɵɵgetCurrentView();
10
10
  i0.ɵɵelementStart(0, "button", 22);
11
- i0.ɵɵlistener("click", function APIKeyListComponent_button_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
11
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
12
12
  i0.ɵɵelement(1, "i", 23);
13
13
  i0.ɵɵelementEnd();
14
14
  } }
15
- function APIKeyListComponent_mj_loading_45_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelement(0, "mj-loading", 24);
15
+ function APIKeyListComponent_Conditional_45_Template(rf, ctx) { if (rf & 1) {
16
+ i0.ɵɵelement(0, "mj-loading", 19);
17
17
  } }
18
- function APIKeyListComponent_div_46_div_22_div_16_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "span", 61);
18
+ function APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "span", 57);
20
20
  i0.ɵɵelement(1, "i");
21
- i0.ɵɵelementStart(2, "span", 62);
21
+ i0.ɵɵelementStart(2, "span", 58);
22
22
  i0.ɵɵtext(3);
23
23
  i0.ɵɵelementEnd()();
24
24
  } if (rf & 2) {
@@ -30,17 +30,14 @@ function APIKeyListComponent_div_46_div_22_div_16_ng_container_2_span_1_Template
30
30
  i0.ɵɵadvance(2);
31
31
  i0.ɵɵtextInterpolate(cat_r6.count);
32
32
  } }
33
- function APIKeyListComponent_div_46_div_22_div_16_ng_container_2_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementContainerStart(0);
35
- i0.ɵɵtemplate(1, APIKeyListComponent_div_46_div_22_div_16_ng_container_2_span_1_Template, 4, 8, "span", 60);
36
- i0.ɵɵelementContainerEnd();
33
+ function APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵconditionalCreate(0, APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Conditional_0_Template, 4, 8, "span", 56);
37
35
  } if (rf & 2) {
38
- const i_r7 = ctx.index;
39
- i0.ɵɵadvance();
40
- i0.ɵɵproperty("ngIf", i_r7 < 3);
36
+ const ɵ$index_154_r7 = ctx.$index;
37
+ i0.ɵɵconditional(ɵ$index_154_r7 < 3 ? 0 : -1);
41
38
  } }
42
- function APIKeyListComponent_div_46_div_22_div_16_span_3_Template(rf, ctx) { if (rf & 1) {
43
- i0.ɵɵelementStart(0, "span", 63);
39
+ function APIKeyListComponent_Conditional_46_For_23_Conditional_16_Conditional_4_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "span", 54);
44
41
  i0.ɵɵtext(1);
45
42
  i0.ɵɵelementEnd();
46
43
  } if (rf & 2) {
@@ -49,58 +46,60 @@ function APIKeyListComponent_div_46_div_22_div_16_span_3_Template(rf, ctx) { if
49
46
  i0.ɵɵadvance();
50
47
  i0.ɵɵtextInterpolate1(" +", ctx_r1.getScopeInfo(key_r5).categories.length - 3, " ");
51
48
  } }
52
- function APIKeyListComponent_div_46_div_22_div_16_Template(rf, ctx) { if (rf & 1) {
53
- i0.ɵɵelementStart(0, "div", 55)(1, "div", 56);
54
- i0.ɵɵtemplate(2, APIKeyListComponent_div_46_div_22_div_16_ng_container_2_Template, 2, 1, "ng-container", 57)(3, APIKeyListComponent_div_46_div_22_div_16_span_3_Template, 2, 1, "span", 58);
49
+ function APIKeyListComponent_Conditional_46_For_23_Conditional_16_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "div", 45)(1, "div", 53);
51
+ i0.ɵɵrepeaterCreate(2, APIKeyListComponent_Conditional_46_For_23_Conditional_16_For_3_Template, 1, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
52
+ i0.ɵɵconditionalCreate(4, APIKeyListComponent_Conditional_46_For_23_Conditional_16_Conditional_4_Template, 2, 1, "span", 54);
55
53
  i0.ɵɵelementEnd();
56
- i0.ɵɵelementStart(4, "span", 59);
57
- i0.ɵɵtext(5);
54
+ i0.ɵɵelementStart(5, "span", 55);
55
+ i0.ɵɵtext(6);
58
56
  i0.ɵɵelementEnd()();
59
57
  } if (rf & 2) {
60
58
  const key_r5 = i0.ɵɵnextContext().$implicit;
61
59
  const ctx_r1 = i0.ɵɵnextContext(2);
62
60
  i0.ɵɵadvance(2);
63
- i0.ɵɵproperty("ngForOf", ctx_r1.getScopeInfo(key_r5).categories);
64
- i0.ɵɵadvance();
65
- i0.ɵɵproperty("ngIf", ctx_r1.getScopeInfo(key_r5).categories.length > 3);
61
+ i0.ɵɵrepeater(ctx_r1.getScopeInfo(key_r5).categories);
62
+ i0.ɵɵadvance(2);
63
+ i0.ɵɵconditional(ctx_r1.getScopeInfo(key_r5).categories.length > 3 ? 4 : -1);
66
64
  i0.ɵɵadvance(2);
67
65
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getScopeInfo(key_r5).count, " total ");
68
66
  } }
69
- function APIKeyListComponent_div_46_div_22_span_17_Template(rf, ctx) { if (rf & 1) {
70
- i0.ɵɵelementStart(0, "span", 64);
71
- i0.ɵɵelement(1, "i", 65);
67
+ function APIKeyListComponent_Conditional_46_For_23_Conditional_17_Template(rf, ctx) { if (rf & 1) {
68
+ i0.ɵɵelementStart(0, "span", 46);
69
+ i0.ɵɵelement(1, "i", 59);
72
70
  i0.ɵɵtext(2, " None ");
73
71
  i0.ɵɵelementEnd();
74
72
  } }
75
- function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
73
+ function APIKeyListComponent_Conditional_46_For_23_Template(rf, ctx) { if (rf & 1) {
76
74
  const _r4 = i0.ɵɵgetCurrentView();
77
- i0.ɵɵelementStart(0, "div", 36);
78
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_div_22_Template_div_click_0_listener() { const key_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectKey(key_r5)); });
79
- i0.ɵɵelementStart(1, "div", 37)(2, "div", 38);
80
- i0.ɵɵelement(3, "i", 39);
75
+ i0.ɵɵelementStart(0, "div", 34);
76
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_For_23_Template_div_click_0_listener() { const key_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectKey(key_r5)); });
77
+ i0.ɵɵelementStart(1, "div", 35)(2, "div", 36);
78
+ i0.ɵɵelement(3, "i", 37);
81
79
  i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(4, "div", 40)(5, "span", 41);
80
+ i0.ɵɵelementStart(4, "div", 38)(5, "span", 39);
83
81
  i0.ɵɵtext(6);
84
82
  i0.ɵɵelementEnd();
85
- i0.ɵɵelementStart(7, "code", 42);
83
+ i0.ɵɵelementStart(7, "code", 40);
86
84
  i0.ɵɵtext(8);
87
85
  i0.ɵɵelementEnd()()();
88
- i0.ɵɵelementStart(9, "div", 43)(10, "span", 44);
86
+ i0.ɵɵelementStart(9, "div", 41)(10, "span", 42);
89
87
  i0.ɵɵtext(11);
90
88
  i0.ɵɵelementEnd()();
91
- i0.ɵɵelementStart(12, "div", 45)(13, "span", 46);
89
+ i0.ɵɵelementStart(12, "div", 43)(13, "span", 44);
92
90
  i0.ɵɵtext(14);
93
91
  i0.ɵɵelementEnd()();
94
- i0.ɵɵelementStart(15, "div", 30);
95
- i0.ɵɵtemplate(16, APIKeyListComponent_div_46_div_22_div_16_Template, 6, 3, "div", 47)(17, APIKeyListComponent_div_46_div_22_span_17_Template, 3, 0, "span", 48);
92
+ i0.ɵɵelementStart(15, "div", 28);
93
+ i0.ɵɵconditionalCreate(16, APIKeyListComponent_Conditional_46_For_23_Conditional_16_Template, 7, 2, "div", 45);
94
+ i0.ɵɵconditionalCreate(17, APIKeyListComponent_Conditional_46_For_23_Conditional_17_Template, 3, 0, "span", 46);
96
95
  i0.ɵɵelementEnd();
97
- i0.ɵɵelementStart(18, "div", 49)(19, "span", 50);
96
+ i0.ɵɵelementStart(18, "div", 47)(19, "span", 48);
98
97
  i0.ɵɵtext(20);
99
98
  i0.ɵɵelementEnd()();
100
- i0.ɵɵelementStart(21, "div", 51)(22, "span", 52);
99
+ i0.ɵɵelementStart(21, "div", 49)(22, "span", 50);
101
100
  i0.ɵɵtext(23);
102
101
  i0.ɵɵelementEnd()();
103
- i0.ɵɵelementStart(24, "div", 53)(25, "span", 54);
102
+ i0.ɵɵelementStart(24, "div", 51)(25, "span", 52);
104
103
  i0.ɵɵtext(26);
105
104
  i0.ɵɵelementEnd()()();
106
105
  } if (rf & 2) {
@@ -111,7 +110,7 @@ function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
111
110
  i0.ɵɵadvance(4);
112
111
  i0.ɵɵtextInterpolate(key_r5.Label);
113
112
  i0.ɵɵadvance(2);
114
- i0.ɵɵtextInterpolate1("...", key_r5.Hash.slice(-12), "");
113
+ i0.ɵɵtextInterpolate1("...", key_r5.Hash.slice(-12));
115
114
  i0.ɵɵadvance(3);
116
115
  i0.ɵɵtextInterpolate(key_r5.User);
117
116
  i0.ɵɵadvance(2);
@@ -119,9 +118,9 @@ function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
119
118
  i0.ɵɵadvance();
120
119
  i0.ɵɵtextInterpolate1(" ", key_r5.Status, " ");
121
120
  i0.ɵɵadvance(2);
122
- i0.ɵɵproperty("ngIf", ctx_r1.getScopeInfo(key_r5).count > 0);
121
+ i0.ɵɵconditional(ctx_r1.getScopeInfo(key_r5).count > 0 ? 16 : -1);
123
122
  i0.ɵɵadvance();
124
- i0.ɵɵproperty("ngIf", ctx_r1.getScopeInfo(key_r5).count === 0);
123
+ i0.ɵɵconditional(ctx_r1.getScopeInfo(key_r5).count === 0 ? 17 : -1);
125
124
  i0.ɵɵadvance(2);
126
125
  i0.ɵɵproperty("ngClass", ctx_r1.getExpirationClass(key_r5));
127
126
  i0.ɵɵadvance();
@@ -133,7 +132,7 @@ function APIKeyListComponent_div_46_div_22_Template(rf, ctx) { if (rf & 1) {
133
132
  i0.ɵɵadvance(3);
134
133
  i0.ɵɵtextInterpolate(ctx_r1.formatDate(key_r5.__mj_CreatedAt));
135
134
  } }
136
- function APIKeyListComponent_div_46_div_23_span_2_Template(rf, ctx) { if (rf & 1) {
135
+ function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_2_Template(rf, ctx) { if (rf & 1) {
137
136
  i0.ɵɵelementStart(0, "span");
138
137
  i0.ɵɵtext(1);
139
138
  i0.ɵɵelementEnd();
@@ -142,7 +141,7 @@ function APIKeyListComponent_div_46_div_23_span_2_Template(rf, ctx) { if (rf & 1
142
141
  i0.ɵɵadvance();
143
142
  i0.ɵɵtextInterpolate1("No keys matching \"", ctx_r1.SearchText, "\"");
144
143
  } }
145
- function APIKeyListComponent_div_46_div_23_span_3_Template(rf, ctx) { if (rf & 1) {
144
+ function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_3_Template(rf, ctx) { if (rf & 1) {
146
145
  i0.ɵɵelementStart(0, "span");
147
146
  i0.ɵɵtext(1);
148
147
  i0.ɵɵelementEnd();
@@ -151,71 +150,75 @@ function APIKeyListComponent_div_46_div_23_span_3_Template(rf, ctx) { if (rf & 1
151
150
  i0.ɵɵadvance();
152
151
  i0.ɵɵtextInterpolate1("No ", ctx_r1.Filter, " keys found");
153
152
  } }
154
- function APIKeyListComponent_div_46_div_23_span_4_Template(rf, ctx) { if (rf & 1) {
153
+ function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_4_Template(rf, ctx) { if (rf & 1) {
155
154
  i0.ɵɵelementStart(0, "span");
156
155
  i0.ɵɵtext(1, "No API keys created yet");
157
156
  i0.ɵɵelementEnd();
158
157
  } }
159
- function APIKeyListComponent_div_46_div_23_button_5_Template(rf, ctx) { if (rf & 1) {
158
+ function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
160
159
  const _r8 = i0.ɵɵgetCurrentView();
161
- i0.ɵɵelementStart(0, "button", 69);
162
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_div_23_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.requestCreate()); });
160
+ i0.ɵɵelementStart(0, "button", 61);
161
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Conditional_24_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.requestCreate()); });
163
162
  i0.ɵɵelement(1, "i", 10);
164
163
  i0.ɵɵtext(2, " Generate Your First Key ");
165
164
  i0.ɵɵelementEnd();
166
165
  } }
167
- function APIKeyListComponent_div_46_div_23_Template(rf, ctx) { if (rf & 1) {
168
- i0.ɵɵelementStart(0, "div", 66);
169
- i0.ɵɵelement(1, "i", 39);
170
- i0.ɵɵtemplate(2, APIKeyListComponent_div_46_div_23_span_2_Template, 2, 1, "span", 67)(3, APIKeyListComponent_div_46_div_23_span_3_Template, 2, 1, "span", 67)(4, APIKeyListComponent_div_46_div_23_span_4_Template, 2, 0, "span", 67)(5, APIKeyListComponent_div_46_div_23_button_5_Template, 3, 0, "button", 68);
166
+ function APIKeyListComponent_Conditional_46_Conditional_24_Template(rf, ctx) { if (rf & 1) {
167
+ i0.ɵɵelementStart(0, "div", 33);
168
+ i0.ɵɵelement(1, "i", 37);
169
+ i0.ɵɵconditionalCreate(2, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_2_Template, 2, 1, "span");
170
+ i0.ɵɵconditionalCreate(3, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_3_Template, 2, 1, "span");
171
+ i0.ɵɵconditionalCreate(4, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_4_Template, 2, 0, "span");
172
+ i0.ɵɵconditionalCreate(5, APIKeyListComponent_Conditional_46_Conditional_24_Conditional_5_Template, 3, 0, "button", 60);
171
173
  i0.ɵɵelementEnd();
172
174
  } if (rf & 2) {
173
175
  const ctx_r1 = i0.ɵɵnextContext(2);
174
176
  i0.ɵɵadvance(2);
175
- i0.ɵɵproperty("ngIf", ctx_r1.SearchText);
177
+ i0.ɵɵconditional(ctx_r1.SearchText ? 2 : -1);
176
178
  i0.ɵɵadvance();
177
- i0.ɵɵproperty("ngIf", !ctx_r1.SearchText && ctx_r1.Filter !== "all");
179
+ i0.ɵɵconditional(!ctx_r1.SearchText && ctx_r1.Filter !== "all" ? 3 : -1);
178
180
  i0.ɵɵadvance();
179
- i0.ɵɵproperty("ngIf", !ctx_r1.SearchText && ctx_r1.Filter === "all");
181
+ i0.ɵɵconditional(!ctx_r1.SearchText && ctx_r1.Filter === "all" ? 4 : -1);
180
182
  i0.ɵɵadvance();
181
- i0.ɵɵproperty("ngIf", ctx_r1.Filter === "all" && !ctx_r1.SearchText);
183
+ i0.ɵɵconditional(ctx_r1.Filter === "all" && !ctx_r1.SearchText ? 5 : -1);
182
184
  } }
183
- function APIKeyListComponent_div_46_Template(rf, ctx) { if (rf & 1) {
185
+ function APIKeyListComponent_Conditional_46_Template(rf, ctx) { if (rf & 1) {
184
186
  const _r3 = i0.ɵɵgetCurrentView();
185
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "div", 27);
186
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("Label")); });
187
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 24)(2, "div", 25);
188
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("Label")); });
187
189
  i0.ɵɵtext(3, " Key ");
188
190
  i0.ɵɵelement(4, "i");
189
191
  i0.ɵɵelementEnd();
190
- i0.ɵɵelementStart(5, "div", 28);
191
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("User")); });
192
+ i0.ɵɵelementStart(5, "div", 26);
193
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("User")); });
192
194
  i0.ɵɵtext(6, " Owner ");
193
195
  i0.ɵɵelement(7, "i");
194
196
  i0.ɵɵelementEnd();
195
- i0.ɵɵelementStart(8, "div", 29);
196
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_Template_div_click_8_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("Status")); });
197
+ i0.ɵɵelementStart(8, "div", 27);
198
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_8_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("Status")); });
197
199
  i0.ɵɵtext(9, " Status ");
198
200
  i0.ɵɵelement(10, "i");
199
201
  i0.ɵɵelementEnd();
200
- i0.ɵɵelementStart(11, "div", 30);
202
+ i0.ɵɵelementStart(11, "div", 28);
201
203
  i0.ɵɵtext(12, " Scopes ");
202
204
  i0.ɵɵelementEnd();
203
- i0.ɵɵelementStart(13, "div", 31);
204
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_Template_div_click_13_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("ExpiresAt")); });
205
+ i0.ɵɵelementStart(13, "div", 29);
206
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_13_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("ExpiresAt")); });
205
207
  i0.ɵɵtext(14, " Expires ");
206
208
  i0.ɵɵelement(15, "i");
207
209
  i0.ɵɵelementEnd();
208
- i0.ɵɵelementStart(16, "div", 32);
209
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("LastUsedAt")); });
210
+ i0.ɵɵelementStart(16, "div", 30);
211
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_16_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("LastUsedAt")); });
210
212
  i0.ɵɵtext(17, " Last Used ");
211
213
  i0.ɵɵelement(18, "i");
212
214
  i0.ɵɵelementEnd();
213
- i0.ɵɵelementStart(19, "div", 33);
214
- i0.ɵɵlistener("click", function APIKeyListComponent_div_46_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("__mj_CreatedAt")); });
215
+ i0.ɵɵelementStart(19, "div", 31);
216
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_46_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSort("__mj_CreatedAt")); });
215
217
  i0.ɵɵtext(20, " Created ");
216
218
  i0.ɵɵelement(21, "i");
217
219
  i0.ɵɵelementEnd()();
218
- i0.ɵɵtemplate(22, APIKeyListComponent_div_46_div_22_Template, 27, 18, "div", 34)(23, APIKeyListComponent_div_46_div_23_Template, 6, 4, "div", 35);
220
+ i0.ɵɵrepeaterCreate(22, APIKeyListComponent_Conditional_46_For_23_Template, 27, 18, "div", 32, i0.ɵɵrepeaterTrackByIdentity);
221
+ i0.ɵɵconditionalCreate(24, APIKeyListComponent_Conditional_46_Conditional_24_Template, 6, 4, "div", 33);
219
222
  i0.ɵɵelementEnd();
220
223
  } if (rf & 2) {
221
224
  const ctx_r1 = i0.ɵɵnextContext();
@@ -232,14 +235,14 @@ function APIKeyListComponent_div_46_Template(rf, ctx) { if (rf & 1) {
232
235
  i0.ɵɵadvance(3);
233
236
  i0.ɵɵclassMap(ctx_r1.getSortIcon("__mj_CreatedAt"));
234
237
  i0.ɵɵadvance();
235
- i0.ɵɵproperty("ngForOf", ctx_r1.getPaginatedKeys());
236
- i0.ɵɵadvance();
237
- i0.ɵɵproperty("ngIf", ctx_r1.FilteredKeys.length === 0);
238
+ i0.ɵɵrepeater(ctx_r1.getPaginatedKeys());
239
+ i0.ɵɵadvance(2);
240
+ i0.ɵɵconditional(ctx_r1.FilteredKeys.length === 0 ? 24 : -1);
238
241
  } }
239
- function APIKeyListComponent_div_47_ng_container_6_button_1_Template(rf, ctx) { if (rf & 1) {
242
+ function APIKeyListComponent_Conditional_47_For_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
240
243
  const _r10 = i0.ɵɵgetCurrentView();
241
- i0.ɵɵelementStart(0, "button", 78);
242
- i0.ɵɵlistener("click", function APIKeyListComponent_div_47_ng_container_6_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const page_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goToPage(page_r11)); });
244
+ i0.ɵɵelementStart(0, "button", 69);
245
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_47_For_7_Conditional_0_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const page_r11 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goToPage(page_r11)); });
243
246
  i0.ɵɵtext(1);
244
247
  i0.ɵɵelementEnd();
245
248
  } if (rf & 2) {
@@ -249,35 +252,33 @@ function APIKeyListComponent_div_47_ng_container_6_button_1_Template(rf, ctx) {
249
252
  i0.ɵɵadvance();
250
253
  i0.ɵɵtextInterpolate1(" ", page_r11, " ");
251
254
  } }
252
- function APIKeyListComponent_div_47_ng_container_6_span_2_Template(rf, ctx) { if (rf & 1) {
253
- i0.ɵɵelementStart(0, "span", 79);
255
+ function APIKeyListComponent_Conditional_47_For_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
256
+ i0.ɵɵelementStart(0, "span", 68);
254
257
  i0.ɵɵtext(1, "...");
255
258
  i0.ɵɵelementEnd();
256
259
  } }
257
- function APIKeyListComponent_div_47_ng_container_6_Template(rf, ctx) { if (rf & 1) {
258
- i0.ɵɵelementContainerStart(0);
259
- i0.ɵɵtemplate(1, APIKeyListComponent_div_47_ng_container_6_button_1_Template, 2, 3, "button", 76)(2, APIKeyListComponent_div_47_ng_container_6_span_2_Template, 2, 0, "span", 77);
260
- i0.ɵɵelementContainerEnd();
260
+ function APIKeyListComponent_Conditional_47_For_7_Template(rf, ctx) { if (rf & 1) {
261
+ i0.ɵɵconditionalCreate(0, APIKeyListComponent_Conditional_47_For_7_Conditional_0_Template, 2, 3, "button", 67);
262
+ i0.ɵɵconditionalCreate(1, APIKeyListComponent_Conditional_47_For_7_Conditional_1_Template, 2, 0, "span", 68);
261
263
  } if (rf & 2) {
262
264
  const page_r11 = ctx.$implicit;
265
+ i0.ɵɵconditional(page_r11 > 0 ? 0 : -1);
263
266
  i0.ɵɵadvance();
264
- i0.ɵɵproperty("ngIf", page_r11 > 0);
265
- i0.ɵɵadvance();
266
- i0.ɵɵproperty("ngIf", page_r11 === -1);
267
+ i0.ɵɵconditional(page_r11 === -1 ? 1 : -1);
267
268
  } }
268
- function APIKeyListComponent_div_47_Template(rf, ctx) { if (rf & 1) {
269
+ function APIKeyListComponent_Conditional_47_Template(rf, ctx) { if (rf & 1) {
269
270
  const _r9 = i0.ɵɵgetCurrentView();
270
- i0.ɵɵelementStart(0, "div", 70)(1, "div", 71);
271
+ i0.ɵɵelementStart(0, "div", 21)(1, "div", 62);
271
272
  i0.ɵɵtext(2);
272
273
  i0.ɵɵelementEnd();
273
- i0.ɵɵelementStart(3, "div", 72)(4, "button", 73);
274
- i0.ɵɵlistener("click", function APIKeyListComponent_div_47_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToPage(ctx_r1.CurrentPage - 1)); });
275
- i0.ɵɵelement(5, "i", 74);
274
+ i0.ɵɵelementStart(3, "div", 63)(4, "button", 64);
275
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_47_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToPage(ctx_r1.CurrentPage - 1)); });
276
+ i0.ɵɵelement(5, "i", 65);
276
277
  i0.ɵɵelementEnd();
277
- i0.ɵɵtemplate(6, APIKeyListComponent_div_47_ng_container_6_Template, 3, 2, "ng-container", 57);
278
- i0.ɵɵelementStart(7, "button", 73);
279
- i0.ɵɵlistener("click", function APIKeyListComponent_div_47_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToPage(ctx_r1.CurrentPage + 1)); });
280
- i0.ɵɵelement(8, "i", 75);
278
+ i0.ɵɵrepeaterCreate(6, APIKeyListComponent_Conditional_47_For_7_Template, 2, 2, null, null, i0.ɵɵrepeaterTrackByIdentity);
279
+ i0.ɵɵelementStart(8, "button", 64);
280
+ i0.ɵɵlistener("click", function APIKeyListComponent_Conditional_47_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToPage(ctx_r1.CurrentPage + 1)); });
281
+ i0.ɵɵelement(9, "i", 66);
281
282
  i0.ɵɵelementEnd()()();
282
283
  } if (rf & 2) {
283
284
  const ctx_r1 = i0.ɵɵnextContext();
@@ -286,14 +287,10 @@ function APIKeyListComponent_div_47_Template(rf, ctx) { if (rf & 1) {
286
287
  i0.ɵɵadvance(2);
287
288
  i0.ɵɵproperty("disabled", ctx_r1.CurrentPage === 1);
288
289
  i0.ɵɵadvance(2);
289
- i0.ɵɵproperty("ngForOf", ctx_r1.getPageNumbers());
290
- i0.ɵɵadvance();
290
+ i0.ɵɵrepeater(ctx_r1.getPageNumbers());
291
+ i0.ɵɵadvance(2);
291
292
  i0.ɵɵproperty("disabled", ctx_r1.CurrentPage === ctx_r1.getTotalPages());
292
293
  } }
293
- /** Tree shaking prevention function */
294
- export function LoadAPIKeyList() {
295
- // This function prevents tree shaking
296
- }
297
294
  /**
298
295
  * List view component for displaying and filtering API keys
299
296
  */
@@ -702,7 +699,7 @@ export class APIKeyListComponent {
702
699
  }
703
700
  }
704
701
  static ɵfac = function APIKeyListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIKeyListComponent)(); };
705
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyListComponent, selectors: [["mj-api-key-list"]], inputs: { Filter: "Filter" }, outputs: { KeySelected: "KeySelected", CreateRequested: "CreateRequested" }, features: [i0.ɵɵNgOnChangesFeature], decls: 48, vars: 29, consts: [[1, "list-container"], [1, "list-header"], [1, "header-left"], [1, "count-badge"], [1, "header-right"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search keys...", 3, "ngModelChange", "ngModel"], ["class", "clear-search", 3, "click", 4, "ngIf"], [1, "create-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "filter-tabs"], [1, "filter-tab", 3, "click"], [1, "tab-count"], [1, "fa-solid", "fa-check-circle", "status-active"], [1, "fa-solid", "fa-clock", "status-warning"], [1, "fa-solid", "fa-circle-exclamation", "status-danger"], [1, "fa-solid", "fa-question-circle", "status-info"], [1, "fa-solid", "fa-ban", "status-revoked"], ["text", "Loading API keys...", 4, "ngIf"], ["class", "key-grid", 4, "ngIf"], ["class", "pagination", 4, "ngIf"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading API keys..."], [1, "key-grid"], [1, "grid-header"], [1, "col-key", "sortable", 3, "click"], [1, "col-owner", "sortable", 3, "click"], [1, "col-status", "sortable", 3, "click"], [1, "col-scopes"], [1, "col-expires", "sortable", 3, "click"], [1, "col-used", "sortable", 3, "click"], [1, "col-created", "sortable", 3, "click"], ["class", "grid-row", 3, "click", 4, "ngFor", "ngForOf"], ["class", "empty-state", 4, "ngIf"], [1, "grid-row", 3, "click"], [1, "col-key"], [1, "key-icon"], [1, "fa-solid", "fa-key"], [1, "key-details"], [1, "key-label"], [1, "key-hash"], [1, "col-owner"], [1, "owner-name"], [1, "col-status"], [1, "status-badge"], ["class", "scopes-display", 4, "ngIf"], ["class", "no-scopes", 4, "ngIf"], [1, "col-expires"], [1, "expires-value", 3, "ngClass"], [1, "col-used"], [1, "used-value"], [1, "col-created"], [1, "created-value"], [1, "scopes-display"], [1, "scope-badges"], [4, "ngFor", "ngForOf"], ["class", "scope-more", 4, "ngIf"], [1, "scopes-total"], ["class", "scope-badge", 3, "backgroundColor", "color", "title", 4, "ngIf"], [1, "scope-badge", 3, "title"], [1, "badge-count"], [1, "scope-more"], [1, "no-scopes"], [1, "fa-solid", "fa-shield-xmark"], [1, "empty-state"], [4, "ngIf"], ["class", "create-empty-btn", 3, "click", 4, "ngIf"], [1, "create-empty-btn", 3, "click"], [1, "pagination"], [1, "page-info"], [1, "page-buttons"], [1, "page-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-left"], [1, "fa-solid", "fa-chevron-right"], ["class", "page-btn", 3, "active", "click", 4, "ngIf"], ["class", "page-ellipsis", 4, "ngIf"], [1, "page-btn", 3, "click"], [1, "page-ellipsis"]], template: function APIKeyListComponent_Template(rf, ctx) { if (rf & 1) {
702
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyListComponent, selectors: [["mj-api-key-list"]], inputs: { Filter: "Filter" }, outputs: { KeySelected: "KeySelected", CreateRequested: "CreateRequested" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 48, vars: 29, consts: [[1, "list-container"], [1, "list-header"], [1, "header-left"], [1, "count-badge"], [1, "header-right"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search keys...", 3, "ngModelChange", "ngModel"], [1, "clear-search"], [1, "create-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "filter-tabs"], [1, "filter-tab", 3, "click"], [1, "tab-count"], [1, "fa-solid", "fa-check-circle", "status-active"], [1, "fa-solid", "fa-clock", "status-warning"], [1, "fa-solid", "fa-circle-exclamation", "status-danger"], [1, "fa-solid", "fa-question-circle", "status-info"], [1, "fa-solid", "fa-ban", "status-revoked"], ["text", "Loading API keys..."], [1, "key-grid"], [1, "pagination"], [1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "grid-header"], [1, "col-key", "sortable", 3, "click"], [1, "col-owner", "sortable", 3, "click"], [1, "col-status", "sortable", 3, "click"], [1, "col-scopes"], [1, "col-expires", "sortable", 3, "click"], [1, "col-used", "sortable", 3, "click"], [1, "col-created", "sortable", 3, "click"], [1, "grid-row"], [1, "empty-state"], [1, "grid-row", 3, "click"], [1, "col-key"], [1, "key-icon"], [1, "fa-solid", "fa-key"], [1, "key-details"], [1, "key-label"], [1, "key-hash"], [1, "col-owner"], [1, "owner-name"], [1, "col-status"], [1, "status-badge"], [1, "scopes-display"], [1, "no-scopes"], [1, "col-expires"], [1, "expires-value", 3, "ngClass"], [1, "col-used"], [1, "used-value"], [1, "col-created"], [1, "created-value"], [1, "scope-badges"], [1, "scope-more"], [1, "scopes-total"], [1, "scope-badge", 3, "backgroundColor", "color", "title"], [1, "scope-badge", 3, "title"], [1, "badge-count"], [1, "fa-solid", "fa-shield-xmark"], [1, "create-empty-btn"], [1, "create-empty-btn", 3, "click"], [1, "page-info"], [1, "page-buttons"], [1, "page-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-left"], [1, "fa-solid", "fa-chevron-right"], [1, "page-btn", 3, "active"], [1, "page-ellipsis"], [1, "page-btn", 3, "click"]], template: function APIKeyListComponent_Template(rf, ctx) { if (rf & 1) {
706
703
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3");
707
704
  i0.ɵɵtext(4, "API Keys");
708
705
  i0.ɵɵelementEnd();
@@ -715,7 +712,7 @@ export class APIKeyListComponent {
715
712
  i0.ɵɵtwoWayListener("ngModelChange", function APIKeyListComponent_Template_input_ngModelChange_10_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.SearchText, $event) || (ctx.SearchText = $event); return $event; });
716
713
  i0.ɵɵlistener("ngModelChange", function APIKeyListComponent_Template_input_ngModelChange_10_listener() { return ctx.onSearch(); });
717
714
  i0.ɵɵelementEnd();
718
- i0.ɵɵtemplate(11, APIKeyListComponent_button_11_Template, 2, 0, "button", 8);
715
+ i0.ɵɵconditionalCreate(11, APIKeyListComponent_Conditional_11_Template, 2, 0, "button", 8);
719
716
  i0.ɵɵelementEnd();
720
717
  i0.ɵɵelementStart(12, "button", 9);
721
718
  i0.ɵɵlistener("click", function APIKeyListComponent_Template_button_click_12_listener() { return ctx.requestCreate(); });
@@ -763,15 +760,17 @@ export class APIKeyListComponent {
763
760
  i0.ɵɵelementStart(43, "span", 13);
764
761
  i0.ɵɵtext(44);
765
762
  i0.ɵɵelementEnd()()();
766
- i0.ɵɵtemplate(45, APIKeyListComponent_mj_loading_45_Template, 1, 0, "mj-loading", 19)(46, APIKeyListComponent_div_46_Template, 24, 14, "div", 20)(47, APIKeyListComponent_div_47_Template, 9, 6, "div", 21);
763
+ i0.ɵɵconditionalCreate(45, APIKeyListComponent_Conditional_45_Template, 1, 0, "mj-loading", 19);
764
+ i0.ɵɵconditionalCreate(46, APIKeyListComponent_Conditional_46_Template, 25, 13, "div", 20);
765
+ i0.ɵɵconditionalCreate(47, APIKeyListComponent_Conditional_47_Template, 10, 5, "div", 21);
767
766
  i0.ɵɵelementEnd();
768
767
  } if (rf & 2) {
769
768
  i0.ɵɵadvance(6);
770
- i0.ɵɵtextInterpolate2("", ctx.FilteredKeys.length, " of ", ctx.AllKeys.length, "");
769
+ i0.ɵɵtextInterpolate2("", ctx.FilteredKeys.length, " of ", ctx.AllKeys.length);
771
770
  i0.ɵɵadvance(4);
772
771
  i0.ɵɵtwoWayProperty("ngModel", ctx.SearchText);
773
772
  i0.ɵɵadvance();
774
- i0.ɵɵproperty("ngIf", ctx.SearchText);
773
+ i0.ɵɵconditional(ctx.SearchText ? 11 : -1);
775
774
  i0.ɵɵadvance(5);
776
775
  i0.ɵɵclassProp("active", ctx.Filter === "all");
777
776
  i0.ɵɵadvance(3);
@@ -797,16 +796,16 @@ export class APIKeyListComponent {
797
796
  i0.ɵɵadvance(4);
798
797
  i0.ɵɵtextInterpolate(ctx.Stats.revoked);
799
798
  i0.ɵɵadvance();
800
- i0.ɵɵproperty("ngIf", ctx.IsLoading);
799
+ i0.ɵɵconditional(ctx.IsLoading ? 45 : -1);
801
800
  i0.ɵɵadvance();
802
- i0.ɵɵproperty("ngIf", !ctx.IsLoading);
801
+ i0.ɵɵconditional(!ctx.IsLoading ? 46 : -1);
803
802
  i0.ɵɵadvance();
804
- i0.ɵɵproperty("ngIf", !ctx.IsLoading && ctx.FilteredKeys.length > ctx.PageSize);
805
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent], styles: [".list-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge[_ngcontent-%COMP%] {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search[_ngcontent-%COMP%]:hover {\n background: #d1d5db;\n}\n\n.clear-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n\n\n.create-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.filter-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active[_ngcontent-%COMP%] {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active[_ngcontent-%COMP%] { color: #10b981; }\n.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n.status-danger[_ngcontent-%COMP%] { color: #ef4444; }\n.status-info[_ngcontent-%COMP%] { color: #6b7280; }\n.status-revoked[_ngcontent-%COMP%] { color: #6b7280; }\n\n\n\n.key-grid[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable[_ngcontent-%COMP%]:hover {\n color: #374151;\n}\n\n.sortable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.5;\n}\n\n\n\n.grid-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row[_ngcontent-%COMP%]:hover {\n background: #fefce8;\n}\n\n.grid-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-key[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: white;\n}\n\n.key-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash[_ngcontent-%COMP%] {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n\n\n.owner-name[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #374151;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n\n\n.col-scopes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.scope-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.badge-count[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.scope-more[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.expires-value[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.expires-value.never[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.expires-value.ok[_ngcontent-%COMP%] {\n color: #059669;\n}\n\n.expires-value.warning[_ngcontent-%COMP%] {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n\n\n.used-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-style: italic;\n}\n\n\n\n.created-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\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: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.pagination[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn[_ngcontent-%COMP%] {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis[_ngcontent-%COMP%] {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n\n\n@media (max-width: 1200px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used[_ngcontent-%COMP%], \n .col-created[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 180px;\n }\n\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires[_ngcontent-%COMP%], \n .col-scopes[_ngcontent-%COMP%] {\n display: none;\n }\n\n .filter-tabs[_ngcontent-%COMP%] {\n padding: 0 16px;\n }\n}"] });
803
+ i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredKeys.length > ctx.PageSize ? 47 : -1);
804
+ } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent], styles: [".list-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge[_ngcontent-%COMP%] {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search[_ngcontent-%COMP%]:hover {\n background: #d1d5db;\n}\n\n.clear-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n\n\n.create-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.filter-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab[_ngcontent-%COMP%]:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active[_ngcontent-%COMP%] {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger[_ngcontent-%COMP%] .tab-count[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active[_ngcontent-%COMP%] { color: #10b981; }\n.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n.status-danger[_ngcontent-%COMP%] { color: #ef4444; }\n.status-info[_ngcontent-%COMP%] { color: #6b7280; }\n.status-revoked[_ngcontent-%COMP%] { color: #6b7280; }\n\n\n\n.key-grid[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable[_ngcontent-%COMP%]:hover {\n color: #374151;\n}\n\n.sortable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.5;\n}\n\n\n\n.grid-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row[_ngcontent-%COMP%]:hover {\n background: #fefce8;\n}\n\n.grid-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-key[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: white;\n}\n\n.key-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash[_ngcontent-%COMP%] {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n\n\n.owner-name[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #374151;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n\n\n.col-scopes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.scope-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.badge-count[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.scope-more[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.expires-value[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.expires-value.never[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.expires-value.ok[_ngcontent-%COMP%] {\n color: #059669;\n}\n\n.expires-value.warning[_ngcontent-%COMP%] {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired[_ngcontent-%COMP%] {\n color: #dc2626;\n font-weight: 600;\n}\n\n\n\n.used-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-style: italic;\n}\n\n\n\n.created-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\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: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.pagination[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn[_ngcontent-%COMP%] {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis[_ngcontent-%COMP%] {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n\n\n@media (max-width: 1200px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used[_ngcontent-%COMP%], \n .col-created[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 180px;\n }\n\n .grid-header[_ngcontent-%COMP%], \n .grid-row[_ngcontent-%COMP%] {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires[_ngcontent-%COMP%], \n .col-scopes[_ngcontent-%COMP%] {\n display: none;\n }\n\n .filter-tabs[_ngcontent-%COMP%] {\n padding: 0 16px;\n }\n}"] });
806
805
  }
807
806
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(APIKeyListComponent, [{
808
807
  type: Component,
809
- args: [{ selector: 'mj-api-key-list', template: "<div class=\"list-container\">\n <!-- Header -->\n <div class=\"list-header\">\n <div class=\"header-left\">\n <h3>API Keys</h3>\n <span class=\"count-badge\">{{FilteredKeys.length}} of {{AllKeys.length}}</span>\n </div>\n <div class=\"header-right\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\" [(ngModel)]=\"SearchText\"\n (ngModelChange)=\"onSearch()\"\n placeholder=\"Search keys...\" />\n <button class=\"clear-search\" *ngIf=\"SearchText\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <button class=\"create-btn\" (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Key\n </button>\n </div>\n </div>\n\n <!-- Filter Tabs -->\n <div class=\"filter-tabs\">\n <button class=\"filter-tab\" [class.active]=\"Filter === 'all'\"\n (click)=\"setFilter('all')\">\n All\n <span class=\"tab-count\">{{Stats.total}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'active'\"\n (click)=\"setFilter('active')\">\n <i class=\"fa-solid fa-check-circle status-active\"></i>\n Active\n <span class=\"tab-count\">{{Stats.active}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expiring'\"\n [class.has-warning]=\"Stats.expiring > 0\"\n (click)=\"setFilter('expiring')\">\n <i class=\"fa-solid fa-clock status-warning\"></i>\n Expiring Soon\n <span class=\"tab-count\">{{Stats.expiring}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expired'\"\n [class.has-danger]=\"Stats.expired > 0\"\n (click)=\"setFilter('expired')\">\n <i class=\"fa-solid fa-circle-exclamation status-danger\"></i>\n Expired\n <span class=\"tab-count\">{{Stats.expired}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'never-used'\"\n (click)=\"setFilter('never-used')\">\n <i class=\"fa-solid fa-question-circle status-info\"></i>\n Never Used\n <span class=\"tab-count\">{{Stats.neverUsed}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'revoked'\"\n (click)=\"setFilter('revoked')\">\n <i class=\"fa-solid fa-ban status-revoked\"></i>\n Revoked\n <span class=\"tab-count\">{{Stats.revoked}}</span>\n </button>\n </div>\n\n <!-- Loading -->\n <mj-loading *ngIf=\"IsLoading\" text=\"Loading API keys...\"></mj-loading>\n\n <!-- Grid -->\n <div class=\"key-grid\" *ngIf=\"!IsLoading\">\n <!-- Header Row -->\n <div class=\"grid-header\">\n <div class=\"col-key sortable\" (click)=\"toggleSort('Label')\">\n Key\n <i [class]=\"getSortIcon('Label')\"></i>\n </div>\n <div class=\"col-owner sortable\" (click)=\"toggleSort('User')\">\n Owner\n <i [class]=\"getSortIcon('User')\"></i>\n </div>\n <div class=\"col-status sortable\" (click)=\"toggleSort('Status')\">\n Status\n <i [class]=\"getSortIcon('Status')\"></i>\n </div>\n <div class=\"col-scopes\">\n Scopes\n </div>\n <div class=\"col-expires sortable\" (click)=\"toggleSort('ExpiresAt')\">\n Expires\n <i [class]=\"getSortIcon('ExpiresAt')\"></i>\n </div>\n <div class=\"col-used sortable\" (click)=\"toggleSort('LastUsedAt')\">\n Last Used\n <i [class]=\"getSortIcon('LastUsedAt')\"></i>\n </div>\n <div class=\"col-created sortable\" (click)=\"toggleSort('__mj_CreatedAt')\">\n Created\n <i [class]=\"getSortIcon('__mj_CreatedAt')\"></i>\n </div>\n </div>\n\n <!-- Key Rows -->\n <div class=\"grid-row\" *ngFor=\"let key of getPaginatedKeys()\"\n (click)=\"selectKey(key)\">\n <div class=\"col-key\">\n <div class=\"key-icon\" [class.active]=\"key.Status === 'Active'\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"key-details\">\n <span class=\"key-label\">{{key.Label}}</span>\n <code class=\"key-hash\">...{{key.Hash.slice(-12)}}</code>\n </div>\n </div>\n <div class=\"col-owner\">\n <span class=\"owner-name\">{{key.User}}</span>\n </div>\n <div class=\"col-status\">\n <span class=\"status-badge\" [class.active]=\"key.Status === 'Active'\"\n [class.revoked]=\"key.Status === 'Revoked'\">\n {{key.Status}}\n </span>\n </div>\n <div class=\"col-scopes\">\n <div class=\"scopes-display\" *ngIf=\"getScopeInfo(key).count > 0\">\n <div class=\"scope-badges\">\n <ng-container *ngFor=\"let cat of getScopeInfo(key).categories; let i = index\">\n <span class=\"scope-badge\" *ngIf=\"i < 3\"\n [style.backgroundColor]=\"cat.color + '15'\"\n [style.color]=\"cat.color\"\n [title]=\"cat.category + ': ' + cat.count + ' scope(s)'\">\n <i [class]=\"cat.icon\"></i>\n <span class=\"badge-count\">{{cat.count}}</span>\n </span>\n </ng-container>\n <span class=\"scope-more\" *ngIf=\"getScopeInfo(key).categories.length > 3\">\n +{{getScopeInfo(key).categories.length - 3}}\n </span>\n </div>\n <span class=\"scopes-total\">\n {{getScopeInfo(key).count}} total\n </span>\n </div>\n <span class=\"no-scopes\" *ngIf=\"getScopeInfo(key).count === 0\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n None\n </span>\n </div>\n <div class=\"col-expires\">\n <span class=\"expires-value\" [ngClass]=\"getExpirationClass(key)\">\n {{formatExpiration(key.ExpiresAt)}}\n </span>\n </div>\n <div class=\"col-used\">\n <span class=\"used-value\" [class.never]=\"!key.LastUsedAt\">\n {{formatDate(key.LastUsedAt)}}\n </span>\n </div>\n <div class=\"col-created\">\n <span class=\"created-value\">{{formatDate(key.__mj_CreatedAt)}}</span>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"FilteredKeys.length === 0\">\n <i class=\"fa-solid fa-key\"></i>\n <span *ngIf=\"SearchText\">No keys matching \"{{SearchText}}\"</span>\n <span *ngIf=\"!SearchText && Filter !== 'all'\">No {{Filter}} keys found</span>\n <span *ngIf=\"!SearchText && Filter === 'all'\">No API keys created yet</span>\n <button class=\"create-empty-btn\" *ngIf=\"Filter === 'all' && !SearchText\"\n (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Your First Key\n </button>\n </div>\n </div>\n\n <!-- Pagination -->\n <div class=\"pagination\" *ngIf=\"!IsLoading && FilteredKeys.length > PageSize\">\n <div class=\"page-info\">\n Showing {{(CurrentPage - 1) * PageSize + 1}} - {{Math.min(CurrentPage * PageSize, FilteredKeys.length)}}\n of {{FilteredKeys.length}}\n </div>\n <div class=\"page-buttons\">\n <button class=\"page-btn\" [disabled]=\"CurrentPage === 1\"\n (click)=\"goToPage(CurrentPage - 1)\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n <ng-container *ngFor=\"let page of getPageNumbers()\">\n <button class=\"page-btn\" *ngIf=\"page > 0\"\n [class.active]=\"page === CurrentPage\"\n (click)=\"goToPage(page)\">\n {{page}}\n </button>\n <span class=\"page-ellipsis\" *ngIf=\"page === -1\">...</span>\n </ng-container>\n <button class=\"page-btn\" [disabled]=\"CurrentPage === getTotalPages()\"\n (click)=\"goToPage(CurrentPage + 1)\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".list-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n/* Header */\n.list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left h3 {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n/* Search Box */\n.search-box {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box i {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box input {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box input:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search:hover {\n background: #d1d5db;\n}\n\n.clear-search i {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n/* Create Button */\n.create-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Filter Tabs */\n.filter-tabs {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning .tab-count {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger .tab-count {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active { color: #10b981; }\n.status-warning { color: #f59e0b; }\n.status-danger { color: #ef4444; }\n.status-info { color: #6b7280; }\n.status-revoked { color: #6b7280; }\n\n/* Key Grid */\n.key-grid {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable:hover {\n color: #374151;\n}\n\n.sortable i {\n font-size: 10px;\n opacity: 0.5;\n}\n\n/* Grid Rows */\n.grid-row {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row:hover {\n background: #fefce8;\n}\n\n.grid-row:last-child {\n border-bottom: none;\n}\n\n/* Key Column */\n.col-key {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon i {\n font-size: 16px;\n color: white;\n}\n\n.key-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n/* Owner Column */\n.owner-name {\n font-size: 14px;\n color: #374151;\n}\n\n/* Status Column */\n.status-badge {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n/* Scopes Column */\n.col-scopes {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge:hover {\n transform: scale(1.05);\n}\n\n.scope-badge i {\n font-size: 10px;\n}\n\n.badge-count {\n font-weight: 700;\n}\n\n.scope-more {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes i {\n font-size: 11px;\n}\n\n/* Expires Column */\n.expires-value {\n font-size: 13px;\n}\n\n.expires-value.never {\n color: #6b7280;\n}\n\n.expires-value.ok {\n color: #059669;\n}\n\n.expires-value.warning {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired {\n color: #dc2626;\n font-weight: 600;\n}\n\n/* Used Column */\n.used-value {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never {\n color: #9ca3af;\n font-style: italic;\n}\n\n/* Created Column */\n.created-value {\n font-size: 13px;\n color: #6b7280;\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: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state span {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Pagination */\n.pagination {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used,\n .col-created {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box input {\n width: 180px;\n }\n\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires,\n .col-scopes {\n display: none;\n }\n\n .filter-tabs {\n padding: 0 16px;\n }\n}\n"] }]
808
+ args: [{ standalone: false, selector: 'mj-api-key-list', template: "<div class=\"list-container\">\n <!-- Header -->\n <div class=\"list-header\">\n <div class=\"header-left\">\n <h3>API Keys</h3>\n <span class=\"count-badge\">{{FilteredKeys.length}} of {{AllKeys.length}}</span>\n </div>\n <div class=\"header-right\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\" [(ngModel)]=\"SearchText\"\n (ngModelChange)=\"onSearch()\"\n placeholder=\"Search keys...\" />\n @if (SearchText) {\n <button class=\"clear-search\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <button class=\"create-btn\" (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Key\n </button>\n </div>\n </div>\n\n <!-- Filter Tabs -->\n <div class=\"filter-tabs\">\n <button class=\"filter-tab\" [class.active]=\"Filter === 'all'\"\n (click)=\"setFilter('all')\">\n All\n <span class=\"tab-count\">{{Stats.total}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'active'\"\n (click)=\"setFilter('active')\">\n <i class=\"fa-solid fa-check-circle status-active\"></i>\n Active\n <span class=\"tab-count\">{{Stats.active}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expiring'\"\n [class.has-warning]=\"Stats.expiring > 0\"\n (click)=\"setFilter('expiring')\">\n <i class=\"fa-solid fa-clock status-warning\"></i>\n Expiring Soon\n <span class=\"tab-count\">{{Stats.expiring}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'expired'\"\n [class.has-danger]=\"Stats.expired > 0\"\n (click)=\"setFilter('expired')\">\n <i class=\"fa-solid fa-circle-exclamation status-danger\"></i>\n Expired\n <span class=\"tab-count\">{{Stats.expired}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'never-used'\"\n (click)=\"setFilter('never-used')\">\n <i class=\"fa-solid fa-question-circle status-info\"></i>\n Never Used\n <span class=\"tab-count\">{{Stats.neverUsed}}</span>\n </button>\n <button class=\"filter-tab\" [class.active]=\"Filter === 'revoked'\"\n (click)=\"setFilter('revoked')\">\n <i class=\"fa-solid fa-ban status-revoked\"></i>\n Revoked\n <span class=\"tab-count\">{{Stats.revoked}}</span>\n </button>\n </div>\n\n <!-- Loading -->\n @if (IsLoading) {\n <mj-loading text=\"Loading API keys...\"></mj-loading>\n }\n\n <!-- Grid -->\n @if (!IsLoading) {\n <div class=\"key-grid\">\n <!-- Header Row -->\n <div class=\"grid-header\">\n <div class=\"col-key sortable\" (click)=\"toggleSort('Label')\">\n Key\n <i [class]=\"getSortIcon('Label')\"></i>\n </div>\n <div class=\"col-owner sortable\" (click)=\"toggleSort('User')\">\n Owner\n <i [class]=\"getSortIcon('User')\"></i>\n </div>\n <div class=\"col-status sortable\" (click)=\"toggleSort('Status')\">\n Status\n <i [class]=\"getSortIcon('Status')\"></i>\n </div>\n <div class=\"col-scopes\">\n Scopes\n </div>\n <div class=\"col-expires sortable\" (click)=\"toggleSort('ExpiresAt')\">\n Expires\n <i [class]=\"getSortIcon('ExpiresAt')\"></i>\n </div>\n <div class=\"col-used sortable\" (click)=\"toggleSort('LastUsedAt')\">\n Last Used\n <i [class]=\"getSortIcon('LastUsedAt')\"></i>\n </div>\n <div class=\"col-created sortable\" (click)=\"toggleSort('__mj_CreatedAt')\">\n Created\n <i [class]=\"getSortIcon('__mj_CreatedAt')\"></i>\n </div>\n </div>\n <!-- Key Rows -->\n @for (key of getPaginatedKeys(); track key) {\n <div class=\"grid-row\"\n (click)=\"selectKey(key)\">\n <div class=\"col-key\">\n <div class=\"key-icon\" [class.active]=\"key.Status === 'Active'\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <div class=\"key-details\">\n <span class=\"key-label\">{{key.Label}}</span>\n <code class=\"key-hash\">...{{key.Hash.slice(-12)}}</code>\n </div>\n </div>\n <div class=\"col-owner\">\n <span class=\"owner-name\">{{key.User}}</span>\n </div>\n <div class=\"col-status\">\n <span class=\"status-badge\" [class.active]=\"key.Status === 'Active'\"\n [class.revoked]=\"key.Status === 'Revoked'\">\n {{key.Status}}\n </span>\n </div>\n <div class=\"col-scopes\">\n @if (getScopeInfo(key).count > 0) {\n <div class=\"scopes-display\">\n <div class=\"scope-badges\">\n @for (cat of getScopeInfo(key).categories; track cat; let i = $index) {\n @if (i < 3) {\n <span class=\"scope-badge\"\n [style.backgroundColor]=\"cat.color + '15'\"\n [style.color]=\"cat.color\"\n [title]=\"cat.category + ': ' + cat.count + ' scope(s)'\">\n <i [class]=\"cat.icon\"></i>\n <span class=\"badge-count\">{{cat.count}}</span>\n </span>\n }\n }\n @if (getScopeInfo(key).categories.length > 3) {\n <span class=\"scope-more\">\n +{{getScopeInfo(key).categories.length - 3}}\n </span>\n }\n </div>\n <span class=\"scopes-total\">\n {{getScopeInfo(key).count}} total\n </span>\n </div>\n }\n @if (getScopeInfo(key).count === 0) {\n <span class=\"no-scopes\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n None\n </span>\n }\n </div>\n <div class=\"col-expires\">\n <span class=\"expires-value\" [ngClass]=\"getExpirationClass(key)\">\n {{formatExpiration(key.ExpiresAt)}}\n </span>\n </div>\n <div class=\"col-used\">\n <span class=\"used-value\" [class.never]=\"!key.LastUsedAt\">\n {{formatDate(key.LastUsedAt)}}\n </span>\n </div>\n <div class=\"col-created\">\n <span class=\"created-value\">{{formatDate(key.__mj_CreatedAt)}}</span>\n </div>\n </div>\n }\n <!-- Empty State -->\n @if (FilteredKeys.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-key\"></i>\n @if (SearchText) {\n <span>No keys matching \"{{SearchText}}\"</span>\n }\n @if (!SearchText && Filter !== 'all') {\n <span>No {{Filter}} keys found</span>\n }\n @if (!SearchText && Filter === 'all') {\n <span>No API keys created yet</span>\n }\n @if (Filter === 'all' && !SearchText) {\n <button class=\"create-empty-btn\"\n (click)=\"requestCreate()\">\n <i class=\"fa-solid fa-plus\"></i>\n Generate Your First Key\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Pagination -->\n @if (!IsLoading && FilteredKeys.length > PageSize) {\n <div class=\"pagination\">\n <div class=\"page-info\">\n Showing {{(CurrentPage - 1) * PageSize + 1}} - {{Math.min(CurrentPage * PageSize, FilteredKeys.length)}}\n of {{FilteredKeys.length}}\n </div>\n <div class=\"page-buttons\">\n <button class=\"page-btn\" [disabled]=\"CurrentPage === 1\"\n (click)=\"goToPage(CurrentPage - 1)\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n @for (page of getPageNumbers(); track page) {\n @if (page > 0) {\n <button class=\"page-btn\"\n [class.active]=\"page === CurrentPage\"\n (click)=\"goToPage(page)\">\n {{page}}\n </button>\n }\n @if (page === -1) {\n <span class=\"page-ellipsis\">...</span>\n }\n }\n <button class=\"page-btn\" [disabled]=\"CurrentPage === getTotalPages()\"\n (click)=\"goToPage(CurrentPage + 1)\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".list-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n/* Header */\n.list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-left h3 {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: #78350f;\n}\n\n.count-badge {\n padding: 4px 12px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #92400e;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n/* Search Box */\n.search-box {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-box i {\n position: absolute;\n left: 12px;\n color: #9ca3af;\n font-size: 14px;\n}\n\n.search-box input {\n width: 260px;\n padding: 10px 36px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 14px;\n transition: all 0.2s ease;\n}\n\n.search-box input:focus {\n outline: none;\n border-color: #f59e0b;\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n.clear-search {\n position: absolute;\n right: 8px;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #e5e7eb;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-search:hover {\n background: #d1d5db;\n}\n\n.clear-search i {\n position: static;\n font-size: 10px;\n color: #6b7280;\n}\n\n/* Create Button */\n.create-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Filter Tabs */\n.filter-tabs {\n display: flex;\n gap: 4px;\n padding: 0 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n overflow-x: auto;\n}\n\n.filter-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 16px;\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.2s ease;\n}\n\n.filter-tab:hover {\n color: #374151;\n background: #f3f4f6;\n}\n\n.filter-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n}\n\n.filter-tab.has-warning .tab-count {\n background: #fef3c7;\n color: #d97706;\n}\n\n.filter-tab.has-danger .tab-count {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.tab-count {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-active { color: #10b981; }\n.status-warning { color: #f59e0b; }\n.status-danger { color: #ef4444; }\n.status-info { color: #6b7280; }\n.status-revoked { color: #6b7280; }\n\n/* Key Grid */\n.key-grid {\n flex: 1;\n overflow-y: auto;\n}\n\n.grid-header {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 14px 24px;\n background: #f3f4f6;\n border-bottom: 1px solid #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n}\n\n.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s ease;\n}\n\n.sortable:hover {\n color: #374151;\n}\n\n.sortable i {\n font-size: 10px;\n opacity: 0.5;\n}\n\n/* Grid Rows */\n.grid-row {\n display: grid;\n grid-template-columns: 2fr 1fr 90px 160px 100px 110px 100px;\n gap: 12px;\n padding: 16px 24px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.2s ease;\n align-items: center;\n}\n\n.grid-row:hover {\n background: #fefce8;\n}\n\n.grid-row:last-child {\n border-bottom: none;\n}\n\n/* Key Column */\n.col-key {\n display: flex;\n align-items: center;\n gap: 14px;\n min-width: 0;\n}\n\n.key-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.key-icon.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n}\n\n.key-icon i {\n font-size: 16px;\n color: white;\n}\n\n.key-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.key-label {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.key-hash {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n/* Owner Column */\n.owner-name {\n font-size: 14px;\n color: #374151;\n}\n\n/* Status Column */\n.status-badge {\n display: inline-block;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n text-transform: capitalize;\n}\n\n.status-badge.active {\n background: #d1fae5;\n color: #059669;\n}\n\n.status-badge.revoked {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n/* Scopes Column */\n.col-scopes {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.scopes-display {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-badges {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.scope-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n cursor: default;\n transition: transform 0.15s ease;\n}\n\n.scope-badge:hover {\n transform: scale(1.05);\n}\n\n.scope-badge i {\n font-size: 10px;\n}\n\n.badge-count {\n font-weight: 700;\n}\n\n.scope-more {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 3px 6px;\n background: #f3f4f6;\n border-radius: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.scopes-total {\n font-size: 11px;\n color: #9ca3af;\n}\n\n.no-scopes {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #d1d5db;\n}\n\n.no-scopes i {\n font-size: 11px;\n}\n\n/* Expires Column */\n.expires-value {\n font-size: 13px;\n}\n\n.expires-value.never {\n color: #6b7280;\n}\n\n.expires-value.ok {\n color: #059669;\n}\n\n.expires-value.warning {\n color: #d97706;\n font-weight: 500;\n}\n\n.expires-value.critical {\n color: #dc2626;\n font-weight: 600;\n}\n\n.expires-value.expired {\n color: #dc2626;\n font-weight: 600;\n}\n\n/* Used Column */\n.used-value {\n font-size: 13px;\n color: #374151;\n}\n\n.used-value.never {\n color: #9ca3af;\n font-style: italic;\n}\n\n/* Created Column */\n.created-value {\n font-size: 13px;\n color: #6b7280;\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: 64px 24px;\n color: #6b7280;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state span {\n font-size: 16px;\n color: #374151;\n}\n\n.create-empty-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 20px;\n padding: 12px 24px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.create-empty-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Pagination */\n.pagination {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n}\n\n.page-info {\n font-size: 13px;\n color: #6b7280;\n}\n\n.page-buttons {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.page-btn {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.page-btn:hover:not(:disabled) {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.page-btn.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.page-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.page-ellipsis {\n padding: 0 8px;\n color: #9ca3af;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 1fr 90px 120px 100px;\n }\n\n .col-used,\n .col-created {\n display: none;\n }\n}\n\n@media (max-width: 1024px) {\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 110px 100px;\n }\n\n .col-owner {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .list-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n\n .search-box input {\n width: 180px;\n }\n\n .grid-header,\n .grid-row {\n grid-template-columns: 2fr 90px 100px;\n }\n\n .col-expires,\n .col-scopes {\n display: none;\n }\n\n .filter-tabs {\n padding: 0 16px;\n }\n}\n"] }]
810
809
  }], null, { Filter: [{
811
810
  type: Input
812
811
  }], KeySelected: [{
@@ -814,5 +813,5 @@ export class APIKeyListComponent {
814
813
  }], CreateRequested: [{
815
814
  type: Output
816
815
  }] }); })();
817
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyListComponent, { className: "APIKeyListComponent", filePath: "src/APIKeys/api-key-list.component.ts", lineNumber: 37 }); })();
816
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyListComponent, { className: "APIKeyListComponent", filePath: "src/APIKeys/api-key-list.component.ts", lineNumber: 32 }); })();
818
817
  //# sourceMappingURL=api-key-list.component.js.map