@memberjunction/ng-dashboards 3.4.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/dist/AI/ai-dashboard.component.d.ts +62 -0
  2. package/dist/AI/ai-dashboard.component.d.ts.map +1 -0
  3. package/dist/AI/ai-dashboard.component.js +338 -0
  4. package/dist/AI/ai-dashboard.component.js.map +1 -0
  5. package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
  6. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-configuration.component.js +103 -44
  8. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  9. package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
  10. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  11. package/dist/AI/components/agents/agent-editor.component.js +149 -211
  12. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  13. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  14. package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
  15. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  16. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  17. package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
  18. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  19. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  20. package/dist/AI/components/charts/time-series-chart.component.js +6 -7
  21. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  22. package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
  23. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  24. package/dist/AI/components/execution-monitoring.component.js +33 -37
  25. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  26. package/dist/AI/components/models/model-management-v2.component.d.ts +96 -0
  27. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -0
  28. package/dist/AI/components/models/model-management-v2.component.js +981 -0
  29. package/dist/AI/components/models/model-management-v2.component.js.map +1 -0
  30. package/dist/AI/components/models/model-management.component.d.ts +3 -6
  31. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  32. package/dist/AI/components/models/model-management.component.js +34 -27
  33. package/dist/AI/components/models/model-management.component.js.map +1 -1
  34. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  35. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
  36. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  37. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
  39. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  40. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +97 -0
  41. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -0
  42. package/dist/AI/components/prompts/prompt-management-v2.component.js +811 -0
  43. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -0
  44. package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
  45. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/prompts/prompt-management.component.js +34 -32
  47. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  49. package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
  50. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  51. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  52. package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
  53. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  54. package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
  55. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.js +26 -27
  57. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  58. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  59. package/dist/AI/components/widgets/kpi-card.component.js +52 -42
  60. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  61. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  62. package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
  63. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  64. package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
  65. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  66. package/dist/APIKeys/api-applications-panel.component.js +193 -189
  67. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  68. package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
  69. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  70. package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
  71. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  72. package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
  73. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  74. package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
  75. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  76. package/dist/APIKeys/api-key-list.component.d.ts +0 -2
  77. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  78. package/dist/APIKeys/api-key-list.component.js +113 -114
  79. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  80. package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
  81. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  82. package/dist/APIKeys/api-keys-resource.component.js +294 -302
  83. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  84. package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
  85. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  86. package/dist/APIKeys/api-scopes-panel.component.js +151 -155
  87. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  88. package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
  89. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  90. package/dist/APIKeys/api-usage-panel.component.js +237 -234
  91. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  92. package/dist/Actions/actions-management-dashboard.component.d.ts +52 -0
  93. package/dist/Actions/actions-management-dashboard.component.d.ts.map +1 -0
  94. package/dist/Actions/actions-management-dashboard.component.js +308 -0
  95. package/dist/Actions/actions-management-dashboard.component.js.map +1 -0
  96. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  97. package/dist/Actions/components/actions-list-view.component.js +15 -14
  98. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  99. package/dist/Actions/components/actions-overview.component.d.ts +3 -6
  100. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  101. package/dist/Actions/components/actions-overview.component.js +17 -19
  102. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  103. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  104. package/dist/Actions/components/categories-list-view.component.js +6 -6
  105. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  106. package/dist/Actions/components/code-management.component.d.ts +0 -4
  107. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  108. package/dist/Actions/components/code-management.component.js +3 -9
  109. package/dist/Actions/components/code-management.component.js.map +1 -1
  110. package/dist/Actions/components/entity-integration.component.d.ts +0 -4
  111. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  112. package/dist/Actions/components/entity-integration.component.js +3 -9
  113. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  114. package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
  115. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  116. package/dist/Actions/components/execution-monitoring.component.js +13 -16
  117. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  118. package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
  119. package/dist/Actions/components/executions-list-view.component.js +3 -3
  120. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  121. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
  122. package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
  123. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
  124. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/action-card.component.js +11 -10
  126. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  127. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
  128. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  129. package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
  130. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  131. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
  132. package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
  133. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  134. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
  135. package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
  136. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  137. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
  138. package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
  139. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  140. package/dist/Actions/components/explorer/index.d.ts +0 -1
  141. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  142. package/dist/Actions/components/explorer/index.js +0 -4
  143. package/dist/Actions/components/explorer/index.js.map +1 -1
  144. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  145. package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
  146. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  147. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  148. package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
  149. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  150. package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
  151. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  152. package/dist/Actions/components/scheduled-actions.component.js +3 -9
  153. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  154. package/dist/Actions/components/security-permissions.component.d.ts +0 -4
  155. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  156. package/dist/Actions/components/security-permissions.component.js +3 -9
  157. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  158. package/dist/Actions/index.d.ts +0 -7
  159. package/dist/Actions/index.d.ts.map +1 -1
  160. package/dist/Actions/index.js +0 -8
  161. package/dist/Actions/index.js.map +1 -1
  162. package/dist/Communication/communication-dashboard.component.d.ts +0 -1
  163. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  164. package/dist/Communication/communication-dashboard.component.js +38 -51
  165. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  166. package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
  167. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  168. package/dist/Communication/communication-logs-resource.component.js +112 -108
  169. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  170. package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
  171. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  172. package/dist/Communication/communication-monitor-resource.component.js +210 -201
  173. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  174. package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
  175. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  176. package/dist/Communication/communication-providers-resource.component.js +136 -124
  177. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  178. package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
  179. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  180. package/dist/Communication/communication-runs-resource.component.js +91 -88
  181. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  182. package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
  183. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  184. package/dist/Communication/communication-templates-resource.component.js +139 -122
  185. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  186. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
  187. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  188. package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
  189. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  190. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  191. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
  192. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  193. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  194. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
  195. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  196. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  197. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
  198. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  199. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
  200. package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
  201. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  202. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
  203. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
  204. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  205. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  206. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
  207. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  208. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
  209. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
  210. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  211. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
  212. package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
  213. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  214. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
  215. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
  216. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  217. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  218. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
  219. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  220. package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
  221. package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
  222. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  223. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  224. package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
  225. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  226. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  227. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
  228. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  229. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +44 -0
  230. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +1 -0
  231. package/dist/Credentials/components/credential-category-edit-panel.component.js +456 -0
  232. package/dist/Credentials/components/credential-category-edit-panel.component.js.map +1 -0
  233. package/dist/Credentials/components/credential-edit-panel.component.d.ts +70 -0
  234. package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +1 -0
  235. package/dist/Credentials/components/credential-edit-panel.component.js +694 -0
  236. package/dist/Credentials/components/credential-edit-panel.component.js.map +1 -0
  237. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +56 -0
  238. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +1 -0
  239. package/dist/Credentials/components/credential-type-edit-panel.component.js +563 -0
  240. package/dist/Credentials/components/credential-type-edit-panel.component.js.map +1 -0
  241. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
  242. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  243. package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
  244. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  245. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
  246. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  247. package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
  248. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  249. package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
  250. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  251. package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
  252. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  253. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
  254. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  255. package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
  256. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  257. package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
  258. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  259. package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
  260. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  261. package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
  262. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  263. package/dist/Credentials/credentials-dashboard.component.js +31 -44
  264. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  265. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
  266. package/dist/Credentials/pipes/group-by.pipe.js +2 -1
  267. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
  268. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
  269. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  270. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
  271. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  272. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  273. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
  274. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  275. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
  276. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
  277. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
  278. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  279. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
  280. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  281. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +245 -0
  282. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  283. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +1143 -0
  284. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  285. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  286. package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
  287. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  288. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +0 -4
  289. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  290. package/dist/DataExplorer/data-explorer-dashboard.component.js +49 -54
  291. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  292. package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
  293. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  294. package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
  295. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  296. package/dist/DataExplorer/index.d.ts +2 -2
  297. package/dist/DataExplorer/index.d.ts.map +1 -1
  298. package/dist/DataExplorer/index.js +2 -2
  299. package/dist/DataExplorer/index.js.map +1 -1
  300. package/dist/EntityAdmin/components/entity-details.component.d.ts +50 -0
  301. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -0
  302. package/dist/EntityAdmin/components/entity-details.component.js +680 -0
  303. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -0
  304. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +31 -0
  305. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +1 -0
  306. package/dist/EntityAdmin/components/entity-filter-panel.component.js +160 -0
  307. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -0
  308. package/dist/EntityAdmin/components/erd-composite.component.d.ts +73 -0
  309. package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +1 -0
  310. package/dist/EntityAdmin/components/erd-composite.component.js +271 -0
  311. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -0
  312. package/dist/EntityAdmin/components/erd-diagram.component.d.ts +47 -0
  313. package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +1 -0
  314. package/dist/EntityAdmin/components/erd-diagram.component.js +618 -0
  315. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -0
  316. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
  317. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  318. package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
  319. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  320. package/dist/Home/home-application.d.ts +0 -5
  321. package/dist/Home/home-application.d.ts.map +1 -1
  322. package/dist/Home/home-application.js +0 -9
  323. package/dist/Home/home-application.js.map +1 -1
  324. package/dist/Home/home-dashboard.component.d.ts +0 -4
  325. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  326. package/dist/Home/home-dashboard.component.js +141 -139
  327. package/dist/Home/home-dashboard.component.js.map +1 -1
  328. package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
  329. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  330. package/dist/Lists/components/lists-browse-resource.component.js +761 -685
  331. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  332. package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
  333. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  334. package/dist/Lists/components/lists-categories-resource.component.js +340 -316
  335. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  336. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
  337. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  338. package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
  339. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  340. package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
  341. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  342. package/dist/Lists/components/lists-operations-resource.component.js +508 -455
  343. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  344. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  345. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
  346. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  347. package/dist/Lists/index.d.ts +0 -1
  348. package/dist/Lists/index.d.ts.map +1 -1
  349. package/dist/Lists/index.js +0 -11
  350. package/dist/Lists/index.js.map +1 -1
  351. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
  352. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  353. package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
  354. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  355. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
  356. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
  357. package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
  358. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  359. package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
  360. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  361. package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
  362. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  363. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
  364. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  365. package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
  366. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  367. package/dist/MCP/index.d.ts +5 -5
  368. package/dist/MCP/index.d.ts.map +1 -1
  369. package/dist/MCP/index.js +5 -5
  370. package/dist/MCP/index.js.map +1 -1
  371. package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
  372. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  373. package/dist/MCP/mcp-dashboard.component.js +976 -697
  374. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  375. package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
  376. package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
  377. package/dist/MCP/mcp-filter-panel.component.js +288 -0
  378. package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
  379. package/dist/MCP/mcp-resource.component.d.ts +11 -5
  380. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  381. package/dist/MCP/mcp-resource.component.js +8 -9
  382. package/dist/MCP/mcp-resource.component.js.map +1 -1
  383. package/dist/MCP/mcp.module.d.ts +16 -19
  384. package/dist/MCP/mcp.module.d.ts.map +1 -1
  385. package/dist/MCP/mcp.module.js +17 -26
  386. package/dist/MCP/mcp.module.js.map +1 -1
  387. package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
  388. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
  389. package/dist/MCP/services/mcp-tools.service.js +5 -6
  390. package/dist/MCP/services/mcp-tools.service.js.map +1 -1
  391. package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
  392. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  393. package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
  394. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  395. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
  396. package/dist/Scheduling/components/job-slideout.component.js +117 -116
  397. package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
  398. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
  399. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  400. package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
  401. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  402. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  403. package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
  404. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  405. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
  406. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
  407. package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
  408. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
  409. package/dist/Scheduling/components/scheduling-health.component.d.ts +30 -0
  410. package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
  411. package/dist/Scheduling/components/scheduling-health.component.js +315 -0
  412. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
  413. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
  414. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
  415. package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
  416. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
  417. package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
  418. package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
  419. package/dist/Scheduling/components/scheduling-history.component.js +377 -0
  420. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
  421. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
  422. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  423. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
  424. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  425. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  426. package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
  427. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  428. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
  429. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
  430. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
  431. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
  432. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
  433. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
  434. package/dist/Scheduling/components/scheduling-monitoring.component.js +488 -0
  435. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
  436. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
  437. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  438. package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
  439. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  440. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  441. package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
  442. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  443. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
  444. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
  445. package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
  446. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
  447. package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
  448. package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
  449. package/dist/Scheduling/components/scheduling-types.component.js +165 -0
  450. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
  451. package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
  452. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  453. package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
  454. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  455. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
  456. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  457. package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
  458. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  459. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  460. package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
  461. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  462. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  463. package/dist/Testing/components/testing-analytics.component.js +30 -30
  464. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  465. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  466. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +3 -3
  467. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  468. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  469. package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
  470. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  471. package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
  472. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
  473. package/dist/Testing/components/testing-execution-resource.component.js +55 -0
  474. package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
  475. package/dist/Testing/components/testing-execution.component.d.ts +71 -0
  476. package/dist/Testing/components/testing-execution.component.d.ts.map +1 -0
  477. package/dist/Testing/components/testing-execution.component.js +845 -0
  478. package/dist/Testing/components/testing-execution.component.js.map +1 -0
  479. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  480. package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
  481. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  482. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  483. package/dist/Testing/components/testing-explorer.component.js +42 -35
  484. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  485. package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
  486. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
  487. package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
  488. package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
  489. package/dist/Testing/components/testing-feedback.component.d.ts +111 -0
  490. package/dist/Testing/components/testing-feedback.component.d.ts.map +1 -0
  491. package/dist/Testing/components/testing-feedback.component.js +1486 -0
  492. package/dist/Testing/components/testing-feedback.component.js.map +1 -0
  493. package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
  494. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
  495. package/dist/Testing/components/testing-overview-resource.component.js +55 -0
  496. package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
  497. package/dist/Testing/components/testing-overview.component.d.ts +30 -0
  498. package/dist/Testing/components/testing-overview.component.d.ts.map +1 -0
  499. package/dist/Testing/components/testing-overview.component.js +361 -0
  500. package/dist/Testing/components/testing-overview.component.js.map +1 -0
  501. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  502. package/dist/Testing/components/testing-review-resource.component.js +3 -3
  503. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  504. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  505. package/dist/Testing/components/testing-review.component.js +16 -16
  506. package/dist/Testing/components/testing-review.component.js.map +1 -1
  507. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  508. package/dist/Testing/components/testing-runs-resource.component.js +3 -3
  509. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  510. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  511. package/dist/Testing/components/testing-runs.component.js +15 -15
  512. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  513. package/dist/Testing/components/testing-version-comparison.component.d.ts +62 -0
  514. package/dist/Testing/components/testing-version-comparison.component.d.ts.map +1 -0
  515. package/dist/Testing/components/testing-version-comparison.component.js +815 -0
  516. package/dist/Testing/components/testing-version-comparison.component.js.map +1 -0
  517. package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
  518. package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
  519. package/dist/Testing/components/testing-version-resource.component.js +55 -0
  520. package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
  521. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
  522. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
  523. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  524. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
  525. package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
  526. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  527. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  528. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
  529. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  530. package/dist/Testing/testing-dashboard.component.d.ts +0 -1
  531. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  532. package/dist/Testing/testing-dashboard.component.js +9 -8
  533. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  534. package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
  535. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
  536. package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
  537. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
  538. package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
  539. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
  540. package/dist/VersionHistory/components/graph-resource.component.js +521 -0
  541. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
  542. package/dist/VersionHistory/components/index.d.ts +5 -0
  543. package/dist/VersionHistory/components/index.d.ts.map +1 -0
  544. package/dist/VersionHistory/components/index.js +5 -0
  545. package/dist/VersionHistory/components/index.js.map +1 -0
  546. package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
  547. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
  548. package/dist/VersionHistory/components/labels-resource.component.js +968 -0
  549. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
  550. package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
  551. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
  552. package/dist/VersionHistory/components/restore-resource.component.js +472 -0
  553. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
  554. package/dist/VersionHistory/index.d.ts +2 -0
  555. package/dist/VersionHistory/index.d.ts.map +1 -0
  556. package/dist/VersionHistory/index.js +2 -0
  557. package/dist/VersionHistory/index.js.map +1 -0
  558. package/dist/generic/base-dashboard.d.ts +65 -0
  559. package/dist/generic/base-dashboard.d.ts.map +1 -0
  560. package/dist/generic/base-dashboard.js +74 -0
  561. package/dist/generic/base-dashboard.js.map +1 -0
  562. package/dist/module.d.ts +42 -36
  563. package/dist/module.d.ts.map +1 -1
  564. package/dist/module.js +41 -7
  565. package/dist/module.js.map +1 -1
  566. package/dist/public-api.d.ts +20 -19
  567. package/dist/public-api.d.ts.map +1 -1
  568. package/dist/public-api.js +22 -120
  569. package/dist/public-api.js.map +1 -1
  570. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
  571. package/dist/shared/pipes/highlight-search.pipe.js +2 -1
  572. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
  573. package/package.json +64 -62
@@ -9,18 +9,18 @@ import * as i3 from "@progress/kendo-angular-inputs";
9
9
  import * as i4 from "@progress/kendo-angular-dateinputs";
10
10
  import * as i5 from "@progress/kendo-angular-buttons";
11
11
  import * as i6 from "@memberjunction/ng-shared-generic";
12
- function APIKeyEditPanelComponent_div_0_Template(rf, ctx) { if (rf & 1) {
12
+ function APIKeyEditPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
13
13
  const _r1 = i0.ɵɵgetCurrentView();
14
- i0.ɵɵelementStart(0, "div", 10);
15
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_div_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
14
+ i0.ɵɵelementStart(0, "div", 9);
15
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
16
16
  i0.ɵɵelementEnd();
17
17
  } }
18
- function APIKeyEditPanelComponent_mj_loading_11_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelement(0, "mj-loading", 11);
18
+ function APIKeyEditPanelComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelement(0, "mj-loading", 8);
20
20
  } }
21
- function APIKeyEditPanelComponent_ng_container_12_div_1_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "div", 26);
23
- i0.ɵɵelement(1, "i", 27);
21
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_0_Template(rf, ctx) { if (rf & 1) {
22
+ i0.ɵɵelementStart(0, "div", 10);
23
+ i0.ɵɵelement(1, "i", 24);
24
24
  i0.ɵɵtext(2);
25
25
  i0.ɵɵelementEnd();
26
26
  } if (rf & 2) {
@@ -28,9 +28,9 @@ function APIKeyEditPanelComponent_ng_container_12_div_1_Template(rf, ctx) { if (
28
28
  i0.ɵɵadvance(2);
29
29
  i0.ɵɵtextInterpolate1(" ", ctx_r1.SuccessMessage, " ");
30
30
  } }
31
- function APIKeyEditPanelComponent_ng_container_12_div_2_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelementStart(0, "div", 28);
33
- i0.ɵɵelement(1, "i", 29);
31
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 11);
33
+ i0.ɵɵelement(1, "i", 25);
34
34
  i0.ɵɵtext(2);
35
35
  i0.ɵɵelementEnd();
36
36
  } if (rf & 2) {
@@ -38,16 +38,16 @@ function APIKeyEditPanelComponent_ng_container_12_div_2_Template(rf, ctx) { if (
38
38
  i0.ɵɵadvance(2);
39
39
  i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
40
40
  } }
41
- function APIKeyEditPanelComponent_ng_container_12_span_10_Template(rf, ctx) { if (rf & 1) {
42
- i0.ɵɵelementStart(0, "span", 30);
41
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelementStart(0, "span", 16);
43
43
  i0.ɵɵtext(1, "!");
44
44
  i0.ɵɵelementEnd();
45
45
  } }
46
- function APIKeyEditPanelComponent_ng_container_12_div_15_button_33_Template(rf, ctx) { if (rf & 1) {
46
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_33_Template(rf, ctx) { if (rf & 1) {
47
47
  const _r5 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "button", 52);
49
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_15_button_33_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleEdit()); });
50
- i0.ɵɵelement(1, "i", 53);
48
+ i0.ɵɵelementStart(0, "button", 46);
49
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_33_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleEdit()); });
50
+ i0.ɵɵelement(1, "i", 47);
51
51
  i0.ɵɵtext(2);
52
52
  i0.ɵɵelementEnd();
53
53
  } if (rf & 2) {
@@ -57,94 +57,96 @@ function APIKeyEditPanelComponent_ng_container_12_div_15_button_33_Template(rf,
57
57
  i0.ɵɵadvance();
58
58
  i0.ɵɵtextInterpolate1(" ", ctx_r1.IsEditing ? "Cancel" : "Edit", " ");
59
59
  } }
60
- function APIKeyEditPanelComponent_ng_container_12_div_15_button_47_Template(rf, ctx) { if (rf & 1) {
60
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_47_Template(rf, ctx) { if (rf & 1) {
61
61
  const _r6 = i0.ɵɵgetCurrentView();
62
- i0.ɵɵelementStart(0, "button", 54);
63
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_15_button_47_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.EditExpiresAt = null); });
62
+ i0.ɵɵelementStart(0, "button", 48);
63
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_47_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.EditExpiresAt = null); });
64
64
  i0.ɵɵelement(1, "i", 7);
65
65
  i0.ɵɵtext(2, " Never expires ");
66
66
  i0.ɵɵelementEnd();
67
67
  } }
68
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_48_mj_loading_2_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelement(0, "mj-loading", 58);
68
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Conditional_2_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelement(0, "mj-loading", 50);
70
70
  } if (rf & 2) {
71
71
  i0.ɵɵproperty("showText", false);
72
72
  } }
73
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_48_span_3_Template(rf, ctx) { if (rf & 1) {
73
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Conditional_3_Template(rf, ctx) { if (rf & 1) {
74
74
  i0.ɵɵelementStart(0, "span");
75
- i0.ɵɵelement(1, "i", 59);
75
+ i0.ɵɵelement(1, "i", 51);
76
76
  i0.ɵɵtext(2, " Save Changes ");
77
77
  i0.ɵɵelementEnd();
78
78
  } }
79
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_48_Template(rf, ctx) { if (rf & 1) {
79
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Template(rf, ctx) { if (rf & 1) {
80
80
  const _r7 = i0.ɵɵgetCurrentView();
81
- i0.ɵɵelementStart(0, "div", 55)(1, "button", 56);
82
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_15_div_48_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.saveChanges()); });
83
- i0.ɵɵtemplate(2, APIKeyEditPanelComponent_ng_container_12_div_15_div_48_mj_loading_2_Template, 1, 1, "mj-loading", 57)(3, APIKeyEditPanelComponent_ng_container_12_div_15_div_48_span_3_Template, 3, 0, "span", 9);
81
+ i0.ɵɵelementStart(0, "div", 43)(1, "button", 49);
82
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.saveChanges()); });
83
+ i0.ɵɵconditionalCreate(2, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Conditional_2_Template, 1, 1, "mj-loading", 50);
84
+ i0.ɵɵconditionalCreate(3, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Conditional_3_Template, 3, 0, "span");
84
85
  i0.ɵɵelementEnd()();
85
86
  } if (rf & 2) {
86
87
  const ctx_r1 = i0.ɵɵnextContext(3);
87
88
  i0.ɵɵadvance();
88
89
  i0.ɵɵproperty("themeColor", "primary")("disabled", ctx_r1.IsSaving);
89
90
  i0.ɵɵadvance();
90
- i0.ɵɵproperty("ngIf", ctx_r1.IsSaving);
91
+ i0.ɵɵconditional(ctx_r1.IsSaving ? 2 : -1);
91
92
  i0.ɵɵadvance();
92
- i0.ɵɵproperty("ngIf", !ctx_r1.IsSaving);
93
+ i0.ɵɵconditional(!ctx_r1.IsSaving ? 3 : -1);
93
94
  } }
94
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_3_Template(rf, ctx) { if (rf & 1) {
95
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_3_Template(rf, ctx) { if (rf & 1) {
95
96
  const _r8 = i0.ɵɵgetCurrentView();
96
- i0.ɵɵelementStart(0, "div", 63)(1, "div", 64);
97
- i0.ɵɵelement(2, "i", 65);
97
+ i0.ɵɵelementStart(0, "div", 52)(1, "div", 54);
98
+ i0.ɵɵelement(2, "i", 55);
98
99
  i0.ɵɵelementStart(3, "div")(4, "strong");
99
100
  i0.ɵɵtext(5, "Revoke this API key");
100
101
  i0.ɵɵelementEnd();
101
102
  i0.ɵɵelementStart(6, "p");
102
103
  i0.ɵɵtext(7, "Once revoked, this key will immediately stop working. This action cannot be undone.");
103
104
  i0.ɵɵelementEnd()()();
104
- i0.ɵɵelementStart(8, "button", 66);
105
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_3_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.startRevoke()); });
106
- i0.ɵɵelement(9, "i", 67);
105
+ i0.ɵɵelementStart(8, "button", 56);
106
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_3_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.startRevoke()); });
107
+ i0.ɵɵelement(9, "i", 57);
107
108
  i0.ɵɵtext(10, " Revoke Key ");
108
109
  i0.ɵɵelementEnd()();
109
110
  } }
110
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_mj_loading_19_Template(rf, ctx) { if (rf & 1) {
111
- i0.ɵɵelement(0, "mj-loading", 58);
111
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Conditional_19_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelement(0, "mj-loading", 50);
112
113
  } if (rf & 2) {
113
114
  i0.ɵɵproperty("showText", false);
114
115
  } }
115
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_span_20_Template(rf, ctx) { if (rf & 1) {
116
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
116
117
  i0.ɵɵelementStart(0, "span");
117
- i0.ɵɵelement(1, "i", 67);
118
+ i0.ɵɵelement(1, "i", 57);
118
119
  i0.ɵɵtext(2, " Revoke Key ");
119
120
  i0.ɵɵelementEnd();
120
121
  } }
121
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_Template(rf, ctx) { if (rf & 1) {
122
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Template(rf, ctx) { if (rf & 1) {
122
123
  const _r9 = i0.ɵɵgetCurrentView();
123
- i0.ɵɵelementStart(0, "div", 68)(1, "div", 69);
124
- i0.ɵɵelement(2, "i", 70);
124
+ i0.ɵɵelementStart(0, "div", 53)(1, "div", 58);
125
+ i0.ɵɵelement(2, "i", 59);
125
126
  i0.ɵɵelementStart(3, "div")(4, "strong");
126
127
  i0.ɵɵtext(5, "Are you absolutely sure?");
127
128
  i0.ɵɵelementEnd();
128
129
  i0.ɵɵelementStart(6, "p");
129
130
  i0.ɵɵtext(7, "This will permanently revoke the API key. Any applications using this key will immediately lose access.");
130
131
  i0.ɵɵelementEnd()()();
131
- i0.ɵɵelementStart(8, "div", 71)(9, "label");
132
+ i0.ɵɵelementStart(8, "div", 60)(9, "label");
132
133
  i0.ɵɵtext(10, "Type ");
133
134
  i0.ɵɵelementStart(11, "code");
134
135
  i0.ɵɵtext(12, "REVOKE");
135
136
  i0.ɵɵelementEnd();
136
137
  i0.ɵɵtext(13, " to confirm:");
137
138
  i0.ɵɵelementEnd();
138
- i0.ɵɵelementStart(14, "input", 72);
139
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.RevokeConfirmText, $event) || (ctx_r1.RevokeConfirmText = $event); return i0.ɵɵresetView($event); });
139
+ i0.ɵɵelementStart(14, "input", 61);
140
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.RevokeConfirmText, $event) || (ctx_r1.RevokeConfirmText = $event); return i0.ɵɵresetView($event); });
140
141
  i0.ɵɵelementEnd()();
141
- i0.ɵɵelementStart(15, "div", 73)(16, "button", 25);
142
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.cancelRevoke()); });
142
+ i0.ɵɵelementStart(15, "div", 62)(16, "button", 23);
143
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.cancelRevoke()); });
143
144
  i0.ɵɵtext(17, "Cancel");
144
145
  i0.ɵɵelementEnd();
145
- i0.ɵɵelementStart(18, "button", 74);
146
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.confirmRevoke()); });
147
- i0.ɵɵtemplate(19, APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_mj_loading_19_Template, 1, 1, "mj-loading", 57)(20, APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_span_20_Template, 3, 0, "span", 9);
146
+ i0.ɵɵelementStart(18, "button", 63);
147
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.confirmRevoke()); });
148
+ i0.ɵɵconditionalCreate(19, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Conditional_19_Template, 1, 1, "mj-loading", 50);
149
+ i0.ɵɵconditionalCreate(20, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Conditional_20_Template, 3, 0, "span");
148
150
  i0.ɵɵelementEnd()()();
149
151
  } if (rf & 2) {
150
152
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -153,26 +155,27 @@ function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_Template(r
153
155
  i0.ɵɵadvance(4);
154
156
  i0.ɵɵproperty("disabled", ctx_r1.RevokeConfirmText !== "REVOKE" || ctx_r1.IsRevoking);
155
157
  i0.ɵɵadvance();
156
- i0.ɵɵproperty("ngIf", ctx_r1.IsRevoking);
158
+ i0.ɵɵconditional(ctx_r1.IsRevoking ? 19 : -1);
157
159
  i0.ɵɵadvance();
158
- i0.ɵɵproperty("ngIf", !ctx_r1.IsRevoking);
160
+ i0.ɵɵconditional(!ctx_r1.IsRevoking ? 20 : -1);
159
161
  } }
160
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_49_Template(rf, ctx) { if (rf & 1) {
161
- i0.ɵɵelementStart(0, "div", 60)(1, "h4");
162
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Template(rf, ctx) { if (rf & 1) {
163
+ i0.ɵɵelementStart(0, "div", 44)(1, "h4");
162
164
  i0.ɵɵtext(2, "Danger Zone");
163
165
  i0.ɵɵelementEnd();
164
- i0.ɵɵtemplate(3, APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_3_Template, 11, 0, "div", 61)(4, APIKeyEditPanelComponent_ng_container_12_div_15_div_49_div_4_Template, 21, 4, "div", 62);
166
+ i0.ɵɵconditionalCreate(3, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_3_Template, 11, 0, "div", 52);
167
+ i0.ɵɵconditionalCreate(4, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Conditional_4_Template, 21, 4, "div", 53);
165
168
  i0.ɵɵelementEnd();
166
169
  } if (rf & 2) {
167
170
  const ctx_r1 = i0.ɵɵnextContext(3);
168
171
  i0.ɵɵadvance(3);
169
- i0.ɵɵproperty("ngIf", !ctx_r1.ShowRevokeConfirm);
172
+ i0.ɵɵconditional(!ctx_r1.ShowRevokeConfirm ? 3 : -1);
170
173
  i0.ɵɵadvance();
171
- i0.ɵɵproperty("ngIf", ctx_r1.ShowRevokeConfirm);
174
+ i0.ɵɵconditional(ctx_r1.ShowRevokeConfirm ? 4 : -1);
172
175
  } }
173
- function APIKeyEditPanelComponent_ng_container_12_div_15_div_50_Template(rf, ctx) { if (rf & 1) {
174
- i0.ɵɵelementStart(0, "div", 75);
175
- i0.ɵɵelement(1, "i", 67);
176
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_50_Template(rf, ctx) { if (rf & 1) {
177
+ i0.ɵɵelementStart(0, "div", 45);
178
+ i0.ɵɵelement(1, "i", 57);
176
179
  i0.ɵɵelementStart(2, "div")(3, "strong");
177
180
  i0.ɵɵtext(4, "This API key has been revoked");
178
181
  i0.ɵɵelementEnd();
@@ -180,66 +183,67 @@ function APIKeyEditPanelComponent_ng_container_12_div_15_div_50_Template(rf, ctx
180
183
  i0.ɵɵtext(6, "It can no longer be used for authentication. Consider deleting this record if no longer needed.");
181
184
  i0.ɵɵelementEnd()()();
182
185
  } }
183
- function APIKeyEditPanelComponent_ng_container_12_div_15_Template(rf, ctx) { if (rf & 1) {
186
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Template(rf, ctx) { if (rf & 1) {
184
187
  const _r4 = i0.ɵɵgetCurrentView();
185
- i0.ɵɵelementStart(0, "div", 31)(1, "div", 32)(2, "div", 33)(3, "div", 34)(4, "span", 35);
188
+ i0.ɵɵelementStart(0, "div", 19)(1, "div", 26)(2, "div", 27)(3, "div", 28)(4, "span", 29);
186
189
  i0.ɵɵtext(5, "Key Hash");
187
190
  i0.ɵɵelementEnd();
188
- i0.ɵɵelementStart(6, "code", 36);
191
+ i0.ɵɵelementStart(6, "code", 30);
189
192
  i0.ɵɵtext(7);
190
193
  i0.ɵɵelementEnd()()();
191
- i0.ɵɵelementStart(8, "div", 37)(9, "div", 38)(10, "span", 35);
194
+ i0.ɵɵelementStart(8, "div", 31)(9, "div", 32)(10, "span", 29);
192
195
  i0.ɵɵtext(11, "Created");
193
196
  i0.ɵɵelementEnd();
194
- i0.ɵɵelementStart(12, "span", 39);
197
+ i0.ɵɵelementStart(12, "span", 33);
195
198
  i0.ɵɵtext(13);
196
199
  i0.ɵɵelementEnd()();
197
- i0.ɵɵelementStart(14, "div", 38)(15, "span", 35);
200
+ i0.ɵɵelementStart(14, "div", 32)(15, "span", 29);
198
201
  i0.ɵɵtext(16, "Created By");
199
202
  i0.ɵɵelementEnd();
200
- i0.ɵɵelementStart(17, "span", 39);
203
+ i0.ɵɵelementStart(17, "span", 33);
201
204
  i0.ɵɵtext(18);
202
205
  i0.ɵɵelementEnd()();
203
- i0.ɵɵelementStart(19, "div", 38)(20, "span", 35);
206
+ i0.ɵɵelementStart(19, "div", 32)(20, "span", 29);
204
207
  i0.ɵɵtext(21, "Owner");
205
208
  i0.ɵɵelementEnd();
206
- i0.ɵɵelementStart(22, "span", 39);
209
+ i0.ɵɵelementStart(22, "span", 33);
207
210
  i0.ɵɵtext(23);
208
211
  i0.ɵɵelementEnd()();
209
- i0.ɵɵelementStart(24, "div", 38)(25, "span", 35);
212
+ i0.ɵɵelementStart(24, "div", 32)(25, "span", 29);
210
213
  i0.ɵɵtext(26, "Last Used");
211
214
  i0.ɵɵelementEnd();
212
- i0.ɵɵelementStart(27, "span", 39);
215
+ i0.ɵɵelementStart(27, "span", 33);
213
216
  i0.ɵɵtext(28);
214
217
  i0.ɵɵelementEnd()()()();
215
- i0.ɵɵelementStart(29, "div", 40)(30, "div", 41)(31, "h4");
218
+ i0.ɵɵelementStart(29, "div", 34)(30, "div", 35)(31, "h4");
216
219
  i0.ɵɵtext(32, "Key Configuration");
217
220
  i0.ɵɵelementEnd();
218
- i0.ɵɵtemplate(33, APIKeyEditPanelComponent_ng_container_12_div_15_button_33_Template, 3, 5, "button", 42);
221
+ i0.ɵɵconditionalCreate(33, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_33_Template, 3, 5, "button", 36);
219
222
  i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(34, "div", 43)(35, "label");
223
+ i0.ɵɵelementStart(34, "div", 37)(35, "label");
221
224
  i0.ɵɵtext(36, "Label");
222
225
  i0.ɵɵelementEnd();
223
- i0.ɵɵelementStart(37, "input", 44);
224
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_ng_container_12_div_15_Template_input_ngModelChange_37_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditLabel, $event) || (ctx_r1.EditLabel = $event); return i0.ɵɵresetView($event); });
226
+ i0.ɵɵelementStart(37, "input", 38);
227
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Template_input_ngModelChange_37_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditLabel, $event) || (ctx_r1.EditLabel = $event); return i0.ɵɵresetView($event); });
225
228
  i0.ɵɵelementEnd()();
226
- i0.ɵɵelementStart(38, "div", 43)(39, "label");
229
+ i0.ɵɵelementStart(38, "div", 37)(39, "label");
227
230
  i0.ɵɵtext(40, "Description");
228
231
  i0.ɵɵelementEnd();
229
- i0.ɵɵelementStart(41, "textarea", 45);
230
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_ng_container_12_div_15_Template_textarea_ngModelChange_41_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDescription, $event) || (ctx_r1.EditDescription = $event); return i0.ɵɵresetView($event); });
232
+ i0.ɵɵelementStart(41, "textarea", 39);
233
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Template_textarea_ngModelChange_41_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDescription, $event) || (ctx_r1.EditDescription = $event); return i0.ɵɵresetView($event); });
231
234
  i0.ɵɵelementEnd()();
232
- i0.ɵɵelementStart(42, "div", 43)(43, "label");
235
+ i0.ɵɵelementStart(42, "div", 37)(43, "label");
233
236
  i0.ɵɵtext(44, "Expiration");
234
237
  i0.ɵɵelementEnd();
235
- i0.ɵɵelementStart(45, "div", 46)(46, "kendo-datepicker", 47);
236
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_ng_container_12_div_15_Template_kendo_datepicker_ngModelChange_46_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditExpiresAt, $event) || (ctx_r1.EditExpiresAt = $event); return i0.ɵɵresetView($event); });
238
+ i0.ɵɵelementStart(45, "div", 40)(46, "kendo-datepicker", 41);
239
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_Conditional_12_Conditional_14_Template_kendo_datepicker_ngModelChange_46_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditExpiresAt, $event) || (ctx_r1.EditExpiresAt = $event); return i0.ɵɵresetView($event); });
237
240
  i0.ɵɵelementEnd();
238
- i0.ɵɵtemplate(47, APIKeyEditPanelComponent_ng_container_12_div_15_button_47_Template, 3, 0, "button", 48);
241
+ i0.ɵɵconditionalCreate(47, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_47_Template, 3, 0, "button", 42);
239
242
  i0.ɵɵelementEnd()();
240
- i0.ɵɵtemplate(48, APIKeyEditPanelComponent_ng_container_12_div_15_div_48_Template, 4, 4, "div", 49);
243
+ i0.ɵɵconditionalCreate(48, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_48_Template, 4, 4, "div", 43);
241
244
  i0.ɵɵelementEnd();
242
- i0.ɵɵtemplate(49, APIKeyEditPanelComponent_ng_container_12_div_15_div_49_Template, 5, 2, "div", 50)(50, APIKeyEditPanelComponent_ng_container_12_div_15_div_50_Template, 7, 0, "div", 51);
245
+ i0.ɵɵconditionalCreate(49, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_49_Template, 5, 2, "div", 44);
246
+ i0.ɵɵconditionalCreate(50, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Conditional_50_Template, 7, 0, "div", 45);
243
247
  i0.ɵɵelementEnd();
244
248
  } if (rf & 2) {
245
249
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -256,7 +260,7 @@ function APIKeyEditPanelComponent_ng_container_12_div_15_Template(rf, ctx) { if
256
260
  i0.ɵɵadvance();
257
261
  i0.ɵɵtextInterpolate1(" ", ctx_r1.APIKey.LastUsedAt ? ctx_r1.formatDate(ctx_r1.APIKey.LastUsedAt) : "Never", " ");
258
262
  i0.ɵɵadvance(5);
259
- i0.ɵɵproperty("ngIf", ctx_r1.APIKey.Status === "Active");
263
+ i0.ɵɵconditional(ctx_r1.APIKey.Status === "Active" ? 33 : -1);
260
264
  i0.ɵɵadvance(4);
261
265
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditLabel);
262
266
  i0.ɵɵproperty("disabled", !ctx_r1.IsEditing);
@@ -267,42 +271,43 @@ function APIKeyEditPanelComponent_ng_container_12_div_15_Template(rf, ctx) { if
267
271
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditExpiresAt);
268
272
  i0.ɵɵproperty("disabled", !ctx_r1.IsEditing)("min", ctx_r1.getMinDate());
269
273
  i0.ɵɵadvance();
270
- i0.ɵɵproperty("ngIf", ctx_r1.IsEditing && ctx_r1.EditExpiresAt);
274
+ i0.ɵɵconditional(ctx_r1.IsEditing && ctx_r1.EditExpiresAt ? 47 : -1);
271
275
  i0.ɵɵadvance();
272
- i0.ɵɵproperty("ngIf", ctx_r1.IsEditing);
276
+ i0.ɵɵconditional(ctx_r1.IsEditing ? 48 : -1);
273
277
  i0.ɵɵadvance();
274
- i0.ɵɵproperty("ngIf", ctx_r1.APIKey.Status === "Active");
278
+ i0.ɵɵconditional(ctx_r1.APIKey.Status === "Active" ? 49 : -1);
275
279
  i0.ɵɵadvance();
276
- i0.ɵɵproperty("ngIf", ctx_r1.APIKey.Status === "Revoked");
280
+ i0.ɵɵconditional(ctx_r1.APIKey.Status === "Revoked" ? 50 : -1);
277
281
  } }
278
- function APIKeyEditPanelComponent_ng_container_12_div_16_button_5_mj_loading_1_Template(rf, ctx) { if (rf & 1) {
279
- i0.ɵɵelement(0, "mj-loading", 58);
282
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
283
+ i0.ɵɵelement(0, "mj-loading", 50);
280
284
  } if (rf & 2) {
281
285
  i0.ɵɵproperty("showText", false);
282
286
  } }
283
- function APIKeyEditPanelComponent_ng_container_12_div_16_button_5_span_2_Template(rf, ctx) { if (rf & 1) {
287
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
284
288
  i0.ɵɵelementStart(0, "span");
285
- i0.ɵɵelement(1, "i", 59);
289
+ i0.ɵɵelement(1, "i", 51);
286
290
  i0.ɵɵtext(2, " Save Changes ");
287
291
  i0.ɵɵelementEnd();
288
292
  } }
289
- function APIKeyEditPanelComponent_ng_container_12_div_16_button_5_Template(rf, ctx) { if (rf & 1) {
293
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
290
294
  const _r10 = i0.ɵɵgetCurrentView();
291
- i0.ɵɵelementStart(0, "button", 56);
292
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_16_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.saveScopeChanges()); });
293
- i0.ɵɵtemplate(1, APIKeyEditPanelComponent_ng_container_12_div_16_button_5_mj_loading_1_Template, 1, 1, "mj-loading", 57)(2, APIKeyEditPanelComponent_ng_container_12_div_16_button_5_span_2_Template, 3, 0, "span", 9);
295
+ i0.ɵɵelementStart(0, "button", 49);
296
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.saveScopeChanges()); });
297
+ i0.ɵɵconditionalCreate(1, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Conditional_1_Template, 1, 1, "mj-loading", 50);
298
+ i0.ɵɵconditionalCreate(2, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Conditional_2_Template, 3, 0, "span");
294
299
  i0.ɵɵelementEnd();
295
300
  } if (rf & 2) {
296
301
  const ctx_r1 = i0.ɵɵnextContext(3);
297
302
  i0.ɵɵproperty("themeColor", "primary")("disabled", ctx_r1.IsSaving);
298
303
  i0.ɵɵadvance();
299
- i0.ɵɵproperty("ngIf", ctx_r1.IsSaving);
304
+ i0.ɵɵconditional(ctx_r1.IsSaving ? 1 : -1);
300
305
  i0.ɵɵadvance();
301
- i0.ɵɵproperty("ngIf", !ctx_r1.IsSaving);
306
+ i0.ɵɵconditional(!ctx_r1.IsSaving ? 2 : -1);
302
307
  } }
303
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_6_Template(rf, ctx) { if (rf & 1) {
304
- i0.ɵɵelementStart(0, "div", 84);
305
- i0.ɵɵelement(1, "i", 65);
308
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
309
+ i0.ɵɵelementStart(0, "div", 68);
310
+ i0.ɵɵelement(1, "i", 55);
306
311
  i0.ɵɵelementStart(2, "div")(3, "strong");
307
312
  i0.ɵɵtext(4, "Warning: No permissions assigned");
308
313
  i0.ɵɵelementEnd();
@@ -310,15 +315,15 @@ function APIKeyEditPanelComponent_ng_container_12_div_16_div_6_Template(rf, ctx)
310
315
  i0.ɵɵtext(6, "This API key has no assigned scopes and cannot perform any operations. All API requests using this key will be rejected until scopes are assigned.");
311
316
  i0.ɵɵelementEnd()()();
312
317
  } }
313
- function APIKeyEditPanelComponent_ng_container_12_div_16_mj_loading_7_Template(rf, ctx) { if (rf & 1) {
314
- i0.ɵɵelement(0, "mj-loading", 85);
318
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_7_Template(rf, ctx) { if (rf & 1) {
319
+ i0.ɵɵelement(0, "mj-loading", 69);
315
320
  } }
316
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_label_9_Template(rf, ctx) { if (rf & 1) {
321
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
317
322
  const _r13 = i0.ɵɵgetCurrentView();
318
- i0.ɵɵelementStart(0, "label", 97);
319
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_label_9_Template_label_click_0_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.stopPropagation()); });
320
- i0.ɵɵelementStart(1, "input", 98);
321
- i0.ɵɵlistener("change", function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_label_9_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r13); const category_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleCategoryAll(category_r12)); });
323
+ i0.ɵɵelementStart(0, "label", 80);
324
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_9_Template_label_click_0_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.stopPropagation()); });
325
+ i0.ɵɵelementStart(1, "input", 81);
326
+ i0.ɵɵlistener("change", function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_9_Template_input_change_1_listener() { i0.ɵɵrestoreView(_r13); const category_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleCategoryAll(category_r12)); });
322
327
  i0.ɵɵelementEnd();
323
328
  i0.ɵɵelementStart(2, "span");
324
329
  i0.ɵɵtext(3, "All");
@@ -328,8 +333,8 @@ function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_label_9_Tem
328
333
  i0.ɵɵadvance();
329
334
  i0.ɵɵproperty("checked", category_r12.allSelected);
330
335
  } }
331
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
332
- i0.ɵɵelementStart(0, "span", 107);
336
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
337
+ i0.ɵɵelementStart(0, "span", 87);
333
338
  i0.ɵɵtext(1);
334
339
  i0.ɵɵelementEnd();
335
340
  } if (rf & 2) {
@@ -337,16 +342,16 @@ function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_
337
342
  i0.ɵɵadvance();
338
343
  i0.ɵɵtextInterpolate1(" ", item_r15.scope.Description, " ");
339
344
  } }
340
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_1_Template(rf, ctx) { if (rf & 1) {
345
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_For_2_Template(rf, ctx) { if (rf & 1) {
341
346
  const _r14 = i0.ɵɵgetCurrentView();
342
- i0.ɵɵelementStart(0, "div", 101)(1, "label", 102)(2, "input", 103);
343
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_1_Template_input_ngModelChange_2_listener($event) { const item_r15 = i0.ɵɵrestoreView(_r14).$implicit; i0.ɵɵtwoWayBindingSet(item_r15.selected, $event) || (item_r15.selected = $event); return i0.ɵɵresetView($event); });
344
- i0.ɵɵlistener("change", function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_1_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.onScopeChange()); });
347
+ i0.ɵɵelementStart(0, "div", 82)(1, "label", 83)(2, "input", 84);
348
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_For_2_Template_input_ngModelChange_2_listener($event) { const item_r15 = i0.ɵɵrestoreView(_r14).$implicit; i0.ɵɵtwoWayBindingSet(item_r15.selected, $event) || (item_r15.selected = $event); return i0.ɵɵresetView($event); });
349
+ i0.ɵɵlistener("change", function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_For_2_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.onScopeChange()); });
345
350
  i0.ɵɵelementEnd();
346
- i0.ɵɵelementStart(3, "div", 104)(4, "span", 105);
351
+ i0.ɵɵelementStart(3, "div", 85)(4, "span", 86);
347
352
  i0.ɵɵtext(5);
348
353
  i0.ɵɵelementEnd();
349
- i0.ɵɵtemplate(6, APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_1_span_6_Template, 2, 1, "span", 106);
354
+ i0.ɵɵconditionalCreate(6, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_For_2_Conditional_6_Template, 2, 1, "span", 87);
350
355
  i0.ɵɵelementEnd()()();
351
356
  } if (rf & 2) {
352
357
  const item_r15 = ctx.$implicit;
@@ -357,34 +362,34 @@ function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_
357
362
  i0.ɵɵadvance(3);
358
363
  i0.ɵɵtextInterpolate(item_r15.scope.Name);
359
364
  i0.ɵɵadvance();
360
- i0.ɵɵproperty("ngIf", item_r15.scope.Description);
365
+ i0.ɵɵconditional(item_r15.scope.Description ? 6 : -1);
361
366
  } }
362
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_Template(rf, ctx) { if (rf & 1) {
363
- i0.ɵɵelementStart(0, "div", 99);
364
- i0.ɵɵtemplate(1, APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_div_1_Template, 7, 4, "div", 100);
367
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
368
+ i0.ɵɵelementStart(0, "div", 79);
369
+ i0.ɵɵrepeaterCreate(1, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_For_2_Template, 7, 4, "div", 82, i0.ɵɵrepeaterTrackByIdentity);
365
370
  i0.ɵɵelementEnd();
366
371
  } if (rf & 2) {
367
372
  const category_r12 = i0.ɵɵnextContext().$implicit;
368
373
  i0.ɵɵadvance();
369
- i0.ɵɵproperty("ngForOf", category_r12.scopes);
374
+ i0.ɵɵrepeater(category_r12.scopes);
370
375
  } }
371
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_Template(rf, ctx) { if (rf & 1) {
376
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
372
377
  const _r11 = i0.ɵɵgetCurrentView();
373
- i0.ɵɵelementStart(0, "div", 88)(1, "div", 89);
374
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_Template_div_click_1_listener() { const category_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleCategory(category_r12)); });
375
- i0.ɵɵelementStart(2, "div", 90);
378
+ i0.ɵɵelementStart(0, "div", 71)(1, "div", 72);
379
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Template_div_click_1_listener() { const category_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleCategory(category_r12)); });
380
+ i0.ɵɵelementStart(2, "div", 73);
376
381
  i0.ɵɵelement(3, "i");
377
- i0.ɵɵelementStart(4, "span", 91);
382
+ i0.ɵɵelementStart(4, "span", 74);
378
383
  i0.ɵɵtext(5);
379
384
  i0.ɵɵelementEnd();
380
- i0.ɵɵelementStart(6, "span", 92);
385
+ i0.ɵɵelementStart(6, "span", 75);
381
386
  i0.ɵɵtext(7);
382
387
  i0.ɵɵelementEnd()();
383
- i0.ɵɵelementStart(8, "div", 93);
384
- i0.ɵɵtemplate(9, APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_label_9_Template, 4, 1, "label", 94);
385
- i0.ɵɵelement(10, "i", 95);
388
+ i0.ɵɵelementStart(8, "div", 76);
389
+ i0.ɵɵconditionalCreate(9, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_9_Template, 4, 1, "label", 77);
390
+ i0.ɵɵelement(10, "i", 78);
386
391
  i0.ɵɵelementEnd()();
387
- i0.ɵɵtemplate(11, APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_div_11_Template, 2, 1, "div", 96);
392
+ i0.ɵɵconditionalCreate(11, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Conditional_11_Template, 3, 0, "div", 79);
388
393
  i0.ɵɵelementEnd();
389
394
  } if (rf & 2) {
390
395
  const category_r12 = ctx.$implicit;
@@ -397,58 +402,60 @@ function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_Template(rf
397
402
  i0.ɵɵadvance(2);
398
403
  i0.ɵɵtextInterpolate2(" ", ctx_r1.getSelectedCount(category_r12), "/", category_r12.scopes.length, " ");
399
404
  i0.ɵɵadvance(2);
400
- i0.ɵɵproperty("ngIf", ctx_r1.APIKey.Status === "Active");
405
+ i0.ɵɵconditional(ctx_r1.APIKey.Status === "Active" ? 9 : -1);
401
406
  i0.ɵɵadvance();
402
407
  i0.ɵɵclassProp("fa-chevron-down", !category_r12.expanded)("fa-chevron-up", category_r12.expanded);
403
408
  i0.ɵɵadvance();
404
- i0.ɵɵproperty("ngIf", category_r12.expanded);
409
+ i0.ɵɵconditional(category_r12.expanded ? 11 : -1);
405
410
  } }
406
- function APIKeyEditPanelComponent_ng_container_12_div_16_div_8_Template(rf, ctx) { if (rf & 1) {
407
- i0.ɵɵelementStart(0, "div", 86);
408
- i0.ɵɵtemplate(1, APIKeyEditPanelComponent_ng_container_12_div_16_div_8_div_1_Template, 12, 13, "div", 87);
411
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_Template(rf, ctx) { if (rf & 1) {
412
+ i0.ɵɵelementStart(0, "div", 70);
413
+ i0.ɵɵrepeaterCreate(1, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_For_2_Template, 12, 13, "div", 71, i0.ɵɵrepeaterTrackByIdentity);
409
414
  i0.ɵɵelementEnd();
410
415
  } if (rf & 2) {
411
416
  const ctx_r1 = i0.ɵɵnextContext(3);
412
417
  i0.ɵɵadvance();
413
- i0.ɵɵproperty("ngForOf", ctx_r1.ScopeCategories);
418
+ i0.ɵɵrepeater(ctx_r1.ScopeCategories);
414
419
  } }
415
- function APIKeyEditPanelComponent_ng_container_12_div_16_Template(rf, ctx) { if (rf & 1) {
416
- i0.ɵɵelementStart(0, "div", 76)(1, "div", 77)(2, "div", 78)(3, "span", 79);
420
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_15_Template(rf, ctx) { if (rf & 1) {
421
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 64)(2, "div", 65)(3, "span", 66);
417
422
  i0.ɵɵtext(4);
418
423
  i0.ɵɵelementEnd()();
419
- i0.ɵɵtemplate(5, APIKeyEditPanelComponent_ng_container_12_div_16_button_5_Template, 3, 4, "button", 80);
424
+ i0.ɵɵconditionalCreate(5, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_5_Template, 3, 4, "button", 67);
420
425
  i0.ɵɵelementEnd();
421
- i0.ɵɵtemplate(6, APIKeyEditPanelComponent_ng_container_12_div_16_div_6_Template, 7, 0, "div", 81)(7, APIKeyEditPanelComponent_ng_container_12_div_16_mj_loading_7_Template, 1, 0, "mj-loading", 82)(8, APIKeyEditPanelComponent_ng_container_12_div_16_div_8_Template, 2, 1, "div", 83);
426
+ i0.ɵɵconditionalCreate(6, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_6_Template, 7, 0, "div", 68);
427
+ i0.ɵɵconditionalCreate(7, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_7_Template, 1, 0, "mj-loading", 69);
428
+ i0.ɵɵconditionalCreate(8, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Conditional_8_Template, 3, 0, "div", 70);
422
429
  i0.ɵɵelementEnd();
423
430
  } if (rf & 2) {
424
431
  const ctx_r1 = i0.ɵɵnextContext(2);
425
432
  i0.ɵɵadvance(4);
426
433
  i0.ɵɵtextInterpolate1("", ctx_r1.getAssignedScopeCount(), " permissions assigned");
427
434
  i0.ɵɵadvance();
428
- i0.ɵɵproperty("ngIf", ctx_r1.HasScopeChanges && ctx_r1.APIKey.Status === "Active");
435
+ i0.ɵɵconditional(ctx_r1.HasScopeChanges && ctx_r1.APIKey.Status === "Active" ? 5 : -1);
429
436
  i0.ɵɵadvance();
430
- i0.ɵɵproperty("ngIf", !ctx_r1.IsLoadingScopes && ctx_r1.getAssignedScopeCount() === 0 && ctx_r1.APIKey.Status === "Active");
437
+ i0.ɵɵconditional(!ctx_r1.IsLoadingScopes && ctx_r1.getAssignedScopeCount() === 0 && ctx_r1.APIKey.Status === "Active" ? 6 : -1);
431
438
  i0.ɵɵadvance();
432
- i0.ɵɵproperty("ngIf", ctx_r1.IsLoadingScopes);
439
+ i0.ɵɵconditional(ctx_r1.IsLoadingScopes ? 7 : -1);
433
440
  i0.ɵɵadvance();
434
- i0.ɵɵproperty("ngIf", !ctx_r1.IsLoadingScopes);
441
+ i0.ɵɵconditional(!ctx_r1.IsLoadingScopes ? 8 : -1);
435
442
  } }
436
- function APIKeyEditPanelComponent_ng_container_12_div_17_mj_loading_1_Template(rf, ctx) { if (rf & 1) {
437
- i0.ɵɵelement(0, "mj-loading", 111);
443
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
444
+ i0.ɵɵelement(0, "mj-loading", 88);
438
445
  } }
439
- function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_14_div_10_Template(rf, ctx) { if (rf & 1) {
440
- i0.ɵɵelementStart(0, "div", 127)(1, "span", 122);
446
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Conditional_14_For_11_Template(rf, ctx) { if (rf & 1) {
447
+ i0.ɵɵelementStart(0, "div", 102)(1, "span", 98);
441
448
  i0.ɵɵtext(2);
442
449
  i0.ɵɵelementEnd();
443
- i0.ɵɵelementStart(3, "span", 123)(4, "span", 128);
450
+ i0.ɵɵelementStart(3, "span", 99)(4, "span", 103);
444
451
  i0.ɵɵtext(5);
445
452
  i0.ɵɵelementEnd();
446
453
  i0.ɵɵtext(6);
447
454
  i0.ɵɵelementEnd();
448
- i0.ɵɵelementStart(7, "span", 129);
455
+ i0.ɵɵelementStart(7, "span", 104);
449
456
  i0.ɵɵtext(8);
450
457
  i0.ɵɵelementEnd();
451
- i0.ɵɵelementStart(9, "span", 125);
458
+ i0.ɵɵelementStart(9, "span", 101);
452
459
  i0.ɵɵtext(10);
453
460
  i0.ɵɵelementEnd()();
454
461
  } if (rf & 2) {
@@ -467,29 +474,29 @@ function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_14_div_10_Tem
467
474
  i0.ɵɵadvance(2);
468
475
  i0.ɵɵtextInterpolate1("", log_r16.responseTime, "ms");
469
476
  } }
470
- function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_14_Template(rf, ctx) { if (rf & 1) {
471
- i0.ɵɵelementStart(0, "div", 120)(1, "div", 121)(2, "span", 122);
477
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
478
+ i0.ɵɵelementStart(0, "div", 95)(1, "div", 97)(2, "span", 98);
472
479
  i0.ɵɵtext(3, "Time");
473
480
  i0.ɵɵelementEnd();
474
- i0.ɵɵelementStart(4, "span", 123);
481
+ i0.ɵɵelementStart(4, "span", 99);
475
482
  i0.ɵɵtext(5, "Endpoint");
476
483
  i0.ɵɵelementEnd();
477
- i0.ɵɵelementStart(6, "span", 124);
484
+ i0.ɵɵelementStart(6, "span", 100);
478
485
  i0.ɵɵtext(7, "Status");
479
486
  i0.ɵɵelementEnd();
480
- i0.ɵɵelementStart(8, "span", 125);
487
+ i0.ɵɵelementStart(8, "span", 101);
481
488
  i0.ɵɵtext(9, "Duration");
482
489
  i0.ɵɵelementEnd()();
483
- i0.ɵɵtemplate(10, APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_14_div_10_Template, 11, 6, "div", 126);
490
+ i0.ɵɵrepeaterCreate(10, APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Conditional_14_For_11_Template, 11, 6, "div", 102, i0.ɵɵrepeaterTrackByIdentity);
484
491
  i0.ɵɵelementEnd();
485
492
  } if (rf & 2) {
486
493
  const ctx_r1 = i0.ɵɵnextContext(4);
487
494
  i0.ɵɵadvance(10);
488
- i0.ɵɵproperty("ngForOf", ctx_r1.UsageLogs);
495
+ i0.ɵɵrepeater(ctx_r1.UsageLogs);
489
496
  } }
490
- function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_15_Template(rf, ctx) { if (rf & 1) {
491
- i0.ɵɵelementStart(0, "div", 130);
492
- i0.ɵɵelement(1, "i", 131);
497
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
498
+ i0.ɵɵelementStart(0, "div", 96);
499
+ i0.ɵɵelement(1, "i", 105);
493
500
  i0.ɵɵelementStart(2, "span");
494
501
  i0.ɵɵtext(3, "No usage logs yet");
495
502
  i0.ɵɵelementEnd();
@@ -497,24 +504,25 @@ function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_15_Template(r
497
504
  i0.ɵɵtext(5, "Usage will be recorded when this API key is used for authentication");
498
505
  i0.ɵɵelementEnd()();
499
506
  } }
500
- function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_Template(rf, ctx) { if (rf & 1) {
501
- i0.ɵɵelementStart(0, "div", 112)(1, "div", 113)(2, "div", 114);
502
- i0.ɵɵelement(3, "i", 19);
503
- i0.ɵɵelementStart(4, "div", 115);
507
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
508
+ i0.ɵɵelementStart(0, "div", 89)(1, "div", 90)(2, "div", 91);
509
+ i0.ɵɵelement(3, "i", 17);
510
+ i0.ɵɵelementStart(4, "div", 92);
504
511
  i0.ɵɵtext(5);
505
512
  i0.ɵɵelementEnd();
506
- i0.ɵɵelementStart(6, "div", 116);
513
+ i0.ɵɵelementStart(6, "div", 93);
507
514
  i0.ɵɵtext(7, "Total Requests");
508
515
  i0.ɵɵelementEnd()();
509
- i0.ɵɵelementStart(8, "div", 114);
510
- i0.ɵɵelement(9, "i", 117);
511
- i0.ɵɵelementStart(10, "div", 115);
516
+ i0.ɵɵelementStart(8, "div", 91);
517
+ i0.ɵɵelement(9, "i", 94);
518
+ i0.ɵɵelementStart(10, "div", 92);
512
519
  i0.ɵɵtext(11);
513
520
  i0.ɵɵelementEnd();
514
- i0.ɵɵelementStart(12, "div", 116);
521
+ i0.ɵɵelementStart(12, "div", 93);
515
522
  i0.ɵɵtext(13, "Last Used");
516
523
  i0.ɵɵelementEnd()()();
517
- i0.ɵɵtemplate(14, APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_14_Template, 11, 1, "div", 118)(15, APIKeyEditPanelComponent_ng_container_12_div_17_div_2_div_15_Template, 6, 0, "div", 119);
524
+ i0.ɵɵconditionalCreate(14, APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Conditional_14_Template, 12, 0, "div", 95);
525
+ i0.ɵɵconditionalCreate(15, APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Conditional_15_Template, 6, 0, "div", 96);
518
526
  i0.ɵɵelementEnd();
519
527
  } if (rf & 2) {
520
528
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -523,74 +531,71 @@ function APIKeyEditPanelComponent_ng_container_12_div_17_div_2_Template(rf, ctx)
523
531
  i0.ɵɵadvance(6);
524
532
  i0.ɵɵtextInterpolate1(" ", ctx_r1.UsageLogs.length > 0 ? ctx_r1.formatRelativeTime(ctx_r1.UsageLogs[0].timestamp) : "Never", " ");
525
533
  i0.ɵɵadvance(3);
526
- i0.ɵɵproperty("ngIf", ctx_r1.UsageLogs.length > 0);
534
+ i0.ɵɵconditional(ctx_r1.UsageLogs.length > 0 ? 14 : -1);
527
535
  i0.ɵɵadvance();
528
- i0.ɵɵproperty("ngIf", ctx_r1.UsageLogs.length === 0);
536
+ i0.ɵɵconditional(ctx_r1.UsageLogs.length === 0 ? 15 : -1);
529
537
  } }
530
- function APIKeyEditPanelComponent_ng_container_12_div_17_Template(rf, ctx) { if (rf & 1) {
531
- i0.ɵɵelementStart(0, "div", 108);
532
- i0.ɵɵtemplate(1, APIKeyEditPanelComponent_ng_container_12_div_17_mj_loading_1_Template, 1, 0, "mj-loading", 109)(2, APIKeyEditPanelComponent_ng_container_12_div_17_div_2_Template, 16, 4, "div", 110);
538
+ function APIKeyEditPanelComponent_Conditional_12_Conditional_16_Template(rf, ctx) { if (rf & 1) {
539
+ i0.ɵɵelementStart(0, "div", 21);
540
+ i0.ɵɵconditionalCreate(1, APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_1_Template, 1, 0, "mj-loading", 88);
541
+ i0.ɵɵconditionalCreate(2, APIKeyEditPanelComponent_Conditional_12_Conditional_16_Conditional_2_Template, 16, 4, "div", 89);
533
542
  i0.ɵɵelementEnd();
534
543
  } if (rf & 2) {
535
544
  const ctx_r1 = i0.ɵɵnextContext(2);
536
545
  i0.ɵɵadvance();
537
- i0.ɵɵproperty("ngIf", ctx_r1.IsLoadingLogs);
546
+ i0.ɵɵconditional(ctx_r1.IsLoadingLogs ? 1 : -1);
538
547
  i0.ɵɵadvance();
539
- i0.ɵɵproperty("ngIf", !ctx_r1.IsLoadingLogs);
548
+ i0.ɵɵconditional(!ctx_r1.IsLoadingLogs ? 2 : -1);
540
549
  } }
541
- function APIKeyEditPanelComponent_ng_container_12_Template(rf, ctx) { if (rf & 1) {
550
+ function APIKeyEditPanelComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
542
551
  const _r3 = i0.ɵɵgetCurrentView();
543
- i0.ɵɵelementContainerStart(0);
544
- i0.ɵɵtemplate(1, APIKeyEditPanelComponent_ng_container_12_div_1_Template, 3, 1, "div", 12)(2, APIKeyEditPanelComponent_ng_container_12_div_2_Template, 3, 1, "div", 13);
545
- i0.ɵɵelementStart(3, "div", 14)(4, "button", 15);
546
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ActiveTab = "details"); });
547
- i0.ɵɵelement(5, "i", 16);
548
- i0.ɵɵtext(6, " Details ");
552
+ i0.ɵɵconditionalCreate(0, APIKeyEditPanelComponent_Conditional_12_Conditional_0_Template, 3, 1, "div", 10);
553
+ i0.ɵɵconditionalCreate(1, APIKeyEditPanelComponent_Conditional_12_Conditional_1_Template, 3, 1, "div", 11);
554
+ i0.ɵɵelementStart(2, "div", 12)(3, "button", 13);
555
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ActiveTab = "details"); });
556
+ i0.ɵɵelement(4, "i", 14);
557
+ i0.ɵɵtext(5, " Details ");
549
558
  i0.ɵɵelementEnd();
550
- i0.ɵɵelementStart(7, "button", 15);
551
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ActiveTab = "scopes"); });
552
- i0.ɵɵelement(8, "i", 17);
553
- i0.ɵɵtext(9, " Permissions ");
554
- i0.ɵɵtemplate(10, APIKeyEditPanelComponent_ng_container_12_span_10_Template, 2, 0, "span", 18);
559
+ i0.ɵɵelementStart(6, "button", 13);
560
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ActiveTab = "scopes"); });
561
+ i0.ɵɵelement(7, "i", 15);
562
+ i0.ɵɵtext(8, " Permissions ");
563
+ i0.ɵɵconditionalCreate(9, APIKeyEditPanelComponent_Conditional_12_Conditional_9_Template, 2, 0, "span", 16);
555
564
  i0.ɵɵelementEnd();
556
- i0.ɵɵelementStart(11, "button", 15);
557
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ActiveTab = "usage"); });
558
- i0.ɵɵelement(12, "i", 19);
559
- i0.ɵɵtext(13, " Usage ");
565
+ i0.ɵɵelementStart(10, "button", 13);
566
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ActiveTab = "usage"); });
567
+ i0.ɵɵelement(11, "i", 17);
568
+ i0.ɵɵtext(12, " Usage ");
560
569
  i0.ɵɵelementEnd()();
561
- i0.ɵɵelementStart(14, "div", 20);
562
- i0.ɵɵtemplate(15, APIKeyEditPanelComponent_ng_container_12_div_15_Template, 51, 20, "div", 21)(16, APIKeyEditPanelComponent_ng_container_12_div_16_Template, 9, 5, "div", 22)(17, APIKeyEditPanelComponent_ng_container_12_div_17_Template, 3, 2, "div", 23);
570
+ i0.ɵɵelementStart(13, "div", 18);
571
+ i0.ɵɵconditionalCreate(14, APIKeyEditPanelComponent_Conditional_12_Conditional_14_Template, 51, 20, "div", 19);
572
+ i0.ɵɵconditionalCreate(15, APIKeyEditPanelComponent_Conditional_12_Conditional_15_Template, 9, 5, "div", 20);
573
+ i0.ɵɵconditionalCreate(16, APIKeyEditPanelComponent_Conditional_12_Conditional_16_Template, 3, 2, "div", 21);
563
574
  i0.ɵɵelementEnd();
564
- i0.ɵɵelementStart(18, "div", 24)(19, "button", 25);
565
- i0.ɵɵlistener("click", function APIKeyEditPanelComponent_ng_container_12_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
566
- i0.ɵɵtext(20, "Close");
575
+ i0.ɵɵelementStart(17, "div", 22)(18, "button", 23);
576
+ i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Conditional_12_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
577
+ i0.ɵɵtext(19, "Close");
567
578
  i0.ɵɵelementEnd()();
568
- i0.ɵɵelementContainerEnd();
569
579
  } if (rf & 2) {
570
580
  const ctx_r1 = i0.ɵɵnextContext();
581
+ i0.ɵɵconditional(ctx_r1.SuccessMessage ? 0 : -1);
571
582
  i0.ɵɵadvance();
572
- i0.ɵɵproperty("ngIf", ctx_r1.SuccessMessage);
573
- i0.ɵɵadvance();
574
- i0.ɵɵproperty("ngIf", ctx_r1.ErrorMessage);
583
+ i0.ɵɵconditional(ctx_r1.ErrorMessage ? 1 : -1);
575
584
  i0.ɵɵadvance(2);
576
585
  i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "details");
577
586
  i0.ɵɵadvance(3);
578
587
  i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "scopes");
579
588
  i0.ɵɵadvance(3);
580
- i0.ɵɵproperty("ngIf", ctx_r1.HasScopeChanges);
589
+ i0.ɵɵconditional(ctx_r1.HasScopeChanges ? 9 : -1);
581
590
  i0.ɵɵadvance();
582
591
  i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "usage");
583
592
  i0.ɵɵadvance(4);
584
- i0.ɵɵproperty("ngIf", ctx_r1.ActiveTab === "details");
593
+ i0.ɵɵconditional(ctx_r1.ActiveTab === "details" ? 14 : -1);
585
594
  i0.ɵɵadvance();
586
- i0.ɵɵproperty("ngIf", ctx_r1.ActiveTab === "scopes");
595
+ i0.ɵɵconditional(ctx_r1.ActiveTab === "scopes" ? 15 : -1);
587
596
  i0.ɵɵadvance();
588
- i0.ɵɵproperty("ngIf", ctx_r1.ActiveTab === "usage");
597
+ i0.ɵɵconditional(ctx_r1.ActiveTab === "usage" ? 16 : -1);
589
598
  } }
590
- /** Tree shaking prevention function */
591
- export function LoadAPIKeyEditPanel() {
592
- // This function prevents tree shaking
593
- }
594
599
  /**
595
600
  * Panel for viewing and editing existing API keys
596
601
  */
@@ -1020,9 +1025,9 @@ export class APIKeyEditPanelComponent {
1020
1025
  }
1021
1026
  static ɵfac = function APIKeyEditPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIKeyEditPanelComponent)(); };
1022
1027
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyEditPanelComponent, selectors: [["mj-api-key-edit-panel"]], hostBindings: function APIKeyEditPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
1023
- i0.ɵɵlistener("keydown.escape", function APIKeyEditPanelComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, false, i0.ɵɵresolveDocument);
1024
- } }, inputs: { Visible: "Visible", KeyId: "KeyId" }, outputs: { VisibleChange: "VisibleChange", Updated: "Updated", Revoked: "Revoked", Closed: "Closed" }, features: [i0.ɵɵNgOnChangesFeature], decls: 13, vars: 10, consts: [["class", "slideout-backdrop", 3, "click", 4, "ngIf"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-key"], [1, "key-status"], ["title", "Close (Esc)", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading key details...", 4, "ngIf"], [4, "ngIf"], [1, "slideout-backdrop", 3, "click"], ["text", "Loading key details..."], ["class", "message success", 4, "ngIf"], ["class", "message error", 4, "ngIf"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], ["class", "tab-badge unsaved", 4, "ngIf"], [1, "fa-solid", "fa-chart-line"], [1, "slideout-content"], ["class", "tab-panel", 4, "ngIf"], ["class", "tab-panel scopes-panel", 4, "ngIf"], ["class", "tab-panel usage-panel", 4, "ngIf"], [1, "slideout-footer"], ["kendoButton", "", 3, "click"], [1, "message", "success"], [1, "fa-solid", "fa-check-circle"], [1, "message", "error"], [1, "fa-solid", "fa-circle-exclamation"], [1, "tab-badge", "unsaved"], [1, "tab-panel"], [1, "key-info-card"], [1, "info-header"], [1, "info-row"], [1, "info-label"], [1, "hash-value"], [1, "info-grid"], [1, "info-item"], [1, "info-value"], [1, "edit-section"], [1, "section-header"], ["class", "edit-toggle", 3, "click", 4, "ngIf"], [1, "form-field"], ["kendoTextBox", "", 1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], ["kendoTextArea", "", 1, "form-textarea", 3, "ngModelChange", "ngModel", "disabled", "rows"], [1, "expiration-field"], ["format", "MMM d, yyyy", "placeholder", "Never expires", 3, "ngModelChange", "ngModel", "disabled", "min"], ["class", "clear-btn", 3, "click", 4, "ngIf"], ["class", "edit-actions", 4, "ngIf"], ["class", "danger-zone", 4, "ngIf"], ["class", "revoked-notice", 4, "ngIf"], [1, "edit-toggle", 3, "click"], [1, "fa-solid"], [1, "clear-btn", 3, "click"], [1, "edit-actions"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], ["size", "small", 3, "showText", 4, "ngIf"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-save"], [1, "danger-zone"], ["class", "revoke-section", 4, "ngIf"], ["class", "revoke-confirm", 4, "ngIf"], [1, "revoke-section"], [1, "revoke-info"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "revoke-btn", 3, "click"], [1, "fa-solid", "fa-ban"], [1, "revoke-confirm"], [1, "confirm-warning"], [1, "fa-solid", "fa-skull-crossbones"], [1, "confirm-input"], ["kendoTextBox", "", "placeholder", "REVOKE", 3, "ngModelChange", "ngModel"], [1, "confirm-actions"], [1, "confirm-revoke-btn", 3, "click", "disabled"], [1, "revoked-notice"], [1, "tab-panel", "scopes-panel"], [1, "scopes-header"], [1, "scopes-info"], [1, "scope-count"], ["kendoButton", "", 3, "themeColor", "disabled", "click", 4, "ngIf"], ["class", "no-scopes-warning", 4, "ngIf"], ["text", "Loading permissions...", 4, "ngIf"], ["class", "scope-categories", 4, "ngIf"], [1, "no-scopes-warning"], ["text", "Loading permissions..."], [1, "scope-categories"], ["class", "scope-category", 4, "ngFor", "ngForOf"], [1, "scope-category"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count"], [1, "category-right"], ["class", "category-all-toggle", 3, "click", 4, "ngIf"], [1, "fa-solid", "expand-icon"], ["class", "category-scopes", 4, "ngIf"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", "kendoCheckBox", "", 3, "change", "checked"], [1, "category-scopes"], ["class", "scope-item", 4, "ngFor", "ngForOf"], [1, "scope-item"], [1, "scope-label"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "change", "ngModel", "disabled"], [1, "scope-info"], [1, "scope-name"], ["class", "scope-desc", 4, "ngIf"], [1, "scope-desc"], [1, "tab-panel", "usage-panel"], ["text", "Loading usage logs...", 4, "ngIf"], ["class", "usage-content", 4, "ngIf"], ["text", "Loading usage logs..."], [1, "usage-content"], [1, "usage-stats"], [1, "stat-card"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-clock"], ["class", "usage-logs", 4, "ngIf"], ["class", "empty-state", 4, "ngIf"], [1, "usage-logs"], [1, "log-header"], [1, "col-time"], [1, "col-endpoint"], [1, "col-status"], [1, "col-duration"], ["class", "log-item", 4, "ngFor", "ngForOf"], [1, "log-item"], [1, "method-badge"], [1, "col-status", 3, "ngClass"], [1, "empty-state"], [1, "fa-solid", "fa-chart-area"]], template: function APIKeyEditPanelComponent_Template(rf, ctx) { if (rf & 1) {
1025
- i0.ɵɵtemplate(0, APIKeyEditPanelComponent_div_0_Template, 1, 0, "div", 0);
1028
+ i0.ɵɵlistener("keydown.escape", function APIKeyEditPanelComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, i0.ɵɵresolveDocument);
1029
+ } }, inputs: { Visible: "Visible", KeyId: "KeyId" }, outputs: { VisibleChange: "VisibleChange", Updated: "Updated", Revoked: "Revoked", Closed: "Closed" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 13, vars: 10, consts: [[1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-key"], [1, "key-status"], ["title", "Close (Esc)", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading key details..."], [1, "slideout-backdrop", 3, "click"], [1, "message", "success"], [1, "message", "error"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge", "unsaved"], [1, "fa-solid", "fa-chart-line"], [1, "slideout-content"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "tab-panel", "usage-panel"], [1, "slideout-footer"], ["kendoButton", "", 3, "click"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-circle-exclamation"], [1, "key-info-card"], [1, "info-header"], [1, "info-row"], [1, "info-label"], [1, "hash-value"], [1, "info-grid"], [1, "info-item"], [1, "info-value"], [1, "edit-section"], [1, "section-header"], [1, "edit-toggle"], [1, "form-field"], ["kendoTextBox", "", 1, "form-input", 3, "ngModelChange", "ngModel", "disabled"], ["kendoTextArea", "", 1, "form-textarea", 3, "ngModelChange", "ngModel", "disabled", "rows"], [1, "expiration-field"], ["format", "MMM d, yyyy", "placeholder", "Never expires", 3, "ngModelChange", "ngModel", "disabled", "min"], [1, "clear-btn"], [1, "edit-actions"], [1, "danger-zone"], [1, "revoked-notice"], [1, "edit-toggle", 3, "click"], [1, "fa-solid"], [1, "clear-btn", 3, "click"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-save"], [1, "revoke-section"], [1, "revoke-confirm"], [1, "revoke-info"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "revoke-btn", 3, "click"], [1, "fa-solid", "fa-ban"], [1, "confirm-warning"], [1, "fa-solid", "fa-skull-crossbones"], [1, "confirm-input"], ["kendoTextBox", "", "placeholder", "REVOKE", 3, "ngModelChange", "ngModel"], [1, "confirm-actions"], [1, "confirm-revoke-btn", 3, "click", "disabled"], [1, "scopes-header"], [1, "scopes-info"], [1, "scope-count"], ["kendoButton", "", 3, "themeColor", "disabled"], [1, "no-scopes-warning"], ["text", "Loading permissions..."], [1, "scope-categories"], [1, "scope-category"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count"], [1, "category-right"], [1, "category-all-toggle"], [1, "fa-solid", "expand-icon"], [1, "category-scopes"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", "kendoCheckBox", "", 3, "change", "checked"], [1, "scope-item"], [1, "scope-label"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "change", "ngModel", "disabled"], [1, "scope-info"], [1, "scope-name"], [1, "scope-desc"], ["text", "Loading usage logs..."], [1, "usage-content"], [1, "usage-stats"], [1, "stat-card"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-clock"], [1, "usage-logs"], [1, "empty-state"], [1, "log-header"], [1, "col-time"], [1, "col-endpoint"], [1, "col-status"], [1, "col-duration"], [1, "log-item"], [1, "method-badge"], [1, "col-status", 3, "ngClass"], [1, "fa-solid", "fa-chart-area"]], template: function APIKeyEditPanelComponent_Template(rf, ctx) { if (rf & 1) {
1030
+ i0.ɵɵconditionalCreate(0, APIKeyEditPanelComponent_Conditional_0_Template, 1, 0, "div", 0);
1026
1031
  i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
1027
1032
  i0.ɵɵelement(4, "i", 4);
1028
1033
  i0.ɵɵelementStart(5, "span");
@@ -1035,10 +1040,11 @@ export class APIKeyEditPanelComponent {
1035
1040
  i0.ɵɵlistener("click", function APIKeyEditPanelComponent_Template_button_click_9_listener() { return ctx.close(); });
1036
1041
  i0.ɵɵelement(10, "i", 7);
1037
1042
  i0.ɵɵelementEnd()();
1038
- i0.ɵɵtemplate(11, APIKeyEditPanelComponent_mj_loading_11_Template, 1, 0, "mj-loading", 8)(12, APIKeyEditPanelComponent_ng_container_12_Template, 21, 12, "ng-container", 9);
1043
+ i0.ɵɵconditionalCreate(11, APIKeyEditPanelComponent_Conditional_11_Template, 1, 0, "mj-loading", 8);
1044
+ i0.ɵɵconditionalCreate(12, APIKeyEditPanelComponent_Conditional_12_Template, 20, 12);
1039
1045
  i0.ɵɵelementEnd();
1040
1046
  } if (rf & 2) {
1041
- i0.ɵɵproperty("ngIf", ctx.Visible);
1047
+ i0.ɵɵconditional(ctx.Visible ? 0 : -1);
1042
1048
  i0.ɵɵadvance();
1043
1049
  i0.ɵɵclassProp("open", ctx.Visible);
1044
1050
  i0.ɵɵadvance(6);
@@ -1046,14 +1052,14 @@ export class APIKeyEditPanelComponent {
1046
1052
  i0.ɵɵadvance();
1047
1053
  i0.ɵɵtextInterpolate1(" ", ctx.APIKey == null ? null : ctx.APIKey.Status, " ");
1048
1054
  i0.ɵɵadvance(3);
1049
- i0.ɵɵproperty("ngIf", ctx.IsLoading);
1055
+ i0.ɵɵconditional(ctx.IsLoading ? 11 : -1);
1050
1056
  i0.ɵɵadvance();
1051
- i0.ɵɵproperty("ngIf", !ctx.IsLoading && ctx.APIKey);
1052
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.TextAreaDirective, i3.TextBoxDirective, i3.CheckBoxDirective, i4.DatePickerComponent, i5.ButtonComponent, i6.LoadingComponent], styles: ["\n\n\n\n\n\n\n.slideout-backdrop[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 100;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.slideout-panel[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n right: 0;\n width: 520px;\n height: 100%;\n max-height: 100%;\n background: var(--card-background, #ffffff);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 101;\n display: flex;\n flex-direction: column;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n transform: translateX(100%);\n overflow: hidden;\n}\n\n.slideout-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n\n\n.slideout-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n flex-shrink: 0;\n}\n\n.slideout-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n font-size: 17px;\n color: #78350f;\n flex: 1;\n min-width: 0;\n}\n\n.slideout-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f59e0b;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.key-status[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.key-status.active[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.2);\n color: #059669;\n}\n\n.key-status.revoked[_ngcontent-%COMP%] {\n background: rgba(220, 38, 38, 0.2);\n color: #dc2626;\n}\n\n.slideout-close[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.5);\n border: none;\n border-radius: 8px;\n color: #92400e;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.8);\n color: #78350f;\n}\n\n\n\n.slideout-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active[_ngcontent-%COMP%] {\n background: #f59e0b;\n color: white;\n}\n\n.slideout-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 9px;\n font-size: 10px;\n font-weight: 600;\n}\n\n.tab-badge.unsaved[_ngcontent-%COMP%] {\n background: #ef4444;\n color: white;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:not(.active) .tab-badge[_ngcontent-%COMP%] {\n background: #e5e7eb;\n color: #374151;\n}\n\n\n\n.slideout-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n}\n\n.tab-panel[_ngcontent-%COMP%] {\n padding: 20px 24px;\n}\n\n\n\n.slideout-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button {\n min-width: 80px;\n padding: 8px 16px;\n font-weight: 500;\n border-radius: 6px;\n}\n\n\n\n.message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n margin: 12px 16px;\n border-radius: 8px;\n font-size: 14px;\n}\n\n.message.success[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.message.error[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n\n\n\n\n\n.key-info-card[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 16px;\n}\n\n.info-header[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.info-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #92400e;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.hash-value[_ngcontent-%COMP%] {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n color: #78350f;\n word-break: break-all;\n background: rgba(255, 255, 255, 0.5);\n padding: 8px 12px;\n border-radius: 6px;\n}\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 10px 16px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #78350f;\n}\n\n.info-value.never-used[_ngcontent-%COMP%] {\n color: #6b7280;\n font-style: italic;\n}\n\n\n\n.edit-section[_ngcontent-%COMP%] {\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 14px;\n}\n\n.section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.edit-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.edit-toggle[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.form-field[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.form-input[_ngcontent-%COMP%], \n.form-textarea[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.expiration-field[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.clear-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px dashed #d1d5db;\n border-radius: 6px;\n font-size: 13px;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-btn[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.edit-actions[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding-top: 14px;\n border-top: 1px solid #e5e7eb;\n}\n\n\n\n.danger-zone[_ngcontent-%COMP%] {\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.danger-zone[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 12px;\n font-weight: 600;\n color: #dc2626;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.revoke-section[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.revoke-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex: 1;\n}\n\n.revoke-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n}\n\n.revoke-info[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #991b1b;\n margin-bottom: 4px;\n}\n\n.revoke-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.revoke-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: white;\n border: 1px solid #dc2626;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #dc2626;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.revoke-btn[_ngcontent-%COMP%]:hover {\n background: #dc2626;\n color: white;\n}\n\n\n\n.revoke-confirm[_ngcontent-%COMP%] {\n background: #fef2f2;\n border-radius: 8px;\n}\n\n.confirm-warning[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.confirm-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #dc2626;\n}\n\n.confirm-warning[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #991b1b;\n font-size: 16px;\n margin-bottom: 4px;\n}\n\n.confirm-warning[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.confirm-input[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.confirm-input[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 14px;\n font-weight: 500;\n color: #7f1d1d;\n margin-bottom: 8px;\n}\n\n.confirm-input[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #fee2e2;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.confirm-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.confirm-revoke-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #dc2626;\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.confirm-revoke-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #b91c1c;\n}\n\n.confirm-revoke-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.revoked-notice[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 20px;\n background: #f3f4f6;\n border-radius: 12px;\n}\n\n.revoked-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #6b7280;\n}\n\n.revoked-notice[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.revoked-notice[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n\n\n.scopes-tab[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.scopes-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.scope-count[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n}\n\n\n\n.scope-categories[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-category[_ngcontent-%COMP%] {\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.category-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.category-header[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.category-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.category-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n}\n\n.category-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n}\n\n.category-count[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.category-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.category-all-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.category-all-toggle[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.category-all-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.category-scopes[_ngcontent-%COMP%] {\n padding: 8px 16px 16px;\n border-top: 1px solid #e5e7eb;\n background: white;\n}\n\n.scope-item[_ngcontent-%COMP%] {\n padding: 10px 0;\n border-bottom: 1px solid #f3f4f6;\n}\n\n.scope-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.scope-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.scope-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.scope-name[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n font-size: 13px;\n color: #374151;\n font-family: monospace;\n}\n\n.scope-desc[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 2px;\n}\n\n\n\n.usage-tab[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.usage-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 12px;\n text-align: center;\n}\n\n.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #f59e0b;\n margin-bottom: 12px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: #78350f;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #92400e;\n margin-top: 4px;\n}\n\n\n\n.usage-logs[_ngcontent-%COMP%] {\n background: #f9fafb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.log-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n background: #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.log-item[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n border-bottom: 1px solid #e5e7eb;\n font-size: 13px;\n align-items: center;\n}\n\n.log-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.col-time[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.col-endpoint[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: monospace;\n color: #374151;\n}\n\n.method-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n background: #dbeafe;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n color: #1d4ed8;\n}\n\n.col-status[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.col-status.status-success[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.col-status.status-warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.col-status.status-error[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.col-duration[_ngcontent-%COMP%] {\n color: #6b7280;\n text-align: right;\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: 48px 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.5;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: #374151;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0 0 0;\n font-size: 13px;\n}\n\n\n\n\n\n\n[_nghost-%COMP%] .form-input .k-input, \n[_nghost-%COMP%] .form-textarea .k-input-inner, \n[_nghost-%COMP%] .k-datepicker .k-input {\n padding: 10px 14px;\n border-radius: 8px;\n font-size: 14px;\n border-color: #e5e7eb;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .form-input:focus-within, \n[_nghost-%COMP%] .form-textarea:focus-within, \n[_nghost-%COMP%] .k-datepicker:focus-within {\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n\n\n[_nghost-%COMP%] .edit-actions .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .edit-actions .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n[_nghost-%COMP%] .edit-actions .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n[_nghost-%COMP%] .scopes-header .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .scopes-header .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n[_nghost-%COMP%] .scopes-header .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.no-scopes-warning[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);\n border: 1px solid #fecaca;\n border-radius: 10px;\n margin-bottom: 16px;\n font-size: 13px;\n color: #991b1b;\n}\n\n.no-scopes-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.no-scopes-warning[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #991b1b;\n font-size: 14px;\n margin-bottom: 4px;\n}\n\n.no-scopes-warning[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n line-height: 1.5;\n}"] });
1057
+ i0.ɵɵconditional(!ctx.IsLoading && ctx.APIKey ? 12 : -1);
1058
+ } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.TextBoxDirective, i3.TextAreaDirective, i3.CheckBoxDirective, i4.DatePickerComponent, i5.ButtonComponent, i6.LoadingComponent], styles: ["\n\n\n\n\n\n\n.slideout-backdrop[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 100;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.slideout-panel[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n right: 0;\n width: 520px;\n height: 100%;\n max-height: 100%;\n background: var(--card-background, #ffffff);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 101;\n display: flex;\n flex-direction: column;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n transform: translateX(100%);\n overflow: hidden;\n}\n\n.slideout-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n\n\n.slideout-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n flex-shrink: 0;\n}\n\n.slideout-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n font-size: 17px;\n color: #78350f;\n flex: 1;\n min-width: 0;\n}\n\n.slideout-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f59e0b;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.key-status[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.key-status.active[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.2);\n color: #059669;\n}\n\n.key-status.revoked[_ngcontent-%COMP%] {\n background: rgba(220, 38, 38, 0.2);\n color: #dc2626;\n}\n\n.slideout-close[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.5);\n border: none;\n border-radius: 8px;\n color: #92400e;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close[_ngcontent-%COMP%]:hover {\n background: rgba(255, 255, 255, 0.8);\n color: #78350f;\n}\n\n\n\n.slideout-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active[_ngcontent-%COMP%] {\n background: #f59e0b;\n color: white;\n}\n\n.slideout-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 9px;\n font-size: 10px;\n font-weight: 600;\n}\n\n.tab-badge.unsaved[_ngcontent-%COMP%] {\n background: #ef4444;\n color: white;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:not(.active) .tab-badge[_ngcontent-%COMP%] {\n background: #e5e7eb;\n color: #374151;\n}\n\n\n\n.slideout-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n}\n\n.tab-panel[_ngcontent-%COMP%] {\n padding: 20px 24px;\n}\n\n\n\n.slideout-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button {\n min-width: 80px;\n padding: 8px 16px;\n font-weight: 500;\n border-radius: 6px;\n}\n\n\n\n.message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n margin: 12px 16px;\n border-radius: 8px;\n font-size: 14px;\n}\n\n.message.success[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.message.error[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n\n\n\n\n\n.key-info-card[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 16px;\n}\n\n.info-header[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.info-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #92400e;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.hash-value[_ngcontent-%COMP%] {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n color: #78350f;\n word-break: break-all;\n background: rgba(255, 255, 255, 0.5);\n padding: 8px 12px;\n border-radius: 6px;\n}\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 10px 16px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #78350f;\n}\n\n.info-value.never-used[_ngcontent-%COMP%] {\n color: #6b7280;\n font-style: italic;\n}\n\n\n\n.edit-section[_ngcontent-%COMP%] {\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 14px;\n}\n\n.section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.edit-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.edit-toggle[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.form-field[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.form-input[_ngcontent-%COMP%], \n.form-textarea[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.expiration-field[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.clear-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px dashed #d1d5db;\n border-radius: 6px;\n font-size: 13px;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-btn[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.edit-actions[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding-top: 14px;\n border-top: 1px solid #e5e7eb;\n}\n\n\n\n.danger-zone[_ngcontent-%COMP%] {\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.danger-zone[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 12px;\n font-weight: 600;\n color: #dc2626;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.revoke-section[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.revoke-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex: 1;\n}\n\n.revoke-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n}\n\n.revoke-info[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #991b1b;\n margin-bottom: 4px;\n}\n\n.revoke-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.revoke-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: white;\n border: 1px solid #dc2626;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #dc2626;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.revoke-btn[_ngcontent-%COMP%]:hover {\n background: #dc2626;\n color: white;\n}\n\n\n\n.revoke-confirm[_ngcontent-%COMP%] {\n background: #fef2f2;\n border-radius: 8px;\n}\n\n.confirm-warning[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.confirm-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #dc2626;\n}\n\n.confirm-warning[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #991b1b;\n font-size: 16px;\n margin-bottom: 4px;\n}\n\n.confirm-warning[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.confirm-input[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.confirm-input[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 14px;\n font-weight: 500;\n color: #7f1d1d;\n margin-bottom: 8px;\n}\n\n.confirm-input[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #fee2e2;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.confirm-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.confirm-revoke-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #dc2626;\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.confirm-revoke-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #b91c1c;\n}\n\n.confirm-revoke-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.revoked-notice[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 20px;\n background: #f3f4f6;\n border-radius: 12px;\n}\n\n.revoked-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #6b7280;\n}\n\n.revoked-notice[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.revoked-notice[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n\n\n.scopes-tab[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.scopes-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.scope-count[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n}\n\n\n\n.scope-categories[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-category[_ngcontent-%COMP%] {\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.category-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.category-header[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.category-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.category-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n}\n\n.category-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n}\n\n.category-count[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.category-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.category-all-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.category-all-toggle[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.category-all-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.category-scopes[_ngcontent-%COMP%] {\n padding: 8px 16px 16px;\n border-top: 1px solid #e5e7eb;\n background: white;\n}\n\n.scope-item[_ngcontent-%COMP%] {\n padding: 10px 0;\n border-bottom: 1px solid #f3f4f6;\n}\n\n.scope-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.scope-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.scope-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.scope-name[_ngcontent-%COMP%] {\n display: block;\n font-weight: 500;\n font-size: 13px;\n color: #374151;\n font-family: monospace;\n}\n\n.scope-desc[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 2px;\n}\n\n\n\n.usage-tab[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.usage-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 12px;\n text-align: center;\n}\n\n.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #f59e0b;\n margin-bottom: 12px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: #78350f;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #92400e;\n margin-top: 4px;\n}\n\n\n\n.usage-logs[_ngcontent-%COMP%] {\n background: #f9fafb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.log-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n background: #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.log-item[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n border-bottom: 1px solid #e5e7eb;\n font-size: 13px;\n align-items: center;\n}\n\n.log-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.col-time[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n\n.col-endpoint[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: monospace;\n color: #374151;\n}\n\n.method-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n background: #dbeafe;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n color: #1d4ed8;\n}\n\n.col-status[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.col-status.status-success[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.col-status.status-warning[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n.col-status.status-error[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.col-duration[_ngcontent-%COMP%] {\n color: #6b7280;\n text-align: right;\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: 48px 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.5;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: #374151;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0 0 0;\n font-size: 13px;\n}\n\n\n\n\n\n\n[_nghost-%COMP%] .form-input .k-input, \n[_nghost-%COMP%] .form-textarea .k-input-inner, \n[_nghost-%COMP%] .k-datepicker .k-input {\n padding: 10px 14px;\n border-radius: 8px;\n font-size: 14px;\n border-color: #e5e7eb;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .form-input:focus-within, \n[_nghost-%COMP%] .form-textarea:focus-within, \n[_nghost-%COMP%] .k-datepicker:focus-within {\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n\n\n[_nghost-%COMP%] .edit-actions .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .edit-actions .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n[_nghost-%COMP%] .edit-actions .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n[_nghost-%COMP%] .scopes-header .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .scopes-header .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n[_nghost-%COMP%] .scopes-header .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n\n\n.no-scopes-warning[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);\n border: 1px solid #fecaca;\n border-radius: 10px;\n margin-bottom: 16px;\n font-size: 13px;\n color: #991b1b;\n}\n\n.no-scopes-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.no-scopes-warning[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: #991b1b;\n font-size: 14px;\n margin-bottom: 4px;\n}\n\n.no-scopes-warning[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n line-height: 1.5;\n}"] });
1053
1059
  }
1054
1060
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(APIKeyEditPanelComponent, [{
1055
1061
  type: Component,
1056
- args: [{ selector: 'mj-api-key-edit-panel', template: "<!-- Slide-out Backdrop -->\n<div class=\"slideout-backdrop\" *ngIf=\"Visible\" (click)=\"close()\"></div>\n\n<!-- Slide-out Panel -->\n<div class=\"slideout-panel\" [class.open]=\"Visible\">\n <!-- Header -->\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-key\"></i>\n <span>API Key Details</span>\n <span class=\"key-status\" [class.active]=\"APIKey?.Status === 'Active'\"\n [class.revoked]=\"APIKey?.Status === 'Revoked'\">\n {{APIKey?.Status}}\n </span>\n </div>\n <button class=\"slideout-close\" (click)=\"close()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <mj-loading *ngIf=\"IsLoading\" text=\"Loading key details...\"></mj-loading>\n\n <ng-container *ngIf=\"!IsLoading && APIKey\">\n <!-- Success/Error Messages -->\n <div class=\"message success\" *ngIf=\"SuccessMessage\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{SuccessMessage}}\n </div>\n <div class=\"message error\" *ngIf=\"ErrorMessage\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ErrorMessage}}\n </div>\n\n <!-- Tabs -->\n <div class=\"slideout-tabs\">\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'details'\"\n (click)=\"ActiveTab = 'details'\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Details\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'scopes'\"\n (click)=\"ActiveTab = 'scopes'\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n Permissions\n <span class=\"tab-badge unsaved\" *ngIf=\"HasScopeChanges\">!</span>\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'usage'\"\n (click)=\"ActiveTab = 'usage'\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Usage\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <!-- Details Tab -->\n <div class=\"tab-panel\" *ngIf=\"ActiveTab === 'details'\">\n <div class=\"key-info-card\">\n <div class=\"info-header\">\n <div class=\"info-row\">\n <span class=\"info-label\">Key Hash</span>\n <code class=\"hash-value\">{{APIKey.Hash}}</code>\n </div>\n </div>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Created</span>\n <span class=\"info-value\">{{formatDate(APIKey.__mj_CreatedAt)}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Created By</span>\n <span class=\"info-value\">{{APIKey.CreatedByUser}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Owner</span>\n <span class=\"info-value\">{{APIKey.User}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Last Used</span>\n <span class=\"info-value\" [class.never-used]=\"!APIKey.LastUsedAt\">\n {{APIKey.LastUsedAt ? formatDate(APIKey.LastUsedAt) : 'Never'}}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Editable Fields -->\n <div class=\"edit-section\">\n <div class=\"section-header\">\n <h4>Key Configuration</h4>\n <button class=\"edit-toggle\" *ngIf=\"APIKey.Status === 'Active'\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid\" [class.fa-pencil]=\"!IsEditing\" [class.fa-times]=\"IsEditing\"></i>\n {{IsEditing ? 'Cancel' : 'Edit'}}\n </button>\n </div>\n\n <div class=\"form-field\">\n <label>Label</label>\n <input kendoTextBox [(ngModel)]=\"EditLabel\"\n [disabled]=\"!IsEditing\"\n class=\"form-input\" />\n </div>\n\n <div class=\"form-field\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"EditDescription\"\n [disabled]=\"!IsEditing\"\n [rows]=\"3\"\n class=\"form-textarea\"></textarea>\n </div>\n\n <div class=\"form-field\">\n <label>Expiration</label>\n <div class=\"expiration-field\">\n <kendo-datepicker [(ngModel)]=\"EditExpiresAt\"\n [disabled]=\"!IsEditing\"\n [min]=\"getMinDate()\"\n format=\"MMM d, yyyy\"\n placeholder=\"Never expires\">\n </kendo-datepicker>\n <button class=\"clear-btn\" *ngIf=\"IsEditing && EditExpiresAt\"\n (click)=\"EditExpiresAt = null\">\n <i class=\"fa-solid fa-times\"></i>\n Never expires\n </button>\n </div>\n </div>\n\n <div class=\"edit-actions\" *ngIf=\"IsEditing\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"IsSaving\"\n (click)=\"saveChanges()\">\n <mj-loading *ngIf=\"IsSaving\" [showText]=\"false\" size=\"small\"></mj-loading>\n <span *ngIf=\"!IsSaving\">\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n </button>\n </div>\n </div>\n\n <!-- Revoke Section -->\n <div class=\"danger-zone\" *ngIf=\"APIKey.Status === 'Active'\">\n <h4>Danger Zone</h4>\n <div class=\"revoke-section\" *ngIf=\"!ShowRevokeConfirm\">\n <div class=\"revoke-info\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Revoke this API key</strong>\n <p>Once revoked, this key will immediately stop working. This action cannot be undone.</p>\n </div>\n </div>\n <button class=\"revoke-btn\" (click)=\"startRevoke()\">\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </button>\n </div>\n\n <div class=\"revoke-confirm\" *ngIf=\"ShowRevokeConfirm\">\n <div class=\"confirm-warning\">\n <i class=\"fa-solid fa-skull-crossbones\"></i>\n <div>\n <strong>Are you absolutely sure?</strong>\n <p>This will permanently revoke the API key. Any applications using this key will immediately lose access.</p>\n </div>\n </div>\n <div class=\"confirm-input\">\n <label>Type <code>REVOKE</code> to confirm:</label>\n <input kendoTextBox [(ngModel)]=\"RevokeConfirmText\"\n placeholder=\"REVOKE\" />\n </div>\n <div class=\"confirm-actions\">\n <button kendoButton (click)=\"cancelRevoke()\">Cancel</button>\n <button class=\"confirm-revoke-btn\"\n [disabled]=\"RevokeConfirmText !== 'REVOKE' || IsRevoking\"\n (click)=\"confirmRevoke()\">\n <mj-loading *ngIf=\"IsRevoking\" [showText]=\"false\" size=\"small\"></mj-loading>\n <span *ngIf=\"!IsRevoking\">\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Revoked Notice -->\n <div class=\"revoked-notice\" *ngIf=\"APIKey.Status === 'Revoked'\">\n <i class=\"fa-solid fa-ban\"></i>\n <div>\n <strong>This API key has been revoked</strong>\n <p>It can no longer be used for authentication. Consider deleting this record if no longer needed.</p>\n </div>\n </div>\n </div>\n\n <!-- Scopes Tab -->\n <div class=\"tab-panel scopes-panel\" *ngIf=\"ActiveTab === 'scopes'\">\n <div class=\"scopes-header\">\n <div class=\"scopes-info\">\n <span class=\"scope-count\">{{getAssignedScopeCount()}} permissions assigned</span>\n </div>\n <button kendoButton [themeColor]=\"'primary'\"\n *ngIf=\"HasScopeChanges && APIKey.Status === 'Active'\"\n [disabled]=\"IsSaving\"\n (click)=\"saveScopeChanges()\">\n <mj-loading *ngIf=\"IsSaving\" [showText]=\"false\" size=\"small\"></mj-loading>\n <span *ngIf=\"!IsSaving\">\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n </button>\n </div>\n\n <!-- No Scopes Warning -->\n <div class=\"no-scopes-warning\" *ngIf=\"!IsLoadingScopes && getAssignedScopeCount() === 0 && APIKey.Status === 'Active'\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Warning: No permissions assigned</strong>\n <p>This API key has no assigned scopes and cannot perform any operations. All API requests using this key will be rejected until scopes are assigned.</p>\n </div>\n </div>\n\n <mj-loading *ngIf=\"IsLoadingScopes\" text=\"Loading permissions...\"></mj-loading>\n\n <div class=\"scope-categories\" *ngIf=\"!IsLoadingScopes\">\n <div class=\"scope-category\" *ngFor=\"let category of ScopeCategories\">\n <div class=\"category-header\" (click)=\"toggleCategory(category)\">\n <div class=\"category-left\">\n <i [class]=\"category.icon\" [style.color]=\"category.color\"></i>\n <span class=\"category-name\">{{category.name}}</span>\n <span class=\"category-count\">\n {{getSelectedCount(category)}}/{{category.scopes.length}}\n </span>\n </div>\n <div class=\"category-right\">\n <label class=\"category-all-toggle\"\n (click)=\"$event.stopPropagation()\"\n *ngIf=\"APIKey.Status === 'Active'\">\n <input type=\"checkbox\" kendoCheckBox\n [checked]=\"category.allSelected\"\n (change)=\"toggleCategoryAll(category)\" />\n <span>All</span>\n </label>\n <i class=\"fa-solid expand-icon\" [class.fa-chevron-down]=\"!category.expanded\"\n [class.fa-chevron-up]=\"category.expanded\"></i>\n </div>\n </div>\n\n <div class=\"category-scopes\" *ngIf=\"category.expanded\">\n <div class=\"scope-item\" *ngFor=\"let item of category.scopes\">\n <label class=\"scope-label\">\n <input type=\"checkbox\" kendoCheckBox\n [(ngModel)]=\"item.selected\"\n [disabled]=\"APIKey.Status === 'Revoked'\"\n (change)=\"onScopeChange()\" />\n <div class=\"scope-info\">\n <span class=\"scope-name\">{{item.scope.Name}}</span>\n <span class=\"scope-desc\" *ngIf=\"item.scope.Description\">\n {{item.scope.Description}}\n </span>\n </div>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Usage Tab -->\n <div class=\"tab-panel usage-panel\" *ngIf=\"ActiveTab === 'usage'\">\n <mj-loading *ngIf=\"IsLoadingLogs\" text=\"Loading usage logs...\"></mj-loading>\n\n <div class=\"usage-content\" *ngIf=\"!IsLoadingLogs\">\n <div class=\"usage-stats\">\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-chart-line\"></i>\n <div class=\"stat-value\">{{UsageLogs.length}}</div>\n <div class=\"stat-label\">Total Requests</div>\n </div>\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"stat-value\">\n {{UsageLogs.length > 0 ? formatRelativeTime(UsageLogs[0].timestamp) : 'Never'}}\n </div>\n <div class=\"stat-label\">Last Used</div>\n </div>\n </div>\n\n <div class=\"usage-logs\" *ngIf=\"UsageLogs.length > 0\">\n <div class=\"log-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n <div class=\"log-item\" *ngFor=\"let log of UsageLogs\">\n <span class=\"col-time\">{{formatRelativeTime(log.timestamp)}}</span>\n <span class=\"col-endpoint\">\n <span class=\"method-badge\">{{log.method}}</span>\n {{log.endpoint}}\n </span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"UsageLogs.length === 0\">\n <i class=\"fa-solid fa-chart-area\"></i>\n <span>No usage logs yet</span>\n <p>Usage will be recorded when this API key is used for authentication</p>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"slideout-footer\">\n <button kendoButton (click)=\"close()\">Close</button>\n </div>\n </ng-container>\n</div>\n", styles: ["/* ========================================\n Slide-out Panel Styles\n ======================================== */\n\n/* Backdrop */\n.slideout-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 100;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Slide-out Panel */\n.slideout-panel {\n position: absolute;\n top: 0;\n right: 0;\n width: 520px;\n height: 100%;\n max-height: 100%;\n background: var(--card-background, #ffffff);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 101;\n display: flex;\n flex-direction: column;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n transform: translateX(100%);\n overflow: hidden;\n}\n\n.slideout-panel.open {\n transform: translateX(0);\n}\n\n/* Panel Header */\n.slideout-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n flex-shrink: 0;\n}\n\n.slideout-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n font-size: 17px;\n color: #78350f;\n flex: 1;\n min-width: 0;\n}\n\n.slideout-title i {\n color: #f59e0b;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.key-status {\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.key-status.active {\n background: rgba(16, 185, 129, 0.2);\n color: #059669;\n}\n\n.key-status.revoked {\n background: rgba(220, 38, 38, 0.2);\n color: #dc2626;\n}\n\n.slideout-close {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.5);\n border: none;\n border-radius: 8px;\n color: #92400e;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close:hover {\n background: rgba(255, 255, 255, 0.8);\n color: #78350f;\n}\n\n/* Panel Tabs */\n.slideout-tabs {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n\n.slideout-tab:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active {\n background: #f59e0b;\n color: white;\n}\n\n.slideout-tab i {\n font-size: 14px;\n}\n\n.tab-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 9px;\n font-size: 10px;\n font-weight: 600;\n}\n\n.tab-badge.unsaved {\n background: #ef4444;\n color: white;\n}\n\n.slideout-tab:not(.active) .tab-badge {\n background: #e5e7eb;\n color: #374151;\n}\n\n/* Panel Content */\n.slideout-content {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n}\n\n.tab-panel {\n padding: 20px 24px;\n}\n\n/* Panel Footer */\n.slideout-footer {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n:host ::ng-deep .slideout-footer .k-button {\n min-width: 80px;\n padding: 8px 16px;\n font-weight: 500;\n border-radius: 6px;\n}\n\n/* Messages */\n.message {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n margin: 12px 16px;\n border-radius: 8px;\n font-size: 14px;\n}\n\n.message.success {\n background: #d1fae5;\n color: #059669;\n}\n\n.message.error {\n background: #fee2e2;\n color: #dc2626;\n}\n\n/* Legacy tab styles removed - now using slideout-tabs */\n\n/* Key Info Card */\n.key-info-card {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 16px;\n}\n\n.info-header {\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.info-row {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label {\n font-size: 12px;\n font-weight: 500;\n color: #92400e;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.hash-value {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n color: #78350f;\n word-break: break-all;\n background: rgba(255, 255, 255, 0.5);\n padding: 8px 12px;\n border-radius: 6px;\n}\n\n.info-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 10px 16px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.info-value {\n font-size: 13px;\n font-weight: 500;\n color: #78350f;\n}\n\n.info-value.never-used {\n color: #6b7280;\n font-style: italic;\n}\n\n/* Edit Section */\n.edit-section {\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 14px;\n}\n\n.section-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.edit-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.edit-toggle:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.form-field {\n margin-bottom: 12px;\n}\n\n.form-field label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.form-input,\n.form-textarea {\n width: 100%;\n}\n\n.expiration-field {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px dashed #d1d5db;\n border-radius: 6px;\n font-size: 13px;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-btn:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.edit-actions {\n margin-top: 14px;\n padding-top: 14px;\n border-top: 1px solid #e5e7eb;\n}\n\n/* Danger Zone */\n.danger-zone {\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.danger-zone h4 {\n margin: 0 0 12px 0;\n font-size: 12px;\n font-weight: 600;\n color: #dc2626;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.revoke-section {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.revoke-info {\n display: flex;\n gap: 12px;\n flex: 1;\n}\n\n.revoke-info i {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n}\n\n.revoke-info strong {\n display: block;\n color: #991b1b;\n margin-bottom: 4px;\n}\n\n.revoke-info p {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.revoke-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: white;\n border: 1px solid #dc2626;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #dc2626;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.revoke-btn:hover {\n background: #dc2626;\n color: white;\n}\n\n/* Revoke Confirm */\n.revoke-confirm {\n background: #fef2f2;\n border-radius: 8px;\n}\n\n.confirm-warning {\n display: flex;\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.confirm-warning i {\n font-size: 24px;\n color: #dc2626;\n}\n\n.confirm-warning strong {\n display: block;\n color: #991b1b;\n font-size: 16px;\n margin-bottom: 4px;\n}\n\n.confirm-warning p {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.confirm-input {\n margin-bottom: 16px;\n}\n\n.confirm-input label {\n display: block;\n font-size: 14px;\n font-weight: 500;\n color: #7f1d1d;\n margin-bottom: 8px;\n}\n\n.confirm-input code {\n background: #fee2e2;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.confirm-input input {\n width: 100%;\n}\n\n.confirm-actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.confirm-revoke-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #dc2626;\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.confirm-revoke-btn:hover:not(:disabled) {\n background: #b91c1c;\n}\n\n.confirm-revoke-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Revoked Notice */\n.revoked-notice {\n display: flex;\n gap: 12px;\n padding: 20px;\n background: #f3f4f6;\n border-radius: 12px;\n}\n\n.revoked-notice i {\n font-size: 24px;\n color: #6b7280;\n}\n\n.revoked-notice strong {\n display: block;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.revoked-notice p {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n/* Scopes Tab */\n.scopes-tab {\n padding: 16px;\n}\n\n.scopes-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.scope-count {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n}\n\n/* Scope Categories */\n.scope-categories {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-category {\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.category-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.category-header:hover {\n background: #f3f4f6;\n}\n\n.category-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.category-left i {\n font-size: 16px;\n}\n\n.category-name {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n}\n\n.category-count {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.category-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.category-all-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.category-all-toggle:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.category-all-toggle input {\n margin: 0;\n}\n\n.expand-icon {\n color: #9ca3af;\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.category-scopes {\n padding: 8px 16px 16px;\n border-top: 1px solid #e5e7eb;\n background: white;\n}\n\n.scope-item {\n padding: 10px 0;\n border-bottom: 1px solid #f3f4f6;\n}\n\n.scope-item:last-child {\n border-bottom: none;\n}\n\n.scope-label {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.scope-info {\n flex: 1;\n}\n\n.scope-name {\n display: block;\n font-weight: 500;\n font-size: 13px;\n color: #374151;\n font-family: monospace;\n}\n\n.scope-desc {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 2px;\n}\n\n/* Usage Tab */\n.usage-tab {\n padding: 16px;\n}\n\n.usage-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.stat-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 12px;\n text-align: center;\n}\n\n.stat-card i {\n font-size: 24px;\n color: #f59e0b;\n margin-bottom: 12px;\n}\n\n.stat-value {\n font-size: 24px;\n font-weight: 700;\n color: #78350f;\n}\n\n.stat-label {\n font-size: 12px;\n color: #92400e;\n margin-top: 4px;\n}\n\n/* Usage Logs */\n.usage-logs {\n background: #f9fafb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.log-header {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n background: #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.log-item {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n border-bottom: 1px solid #e5e7eb;\n font-size: 13px;\n align-items: center;\n}\n\n.log-item:last-child {\n border-bottom: none;\n}\n\n.col-time {\n color: #6b7280;\n}\n\n.col-endpoint {\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: monospace;\n color: #374151;\n}\n\n.method-badge {\n padding: 2px 6px;\n background: #dbeafe;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n color: #1d4ed8;\n}\n\n.col-status {\n font-weight: 600;\n}\n\n.col-status.status-success {\n color: #10b981;\n}\n\n.col-status.status-warning {\n color: #f59e0b;\n}\n\n.col-status.status-error {\n color: #ef4444;\n}\n\n.col-duration {\n color: #6b7280;\n text-align: right;\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: 48px 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.5;\n}\n\n.empty-state span {\n font-size: 16px;\n font-weight: 500;\n color: #374151;\n}\n\n.empty-state p {\n margin: 8px 0 0 0;\n font-size: 13px;\n}\n\n/* Legacy kendo-window styles removed - now using slideout-panel */\n\n/* Input and form field styling */\n:host ::ng-deep .form-input .k-input,\n:host ::ng-deep .form-textarea .k-input-inner,\n:host ::ng-deep .k-datepicker .k-input {\n padding: 10px 14px;\n border-radius: 8px;\n font-size: 14px;\n border-color: #e5e7eb;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .form-input:focus-within,\n:host ::ng-deep .form-textarea:focus-within,\n:host ::ng-deep .k-datepicker:focus-within {\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n/* Button styling in edit actions */\n:host ::ng-deep .edit-actions .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .edit-actions .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n:host ::ng-deep .edit-actions .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Scopes header button styling */\n:host ::ng-deep .scopes-header .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .scopes-header .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n:host ::ng-deep .scopes-header .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* No Scopes Warning */\n.no-scopes-warning {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);\n border: 1px solid #fecaca;\n border-radius: 10px;\n margin-bottom: 16px;\n font-size: 13px;\n color: #991b1b;\n}\n\n.no-scopes-warning i {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.no-scopes-warning strong {\n display: block;\n color: #991b1b;\n font-size: 14px;\n margin-bottom: 4px;\n}\n\n.no-scopes-warning p {\n margin: 0;\n line-height: 1.5;\n}\n"] }]
1062
+ args: [{ standalone: false, selector: 'mj-api-key-edit-panel', template: "<!-- Slide-out Backdrop -->\n@if (Visible) {\n <div class=\"slideout-backdrop\" (click)=\"close()\"></div>\n}\n\n<!-- Slide-out Panel -->\n<div class=\"slideout-panel\" [class.open]=\"Visible\">\n <!-- Header -->\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-key\"></i>\n <span>API Key Details</span>\n <span class=\"key-status\" [class.active]=\"APIKey?.Status === 'Active'\"\n [class.revoked]=\"APIKey?.Status === 'Revoked'\">\n {{APIKey?.Status}}\n </span>\n </div>\n <button class=\"slideout-close\" (click)=\"close()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading key details...\"></mj-loading>\n }\n\n @if (!IsLoading && APIKey) {\n <!-- Success/Error Messages -->\n @if (SuccessMessage) {\n <div class=\"message success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{SuccessMessage}}\n </div>\n }\n @if (ErrorMessage) {\n <div class=\"message error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ErrorMessage}}\n </div>\n }\n <!-- Tabs -->\n <div class=\"slideout-tabs\">\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'details'\"\n (click)=\"ActiveTab = 'details'\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Details\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'scopes'\"\n (click)=\"ActiveTab = 'scopes'\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n Permissions\n @if (HasScopeChanges) {\n <span class=\"tab-badge unsaved\">!</span>\n }\n </button>\n <button class=\"slideout-tab\" [class.active]=\"ActiveTab === 'usage'\"\n (click)=\"ActiveTab = 'usage'\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Usage\n </button>\n </div>\n <div class=\"slideout-content\">\n <!-- Details Tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-panel\">\n <div class=\"key-info-card\">\n <div class=\"info-header\">\n <div class=\"info-row\">\n <span class=\"info-label\">Key Hash</span>\n <code class=\"hash-value\">{{APIKey.Hash}}</code>\n </div>\n </div>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Created</span>\n <span class=\"info-value\">{{formatDate(APIKey.__mj_CreatedAt)}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Created By</span>\n <span class=\"info-value\">{{APIKey.CreatedByUser}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Owner</span>\n <span class=\"info-value\">{{APIKey.User}}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Last Used</span>\n <span class=\"info-value\" [class.never-used]=\"!APIKey.LastUsedAt\">\n {{APIKey.LastUsedAt ? formatDate(APIKey.LastUsedAt) : 'Never'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Editable Fields -->\n <div class=\"edit-section\">\n <div class=\"section-header\">\n <h4>Key Configuration</h4>\n @if (APIKey.Status === 'Active') {\n <button class=\"edit-toggle\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid\" [class.fa-pencil]=\"!IsEditing\" [class.fa-times]=\"IsEditing\"></i>\n {{IsEditing ? 'Cancel' : 'Edit'}}\n </button>\n }\n </div>\n <div class=\"form-field\">\n <label>Label</label>\n <input kendoTextBox [(ngModel)]=\"EditLabel\"\n [disabled]=\"!IsEditing\"\n class=\"form-input\" />\n </div>\n <div class=\"form-field\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"EditDescription\"\n [disabled]=\"!IsEditing\"\n [rows]=\"3\"\n class=\"form-textarea\"></textarea>\n </div>\n <div class=\"form-field\">\n <label>Expiration</label>\n <div class=\"expiration-field\">\n <kendo-datepicker [(ngModel)]=\"EditExpiresAt\"\n [disabled]=\"!IsEditing\"\n [min]=\"getMinDate()\"\n format=\"MMM d, yyyy\"\n placeholder=\"Never expires\">\n </kendo-datepicker>\n @if (IsEditing && EditExpiresAt) {\n <button class=\"clear-btn\"\n (click)=\"EditExpiresAt = null\">\n <i class=\"fa-solid fa-times\"></i>\n Never expires\n </button>\n }\n </div>\n </div>\n @if (IsEditing) {\n <div class=\"edit-actions\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"IsSaving\"\n (click)=\"saveChanges()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n </div>\n }\n </div>\n <!-- Revoke Section -->\n @if (APIKey.Status === 'Active') {\n <div class=\"danger-zone\">\n <h4>Danger Zone</h4>\n @if (!ShowRevokeConfirm) {\n <div class=\"revoke-section\">\n <div class=\"revoke-info\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Revoke this API key</strong>\n <p>Once revoked, this key will immediately stop working. This action cannot be undone.</p>\n </div>\n </div>\n <button class=\"revoke-btn\" (click)=\"startRevoke()\">\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </button>\n </div>\n }\n @if (ShowRevokeConfirm) {\n <div class=\"revoke-confirm\">\n <div class=\"confirm-warning\">\n <i class=\"fa-solid fa-skull-crossbones\"></i>\n <div>\n <strong>Are you absolutely sure?</strong>\n <p>This will permanently revoke the API key. Any applications using this key will immediately lose access.</p>\n </div>\n </div>\n <div class=\"confirm-input\">\n <label>Type <code>REVOKE</code> to confirm:</label>\n <input kendoTextBox [(ngModel)]=\"RevokeConfirmText\"\n placeholder=\"REVOKE\" />\n </div>\n <div class=\"confirm-actions\">\n <button kendoButton (click)=\"cancelRevoke()\">Cancel</button>\n <button class=\"confirm-revoke-btn\"\n [disabled]=\"RevokeConfirmText !== 'REVOKE' || IsRevoking\"\n (click)=\"confirmRevoke()\">\n @if (IsRevoking) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsRevoking) {\n <span>\n <i class=\"fa-solid fa-ban\"></i>\n Revoke Key\n </span>\n }\n </button>\n </div>\n </div>\n }\n </div>\n }\n <!-- Revoked Notice -->\n @if (APIKey.Status === 'Revoked') {\n <div class=\"revoked-notice\">\n <i class=\"fa-solid fa-ban\"></i>\n <div>\n <strong>This API key has been revoked</strong>\n <p>It can no longer be used for authentication. Consider deleting this record if no longer needed.</p>\n </div>\n </div>\n }\n </div>\n }\n <!-- Scopes Tab -->\n @if (ActiveTab === 'scopes') {\n <div class=\"tab-panel scopes-panel\">\n <div class=\"scopes-header\">\n <div class=\"scopes-info\">\n <span class=\"scope-count\">{{getAssignedScopeCount()}} permissions assigned</span>\n </div>\n @if (HasScopeChanges && APIKey.Status === 'Active') {\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"IsSaving\"\n (click)=\"saveScopeChanges()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n }\n </div>\n <!-- No Scopes Warning -->\n @if (!IsLoadingScopes && getAssignedScopeCount() === 0 && APIKey.Status === 'Active') {\n <div class=\"no-scopes-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Warning: No permissions assigned</strong>\n <p>This API key has no assigned scopes and cannot perform any operations. All API requests using this key will be rejected until scopes are assigned.</p>\n </div>\n </div>\n }\n @if (IsLoadingScopes) {\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n }\n @if (!IsLoadingScopes) {\n <div class=\"scope-categories\">\n @for (category of ScopeCategories; track category) {\n <div class=\"scope-category\">\n <div class=\"category-header\" (click)=\"toggleCategory(category)\">\n <div class=\"category-left\">\n <i [class]=\"category.icon\" [style.color]=\"category.color\"></i>\n <span class=\"category-name\">{{category.name}}</span>\n <span class=\"category-count\">\n {{getSelectedCount(category)}}/{{category.scopes.length}}\n </span>\n </div>\n <div class=\"category-right\">\n @if (APIKey.Status === 'Active') {\n <label class=\"category-all-toggle\"\n (click)=\"$event.stopPropagation()\"\n >\n <input type=\"checkbox\" kendoCheckBox\n [checked]=\"category.allSelected\"\n (change)=\"toggleCategoryAll(category)\" />\n <span>All</span>\n </label>\n }\n <i class=\"fa-solid expand-icon\" [class.fa-chevron-down]=\"!category.expanded\"\n [class.fa-chevron-up]=\"category.expanded\"></i>\n </div>\n </div>\n @if (category.expanded) {\n <div class=\"category-scopes\">\n @for (item of category.scopes; track item) {\n <div class=\"scope-item\">\n <label class=\"scope-label\">\n <input type=\"checkbox\" kendoCheckBox\n [(ngModel)]=\"item.selected\"\n [disabled]=\"APIKey.Status === 'Revoked'\"\n (change)=\"onScopeChange()\" />\n <div class=\"scope-info\">\n <span class=\"scope-name\">{{item.scope.Name}}</span>\n @if (item.scope.Description) {\n <span class=\"scope-desc\">\n {{item.scope.Description}}\n </span>\n }\n </div>\n </label>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Usage Tab -->\n @if (ActiveTab === 'usage') {\n <div class=\"tab-panel usage-panel\">\n @if (IsLoadingLogs) {\n <mj-loading text=\"Loading usage logs...\"></mj-loading>\n }\n @if (!IsLoadingLogs) {\n <div class=\"usage-content\">\n <div class=\"usage-stats\">\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-chart-line\"></i>\n <div class=\"stat-value\">{{UsageLogs.length}}</div>\n <div class=\"stat-label\">Total Requests</div>\n </div>\n <div class=\"stat-card\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"stat-value\">\n {{UsageLogs.length > 0 ? formatRelativeTime(UsageLogs[0].timestamp) : 'Never'}}\n </div>\n <div class=\"stat-label\">Last Used</div>\n </div>\n </div>\n @if (UsageLogs.length > 0) {\n <div class=\"usage-logs\">\n <div class=\"log-header\">\n <span class=\"col-time\">Time</span>\n <span class=\"col-endpoint\">Endpoint</span>\n <span class=\"col-status\">Status</span>\n <span class=\"col-duration\">Duration</span>\n </div>\n @for (log of UsageLogs; track log) {\n <div class=\"log-item\">\n <span class=\"col-time\">{{formatRelativeTime(log.timestamp)}}</span>\n <span class=\"col-endpoint\">\n <span class=\"method-badge\">{{log.method}}</span>\n {{log.endpoint}}\n </span>\n <span class=\"col-status\" [ngClass]=\"getStatusClass(log.statusCode)\">\n {{log.statusCode}}\n </span>\n <span class=\"col-duration\">{{log.responseTime}}ms</span>\n </div>\n }\n </div>\n }\n @if (UsageLogs.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-chart-area\"></i>\n <span>No usage logs yet</span>\n <p>Usage will be recorded when this API key is used for authentication</p>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <!-- Footer -->\n <div class=\"slideout-footer\">\n <button kendoButton (click)=\"close()\">Close</button>\n </div>\n }\n</div>\n", styles: ["/* ========================================\n Slide-out Panel Styles\n ======================================== */\n\n/* Backdrop */\n.slideout-backdrop {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 100;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Slide-out Panel */\n.slideout-panel {\n position: absolute;\n top: 0;\n right: 0;\n width: 520px;\n height: 100%;\n max-height: 100%;\n background: var(--card-background, #ffffff);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 101;\n display: flex;\n flex-direction: column;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n transform: translateX(100%);\n overflow: hidden;\n}\n\n.slideout-panel.open {\n transform: translateX(0);\n}\n\n/* Panel Header */\n.slideout-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n flex-shrink: 0;\n}\n\n.slideout-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-weight: 600;\n font-size: 17px;\n color: #78350f;\n flex: 1;\n min-width: 0;\n}\n\n.slideout-title i {\n color: #f59e0b;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.key-status {\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.key-status.active {\n background: rgba(16, 185, 129, 0.2);\n color: #059669;\n}\n\n.key-status.revoked {\n background: rgba(220, 38, 38, 0.2);\n color: #dc2626;\n}\n\n.slideout-close {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.5);\n border: none;\n border-radius: 8px;\n color: #92400e;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close:hover {\n background: rgba(255, 255, 255, 0.8);\n color: #78350f;\n}\n\n/* Panel Tabs */\n.slideout-tabs {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n}\n\n.slideout-tab:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active {\n background: #f59e0b;\n color: white;\n}\n\n.slideout-tab i {\n font-size: 14px;\n}\n\n.tab-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 9px;\n font-size: 10px;\n font-weight: 600;\n}\n\n.tab-badge.unsaved {\n background: #ef4444;\n color: white;\n}\n\n.slideout-tab:not(.active) .tab-badge {\n background: #e5e7eb;\n color: #374151;\n}\n\n/* Panel Content */\n.slideout-content {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n}\n\n.tab-panel {\n padding: 20px 24px;\n}\n\n/* Panel Footer */\n.slideout-footer {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n:host ::ng-deep .slideout-footer .k-button {\n min-width: 80px;\n padding: 8px 16px;\n font-weight: 500;\n border-radius: 6px;\n}\n\n/* Messages */\n.message {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n margin: 12px 16px;\n border-radius: 8px;\n font-size: 14px;\n}\n\n.message.success {\n background: #d1fae5;\n color: #059669;\n}\n\n.message.error {\n background: #fee2e2;\n color: #dc2626;\n}\n\n/* Legacy tab styles removed - now using slideout-tabs */\n\n/* Key Info Card */\n.key-info-card {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 16px;\n}\n\n.info-header {\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.info-row {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label {\n font-size: 12px;\n font-weight: 500;\n color: #92400e;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.hash-value {\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 13px;\n color: #78350f;\n word-break: break-all;\n background: rgba(255, 255, 255, 0.5);\n padding: 8px 12px;\n border-radius: 6px;\n}\n\n.info-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 10px 16px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.info-value {\n font-size: 13px;\n font-weight: 500;\n color: #78350f;\n}\n\n.info-value.never-used {\n color: #6b7280;\n font-style: italic;\n}\n\n/* Edit Section */\n.edit-section {\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 14px;\n}\n\n.section-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.edit-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.edit-toggle:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.form-field {\n margin-bottom: 12px;\n}\n\n.form-field label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.form-input,\n.form-textarea {\n width: 100%;\n}\n\n.expiration-field {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px dashed #d1d5db;\n border-radius: 6px;\n font-size: 13px;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.clear-btn:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.edit-actions {\n margin-top: 14px;\n padding-top: 14px;\n border-top: 1px solid #e5e7eb;\n}\n\n/* Danger Zone */\n.danger-zone {\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 10px;\n padding: 14px 16px;\n}\n\n.danger-zone h4 {\n margin: 0 0 12px 0;\n font-size: 12px;\n font-weight: 600;\n color: #dc2626;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.revoke-section {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.revoke-info {\n display: flex;\n gap: 12px;\n flex: 1;\n}\n\n.revoke-info i {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n}\n\n.revoke-info strong {\n display: block;\n color: #991b1b;\n margin-bottom: 4px;\n}\n\n.revoke-info p {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.revoke-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: white;\n border: 1px solid #dc2626;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #dc2626;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.revoke-btn:hover {\n background: #dc2626;\n color: white;\n}\n\n/* Revoke Confirm */\n.revoke-confirm {\n background: #fef2f2;\n border-radius: 8px;\n}\n\n.confirm-warning {\n display: flex;\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.confirm-warning i {\n font-size: 24px;\n color: #dc2626;\n}\n\n.confirm-warning strong {\n display: block;\n color: #991b1b;\n font-size: 16px;\n margin-bottom: 4px;\n}\n\n.confirm-warning p {\n margin: 0;\n font-size: 13px;\n color: #7f1d1d;\n}\n\n.confirm-input {\n margin-bottom: 16px;\n}\n\n.confirm-input label {\n display: block;\n font-size: 14px;\n font-weight: 500;\n color: #7f1d1d;\n margin-bottom: 8px;\n}\n\n.confirm-input code {\n background: #fee2e2;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.confirm-input input {\n width: 100%;\n}\n\n.confirm-actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.confirm-revoke-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #dc2626;\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.confirm-revoke-btn:hover:not(:disabled) {\n background: #b91c1c;\n}\n\n.confirm-revoke-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Revoked Notice */\n.revoked-notice {\n display: flex;\n gap: 12px;\n padding: 20px;\n background: #f3f4f6;\n border-radius: 12px;\n}\n\n.revoked-notice i {\n font-size: 24px;\n color: #6b7280;\n}\n\n.revoked-notice strong {\n display: block;\n color: #374151;\n margin-bottom: 4px;\n}\n\n.revoked-notice p {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n/* Scopes Tab */\n.scopes-tab {\n padding: 16px;\n}\n\n.scopes-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.scope-count {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n}\n\n/* Scope Categories */\n.scope-categories {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-category {\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.category-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.category-header:hover {\n background: #f3f4f6;\n}\n\n.category-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.category-left i {\n font-size: 16px;\n}\n\n.category-name {\n font-weight: 600;\n font-size: 14px;\n color: #1f2937;\n}\n\n.category-count {\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.category-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.category-all-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.category-all-toggle:hover {\n border-color: #f59e0b;\n color: #f59e0b;\n}\n\n.category-all-toggle input {\n margin: 0;\n}\n\n.expand-icon {\n color: #9ca3af;\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n.category-scopes {\n padding: 8px 16px 16px;\n border-top: 1px solid #e5e7eb;\n background: white;\n}\n\n.scope-item {\n padding: 10px 0;\n border-bottom: 1px solid #f3f4f6;\n}\n\n.scope-item:last-child {\n border-bottom: none;\n}\n\n.scope-label {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n\n.scope-info {\n flex: 1;\n}\n\n.scope-name {\n display: block;\n font-weight: 500;\n font-size: 13px;\n color: #374151;\n font-family: monospace;\n}\n\n.scope-desc {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 2px;\n}\n\n/* Usage Tab */\n.usage-tab {\n padding: 16px;\n}\n\n.usage-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.stat-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-radius: 12px;\n text-align: center;\n}\n\n.stat-card i {\n font-size: 24px;\n color: #f59e0b;\n margin-bottom: 12px;\n}\n\n.stat-value {\n font-size: 24px;\n font-weight: 700;\n color: #78350f;\n}\n\n.stat-label {\n font-size: 12px;\n color: #92400e;\n margin-top: 4px;\n}\n\n/* Usage Logs */\n.usage-logs {\n background: #f9fafb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.log-header {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n background: #e5e7eb;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.log-item {\n display: grid;\n grid-template-columns: 100px 1fr 80px 80px;\n gap: 12px;\n padding: 12px 16px;\n border-bottom: 1px solid #e5e7eb;\n font-size: 13px;\n align-items: center;\n}\n\n.log-item:last-child {\n border-bottom: none;\n}\n\n.col-time {\n color: #6b7280;\n}\n\n.col-endpoint {\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: monospace;\n color: #374151;\n}\n\n.method-badge {\n padding: 2px 6px;\n background: #dbeafe;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n color: #1d4ed8;\n}\n\n.col-status {\n font-weight: 600;\n}\n\n.col-status.status-success {\n color: #10b981;\n}\n\n.col-status.status-warning {\n color: #f59e0b;\n}\n\n.col-status.status-error {\n color: #ef4444;\n}\n\n.col-duration {\n color: #6b7280;\n text-align: right;\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: 48px 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.5;\n}\n\n.empty-state span {\n font-size: 16px;\n font-weight: 500;\n color: #374151;\n}\n\n.empty-state p {\n margin: 8px 0 0 0;\n font-size: 13px;\n}\n\n/* Legacy kendo-window styles removed - now using slideout-panel */\n\n/* Input and form field styling */\n:host ::ng-deep .form-input .k-input,\n:host ::ng-deep .form-textarea .k-input-inner,\n:host ::ng-deep .k-datepicker .k-input {\n padding: 10px 14px;\n border-radius: 8px;\n font-size: 14px;\n border-color: #e5e7eb;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .form-input:focus-within,\n:host ::ng-deep .form-textarea:focus-within,\n:host ::ng-deep .k-datepicker:focus-within {\n box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);\n}\n\n/* Button styling in edit actions */\n:host ::ng-deep .edit-actions .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .edit-actions .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n:host ::ng-deep .edit-actions .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* Scopes header button styling */\n:host ::ng-deep .scopes-header .k-button {\n min-width: 120px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .scopes-header .k-button-solid-primary {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3);\n}\n\n:host ::ng-deep .scopes-header .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n/* No Scopes Warning */\n.no-scopes-warning {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);\n border: 1px solid #fecaca;\n border-radius: 10px;\n margin-bottom: 16px;\n font-size: 13px;\n color: #991b1b;\n}\n\n.no-scopes-warning i {\n font-size: 20px;\n color: #dc2626;\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.no-scopes-warning strong {\n display: block;\n color: #991b1b;\n font-size: 14px;\n margin-bottom: 4px;\n}\n\n.no-scopes-warning p {\n margin: 0;\n line-height: 1.5;\n}\n"] }]
1057
1063
  }], null, { Visible: [{
1058
1064
  type: Input
1059
1065
  }], KeyId: [{
@@ -1070,5 +1076,5 @@ export class APIKeyEditPanelComponent {
1070
1076
  type: HostListener,
1071
1077
  args: ['document:keydown.escape']
1072
1078
  }] }); })();
1073
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyEditPanelComponent, { className: "APIKeyEditPanelComponent", filePath: "src/APIKeys/api-key-edit-panel.component.ts", lineNumber: 47 }); })();
1079
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyEditPanelComponent, { className: "APIKeyEditPanelComponent", filePath: "src/apikeys/api-key-edit-panel.component.ts", lineNumber: 42 }); })();
1074
1080
  //# sourceMappingURL=api-key-edit-panel.component.js.map