@memberjunction/ng-dashboards 3.4.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/README.md +102 -339
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
  3. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  4. package/dist/AI/components/agents/agent-configuration.component.js +103 -44
  5. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
  7. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-editor.component.js +149 -211
  9. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  10. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  11. package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
  12. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  13. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  14. package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
  15. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  17. package/dist/AI/components/charts/time-series-chart.component.js +6 -7
  18. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  19. package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
  20. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  21. package/dist/AI/components/execution-monitoring.component.js +33 -37
  22. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  23. package/dist/AI/components/models/model-management.component.d.ts +3 -6
  24. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  25. package/dist/AI/components/models/model-management.component.js +34 -27
  26. package/dist/AI/components/models/model-management.component.js.map +1 -1
  27. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  28. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
  29. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
  32. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  33. package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
  34. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  35. package/dist/AI/components/prompts/prompt-management.component.js +34 -32
  36. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  37. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
  39. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  40. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  41. package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
  42. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  43. package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
  44. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  45. package/dist/AI/components/system/system-configuration.component.js +26 -27
  46. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  47. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  48. package/dist/AI/components/widgets/kpi-card.component.js +52 -42
  49. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  50. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  51. package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
  52. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  53. package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
  54. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  55. package/dist/APIKeys/api-applications-panel.component.js +193 -189
  56. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  57. package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
  58. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  59. package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
  60. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  61. package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
  62. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  63. package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
  64. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  65. package/dist/APIKeys/api-key-list.component.d.ts +0 -2
  66. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  67. package/dist/APIKeys/api-key-list.component.js +113 -114
  68. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  69. package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
  70. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  71. package/dist/APIKeys/api-keys-resource.component.js +294 -302
  72. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  73. package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
  74. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  75. package/dist/APIKeys/api-scopes-panel.component.js +151 -155
  76. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  77. package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
  78. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  79. package/dist/APIKeys/api-usage-panel.component.js +237 -234
  80. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  81. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  82. package/dist/Actions/components/actions-list-view.component.js +15 -14
  83. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  84. package/dist/Actions/components/actions-overview.component.d.ts +3 -6
  85. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  86. package/dist/Actions/components/actions-overview.component.js +17 -19
  87. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  88. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  89. package/dist/Actions/components/categories-list-view.component.js +6 -6
  90. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  91. package/dist/Actions/components/code-management.component.d.ts +0 -4
  92. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  93. package/dist/Actions/components/code-management.component.js +3 -9
  94. package/dist/Actions/components/code-management.component.js.map +1 -1
  95. package/dist/Actions/components/entity-integration.component.d.ts +0 -4
  96. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  97. package/dist/Actions/components/entity-integration.component.js +3 -9
  98. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  99. package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
  100. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  101. package/dist/Actions/components/execution-monitoring.component.js +13 -16
  102. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  103. package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
  104. package/dist/Actions/components/executions-list-view.component.js +3 -3
  105. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  106. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
  107. package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
  108. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
  109. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  110. package/dist/Actions/components/explorer/action-card.component.js +11 -10
  111. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  112. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
  113. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  114. package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
  115. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  116. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
  117. package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
  118. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
  120. package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
  121. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  122. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
  123. package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
  124. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  125. package/dist/Actions/components/explorer/index.d.ts +0 -1
  126. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  127. package/dist/Actions/components/explorer/index.js +0 -4
  128. package/dist/Actions/components/explorer/index.js.map +1 -1
  129. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  130. package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
  131. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  132. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  133. package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
  134. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  135. package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
  136. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  137. package/dist/Actions/components/scheduled-actions.component.js +3 -9
  138. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  139. package/dist/Actions/components/security-permissions.component.d.ts +0 -4
  140. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  141. package/dist/Actions/components/security-permissions.component.js +3 -9
  142. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  143. package/dist/Actions/index.d.ts +0 -7
  144. package/dist/Actions/index.d.ts.map +1 -1
  145. package/dist/Actions/index.js +0 -8
  146. package/dist/Actions/index.js.map +1 -1
  147. package/dist/Communication/communication-dashboard.component.d.ts +0 -1
  148. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  149. package/dist/Communication/communication-dashboard.component.js +38 -51
  150. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  151. package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
  152. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  153. package/dist/Communication/communication-logs-resource.component.js +112 -108
  154. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  155. package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
  156. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  157. package/dist/Communication/communication-monitor-resource.component.js +210 -201
  158. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  159. package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
  160. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  161. package/dist/Communication/communication-providers-resource.component.js +136 -124
  162. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  163. package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
  164. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  165. package/dist/Communication/communication-runs-resource.component.js +91 -88
  166. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
  168. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-templates-resource.component.js +139 -122
  170. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  171. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
  172. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  173. package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
  174. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  175. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  176. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
  177. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  178. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  179. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
  180. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  181. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  182. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
  183. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  184. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
  185. package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
  186. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  187. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
  188. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
  189. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  190. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  191. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
  192. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  193. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
  194. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
  195. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  196. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
  197. package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
  198. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  199. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
  200. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
  201. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  202. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  203. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
  204. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  205. package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
  206. package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
  207. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  208. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  209. package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
  210. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  211. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  212. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
  213. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  214. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
  215. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  216. package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
  217. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  218. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
  219. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  220. package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
  221. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  222. package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
  223. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  224. package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
  225. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  226. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
  227. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  228. package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
  229. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  230. package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
  231. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  232. package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
  233. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  234. package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
  235. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  236. package/dist/Credentials/credentials-dashboard.component.js +31 -44
  237. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  238. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
  239. package/dist/Credentials/pipes/group-by.pipe.js +2 -1
  240. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
  241. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
  242. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  243. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
  244. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  245. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  246. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
  247. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  248. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
  249. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
  250. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
  251. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  252. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
  253. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  254. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  255. package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
  256. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  257. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +2 -4
  258. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  259. package/dist/DataExplorer/data-explorer-dashboard.component.js +83 -64
  260. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  261. package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
  262. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  263. package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
  264. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  265. package/dist/DataExplorer/index.d.ts +2 -2
  266. package/dist/DataExplorer/index.d.ts.map +1 -1
  267. package/dist/DataExplorer/index.js +2 -2
  268. package/dist/DataExplorer/index.js.map +1 -1
  269. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
  270. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  271. package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
  272. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  273. package/dist/Home/home-application.d.ts +109 -27
  274. package/dist/Home/home-application.d.ts.map +1 -1
  275. package/dist/Home/home-application.js +351 -75
  276. package/dist/Home/home-application.js.map +1 -1
  277. package/dist/Home/home-dashboard.component.d.ts +48 -12
  278. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  279. package/dist/Home/home-dashboard.component.js +267 -187
  280. package/dist/Home/home-dashboard.component.js.map +1 -1
  281. package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
  282. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  283. package/dist/Lists/components/lists-browse-resource.component.js +761 -685
  284. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  285. package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
  286. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  287. package/dist/Lists/components/lists-categories-resource.component.js +340 -316
  288. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  289. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
  290. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  291. package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
  292. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  293. package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
  294. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  295. package/dist/Lists/components/lists-operations-resource.component.js +508 -455
  296. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  297. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  298. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
  299. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  300. package/dist/Lists/index.d.ts +0 -1
  301. package/dist/Lists/index.d.ts.map +1 -1
  302. package/dist/Lists/index.js +0 -11
  303. package/dist/Lists/index.js.map +1 -1
  304. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
  305. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  306. package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
  307. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  308. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
  309. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
  310. package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
  311. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  312. package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
  313. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  314. package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
  315. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  316. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
  317. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  318. package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
  319. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  320. package/dist/MCP/index.d.ts +5 -5
  321. package/dist/MCP/index.d.ts.map +1 -1
  322. package/dist/MCP/index.js +5 -5
  323. package/dist/MCP/index.js.map +1 -1
  324. package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
  325. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  326. package/dist/MCP/mcp-dashboard.component.js +976 -697
  327. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  328. package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
  329. package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
  330. package/dist/MCP/mcp-filter-panel.component.js +288 -0
  331. package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
  332. package/dist/MCP/mcp-resource.component.d.ts +11 -5
  333. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  334. package/dist/MCP/mcp-resource.component.js +8 -9
  335. package/dist/MCP/mcp-resource.component.js.map +1 -1
  336. package/dist/MCP/mcp.module.d.ts +16 -19
  337. package/dist/MCP/mcp.module.d.ts.map +1 -1
  338. package/dist/MCP/mcp.module.js +17 -26
  339. package/dist/MCP/mcp.module.js.map +1 -1
  340. package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
  341. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
  342. package/dist/MCP/services/mcp-tools.service.js +5 -6
  343. package/dist/MCP/services/mcp-tools.service.js.map +1 -1
  344. package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
  345. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  346. package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
  347. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  348. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
  349. package/dist/Scheduling/components/job-slideout.component.js +117 -116
  350. package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
  351. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
  352. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  353. package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
  354. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  355. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  356. package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
  357. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  358. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
  359. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  360. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
  361. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  362. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  363. package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
  364. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  365. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
  366. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  367. package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
  368. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  369. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  370. package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
  371. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  372. package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
  373. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  374. package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
  375. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  376. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
  377. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  378. package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
  379. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  380. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  381. package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
  382. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  383. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  384. package/dist/Testing/components/testing-analytics.component.js +30 -30
  385. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  386. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +3 -3
  388. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  389. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  390. package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
  391. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  392. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  393. package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
  394. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  395. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  396. package/dist/Testing/components/testing-explorer.component.js +42 -35
  397. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  398. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  399. package/dist/Testing/components/testing-review-resource.component.js +3 -3
  400. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  401. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  402. package/dist/Testing/components/testing-review.component.js +16 -16
  403. package/dist/Testing/components/testing-review.component.js.map +1 -1
  404. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  405. package/dist/Testing/components/testing-runs-resource.component.js +3 -3
  406. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  407. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  408. package/dist/Testing/components/testing-runs.component.js +15 -15
  409. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  410. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
  411. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
  412. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  413. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
  414. package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
  415. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  416. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  417. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
  418. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  419. package/dist/Testing/testing-dashboard.component.d.ts +0 -1
  420. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  421. package/dist/Testing/testing-dashboard.component.js +9 -8
  422. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  423. package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
  424. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
  425. package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
  426. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
  427. package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
  428. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
  429. package/dist/VersionHistory/components/graph-resource.component.js +521 -0
  430. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
  431. package/dist/VersionHistory/components/index.d.ts +5 -0
  432. package/dist/VersionHistory/components/index.d.ts.map +1 -0
  433. package/dist/VersionHistory/components/index.js +5 -0
  434. package/dist/VersionHistory/components/index.js.map +1 -0
  435. package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
  436. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
  437. package/dist/VersionHistory/components/labels-resource.component.js +968 -0
  438. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
  439. package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
  440. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
  441. package/dist/VersionHistory/components/restore-resource.component.js +472 -0
  442. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
  443. package/dist/VersionHistory/index.d.ts +2 -0
  444. package/dist/VersionHistory/index.d.ts.map +1 -0
  445. package/dist/VersionHistory/index.js +2 -0
  446. package/dist/VersionHistory/index.js.map +1 -0
  447. package/dist/module.d.ts +42 -36
  448. package/dist/module.d.ts.map +1 -1
  449. package/dist/module.js +41 -7
  450. package/dist/module.js.map +1 -1
  451. package/dist/public-api.d.ts +20 -19
  452. package/dist/public-api.d.ts.map +1 -1
  453. package/dist/public-api.js +22 -120
  454. package/dist/public-api.js.map +1 -1
  455. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
  456. package/dist/shared/pipes/highlight-search.pipe.js +2 -1
  457. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
  458. package/package.json +64 -62
@@ -3,37 +3,37 @@ import { Metadata } from '@memberjunction/core';
3
3
  import { GraphQLEncryptionClient } from '@memberjunction/graphql-dataprovider';
4
4
  import { APIKeysEngineBase, parseAPIScopeUIConfig } from '@memberjunction/api-keys-base';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "@progress/kendo-angular-inputs";
9
- import * as i4 from "@progress/kendo-angular-dateinputs";
10
- import * as i5 from "@progress/kendo-angular-buttons";
11
- import * as i6 from "@memberjunction/ng-shared-generic";
12
- function APIKeyCreateDialogComponent_div_0_Template(rf, ctx) { if (rf & 1) {
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "@progress/kendo-angular-inputs";
8
+ import * as i3 from "@progress/kendo-angular-dateinputs";
9
+ import * as i4 from "@progress/kendo-angular-buttons";
10
+ import * as i5 from "@memberjunction/ng-shared-generic";
11
+ import * as i6 from "@angular/common";
12
+ function APIKeyCreateDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
13
13
  const _r1 = i0.ɵɵgetCurrentView();
14
14
  i0.ɵɵelementStart(0, "div", 13);
15
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_div_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Step !== "success" ? ctx_r1.close() : null); });
15
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Step !== "success" ? ctx_r1.close() : null); });
16
16
  i0.ɵɵelementEnd();
17
17
  } }
18
- function APIKeyCreateDialogComponent_button_7_Template(rf, ctx) { if (rf & 1) {
18
+ function APIKeyCreateDialogComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
19
19
  const _r3 = i0.ɵɵgetCurrentView();
20
20
  i0.ɵɵelementStart(0, "button", 14);
21
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
21
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
22
22
  i0.ɵɵelement(1, "i", 15);
23
23
  i0.ɵɵelementEnd();
24
24
  } }
25
- function APIKeyCreateDialogComponent_div_8_Template(rf, ctx) { if (rf & 1) {
26
- i0.ɵɵelementStart(0, "div", 16)(1, "div", 17)(2, "div", 18);
25
+ function APIKeyCreateDialogComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "div", 6)(1, "div", 16)(2, "div", 17);
27
27
  i0.ɵɵtext(3, "1");
28
28
  i0.ɵɵelementEnd();
29
- i0.ɵɵelementStart(4, "div", 19);
29
+ i0.ɵɵelementStart(4, "div", 18);
30
30
  i0.ɵɵtext(5, "Configure");
31
31
  i0.ɵɵelementEnd()();
32
- i0.ɵɵelement(6, "div", 20);
33
- i0.ɵɵelementStart(7, "div", 17)(8, "div", 18);
32
+ i0.ɵɵelement(6, "div", 19);
33
+ i0.ɵɵelementStart(7, "div", 16)(8, "div", 17);
34
34
  i0.ɵɵtext(9, "2");
35
35
  i0.ɵɵelementEnd();
36
- i0.ɵɵelementStart(10, "div", 19);
36
+ i0.ɵɵelementStart(10, "div", 18);
37
37
  i0.ɵɵtext(11, "Permissions");
38
38
  i0.ɵɵelementEnd()()();
39
39
  } if (rf & 2) {
@@ -45,10 +45,10 @@ function APIKeyCreateDialogComponent_div_8_Template(rf, ctx) { if (rf & 1) {
45
45
  i0.ɵɵadvance();
46
46
  i0.ɵɵclassProp("active", ctx_r1.Step === "scopes");
47
47
  } }
48
- function APIKeyCreateDialogComponent_div_10_div_19_button_1_Template(rf, ctx) { if (rf & 1) {
48
+ function APIKeyCreateDialogComponent_Conditional_10_Conditional_19_For_2_Template(rf, ctx) { if (rf & 1) {
49
49
  const _r5 = i0.ɵɵgetCurrentView();
50
- i0.ɵɵelementStart(0, "button", 37);
51
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_div_10_div_19_button_1_Template_button_click_0_listener() { const preset_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onPresetSelect(preset_r6)); });
50
+ i0.ɵɵelementStart(0, "button", 34);
51
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_10_Conditional_19_For_2_Template_button_click_0_listener() { const preset_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onPresetSelect(preset_r6)); });
52
52
  i0.ɵɵtext(1);
53
53
  i0.ɵɵelementEnd();
54
54
  } if (rf & 2) {
@@ -58,19 +58,19 @@ function APIKeyCreateDialogComponent_div_10_div_19_button_1_Template(rf, ctx) {
58
58
  i0.ɵɵadvance();
59
59
  i0.ɵɵtextInterpolate1(" ", preset_r6.label, " ");
60
60
  } }
61
- function APIKeyCreateDialogComponent_div_10_div_19_Template(rf, ctx) { if (rf & 1) {
62
- i0.ɵɵelementStart(0, "div", 35);
63
- i0.ɵɵtemplate(1, APIKeyCreateDialogComponent_div_10_div_19_button_1_Template, 2, 3, "button", 36);
61
+ function APIKeyCreateDialogComponent_Conditional_10_Conditional_19_Template(rf, ctx) { if (rf & 1) {
62
+ i0.ɵɵelementStart(0, "div", 29);
63
+ i0.ɵɵrepeaterCreate(1, APIKeyCreateDialogComponent_Conditional_10_Conditional_19_For_2_Template, 2, 3, "button", 33, i0.ɵɵrepeaterTrackByIdentity);
64
64
  i0.ɵɵelementEnd();
65
65
  } if (rf & 2) {
66
66
  const ctx_r1 = i0.ɵɵnextContext(2);
67
67
  i0.ɵɵadvance();
68
- i0.ɵɵproperty("ngForOf", ctx_r1.ExpirationPresets);
68
+ i0.ɵɵrepeater(ctx_r1.ExpirationPresets);
69
69
  } }
70
- function APIKeyCreateDialogComponent_div_10_div_20_Template(rf, ctx) { if (rf & 1) {
70
+ function APIKeyCreateDialogComponent_Conditional_10_Conditional_20_Template(rf, ctx) { if (rf & 1) {
71
71
  const _r7 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "div", 38)(1, "kendo-datepicker", 39);
73
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_div_10_div_20_Template_kendo_datepicker_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ExpiresAt, $event) || (ctx_r1.ExpiresAt = $event); return i0.ɵɵresetView($event); });
72
+ i0.ɵɵelementStart(0, "div", 30)(1, "kendo-datepicker", 35);
73
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_Conditional_10_Conditional_20_Template_kendo_datepicker_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ExpiresAt, $event) || (ctx_r1.ExpiresAt = $event); return i0.ɵɵresetView($event); });
74
74
  i0.ɵɵelementEnd()();
75
75
  } if (rf & 2) {
76
76
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -78,9 +78,9 @@ function APIKeyCreateDialogComponent_div_10_div_20_Template(rf, ctx) { if (rf &
78
78
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ExpiresAt);
79
79
  i0.ɵɵproperty("min", ctx_r1.getMinDate());
80
80
  } }
81
- function APIKeyCreateDialogComponent_div_10_div_21_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelementStart(0, "div", 40);
83
- i0.ɵɵelement(1, "i", 41);
81
+ function APIKeyCreateDialogComponent_Conditional_10_Conditional_21_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "div", 31);
83
+ i0.ɵɵelement(1, "i", 36);
84
84
  i0.ɵɵelementStart(2, "span");
85
85
  i0.ɵɵtext(3);
86
86
  i0.ɵɵpipe(4, "date");
@@ -88,11 +88,11 @@ function APIKeyCreateDialogComponent_div_10_div_21_Template(rf, ctx) { if (rf &
88
88
  } if (rf & 2) {
89
89
  const ctx_r1 = i0.ɵɵnextContext(2);
90
90
  i0.ɵɵadvance(3);
91
- i0.ɵɵtextInterpolate1("Key will expire on ", i0.ɵɵpipeBind2(4, 1, ctx_r1.ExpiresAt, "MMMM d, yyyy"), "");
91
+ i0.ɵɵtextInterpolate1("Key will expire on ", i0.ɵɵpipeBind2(4, 1, ctx_r1.ExpiresAt, "MMMM d, yyyy"));
92
92
  } }
93
- function APIKeyCreateDialogComponent_div_10_div_22_Template(rf, ctx) { if (rf & 1) {
94
- i0.ɵɵelementStart(0, "div", 42);
95
- i0.ɵɵelement(1, "i", 43);
93
+ function APIKeyCreateDialogComponent_Conditional_10_Conditional_22_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementStart(0, "div", 32);
95
+ i0.ɵɵelement(1, "i", 37);
96
96
  i0.ɵɵtext(2);
97
97
  i0.ɵɵelementEnd();
98
98
  } if (rf & 2) {
@@ -100,36 +100,38 @@ function APIKeyCreateDialogComponent_div_10_div_22_Template(rf, ctx) { if (rf &
100
100
  i0.ɵɵadvance(2);
101
101
  i0.ɵɵtextInterpolate1(" ", ctx_r1.Error, " ");
102
102
  } }
103
- function APIKeyCreateDialogComponent_div_10_Template(rf, ctx) { if (rf & 1) {
103
+ function APIKeyCreateDialogComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
104
104
  const _r4 = i0.ɵɵgetCurrentView();
105
- i0.ɵɵelementStart(0, "div", 21)(1, "div", 22)(2, "label", 23);
105
+ i0.ɵɵelementStart(0, "div", 8)(1, "div", 20)(2, "label", 21);
106
106
  i0.ɵɵtext(3, "Key Label");
107
107
  i0.ɵɵelementEnd();
108
- i0.ɵɵelementStart(4, "input", 24);
109
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_div_10_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.Label, $event) || (ctx_r1.Label = $event); return i0.ɵɵresetView($event); });
108
+ i0.ɵɵelementStart(4, "input", 22);
109
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_Conditional_10_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.Label, $event) || (ctx_r1.Label = $event); return i0.ɵɵresetView($event); });
110
110
  i0.ɵɵelementEnd();
111
- i0.ɵɵelementStart(5, "div", 25);
111
+ i0.ɵɵelementStart(5, "div", 23);
112
112
  i0.ɵɵtext(6, "A memorable name to identify this key's purpose");
113
113
  i0.ɵɵelementEnd()();
114
- i0.ɵɵelementStart(7, "div", 22)(8, "label", 26);
114
+ i0.ɵɵelementStart(7, "div", 20)(8, "label", 24);
115
115
  i0.ɵɵtext(9, "Description");
116
116
  i0.ɵɵelementEnd();
117
- i0.ɵɵelementStart(10, "textarea", 27);
118
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_div_10_Template_textarea_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.Description, $event) || (ctx_r1.Description = $event); return i0.ɵɵresetView($event); });
117
+ i0.ɵɵelementStart(10, "textarea", 25);
118
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_Conditional_10_Template_textarea_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.Description, $event) || (ctx_r1.Description = $event); return i0.ɵɵresetView($event); });
119
119
  i0.ɵɵelementEnd()();
120
- i0.ɵɵelementStart(11, "div", 22)(12, "label", 26);
120
+ i0.ɵɵelementStart(11, "div", 20)(12, "label", 24);
121
121
  i0.ɵɵtext(13, "Expiration");
122
122
  i0.ɵɵelementEnd();
123
- i0.ɵɵelementStart(14, "div", 28)(15, "label", 29)(16, "input", 30);
124
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_div_10_Template_input_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NeverExpires, $event) || (ctx_r1.NeverExpires = $event); return i0.ɵɵresetView($event); });
125
- i0.ɵɵlistener("change", function APIKeyCreateDialogComponent_div_10_Template_input_change_16_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNeverExpiresChange()); });
123
+ i0.ɵɵelementStart(14, "div", 26)(15, "label", 27)(16, "input", 28);
124
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_Conditional_10_Template_input_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NeverExpires, $event) || (ctx_r1.NeverExpires = $event); return i0.ɵɵresetView($event); });
125
+ i0.ɵɵlistener("change", function APIKeyCreateDialogComponent_Conditional_10_Template_input_change_16_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNeverExpiresChange()); });
126
126
  i0.ɵɵelementEnd();
127
127
  i0.ɵɵelementStart(17, "span");
128
128
  i0.ɵɵtext(18, "Never expires");
129
129
  i0.ɵɵelementEnd()();
130
- i0.ɵɵtemplate(19, APIKeyCreateDialogComponent_div_10_div_19_Template, 2, 1, "div", 31)(20, APIKeyCreateDialogComponent_div_10_div_20_Template, 2, 2, "div", 32)(21, APIKeyCreateDialogComponent_div_10_div_21_Template, 5, 4, "div", 33);
130
+ i0.ɵɵconditionalCreate(19, APIKeyCreateDialogComponent_Conditional_10_Conditional_19_Template, 3, 0, "div", 29);
131
+ i0.ɵɵconditionalCreate(20, APIKeyCreateDialogComponent_Conditional_10_Conditional_20_Template, 2, 2, "div", 30);
132
+ i0.ɵɵconditionalCreate(21, APIKeyCreateDialogComponent_Conditional_10_Conditional_21_Template, 5, 4, "div", 31);
131
133
  i0.ɵɵelementEnd()();
132
- i0.ɵɵtemplate(22, APIKeyCreateDialogComponent_div_10_div_22_Template, 3, 1, "div", 34);
134
+ i0.ɵɵconditionalCreate(22, APIKeyCreateDialogComponent_Conditional_10_Conditional_22_Template, 3, 1, "div", 32);
133
135
  i0.ɵɵelementEnd();
134
136
  } if (rf & 2) {
135
137
  const ctx_r1 = i0.ɵɵnextContext();
@@ -141,16 +143,16 @@ function APIKeyCreateDialogComponent_div_10_Template(rf, ctx) { if (rf & 1) {
141
143
  i0.ɵɵadvance(6);
142
144
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NeverExpires);
143
145
  i0.ɵɵadvance(3);
144
- i0.ɵɵproperty("ngIf", !ctx_r1.NeverExpires);
146
+ i0.ɵɵconditional(!ctx_r1.NeverExpires ? 19 : -1);
145
147
  i0.ɵɵadvance();
146
- i0.ɵɵproperty("ngIf", !ctx_r1.NeverExpires && (ctx_r1.SelectedPreset == null ? null : ctx_r1.SelectedPreset.days) === -1);
148
+ i0.ɵɵconditional(!ctx_r1.NeverExpires && (ctx_r1.SelectedPreset == null ? null : ctx_r1.SelectedPreset.days) === -1 ? 20 : -1);
147
149
  i0.ɵɵadvance();
148
- i0.ɵɵproperty("ngIf", !ctx_r1.NeverExpires && ctx_r1.ExpiresAt);
150
+ i0.ɵɵconditional(!ctx_r1.NeverExpires && ctx_r1.ExpiresAt ? 21 : -1);
149
151
  i0.ɵɵadvance();
150
- i0.ɵɵproperty("ngIf", ctx_r1.Error);
152
+ i0.ɵɵconditional(ctx_r1.Error ? 22 : -1);
151
153
  } }
152
- function APIKeyCreateDialogComponent_div_11_div_7_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelementStart(0, "div", 53)(1, "span", 54);
154
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
155
+ i0.ɵɵelementStart(0, "div", 40)(1, "span", 46);
154
156
  i0.ɵɵtext(2);
155
157
  i0.ɵɵelementEnd();
156
158
  i0.ɵɵtext(3, " selected ");
@@ -160,11 +162,11 @@ function APIKeyCreateDialogComponent_div_11_div_7_Template(rf, ctx) { if (rf & 1
160
162
  i0.ɵɵadvance(2);
161
163
  i0.ɵɵtextInterpolate(ctx_r1.getSelectedScopeCount());
162
164
  } }
163
- function APIKeyCreateDialogComponent_div_11_mj_loading_8_Template(rf, ctx) { if (rf & 1) {
164
- i0.ɵɵelement(0, "mj-loading", 55);
165
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_8_Template(rf, ctx) { if (rf & 1) {
166
+ i0.ɵɵelement(0, "mj-loading", 41);
165
167
  } }
166
- function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
167
- i0.ɵɵelementStart(0, "span", 75);
168
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵelementStart(0, "span", 61);
168
170
  i0.ɵɵtext(1);
169
171
  i0.ɵɵelementEnd();
170
172
  } if (rf & 2) {
@@ -172,16 +174,16 @@ function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_span_6_Temp
172
174
  i0.ɵɵadvance();
173
175
  i0.ɵɵtextInterpolate1(" ", item_r11.scope.Description, " ");
174
176
  } }
175
- function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_Template(rf, ctx) { if (rf & 1) {
177
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
176
178
  const _r10 = i0.ɵɵgetCurrentView();
177
- i0.ɵɵelementStart(0, "div", 70)(1, "label", 71)(2, "input", 30);
178
- i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_Template_input_ngModelChange_2_listener($event) { const item_r11 = i0.ɵɵrestoreView(_r10).$implicit; i0.ɵɵtwoWayBindingSet(item_r11.selected, $event) || (item_r11.selected = $event); return i0.ɵɵresetView($event); });
179
- i0.ɵɵlistener("change", function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r10); const category_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.updateCategoryState(category_r9)); });
179
+ i0.ɵɵelementStart(0, "div", 57)(1, "label", 58)(2, "input", 28);
180
+ i0.ɵɵtwoWayListener("ngModelChange", function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_For_2_Template_input_ngModelChange_2_listener($event) { const item_r11 = i0.ɵɵrestoreView(_r10).$implicit; i0.ɵɵtwoWayBindingSet(item_r11.selected, $event) || (item_r11.selected = $event); return i0.ɵɵresetView($event); });
181
+ i0.ɵɵlistener("change", function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_For_2_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r10); const category_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.updateCategoryState(category_r9)); });
180
182
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(3, "div", 72)(4, "span", 73);
183
+ i0.ɵɵelementStart(3, "div", 59)(4, "span", 60);
182
184
  i0.ɵɵtext(5);
183
185
  i0.ɵɵelementEnd();
184
- i0.ɵɵtemplate(6, APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_span_6_Template, 2, 1, "span", 74);
186
+ i0.ɵɵconditionalCreate(6, APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_For_2_Conditional_6_Template, 2, 1, "span", 61);
185
187
  i0.ɵɵelementEnd()()();
186
188
  } if (rf & 2) {
187
189
  const item_r11 = ctx.$implicit;
@@ -190,40 +192,40 @@ function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_Template(rf
190
192
  i0.ɵɵadvance(3);
191
193
  i0.ɵɵtextInterpolate(item_r11.scope.Name);
192
194
  i0.ɵɵadvance();
193
- i0.ɵɵproperty("ngIf", item_r11.scope.Description);
195
+ i0.ɵɵconditional(item_r11.scope.Description ? 6 : -1);
194
196
  } }
195
- function APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_Template(rf, ctx) { if (rf & 1) {
196
- i0.ɵɵelementStart(0, "div", 68);
197
- i0.ɵɵtemplate(1, APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_div_1_Template, 7, 3, "div", 69);
197
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵelementStart(0, "div", 56);
199
+ i0.ɵɵrepeaterCreate(1, APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_For_2_Template, 7, 3, "div", 57, i0.ɵɵrepeaterTrackByIdentity);
198
200
  i0.ɵɵelementEnd();
199
201
  } if (rf & 2) {
200
202
  const category_r9 = i0.ɵɵnextContext().$implicit;
201
203
  i0.ɵɵadvance();
202
- i0.ɵɵproperty("ngForOf", category_r9.scopes);
204
+ i0.ɵɵrepeater(category_r9.scopes);
203
205
  } }
204
- function APIKeyCreateDialogComponent_div_11_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
206
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
205
207
  const _r8 = i0.ɵɵgetCurrentView();
206
- i0.ɵɵelementStart(0, "div", 58)(1, "div", 59);
207
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_div_11_div_9_div_1_Template_div_click_1_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCategory(category_r9)); });
208
- i0.ɵɵelementStart(2, "div", 60);
208
+ i0.ɵɵelementStart(0, "div", 47)(1, "div", 48);
209
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Template_div_click_1_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCategory(category_r9)); });
210
+ i0.ɵɵelementStart(2, "div", 49);
209
211
  i0.ɵɵelement(3, "i");
210
- i0.ɵɵelementStart(4, "span", 61);
212
+ i0.ɵɵelementStart(4, "span", 50);
211
213
  i0.ɵɵtext(5);
212
214
  i0.ɵɵelementEnd();
213
- i0.ɵɵelementStart(6, "span", 62);
215
+ i0.ɵɵelementStart(6, "span", 51);
214
216
  i0.ɵɵtext(7);
215
217
  i0.ɵɵelementEnd()();
216
- i0.ɵɵelementStart(8, "div", 63)(9, "label", 64);
217
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_div_11_div_9_div_1_Template_label_click_9_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
218
- i0.ɵɵelementStart(10, "input", 65);
219
- i0.ɵɵlistener("change", function APIKeyCreateDialogComponent_div_11_div_9_div_1_Template_input_change_10_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCategoryAll(category_r9)); });
218
+ i0.ɵɵelementStart(8, "div", 52)(9, "label", 53);
219
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Template_label_click_9_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
220
+ i0.ɵɵelementStart(10, "input", 54);
221
+ i0.ɵɵlistener("change", function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Template_input_change_10_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleCategoryAll(category_r9)); });
220
222
  i0.ɵɵelementEnd();
221
223
  i0.ɵɵelementStart(11, "span");
222
224
  i0.ɵɵtext(12, "All");
223
225
  i0.ɵɵelementEnd()();
224
- i0.ɵɵelement(13, "i", 66);
226
+ i0.ɵɵelement(13, "i", 55);
225
227
  i0.ɵɵelementEnd()();
226
- i0.ɵɵtemplate(14, APIKeyCreateDialogComponent_div_11_div_9_div_1_div_14_Template, 2, 1, "div", 67);
228
+ i0.ɵɵconditionalCreate(14, APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Conditional_14_Template, 3, 0, "div", 56);
227
229
  i0.ɵɵelementEnd();
228
230
  } if (rf & 2) {
229
231
  const category_r9 = ctx.$implicit;
@@ -239,20 +241,20 @@ function APIKeyCreateDialogComponent_div_11_div_9_div_1_Template(rf, ctx) { if (
239
241
  i0.ɵɵadvance(3);
240
242
  i0.ɵɵclassProp("fa-chevron-down", !category_r9.expanded)("fa-chevron-up", category_r9.expanded);
241
243
  i0.ɵɵadvance();
242
- i0.ɵɵproperty("ngIf", category_r9.expanded);
244
+ i0.ɵɵconditional(category_r9.expanded ? 14 : -1);
243
245
  } }
244
- function APIKeyCreateDialogComponent_div_11_div_9_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵelementStart(0, "div", 56);
246
- i0.ɵɵtemplate(1, APIKeyCreateDialogComponent_div_11_div_9_div_1_Template, 15, 12, "div", 57);
246
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
247
+ i0.ɵɵelementStart(0, "div", 42);
248
+ i0.ɵɵrepeaterCreate(1, APIKeyCreateDialogComponent_Conditional_11_Conditional_9_For_2_Template, 15, 12, "div", 47, i0.ɵɵrepeaterTrackByIdentity);
247
249
  i0.ɵɵelementEnd();
248
250
  } if (rf & 2) {
249
251
  const ctx_r1 = i0.ɵɵnextContext(2);
250
252
  i0.ɵɵadvance();
251
- i0.ɵɵproperty("ngForOf", ctx_r1.ScopeCategories);
253
+ i0.ɵɵrepeater(ctx_r1.ScopeCategories);
252
254
  } }
253
- function APIKeyCreateDialogComponent_div_11_div_17_Template(rf, ctx) { if (rf & 1) {
254
- i0.ɵɵelementStart(0, "div", 76);
255
- i0.ɵɵelement(1, "i", 77);
255
+ function APIKeyCreateDialogComponent_Conditional_11_Conditional_17_Template(rf, ctx) { if (rf & 1) {
256
+ i0.ɵɵelementStart(0, "div", 45);
257
+ i0.ɵɵelement(1, "i", 62);
256
258
  i0.ɵɵelementStart(2, "div")(3, "strong");
257
259
  i0.ɵɵtext(4, "Warning: No permissions selected");
258
260
  i0.ɵɵelementEnd();
@@ -264,18 +266,19 @@ function APIKeyCreateDialogComponent_div_11_div_17_Template(rf, ctx) { if (rf &
264
266
  i0.ɵɵtext(9, " and cannot perform any operations. This key will be rejected by all API endpoints until scopes are assigned.");
265
267
  i0.ɵɵelementEnd()()();
266
268
  } }
267
- function APIKeyCreateDialogComponent_div_11_Template(rf, ctx) { if (rf & 1) {
268
- i0.ɵɵelementStart(0, "div", 44)(1, "div", 45)(2, "div", 46)(3, "h4");
269
+ function APIKeyCreateDialogComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 38)(2, "div", 39)(3, "h4");
269
271
  i0.ɵɵtext(4, "Select Permission Scopes");
270
272
  i0.ɵɵelementEnd();
271
273
  i0.ɵɵelementStart(5, "p");
272
274
  i0.ɵɵtext(6, "Choose what this API key can access. You can always modify this later.");
273
275
  i0.ɵɵelementEnd()();
274
- i0.ɵɵtemplate(7, APIKeyCreateDialogComponent_div_11_div_7_Template, 4, 1, "div", 47);
276
+ i0.ɵɵconditionalCreate(7, APIKeyCreateDialogComponent_Conditional_11_Conditional_7_Template, 4, 1, "div", 40);
275
277
  i0.ɵɵelementEnd();
276
- i0.ɵɵtemplate(8, APIKeyCreateDialogComponent_div_11_mj_loading_8_Template, 1, 0, "mj-loading", 48)(9, APIKeyCreateDialogComponent_div_11_div_9_Template, 2, 1, "div", 49);
277
- i0.ɵɵelementStart(10, "div", 50);
278
- i0.ɵɵelement(11, "i", 51);
278
+ i0.ɵɵconditionalCreate(8, APIKeyCreateDialogComponent_Conditional_11_Conditional_8_Template, 1, 0, "mj-loading", 41);
279
+ i0.ɵɵconditionalCreate(9, APIKeyCreateDialogComponent_Conditional_11_Conditional_9_Template, 3, 0, "div", 42);
280
+ i0.ɵɵelementStart(10, "div", 43);
281
+ i0.ɵɵelement(11, "i", 44);
279
282
  i0.ɵɵelementStart(12, "span");
280
283
  i0.ɵɵtext(13, "Tip: Use wildcards like ");
281
284
  i0.ɵɵelementStart(14, "code");
@@ -283,24 +286,24 @@ function APIKeyCreateDialogComponent_div_11_Template(rf, ctx) { if (rf & 1) {
283
286
  i0.ɵɵelementEnd();
284
287
  i0.ɵɵtext(16, " for broad access within a category");
285
288
  i0.ɵɵelementEnd()();
286
- i0.ɵɵtemplate(17, APIKeyCreateDialogComponent_div_11_div_17_Template, 10, 0, "div", 52);
289
+ i0.ɵɵconditionalCreate(17, APIKeyCreateDialogComponent_Conditional_11_Conditional_17_Template, 10, 0, "div", 45);
287
290
  i0.ɵɵelementEnd();
288
291
  } if (rf & 2) {
289
292
  const ctx_r1 = i0.ɵɵnextContext();
290
293
  i0.ɵɵadvance(7);
291
- i0.ɵɵproperty("ngIf", ctx_r1.getSelectedScopeCount() > 0);
294
+ i0.ɵɵconditional(ctx_r1.getSelectedScopeCount() > 0 ? 7 : -1);
292
295
  i0.ɵɵadvance();
293
- i0.ɵɵproperty("ngIf", ctx_r1.IsLoadingScopes);
296
+ i0.ɵɵconditional(ctx_r1.IsLoadingScopes ? 8 : -1);
294
297
  i0.ɵɵadvance();
295
- i0.ɵɵproperty("ngIf", !ctx_r1.IsLoadingScopes);
298
+ i0.ɵɵconditional(!ctx_r1.IsLoadingScopes ? 9 : -1);
296
299
  i0.ɵɵadvance(8);
297
- i0.ɵɵproperty("ngIf", !ctx_r1.IsLoadingScopes && ctx_r1.getSelectedScopeCount() === 0);
300
+ i0.ɵɵconditional(!ctx_r1.IsLoadingScopes && ctx_r1.getSelectedScopeCount() === 0 ? 17 : -1);
298
301
  } }
299
- function APIKeyCreateDialogComponent_div_12_div_23_Template(rf, ctx) { if (rf & 1) {
300
- i0.ɵɵelementStart(0, "div", 87)(1, "span", 88);
302
+ function APIKeyCreateDialogComponent_Conditional_12_Conditional_23_Template(rf, ctx) { if (rf & 1) {
303
+ i0.ɵɵelementStart(0, "div", 71)(1, "span", 72);
301
304
  i0.ɵɵtext(2, "Description:");
302
305
  i0.ɵɵelementEnd();
303
- i0.ɵɵelementStart(3, "span", 89);
306
+ i0.ɵɵelementStart(3, "span", 73);
304
307
  i0.ɵɵtext(4);
305
308
  i0.ɵɵelementEnd()();
306
309
  } if (rf & 2) {
@@ -308,50 +311,50 @@ function APIKeyCreateDialogComponent_div_12_div_23_Template(rf, ctx) { if (rf &
308
311
  i0.ɵɵadvance(4);
309
312
  i0.ɵɵtextInterpolate(ctx_r1.Description);
310
313
  } }
311
- function APIKeyCreateDialogComponent_div_12_Template(rf, ctx) { if (rf & 1) {
314
+ function APIKeyCreateDialogComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
312
315
  const _r12 = i0.ɵɵgetCurrentView();
313
- i0.ɵɵelementStart(0, "div", 78)(1, "div", 79);
314
- i0.ɵɵelement(2, "i", 80);
316
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 63);
317
+ i0.ɵɵelement(2, "i", 64);
315
318
  i0.ɵɵelementEnd();
316
- i0.ɵɵelementStart(3, "h3", 81);
319
+ i0.ɵɵelementStart(3, "h3", 65);
317
320
  i0.ɵɵtext(4, "API Key Created Successfully!");
318
321
  i0.ɵɵelementEnd();
319
- i0.ɵɵelementStart(5, "div", 82)(6, "div", 83);
320
- i0.ɵɵelement(7, "i", 77);
322
+ i0.ɵɵelementStart(5, "div", 66)(6, "div", 67);
323
+ i0.ɵɵelement(7, "i", 62);
321
324
  i0.ɵɵelementStart(8, "span");
322
325
  i0.ɵɵtext(9, "Copy this key now. It won't be shown again!");
323
326
  i0.ɵɵelementEnd()();
324
- i0.ɵɵelementStart(10, "div", 84)(11, "code");
327
+ i0.ɵɵelementStart(10, "div", 68)(11, "code");
325
328
  i0.ɵɵtext(12);
326
329
  i0.ɵɵelementEnd();
327
- i0.ɵɵelementStart(13, "button", 85);
328
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_div_12_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyKey()); });
329
- i0.ɵɵelement(14, "i", 66);
330
+ i0.ɵɵelementStart(13, "button", 69);
331
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_12_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyKey()); });
332
+ i0.ɵɵelement(14, "i", 55);
330
333
  i0.ɵɵelementStart(15, "span");
331
334
  i0.ɵɵtext(16);
332
335
  i0.ɵɵelementEnd()()()();
333
- i0.ɵɵelementStart(17, "div", 86)(18, "div", 87)(19, "span", 88);
336
+ i0.ɵɵelementStart(17, "div", 70)(18, "div", 71)(19, "span", 72);
334
337
  i0.ɵɵtext(20, "Label:");
335
338
  i0.ɵɵelementEnd();
336
- i0.ɵɵelementStart(21, "span", 89);
339
+ i0.ɵɵelementStart(21, "span", 73);
337
340
  i0.ɵɵtext(22);
338
341
  i0.ɵɵelementEnd()();
339
- i0.ɵɵtemplate(23, APIKeyCreateDialogComponent_div_12_div_23_Template, 5, 1, "div", 90);
340
- i0.ɵɵelementStart(24, "div", 87)(25, "span", 88);
342
+ i0.ɵɵconditionalCreate(23, APIKeyCreateDialogComponent_Conditional_12_Conditional_23_Template, 5, 1, "div", 71);
343
+ i0.ɵɵelementStart(24, "div", 71)(25, "span", 72);
341
344
  i0.ɵɵtext(26, "Expires:");
342
345
  i0.ɵɵelementEnd();
343
- i0.ɵɵelementStart(27, "span", 89);
346
+ i0.ɵɵelementStart(27, "span", 73);
344
347
  i0.ɵɵtext(28);
345
348
  i0.ɵɵpipe(29, "date");
346
349
  i0.ɵɵelementEnd()();
347
- i0.ɵɵelementStart(30, "div", 87)(31, "span", 88);
350
+ i0.ɵɵelementStart(30, "div", 71)(31, "span", 72);
348
351
  i0.ɵɵtext(32, "Scopes:");
349
352
  i0.ɵɵelementEnd();
350
- i0.ɵɵelementStart(33, "span", 89);
353
+ i0.ɵɵelementStart(33, "span", 73);
351
354
  i0.ɵɵtext(34);
352
355
  i0.ɵɵelementEnd()()();
353
- i0.ɵɵelementStart(35, "div", 91);
354
- i0.ɵɵelement(36, "i", 92);
356
+ i0.ɵɵelementStart(35, "div", 74);
357
+ i0.ɵɵelement(36, "i", 75);
355
358
  i0.ɵɵelementStart(37, "div")(38, "strong");
356
359
  i0.ɵɵtext(39, "Security Note:");
357
360
  i0.ɵɵelementEnd();
@@ -370,79 +373,67 @@ function APIKeyCreateDialogComponent_div_12_Template(rf, ctx) { if (rf & 1) {
370
373
  i0.ɵɵadvance(6);
371
374
  i0.ɵɵtextInterpolate(ctx_r1.Label);
372
375
  i0.ɵɵadvance();
373
- i0.ɵɵproperty("ngIf", ctx_r1.Description);
376
+ i0.ɵɵconditional(ctx_r1.Description ? 23 : -1);
374
377
  i0.ɵɵadvance(5);
375
378
  i0.ɵɵtextInterpolate1(" ", ctx_r1.NeverExpires ? "Never" : i0.ɵɵpipeBind2(29, 12, ctx_r1.ExpiresAt, "MMMM d, yyyy"), " ");
376
379
  i0.ɵɵadvance(6);
377
380
  i0.ɵɵtextInterpolate1("", ctx_r1.getSelectedScopeCount(), " permissions");
378
381
  } }
379
- function APIKeyCreateDialogComponent_ng_container_14_Template(rf, ctx) { if (rf & 1) {
382
+ function APIKeyCreateDialogComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
380
383
  const _r13 = i0.ɵɵgetCurrentView();
381
- i0.ɵɵelementContainerStart(0);
382
- i0.ɵɵelementStart(1, "button", 93);
383
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_ng_container_14_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToScopes()); });
384
- i0.ɵɵtext(2, " Next: Permissions ");
385
- i0.ɵɵelement(3, "i", 94);
384
+ i0.ɵɵelementStart(0, "button", 76);
385
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToScopes()); });
386
+ i0.ɵɵtext(1, " Next: Permissions ");
387
+ i0.ɵɵelement(2, "i", 77);
386
388
  i0.ɵɵelementEnd();
387
- i0.ɵɵelementStart(4, "button", 95);
388
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_ng_container_14_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
389
- i0.ɵɵtext(5, "Cancel");
389
+ i0.ɵɵelementStart(3, "button", 78);
390
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
391
+ i0.ɵɵtext(4, "Cancel");
390
392
  i0.ɵɵelementEnd();
391
- i0.ɵɵelementContainerEnd();
392
393
  } if (rf & 2) {
393
- i0.ɵɵadvance();
394
394
  i0.ɵɵproperty("themeColor", "primary");
395
395
  } }
396
- function APIKeyCreateDialogComponent_ng_container_15_mj_loading_2_Template(rf, ctx) { if (rf & 1) {
397
- i0.ɵɵelement(0, "mj-loading", 99);
396
+ function APIKeyCreateDialogComponent_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵelement(0, "mj-loading", 80);
398
398
  } if (rf & 2) {
399
399
  i0.ɵɵproperty("showText", false);
400
400
  } }
401
- function APIKeyCreateDialogComponent_ng_container_15_span_3_Template(rf, ctx) { if (rf & 1) {
401
+ function APIKeyCreateDialogComponent_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
402
402
  i0.ɵɵelementStart(0, "span");
403
403
  i0.ɵɵelement(1, "i", 4);
404
404
  i0.ɵɵtext(2, " Generate Key ");
405
405
  i0.ɵɵelementEnd();
406
406
  } }
407
- function APIKeyCreateDialogComponent_ng_container_15_Template(rf, ctx) { if (rf & 1) {
407
+ function APIKeyCreateDialogComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
408
408
  const _r14 = i0.ɵɵgetCurrentView();
409
- i0.ɵɵelementContainerStart(0);
410
- i0.ɵɵelementStart(1, "button", 96);
411
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_ng_container_15_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createKey()); });
412
- i0.ɵɵtemplate(2, APIKeyCreateDialogComponent_ng_container_15_mj_loading_2_Template, 1, 1, "mj-loading", 97)(3, APIKeyCreateDialogComponent_ng_container_15_span_3_Template, 3, 0, "span", 12);
409
+ i0.ɵɵelementStart(0, "button", 79);
410
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createKey()); });
411
+ i0.ɵɵconditionalCreate(1, APIKeyCreateDialogComponent_Conditional_15_Conditional_1_Template, 1, 1, "mj-loading", 80);
412
+ i0.ɵɵconditionalCreate(2, APIKeyCreateDialogComponent_Conditional_15_Conditional_2_Template, 3, 0, "span");
413
413
  i0.ɵɵelementEnd();
414
- i0.ɵɵelementStart(4, "button", 95);
415
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_ng_container_15_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goBack()); });
416
- i0.ɵɵelement(5, "i", 98);
417
- i0.ɵɵtext(6, " Back ");
414
+ i0.ɵɵelementStart(3, "button", 78);
415
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_15_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goBack()); });
416
+ i0.ɵɵelement(4, "i", 81);
417
+ i0.ɵɵtext(5, " Back ");
418
418
  i0.ɵɵelementEnd();
419
- i0.ɵɵelementContainerEnd();
420
419
  } if (rf & 2) {
421
420
  const ctx_r1 = i0.ɵɵnextContext();
422
- i0.ɵɵadvance();
423
421
  i0.ɵɵproperty("themeColor", "primary")("disabled", ctx_r1.IsCreating);
424
422
  i0.ɵɵadvance();
425
- i0.ɵɵproperty("ngIf", ctx_r1.IsCreating);
423
+ i0.ɵɵconditional(ctx_r1.IsCreating ? 1 : -1);
426
424
  i0.ɵɵadvance();
427
- i0.ɵɵproperty("ngIf", !ctx_r1.IsCreating);
425
+ i0.ɵɵconditional(!ctx_r1.IsCreating ? 2 : -1);
428
426
  } }
429
- function APIKeyCreateDialogComponent_ng_container_16_Template(rf, ctx) { if (rf & 1) {
427
+ function APIKeyCreateDialogComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
430
428
  const _r15 = i0.ɵɵgetCurrentView();
431
- i0.ɵɵelementContainerStart(0);
432
- i0.ɵɵelementStart(1, "button", 93);
433
- i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_ng_container_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
434
- i0.ɵɵelement(2, "i", 100);
435
- i0.ɵɵtext(3, " Done ");
429
+ i0.ɵɵelementStart(0, "button", 76);
430
+ i0.ɵɵlistener("click", function APIKeyCreateDialogComponent_Conditional_16_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
431
+ i0.ɵɵelement(1, "i", 82);
432
+ i0.ɵɵtext(2, " Done ");
436
433
  i0.ɵɵelementEnd();
437
- i0.ɵɵelementContainerEnd();
438
434
  } if (rf & 2) {
439
- i0.ɵɵadvance();
440
435
  i0.ɵɵproperty("themeColor", "primary");
441
436
  } }
442
- /** Tree shaking prevention function */
443
- export function LoadAPIKeyCreateDialog() {
444
- // This function prevents tree shaking
445
- }
446
437
  /**
447
438
  * Dialog for creating new API keys
448
439
  * Shows the raw key only once - it cannot be recovered after closing
@@ -710,48 +701,52 @@ export class APIKeyCreateDialogComponent {
710
701
  }
711
702
  static ɵfac = function APIKeyCreateDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIKeyCreateDialogComponent)(); };
712
703
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIKeyCreateDialogComponent, selectors: [["mj-api-key-create-dialog"]], hostBindings: function APIKeyCreateDialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
713
- i0.ɵɵlistener("keydown.escape", function APIKeyCreateDialogComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, false, i0.ɵɵresolveDocument);
714
- } }, inputs: { Visible: "Visible" }, outputs: { VisibleChange: "VisibleChange", Created: "Created", Closed: "Closed" }, decls: 17, vars: 11, consts: [["class", "slideout-backdrop", 3, "click", 4, "ngIf"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-key"], ["class", "slideout-close", "title", "Close (Esc)", 3, "click", 4, "ngIf"], ["class", "step-indicator", 4, "ngIf"], [1, "slideout-content"], ["class", "step-panel", 4, "ngIf"], ["class", "step-panel scopes-step", 4, "ngIf"], ["class", "step-panel success-step", 4, "ngIf"], [1, "slideout-footer"], [4, "ngIf"], [1, "slideout-backdrop", 3, "click"], ["title", "Close (Esc)", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "step-indicator"], [1, "step"], [1, "step-number"], [1, "step-label"], [1, "step-connector"], [1, "step-panel"], [1, "form-section"], [1, "form-label", "required"], ["kendoTextBox", "", "placeholder", "e.g., ElevenLabs Integration, CI/CD Pipeline", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "form-hint"], [1, "form-label"], ["kendoTextArea", "", "placeholder", "Optional notes about how this key will be used...", 1, "form-textarea", 3, "ngModelChange", "ngModel", "rows"], [1, "expiration-options"], [1, "checkbox-label"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "change", "ngModel"], ["class", "preset-buttons", 4, "ngIf"], ["class", "custom-date", 4, "ngIf"], ["class", "expiration-preview", 4, "ngIf"], ["class", "error-message", 4, "ngIf"], [1, "preset-buttons"], ["class", "preset-btn", 3, "active", "click", 4, "ngFor", "ngForOf"], [1, "preset-btn", 3, "click"], [1, "custom-date"], ["format", "MMM d, yyyy", "placeholder", "Select expiration date", 3, "ngModelChange", "ngModel", "min"], [1, "expiration-preview"], [1, "fa-solid", "fa-calendar-check"], [1, "error-message"], [1, "fa-solid", "fa-circle-exclamation"], [1, "step-panel", "scopes-step"], [1, "scopes-header"], [1, "scopes-info"], ["class", "scopes-count", 4, "ngIf"], ["text", "Loading scopes...", 4, "ngIf"], ["class", "scope-categories", 4, "ngIf"], [1, "scope-tip"], [1, "fa-solid", "fa-lightbulb"], ["class", "no-scopes-warning", 4, "ngIf"], [1, "scopes-count"], [1, "count"], ["text", "Loading scopes..."], [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-badge"], [1, "category-right"], [1, "select-all-label", 3, "click"], ["type", "checkbox", "kendoCheckBox", "", 3, "change", "checked"], [1, "fa-solid"], ["class", "category-scopes", 4, "ngIf"], [1, "category-scopes"], ["class", "scope-item", 4, "ngFor", "ngForOf"], [1, "scope-item"], [1, "scope-label"], [1, "scope-info"], [1, "scope-name"], ["class", "scope-desc", 4, "ngIf"], [1, "scope-desc"], [1, "no-scopes-warning"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "step-panel", "success-step"], [1, "success-icon"], [1, "fa-solid", "fa-check-circle"], [1, "success-title"], [1, "key-display"], [1, "key-warning"], [1, "key-value"], [1, "copy-btn", 3, "click"], [1, "key-details"], [1, "detail-row"], [1, "detail-label"], [1, "detail-value"], ["class", "detail-row", 4, "ngIf"], [1, "security-note"], [1, "fa-solid", "fa-shield-check"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-arrow-right"], ["kendoButton", "", 3, "click"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], ["size", "small", 3, "showText", 4, "ngIf"], [1, "fa-solid", "fa-arrow-left"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-check"]], template: function APIKeyCreateDialogComponent_Template(rf, ctx) { if (rf & 1) {
715
- i0.ɵɵtemplate(0, APIKeyCreateDialogComponent_div_0_Template, 1, 0, "div", 0);
704
+ i0.ɵɵlistener("keydown.escape", function APIKeyCreateDialogComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, i0.ɵɵresolveDocument);
705
+ } }, inputs: { Visible: "Visible" }, outputs: { VisibleChange: "VisibleChange", Created: "Created", Closed: "Closed" }, standalone: false, decls: 17, vars: 11, consts: [[1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-key"], ["title", "Close (Esc)", 1, "slideout-close"], [1, "step-indicator"], [1, "slideout-content"], [1, "step-panel"], [1, "step-panel", "scopes-step"], [1, "step-panel", "success-step"], [1, "slideout-footer"], ["kendoButton", "", 3, "themeColor"], [1, "slideout-backdrop", 3, "click"], ["title", "Close (Esc)", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "step"], [1, "step-number"], [1, "step-label"], [1, "step-connector"], [1, "form-section"], [1, "form-label", "required"], ["kendoTextBox", "", "placeholder", "e.g., ElevenLabs Integration, CI/CD Pipeline", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "form-hint"], [1, "form-label"], ["kendoTextArea", "", "placeholder", "Optional notes about how this key will be used...", 1, "form-textarea", 3, "ngModelChange", "ngModel", "rows"], [1, "expiration-options"], [1, "checkbox-label"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "change", "ngModel"], [1, "preset-buttons"], [1, "custom-date"], [1, "expiration-preview"], [1, "error-message"], [1, "preset-btn", 3, "active"], [1, "preset-btn", 3, "click"], ["format", "MMM d, yyyy", "placeholder", "Select expiration date", 3, "ngModelChange", "ngModel", "min"], [1, "fa-solid", "fa-calendar-check"], [1, "fa-solid", "fa-circle-exclamation"], [1, "scopes-header"], [1, "scopes-info"], [1, "scopes-count"], ["text", "Loading scopes..."], [1, "scope-categories"], [1, "scope-tip"], [1, "fa-solid", "fa-lightbulb"], [1, "no-scopes-warning"], [1, "count"], [1, "scope-category"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-badge"], [1, "category-right"], [1, "select-all-label", 3, "click"], ["type", "checkbox", "kendoCheckBox", "", 3, "change", "checked"], [1, "fa-solid"], [1, "category-scopes"], [1, "scope-item"], [1, "scope-label"], [1, "scope-info"], [1, "scope-name"], [1, "scope-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "success-icon"], [1, "fa-solid", "fa-check-circle"], [1, "success-title"], [1, "key-display"], [1, "key-warning"], [1, "key-value"], [1, "copy-btn", 3, "click"], [1, "key-details"], [1, "detail-row"], [1, "detail-label"], [1, "detail-value"], [1, "security-note"], [1, "fa-solid", "fa-shield-check"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-arrow-right"], ["kendoButton", "", 3, "click"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-arrow-left"], [1, "fa-solid", "fa-check"]], template: function APIKeyCreateDialogComponent_Template(rf, ctx) { if (rf & 1) {
706
+ i0.ɵɵconditionalCreate(0, APIKeyCreateDialogComponent_Conditional_0_Template, 1, 0, "div", 0);
716
707
  i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
717
708
  i0.ɵɵelement(4, "i", 4);
718
709
  i0.ɵɵelementStart(5, "span");
719
710
  i0.ɵɵtext(6, "Generate New API Key");
720
711
  i0.ɵɵelementEnd()();
721
- i0.ɵɵtemplate(7, APIKeyCreateDialogComponent_button_7_Template, 2, 0, "button", 5);
712
+ i0.ɵɵconditionalCreate(7, APIKeyCreateDialogComponent_Conditional_7_Template, 2, 0, "button", 5);
722
713
  i0.ɵɵelementEnd();
723
- i0.ɵɵtemplate(8, APIKeyCreateDialogComponent_div_8_Template, 12, 8, "div", 6);
714
+ i0.ɵɵconditionalCreate(8, APIKeyCreateDialogComponent_Conditional_8_Template, 12, 8, "div", 6);
724
715
  i0.ɵɵelementStart(9, "div", 7);
725
- i0.ɵɵtemplate(10, APIKeyCreateDialogComponent_div_10_Template, 23, 8, "div", 8)(11, APIKeyCreateDialogComponent_div_11_Template, 18, 4, "div", 9)(12, APIKeyCreateDialogComponent_div_12_Template, 41, 15, "div", 10);
716
+ i0.ɵɵconditionalCreate(10, APIKeyCreateDialogComponent_Conditional_10_Template, 23, 8, "div", 8);
717
+ i0.ɵɵconditionalCreate(11, APIKeyCreateDialogComponent_Conditional_11_Template, 18, 4, "div", 9);
718
+ i0.ɵɵconditionalCreate(12, APIKeyCreateDialogComponent_Conditional_12_Template, 41, 15, "div", 10);
726
719
  i0.ɵɵelementEnd();
727
720
  i0.ɵɵelementStart(13, "div", 11);
728
- i0.ɵɵtemplate(14, APIKeyCreateDialogComponent_ng_container_14_Template, 6, 1, "ng-container", 12)(15, APIKeyCreateDialogComponent_ng_container_15_Template, 7, 4, "ng-container", 12)(16, APIKeyCreateDialogComponent_ng_container_16_Template, 4, 1, "ng-container", 12);
721
+ i0.ɵɵconditionalCreate(14, APIKeyCreateDialogComponent_Conditional_14_Template, 5, 1);
722
+ i0.ɵɵconditionalCreate(15, APIKeyCreateDialogComponent_Conditional_15_Template, 6, 4);
723
+ i0.ɵɵconditionalCreate(16, APIKeyCreateDialogComponent_Conditional_16_Template, 3, 1, "button", 12);
729
724
  i0.ɵɵelementEnd()();
730
725
  } if (rf & 2) {
731
- i0.ɵɵproperty("ngIf", ctx.Visible);
726
+ i0.ɵɵconditional(ctx.Visible ? 0 : -1);
732
727
  i0.ɵɵadvance();
733
728
  i0.ɵɵclassProp("open", ctx.Visible);
734
729
  i0.ɵɵadvance(6);
735
- i0.ɵɵproperty("ngIf", ctx.Step !== "success");
730
+ i0.ɵɵconditional(ctx.Step !== "success" ? 7 : -1);
736
731
  i0.ɵɵadvance();
737
- i0.ɵɵproperty("ngIf", ctx.Step !== "success");
732
+ i0.ɵɵconditional(ctx.Step !== "success" ? 8 : -1);
738
733
  i0.ɵɵadvance(2);
739
- i0.ɵɵproperty("ngIf", ctx.Step === "configure");
734
+ i0.ɵɵconditional(ctx.Step === "configure" ? 10 : -1);
740
735
  i0.ɵɵadvance();
741
- i0.ɵɵproperty("ngIf", ctx.Step === "scopes");
736
+ i0.ɵɵconditional(ctx.Step === "scopes" ? 11 : -1);
742
737
  i0.ɵɵadvance();
743
- i0.ɵɵproperty("ngIf", ctx.Step === "success");
738
+ i0.ɵɵconditional(ctx.Step === "success" ? 12 : -1);
744
739
  i0.ɵɵadvance(2);
745
- i0.ɵɵproperty("ngIf", ctx.Step === "configure");
740
+ i0.ɵɵconditional(ctx.Step === "configure" ? 14 : -1);
746
741
  i0.ɵɵadvance();
747
- i0.ɵɵproperty("ngIf", ctx.Step === "scopes");
742
+ i0.ɵɵconditional(ctx.Step === "scopes" ? 15 : -1);
748
743
  i0.ɵɵadvance();
749
- i0.ɵɵproperty("ngIf", ctx.Step === "success");
750
- } }, dependencies: [i1.NgForOf, i1.NgIf, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.TextAreaDirective, i3.TextBoxDirective, i3.CheckBoxDirective, i4.DatePickerComponent, i5.ButtonComponent, i6.LoadingComponent, i1.DatePipe], 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, #fafafa 0%, #f3f4f6 100%);\n border-bottom: 1px solid #e5e7eb;\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: #1f2937;\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.slideout-close[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n border-radius: 8px;\n color: #9ca3af;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close[_ngcontent-%COMP%]:hover {\n background: rgba(0, 0, 0, 0.05);\n color: #374151;\n}\n\n\n\n.slideout-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.step-panel[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.slideout-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%);\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button {\n min-width: 100px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .slideout-footer .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%] .slideout-footer .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button i {\n margin: 0 5px;\n}\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.step[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n}\n\n.step-number[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 2px solid #d1d5db;\n border-radius: 50%;\n font-weight: 600;\n font-size: 14px;\n color: #6b7280;\n transition: all 0.2s ease;\n}\n\n.step.active[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.step.completed[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: #10b981;\n border-color: #10b981;\n color: white;\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.step.active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: #92400e;\n font-weight: 600;\n}\n\n.step-connector[_ngcontent-%COMP%] {\n width: 80px;\n height: 2px;\n background: #d1d5db;\n margin: 0 16px;\n margin-bottom: 20px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, #10b981, #f59e0b);\n}\n\n\n\n.dialog-content[_ngcontent-%COMP%] {\n padding: 24px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.scopes-content[_ngcontent-%COMP%] {\n max-height: 450px;\n}\n\n\n\n.form-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: block;\n font-weight: 600;\n font-size: 14px;\n color: #374151;\n margin-bottom: 8px;\n}\n\n.form-label.required[_ngcontent-%COMP%]::after {\n content: ' *';\n color: #ef4444;\n}\n\n.form-input[_ngcontent-%COMP%], \n.form-textarea[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.form-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6b7280;\n margin-top: 6px;\n}\n\n\n\n.expiration-options[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n}\n\n.preset-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.preset-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.preset-btn[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n background: #fffbeb;\n}\n\n.preset-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.custom-date[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n.expiration-preview[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: #ecfdf5;\n border-radius: 8px;\n font-size: 13px;\n color: #059669;\n}\n\n.expiration-preview[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 8px;\n color: #dc2626;\n font-size: 14px;\n}\n\n\n\n.scopes-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n}\n\n.scopes-info[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.scopes-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n.scopes-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n}\n\n.scopes-count[_ngcontent-%COMP%] .count[_ngcontent-%COMP%] {\n font-weight: 700;\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-badge[_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.select-all-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n cursor: pointer;\n}\n\n.category-right[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-size: 12px;\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.scope-tip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #eff6ff;\n border-radius: 8px;\n margin-top: 16px;\n font-size: 13px;\n color: #1d4ed8;\n}\n\n.scope-tip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n.scope-tip[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #dbeafe;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: monospace;\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-top: 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}\n\n\n\n.success-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-icon[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.success-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 64px;\n color: #10b981;\n}\n\n.success-title[_ngcontent-%COMP%] {\n margin: 0 0 24px 0;\n font-size: 20px;\n font-weight: 700;\n color: #1f2937;\n}\n\n\n\n.key-display[_ngcontent-%COMP%] {\n background: #1f2937;\n border-radius: 12px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.key-warning[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 16px;\n background: rgba(245, 158, 11, 0.2);\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 13px;\n font-weight: 500;\n color: #fcd34d;\n}\n\n.key-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #374151;\n border-radius: 8px;\n padding: 12px 16px;\n}\n\n.key-value[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n flex: 1;\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 14px;\n color: #10b981;\n word-break: break-all;\n text-align: left;\n}\n\n.copy-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #4b5563;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.copy-btn[_ngcontent-%COMP%]:hover {\n background: #6b7280;\n}\n\n.copy-btn.copied[_ngcontent-%COMP%] {\n background: #10b981;\n}\n\n\n\n.key-details[_ngcontent-%COMP%] {\n text-align: left;\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n\n.detail-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.detail-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #1f2937;\n}\n\n\n\n.security-note[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n text-align: left;\n padding: 16px;\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n border-radius: 10px;\n font-size: 13px;\n color: #065f46;\n}\n\n.security-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #10b981;\n margin-top: 2px;\n}\n\n.security-note[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 4px;\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}"] });
744
+ i0.ɵɵconditional(ctx.Step === "success" ? 16 : -1);
745
+ } }, dependencies: [i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.TextBoxDirective, i2.TextAreaDirective, i2.CheckBoxDirective, i3.DatePickerComponent, i4.ButtonComponent, i5.LoadingComponent, i6.DatePipe], 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, #fafafa 0%, #f3f4f6 100%);\n border-bottom: 1px solid #e5e7eb;\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: #1f2937;\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.slideout-close[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n border-radius: 8px;\n color: #9ca3af;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close[_ngcontent-%COMP%]:hover {\n background: rgba(0, 0, 0, 0.05);\n color: #374151;\n}\n\n\n\n.slideout-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.step-panel[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.slideout-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%);\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button {\n min-width: 100px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n[_nghost-%COMP%] .slideout-footer .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%] .slideout-footer .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button i {\n margin: 0 5px;\n}\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.step[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n}\n\n.step-number[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 2px solid #d1d5db;\n border-radius: 50%;\n font-weight: 600;\n font-size: 14px;\n color: #6b7280;\n transition: all 0.2s ease;\n}\n\n.step.active[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.step.completed[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: #10b981;\n border-color: #10b981;\n color: white;\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.step.active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: #92400e;\n font-weight: 600;\n}\n\n.step-connector[_ngcontent-%COMP%] {\n width: 80px;\n height: 2px;\n background: #d1d5db;\n margin: 0 16px;\n margin-bottom: 20px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, #10b981, #f59e0b);\n}\n\n\n\n.dialog-content[_ngcontent-%COMP%] {\n padding: 24px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.scopes-content[_ngcontent-%COMP%] {\n max-height: 450px;\n}\n\n\n\n.form-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: block;\n font-weight: 600;\n font-size: 14px;\n color: #374151;\n margin-bottom: 8px;\n}\n\n.form-label.required[_ngcontent-%COMP%]::after {\n content: ' *';\n color: #ef4444;\n}\n\n.form-input[_ngcontent-%COMP%], \n.form-textarea[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.form-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6b7280;\n margin-top: 6px;\n}\n\n\n\n.expiration-options[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n}\n\n.preset-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.preset-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.preset-btn[_ngcontent-%COMP%]:hover {\n border-color: #f59e0b;\n background: #fffbeb;\n}\n\n.preset-btn.active[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.custom-date[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n.expiration-preview[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: #ecfdf5;\n border-radius: 8px;\n font-size: 13px;\n color: #059669;\n}\n\n.expiration-preview[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 8px;\n color: #dc2626;\n font-size: 14px;\n}\n\n\n\n.scopes-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n}\n\n.scopes-info[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.scopes-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n.scopes-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n}\n\n.scopes-count[_ngcontent-%COMP%] .count[_ngcontent-%COMP%] {\n font-weight: 700;\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-badge[_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.select-all-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n cursor: pointer;\n}\n\n.category-right[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-size: 12px;\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.scope-tip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #eff6ff;\n border-radius: 8px;\n margin-top: 16px;\n font-size: 13px;\n color: #1d4ed8;\n}\n\n.scope-tip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n.scope-tip[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: #dbeafe;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: monospace;\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-top: 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}\n\n\n\n.success-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-icon[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.success-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 64px;\n color: #10b981;\n}\n\n.success-title[_ngcontent-%COMP%] {\n margin: 0 0 24px 0;\n font-size: 20px;\n font-weight: 700;\n color: #1f2937;\n}\n\n\n\n.key-display[_ngcontent-%COMP%] {\n background: #1f2937;\n border-radius: 12px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.key-warning[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 16px;\n background: rgba(245, 158, 11, 0.2);\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 13px;\n font-weight: 500;\n color: #fcd34d;\n}\n\n.key-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #374151;\n border-radius: 8px;\n padding: 12px 16px;\n}\n\n.key-value[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n flex: 1;\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 14px;\n color: #10b981;\n word-break: break-all;\n text-align: left;\n}\n\n.copy-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #4b5563;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.copy-btn[_ngcontent-%COMP%]:hover {\n background: #6b7280;\n}\n\n.copy-btn.copied[_ngcontent-%COMP%] {\n background: #10b981;\n}\n\n\n\n.key-details[_ngcontent-%COMP%] {\n text-align: left;\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n\n.detail-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.detail-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #1f2937;\n}\n\n\n\n.security-note[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n text-align: left;\n padding: 16px;\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n border-radius: 10px;\n font-size: 13px;\n color: #065f46;\n}\n\n.security-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #10b981;\n margin-top: 2px;\n}\n\n.security-note[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 4px;\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}"] });
751
746
  }
752
747
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(APIKeyCreateDialogComponent, [{
753
748
  type: Component,
754
- args: [{ selector: 'mj-api-key-create-dialog', template: "<!-- Slide-out Backdrop -->\n<div class=\"slideout-backdrop\" *ngIf=\"Visible\" (click)=\"Step !== 'success' ? close() : null\"></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>Generate New API Key</span>\n </div>\n <button class=\"slideout-close\" *ngIf=\"Step !== 'success'\" (click)=\"close()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Step Indicator -->\n <div class=\"step-indicator\" *ngIf=\"Step !== 'success'\">\n <div class=\"step\" [class.active]=\"Step === 'configure'\" [class.completed]=\"Step === 'scopes'\">\n <div class=\"step-number\">1</div>\n <div class=\"step-label\">Configure</div>\n </div>\n <div class=\"step-connector\" [class.active]=\"Step === 'scopes'\"></div>\n <div class=\"step\" [class.active]=\"Step === 'scopes'\">\n <div class=\"step-number\">2</div>\n <div class=\"step-label\">Permissions</div>\n </div>\n </div>\n\n <div class=\"slideout-content\">\n <!-- Configure Step -->\n <div class=\"step-panel\" *ngIf=\"Step === 'configure'\">\n <div class=\"form-section\">\n <label class=\"form-label required\">Key Label</label>\n <input kendoTextBox [(ngModel)]=\"Label\"\n placeholder=\"e.g., ElevenLabs Integration, CI/CD Pipeline\"\n class=\"form-input\" />\n <div class=\"form-hint\">A memorable name to identify this key's purpose</div>\n </div>\n\n <div class=\"form-section\">\n <label class=\"form-label\">Description</label>\n <textarea kendoTextArea [(ngModel)]=\"Description\"\n placeholder=\"Optional notes about how this key will be used...\"\n [rows]=\"3\"\n class=\"form-textarea\"></textarea>\n </div>\n\n <div class=\"form-section\">\n <label class=\"form-label\">Expiration</label>\n <div class=\"expiration-options\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox\n [(ngModel)]=\"NeverExpires\"\n (change)=\"onNeverExpiresChange()\" />\n <span>Never expires</span>\n </label>\n\n <div class=\"preset-buttons\" *ngIf=\"!NeverExpires\">\n <button *ngFor=\"let preset of ExpirationPresets\"\n class=\"preset-btn\"\n [class.active]=\"SelectedPreset === preset\"\n (click)=\"onPresetSelect(preset)\">\n {{preset.label}}\n </button>\n </div>\n\n <div class=\"custom-date\" *ngIf=\"!NeverExpires && SelectedPreset?.days === -1\">\n <kendo-datepicker [(ngModel)]=\"ExpiresAt\"\n [min]=\"getMinDate()\"\n format=\"MMM d, yyyy\"\n placeholder=\"Select expiration date\">\n </kendo-datepicker>\n </div>\n\n <div class=\"expiration-preview\" *ngIf=\"!NeverExpires && ExpiresAt\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Key will expire on {{ExpiresAt | date:'MMMM d, yyyy'}}</span>\n </div>\n </div>\n </div>\n\n <div class=\"error-message\" *ngIf=\"Error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{Error}}\n </div>\n </div>\n\n <!-- Scopes Step -->\n <div class=\"step-panel scopes-step\" *ngIf=\"Step === 'scopes'\">\n <div class=\"scopes-header\">\n <div class=\"scopes-info\">\n <h4>Select Permission Scopes</h4>\n <p>Choose what this API key can access. You can always modify this later.</p>\n </div>\n <div class=\"scopes-count\" *ngIf=\"getSelectedScopeCount() > 0\">\n <span class=\"count\">{{getSelectedScopeCount()}}</span> selected\n </div>\n </div>\n\n <mj-loading *ngIf=\"IsLoadingScopes\" text=\"Loading scopes...\"></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-badge\">{{category.scopes.length}}</span>\n </div>\n <div class=\"category-right\">\n <label class=\"select-all-label\" (click)=\"$event.stopPropagation()\">\n <input type=\"checkbox\" kendoCheckBox\n [checked]=\"category.allSelected\"\n (change)=\"toggleCategoryAll(category)\" />\n <span>All</span>\n </label>\n <i class=\"fa-solid\" [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 (change)=\"updateCategoryState(category)\" />\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\n <div class=\"scope-tip\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n <span>Tip: Use wildcards like <code>entities:*</code> for broad access within a category</span>\n </div>\n\n <!-- No Scopes Warning -->\n <div class=\"no-scopes-warning\" *ngIf=\"!IsLoadingScopes && getSelectedScopeCount() === 0\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Warning: No permissions selected</strong>\n <p>API keys without any assigned scopes will have <strong>no permissions</strong> and cannot perform any operations. This key will be rejected by all API endpoints until scopes are assigned.</p>\n </div>\n </div>\n </div>\n\n <!-- Success Step -->\n <div class=\"step-panel success-step\" *ngIf=\"Step === 'success'\">\n <div class=\"success-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <h3 class=\"success-title\">API Key Created Successfully!</h3>\n\n <div class=\"key-display\">\n <div class=\"key-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>Copy this key now. It won't be shown again!</span>\n </div>\n\n <div class=\"key-value\">\n <code>{{RawApiKey}}</code>\n <button class=\"copy-btn\" (click)=\"copyKey()\" [class.copied]=\"KeyCopied\">\n <i class=\"fa-solid\" [class.fa-copy]=\"!KeyCopied\" [class.fa-check]=\"KeyCopied\"></i>\n <span>{{KeyCopied ? 'Copied!' : 'Copy'}}</span>\n </button>\n </div>\n </div>\n\n <div class=\"key-details\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Label:</span>\n <span class=\"detail-value\">{{Label}}</span>\n </div>\n <div class=\"detail-row\" *ngIf=\"Description\">\n <span class=\"detail-label\">Description:</span>\n <span class=\"detail-value\">{{Description}}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Expires:</span>\n <span class=\"detail-value\">\n {{NeverExpires ? 'Never' : (ExpiresAt | date:'MMMM d, yyyy')}}\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Scopes:</span>\n <span class=\"detail-value\">{{getSelectedScopeCount()}} permissions</span>\n </div>\n </div>\n\n <div class=\"security-note\">\n <i class=\"fa-solid fa-shield-check\"></i>\n <div>\n <strong>Security Note:</strong>\n Store this key securely. We only store a hash - the original key cannot be recovered.\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"slideout-footer\">\n <ng-container *ngIf=\"Step === 'configure'\">\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"goToScopes()\">\n Next: Permissions\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button kendoButton (click)=\"close()\">Cancel</button>\n </ng-container>\n\n <ng-container *ngIf=\"Step === 'scopes'\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"IsCreating\"\n (click)=\"createKey()\">\n <mj-loading *ngIf=\"IsCreating\" [showText]=\"false\" size=\"small\"></mj-loading>\n <span *ngIf=\"!IsCreating\">\n <i class=\"fa-solid fa-key\"></i>\n Generate Key\n </span>\n </button>\n <button kendoButton (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"Step === 'success'\">\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"close()\">\n <i class=\"fa-solid fa-check\"></i>\n Done\n </button>\n </ng-container>\n </div>\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, #fafafa 0%, #f3f4f6 100%);\n border-bottom: 1px solid #e5e7eb;\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: #1f2937;\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.slideout-close {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n border-radius: 8px;\n color: #9ca3af;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close:hover {\n background: rgba(0, 0, 0, 0.05);\n color: #374151;\n}\n\n/* Panel Content */\n.slideout-content {\n flex: 1;\n overflow-y: auto;\n}\n\n.step-panel {\n padding: 24px;\n}\n\n/* Panel Footer */\n.slideout-footer {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%);\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n:host ::ng-deep .slideout-footer .k-button {\n min-width: 100px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .slideout-footer .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 .slideout-footer .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n:host ::ng-deep .slideout-footer .k-button i {\n margin: 0 5px;\n}\n\n/* Step Indicator */\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.step {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n}\n\n.step-number {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 2px solid #d1d5db;\n border-radius: 50%;\n font-weight: 600;\n font-size: 14px;\n color: #6b7280;\n transition: all 0.2s ease;\n}\n\n.step.active .step-number {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.step.completed .step-number {\n background: #10b981;\n border-color: #10b981;\n color: white;\n}\n\n.step-label {\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.step.active .step-label {\n color: #92400e;\n font-weight: 600;\n}\n\n.step-connector {\n width: 80px;\n height: 2px;\n background: #d1d5db;\n margin: 0 16px;\n margin-bottom: 20px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active {\n background: linear-gradient(90deg, #10b981, #f59e0b);\n}\n\n/* Dialog Content */\n.dialog-content {\n padding: 24px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.scopes-content {\n max-height: 450px;\n}\n\n/* Form Sections */\n.form-section {\n margin-bottom: 24px;\n}\n\n.form-label {\n display: block;\n font-weight: 600;\n font-size: 14px;\n color: #374151;\n margin-bottom: 8px;\n}\n\n.form-label.required::after {\n content: ' *';\n color: #ef4444;\n}\n\n.form-input,\n.form-textarea {\n width: 100%;\n}\n\n.form-hint {\n font-size: 12px;\n color: #6b7280;\n margin-top: 6px;\n}\n\n/* Expiration Options */\n.expiration-options {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n}\n\n.preset-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.preset-btn {\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.preset-btn:hover {\n border-color: #f59e0b;\n background: #fffbeb;\n}\n\n.preset-btn.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.custom-date {\n margin-top: 4px;\n}\n\n.expiration-preview {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: #ecfdf5;\n border-radius: 8px;\n font-size: 13px;\n color: #059669;\n}\n\n.expiration-preview i {\n color: #10b981;\n}\n\n/* Error Message */\n.error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 8px;\n color: #dc2626;\n font-size: 14px;\n}\n\n/* Scopes */\n.scopes-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n}\n\n.scopes-info h4 {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.scopes-info p {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n.scopes-count {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n}\n\n.scopes-count .count {\n font-weight: 700;\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-badge {\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.select-all-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n cursor: pointer;\n}\n\n.category-right > i {\n color: #9ca3af;\n font-size: 12px;\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.scope-tip {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #eff6ff;\n border-radius: 8px;\n margin-top: 16px;\n font-size: 13px;\n color: #1d4ed8;\n}\n\n.scope-tip i {\n color: #3b82f6;\n}\n\n.scope-tip code {\n background: #dbeafe;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: monospace;\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-top: 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\n/* Success Content */\n.success-content {\n text-align: center;\n}\n\n.success-icon {\n margin-bottom: 16px;\n}\n\n.success-icon i {\n font-size: 64px;\n color: #10b981;\n}\n\n.success-title {\n margin: 0 0 24px 0;\n font-size: 20px;\n font-weight: 700;\n color: #1f2937;\n}\n\n/* Key Display */\n.key-display {\n background: #1f2937;\n border-radius: 12px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.key-warning {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 16px;\n background: rgba(245, 158, 11, 0.2);\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 13px;\n font-weight: 500;\n color: #fcd34d;\n}\n\n.key-value {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #374151;\n border-radius: 8px;\n padding: 12px 16px;\n}\n\n.key-value code {\n flex: 1;\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 14px;\n color: #10b981;\n word-break: break-all;\n text-align: left;\n}\n\n.copy-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #4b5563;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.copy-btn:hover {\n background: #6b7280;\n}\n\n.copy-btn.copied {\n background: #10b981;\n}\n\n/* Key Details */\n.key-details {\n text-align: left;\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n\n.detail-row {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.detail-row:last-child {\n border-bottom: none;\n}\n\n.detail-label {\n font-size: 13px;\n color: #6b7280;\n}\n\n.detail-value {\n font-size: 13px;\n font-weight: 500;\n color: #1f2937;\n}\n\n/* Security Note */\n.security-note {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n text-align: left;\n padding: 16px;\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n border-radius: 10px;\n font-size: 13px;\n color: #065f46;\n}\n\n.security-note i {\n font-size: 20px;\n color: #10b981;\n margin-top: 2px;\n}\n\n.security-note strong {\n display: block;\n margin-bottom: 4px;\n}\n\n/* Form input 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"] }]
749
+ args: [{ standalone: false, selector: 'mj-api-key-create-dialog', template: "<!-- Slide-out Backdrop -->\n@if (Visible) {\n <div class=\"slideout-backdrop\" (click)=\"Step !== 'success' ? close() : null\"></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>Generate New API Key</span>\n </div>\n @if (Step !== 'success') {\n <button class=\"slideout-close\" (click)=\"close()\" title=\"Close (Esc)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n\n <!-- Step Indicator -->\n @if (Step !== 'success') {\n <div class=\"step-indicator\">\n <div class=\"step\" [class.active]=\"Step === 'configure'\" [class.completed]=\"Step === 'scopes'\">\n <div class=\"step-number\">1</div>\n <div class=\"step-label\">Configure</div>\n </div>\n <div class=\"step-connector\" [class.active]=\"Step === 'scopes'\"></div>\n <div class=\"step\" [class.active]=\"Step === 'scopes'\">\n <div class=\"step-number\">2</div>\n <div class=\"step-label\">Permissions</div>\n </div>\n </div>\n }\n\n <div class=\"slideout-content\">\n <!-- Configure Step -->\n @if (Step === 'configure') {\n <div class=\"step-panel\">\n <div class=\"form-section\">\n <label class=\"form-label required\">Key Label</label>\n <input kendoTextBox [(ngModel)]=\"Label\"\n placeholder=\"e.g., ElevenLabs Integration, CI/CD Pipeline\"\n class=\"form-input\" />\n <div class=\"form-hint\">A memorable name to identify this key's purpose</div>\n </div>\n <div class=\"form-section\">\n <label class=\"form-label\">Description</label>\n <textarea kendoTextArea [(ngModel)]=\"Description\"\n placeholder=\"Optional notes about how this key will be used...\"\n [rows]=\"3\"\n class=\"form-textarea\"></textarea>\n </div>\n <div class=\"form-section\">\n <label class=\"form-label\">Expiration</label>\n <div class=\"expiration-options\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox\n [(ngModel)]=\"NeverExpires\"\n (change)=\"onNeverExpiresChange()\" />\n <span>Never expires</span>\n </label>\n @if (!NeverExpires) {\n <div class=\"preset-buttons\">\n @for (preset of ExpirationPresets; track preset) {\n <button\n class=\"preset-btn\"\n [class.active]=\"SelectedPreset === preset\"\n (click)=\"onPresetSelect(preset)\">\n {{preset.label}}\n </button>\n }\n </div>\n }\n @if (!NeverExpires && SelectedPreset?.days === -1) {\n <div class=\"custom-date\">\n <kendo-datepicker [(ngModel)]=\"ExpiresAt\"\n [min]=\"getMinDate()\"\n format=\"MMM d, yyyy\"\n placeholder=\"Select expiration date\">\n </kendo-datepicker>\n </div>\n }\n @if (!NeverExpires && ExpiresAt) {\n <div class=\"expiration-preview\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Key will expire on {{ExpiresAt | date:'MMMM d, yyyy'}}</span>\n </div>\n }\n </div>\n </div>\n @if (Error) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{Error}}\n </div>\n }\n </div>\n }\n\n <!-- Scopes Step -->\n @if (Step === 'scopes') {\n <div class=\"step-panel scopes-step\">\n <div class=\"scopes-header\">\n <div class=\"scopes-info\">\n <h4>Select Permission Scopes</h4>\n <p>Choose what this API key can access. You can always modify this later.</p>\n </div>\n @if (getSelectedScopeCount() > 0) {\n <div class=\"scopes-count\">\n <span class=\"count\">{{getSelectedScopeCount()}}</span> selected\n </div>\n }\n </div>\n @if (IsLoadingScopes) {\n <mj-loading text=\"Loading scopes...\"></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-badge\">{{category.scopes.length}}</span>\n </div>\n <div class=\"category-right\">\n <label class=\"select-all-label\" (click)=\"$event.stopPropagation()\">\n <input type=\"checkbox\" kendoCheckBox\n [checked]=\"category.allSelected\"\n (change)=\"toggleCategoryAll(category)\" />\n <span>All</span>\n </label>\n <i class=\"fa-solid\" [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 (change)=\"updateCategoryState(category)\" />\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 class=\"scope-tip\">\n <i class=\"fa-solid fa-lightbulb\"></i>\n <span>Tip: Use wildcards like <code>entities:*</code> for broad access within a category</span>\n </div>\n <!-- No Scopes Warning -->\n @if (!IsLoadingScopes && getSelectedScopeCount() === 0) {\n <div class=\"no-scopes-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div>\n <strong>Warning: No permissions selected</strong>\n <p>API keys without any assigned scopes will have <strong>no permissions</strong> and cannot perform any operations. This key will be rejected by all API endpoints until scopes are assigned.</p>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Success Step -->\n @if (Step === 'success') {\n <div class=\"step-panel success-step\">\n <div class=\"success-icon\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <h3 class=\"success-title\">API Key Created Successfully!</h3>\n <div class=\"key-display\">\n <div class=\"key-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>Copy this key now. It won't be shown again!</span>\n </div>\n <div class=\"key-value\">\n <code>{{RawApiKey}}</code>\n <button class=\"copy-btn\" (click)=\"copyKey()\" [class.copied]=\"KeyCopied\">\n <i class=\"fa-solid\" [class.fa-copy]=\"!KeyCopied\" [class.fa-check]=\"KeyCopied\"></i>\n <span>{{KeyCopied ? 'Copied!' : 'Copy'}}</span>\n </button>\n </div>\n </div>\n <div class=\"key-details\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Label:</span>\n <span class=\"detail-value\">{{Label}}</span>\n </div>\n @if (Description) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Description:</span>\n <span class=\"detail-value\">{{Description}}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span class=\"detail-label\">Expires:</span>\n <span class=\"detail-value\">\n {{NeverExpires ? 'Never' : (ExpiresAt | date:'MMMM d, yyyy')}}\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Scopes:</span>\n <span class=\"detail-value\">{{getSelectedScopeCount()}} permissions</span>\n </div>\n </div>\n <div class=\"security-note\">\n <i class=\"fa-solid fa-shield-check\"></i>\n <div>\n <strong>Security Note:</strong>\n Store this key securely. We only store a hash - the original key cannot be recovered.\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"slideout-footer\">\n @if (Step === 'configure') {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"goToScopes()\">\n Next: Permissions\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button kendoButton (click)=\"close()\">Cancel</button>\n }\n\n @if (Step === 'scopes') {\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"IsCreating\"\n (click)=\"createKey()\">\n @if (IsCreating) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsCreating) {\n <span>\n <i class=\"fa-solid fa-key\"></i>\n Generate Key\n </span>\n }\n </button>\n <button kendoButton (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back\n </button>\n }\n\n @if (Step === 'success') {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"close()\">\n <i class=\"fa-solid fa-check\"></i>\n Done\n </button>\n }\n </div>\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, #fafafa 0%, #f3f4f6 100%);\n border-bottom: 1px solid #e5e7eb;\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: #1f2937;\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.slideout-close {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n border-radius: 8px;\n color: #9ca3af;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.slideout-close:hover {\n background: rgba(0, 0, 0, 0.05);\n color: #374151;\n}\n\n/* Panel Content */\n.slideout-content {\n flex: 1;\n overflow-y: auto;\n}\n\n.step-panel {\n padding: 24px;\n}\n\n/* Panel Footer */\n.slideout-footer {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%);\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n:host ::ng-deep .slideout-footer .k-button {\n min-width: 100px;\n padding: 10px 20px;\n font-weight: 600;\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n:host ::ng-deep .slideout-footer .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 .slideout-footer .k-button-solid-primary:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(245, 158, 11, 0.4);\n}\n\n:host ::ng-deep .slideout-footer .k-button i {\n margin: 0 5px;\n}\n\n/* Step Indicator */\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 24px;\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border-bottom: 1px solid #fcd34d;\n}\n\n.step {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n}\n\n.step-number {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: white;\n border: 2px solid #d1d5db;\n border-radius: 50%;\n font-weight: 600;\n font-size: 14px;\n color: #6b7280;\n transition: all 0.2s ease;\n}\n\n.step.active .step-number {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.step.completed .step-number {\n background: #10b981;\n border-color: #10b981;\n color: white;\n}\n\n.step-label {\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n}\n\n.step.active .step-label {\n color: #92400e;\n font-weight: 600;\n}\n\n.step-connector {\n width: 80px;\n height: 2px;\n background: #d1d5db;\n margin: 0 16px;\n margin-bottom: 20px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active {\n background: linear-gradient(90deg, #10b981, #f59e0b);\n}\n\n/* Dialog Content */\n.dialog-content {\n padding: 24px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.scopes-content {\n max-height: 450px;\n}\n\n/* Form Sections */\n.form-section {\n margin-bottom: 24px;\n}\n\n.form-label {\n display: block;\n font-weight: 600;\n font-size: 14px;\n color: #374151;\n margin-bottom: 8px;\n}\n\n.form-label.required::after {\n content: ' *';\n color: #ef4444;\n}\n\n.form-input,\n.form-textarea {\n width: 100%;\n}\n\n.form-hint {\n font-size: 12px;\n color: #6b7280;\n margin-top: 6px;\n}\n\n/* Expiration Options */\n.expiration-options {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n}\n\n.preset-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.preset-btn {\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.preset-btn:hover {\n border-color: #f59e0b;\n background: #fffbeb;\n}\n\n.preset-btn.active {\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-color: #f59e0b;\n color: white;\n}\n\n.custom-date {\n margin-top: 4px;\n}\n\n.expiration-preview {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: #ecfdf5;\n border-radius: 8px;\n font-size: 13px;\n color: #059669;\n}\n\n.expiration-preview i {\n color: #10b981;\n}\n\n/* Error Message */\n.error-message {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 8px;\n color: #dc2626;\n font-size: 14px;\n}\n\n/* Scopes */\n.scopes-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 20px;\n}\n\n.scopes-info h4 {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.scopes-info p {\n margin: 0;\n font-size: 13px;\n color: #6b7280;\n}\n\n.scopes-count {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n}\n\n.scopes-count .count {\n font-weight: 700;\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-badge {\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.select-all-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n cursor: pointer;\n}\n\n.category-right > i {\n color: #9ca3af;\n font-size: 12px;\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.scope-tip {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #eff6ff;\n border-radius: 8px;\n margin-top: 16px;\n font-size: 13px;\n color: #1d4ed8;\n}\n\n.scope-tip i {\n color: #3b82f6;\n}\n\n.scope-tip code {\n background: #dbeafe;\n padding: 2px 6px;\n border-radius: 4px;\n font-family: monospace;\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-top: 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\n/* Success Content */\n.success-content {\n text-align: center;\n}\n\n.success-icon {\n margin-bottom: 16px;\n}\n\n.success-icon i {\n font-size: 64px;\n color: #10b981;\n}\n\n.success-title {\n margin: 0 0 24px 0;\n font-size: 20px;\n font-weight: 700;\n color: #1f2937;\n}\n\n/* Key Display */\n.key-display {\n background: #1f2937;\n border-radius: 12px;\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.key-warning {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 16px;\n background: rgba(245, 158, 11, 0.2);\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 13px;\n font-weight: 500;\n color: #fcd34d;\n}\n\n.key-value {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #374151;\n border-radius: 8px;\n padding: 12px 16px;\n}\n\n.key-value code {\n flex: 1;\n font-family: 'Fira Code', 'Consolas', monospace;\n font-size: 14px;\n color: #10b981;\n word-break: break-all;\n text-align: left;\n}\n\n.copy-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #4b5563;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: white;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.copy-btn:hover {\n background: #6b7280;\n}\n\n.copy-btn.copied {\n background: #10b981;\n}\n\n/* Key Details */\n.key-details {\n text-align: left;\n background: #f9fafb;\n border-radius: 10px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n\n.detail-row {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.detail-row:last-child {\n border-bottom: none;\n}\n\n.detail-label {\n font-size: 13px;\n color: #6b7280;\n}\n\n.detail-value {\n font-size: 13px;\n font-weight: 500;\n color: #1f2937;\n}\n\n/* Security Note */\n.security-note {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n text-align: left;\n padding: 16px;\n background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n border-radius: 10px;\n font-size: 13px;\n color: #065f46;\n}\n\n.security-note i {\n font-size: 20px;\n color: #10b981;\n margin-top: 2px;\n}\n\n.security-note strong {\n display: block;\n margin-bottom: 4px;\n}\n\n/* Form input 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"] }]
755
750
  }], null, { Visible: [{
756
751
  type: Input
757
752
  }], VisibleChange: [{
@@ -764,5 +759,5 @@ export class APIKeyCreateDialogComponent {
764
759
  type: HostListener,
765
760
  args: ['document:keydown.escape']
766
761
  }] }); })();
767
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyCreateDialogComponent, { className: "APIKeyCreateDialogComponent", filePath: "src/APIKeys/api-key-create-dialog.component.ts", lineNumber: 45 }); })();
762
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIKeyCreateDialogComponent, { className: "APIKeyCreateDialogComponent", filePath: "src/APIKeys/api-key-create-dialog.component.ts", lineNumber: 40 }); })();
768
763
  //# sourceMappingURL=api-key-create-dialog.component.js.map