@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
@@ -10,12 +10,12 @@ import * as i4 from "@progress/kendo-angular-inputs";
10
10
  import * as i5 from "@progress/kendo-angular-buttons";
11
11
  import * as i6 from "@memberjunction/ng-shared-generic";
12
12
  const _c0 = () => ["Include", "Exclude"];
13
- function APIApplicationsPanelComponent_mj_loading_1_Template(rf, ctx) { if (rf & 1) {
14
- i0.ɵɵelement(0, "mj-loading", 32);
13
+ function APIApplicationsPanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelement(0, "mj-loading", 1);
15
15
  } }
16
- function APIApplicationsPanelComponent_ng_container_2_div_11_Template(rf, ctx) { if (rf & 1) {
17
- i0.ɵɵelementStart(0, "div", 44);
18
- i0.ɵɵelement(1, "i", 45);
16
+ function APIApplicationsPanelComponent_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelementStart(0, "div", 37);
18
+ i0.ɵɵelement(1, "i", 42);
19
19
  i0.ɵɵtext(2);
20
20
  i0.ɵɵelementEnd();
21
21
  } if (rf & 2) {
@@ -23,9 +23,9 @@ function APIApplicationsPanelComponent_ng_container_2_div_11_Template(rf, ctx) {
23
23
  i0.ɵɵadvance(2);
24
24
  i0.ɵɵtextInterpolate1(" ", ctx_r1.SuccessMessage, " ");
25
25
  } }
26
- function APIApplicationsPanelComponent_ng_container_2_div_12_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementStart(0, "div", 46);
28
- i0.ɵɵelement(1, "i", 47);
26
+ function APIApplicationsPanelComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "div", 38);
28
+ i0.ɵɵelement(1, "i", 43);
29
29
  i0.ɵɵtext(2);
30
30
  i0.ɵɵelementEnd();
31
31
  } if (rf & 2) {
@@ -33,8 +33,8 @@ function APIApplicationsPanelComponent_ng_container_2_div_12_Template(rf, ctx) {
33
33
  i0.ɵɵadvance(2);
34
34
  i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
35
35
  } }
36
- function APIApplicationsPanelComponent_ng_container_2_div_14_div_10_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "div", 62);
36
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_10_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "div", 51);
38
38
  i0.ɵɵtext(1);
39
39
  i0.ɵɵelementEnd();
40
40
  } if (rf & 2) {
@@ -42,8 +42,8 @@ function APIApplicationsPanelComponent_ng_container_2_div_14_div_10_Template(rf,
42
42
  i0.ɵɵadvance();
43
43
  i0.ɵɵtextInterpolate1(" ", appItem_r4.application.Description, " ");
44
44
  } }
45
- function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_div_1_span_11_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelementStart(0, "span", 76);
45
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_4_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵelementStart(0, "span", 67);
47
47
  i0.ɵɵtext(1);
48
48
  i0.ɵɵelementEnd();
49
49
  } if (rf & 2) {
@@ -51,20 +51,20 @@ function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_div_1_
51
51
  i0.ɵɵadvance();
52
52
  i0.ɵɵtextInterpolate1(" Priority: ", scope_r5.Priority, " ");
53
53
  } }
54
- function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_div_1_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵelementStart(0, "div", 69)(1, "div", 70);
54
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 61)(1, "div", 62);
56
56
  i0.ɵɵelement(2, "i");
57
57
  i0.ɵɵelementEnd();
58
- i0.ɵɵelementStart(3, "div", 71)(4, "div", 72);
58
+ i0.ɵɵelementStart(3, "div", 63)(4, "div", 64);
59
59
  i0.ɵɵtext(5);
60
60
  i0.ɵɵelementEnd();
61
- i0.ɵɵelementStart(6, "div", 73)(7, "code");
61
+ i0.ɵɵelementStart(6, "div", 65)(7, "code");
62
62
  i0.ɵɵtext(8);
63
63
  i0.ɵɵelementEnd();
64
- i0.ɵɵelementStart(9, "span", 74);
64
+ i0.ɵɵelementStart(9, "span", 66);
65
65
  i0.ɵɵtext(10);
66
66
  i0.ɵɵelementEnd();
67
- i0.ɵɵtemplate(11, APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_div_1_span_11_Template, 2, 1, "span", 75);
67
+ i0.ɵɵconditionalCreate(11, APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_4_For_2_Conditional_11_Template, 2, 1, "span", 67);
68
68
  i0.ɵɵelementEnd()()();
69
69
  } if (rf & 2) {
70
70
  const scope_r5 = ctx.$implicit;
@@ -80,62 +80,63 @@ function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_div_1_
80
80
  i0.ɵɵadvance(2);
81
81
  i0.ɵɵtextInterpolate(scope_r5.PatternType);
82
82
  i0.ɵɵadvance();
83
- i0.ɵɵproperty("ngIf", scope_r5.Priority > 0);
83
+ i0.ɵɵconditional(scope_r5.Priority > 0 ? 11 : -1);
84
84
  } }
85
- function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_Template(rf, ctx) { if (rf & 1) {
86
- i0.ɵɵelementStart(0, "div", 67);
87
- i0.ɵɵtemplate(1, APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_div_1_Template, 12, 7, "div", 68);
85
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
86
+ i0.ɵɵelementStart(0, "div", 59);
87
+ i0.ɵɵrepeaterCreate(1, APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_4_For_2_Template, 12, 7, "div", 61, i0.ɵɵrepeaterTrackByIdentity);
88
88
  i0.ɵɵelementEnd();
89
89
  } if (rf & 2) {
90
90
  const appItem_r4 = i0.ɵɵnextContext(2).$implicit;
91
91
  i0.ɵɵadvance();
92
- i0.ɵɵproperty("ngForOf", appItem_r4.scopes);
92
+ i0.ɵɵrepeater(appItem_r4.scopes);
93
93
  } }
94
- function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_5_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelementStart(0, "div", 77);
96
- i0.ɵɵelement(1, "i", 78);
94
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementStart(0, "div", 60);
96
+ i0.ɵɵelement(1, "i", 68);
97
97
  i0.ɵɵelementStart(2, "span");
98
98
  i0.ɵɵtext(3, "No scope rules defined - all access denied by default");
99
99
  i0.ɵɵelementEnd()();
100
100
  } }
101
- function APIApplicationsPanelComponent_ng_container_2_div_14_div_18_Template(rf, ctx) { if (rf & 1) {
102
- i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "h4");
101
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Template(rf, ctx) { if (rf & 1) {
102
+ i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "h4");
103
103
  i0.ɵɵtext(3, "Scope Ceiling Rules");
104
104
  i0.ɵɵelementEnd();
105
- i0.ɵɵtemplate(4, APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_4_Template, 2, 1, "div", 65)(5, APIApplicationsPanelComponent_ng_container_2_div_14_div_18_div_5_Template, 4, 0, "div", 66);
105
+ i0.ɵɵconditionalCreate(4, APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_4_Template, 3, 0, "div", 59);
106
+ i0.ɵɵconditionalCreate(5, APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Conditional_5_Template, 4, 0, "div", 60);
106
107
  i0.ɵɵelementEnd()();
107
108
  } if (rf & 2) {
108
109
  const appItem_r4 = i0.ɵɵnextContext().$implicit;
109
110
  i0.ɵɵadvance(4);
110
- i0.ɵɵproperty("ngIf", appItem_r4.scopes.length > 0);
111
+ i0.ɵɵconditional(appItem_r4.scopes.length > 0 ? 4 : -1);
111
112
  i0.ɵɵadvance();
112
- i0.ɵɵproperty("ngIf", appItem_r4.scopes.length === 0);
113
+ i0.ɵɵconditional(appItem_r4.scopes.length === 0 ? 5 : -1);
113
114
  } }
114
- function APIApplicationsPanelComponent_ng_container_2_div_14_Template(rf, ctx) { if (rf & 1) {
115
+ function APIApplicationsPanelComponent_Conditional_2_For_14_Template(rf, ctx) { if (rf & 1) {
115
116
  const _r3 = i0.ɵɵgetCurrentView();
116
- i0.ɵɵelementStart(0, "div", 48)(1, "div", 49)(2, "div", 50);
117
- i0.ɵɵlistener("click", function APIApplicationsPanelComponent_ng_container_2_div_14_Template_div_click_2_listener() { const appItem_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleExpanded(appItem_r4)); });
118
- i0.ɵɵelementStart(3, "div", 51);
119
- i0.ɵɵelement(4, "i", 23);
117
+ i0.ɵɵelementStart(0, "div", 44)(1, "div", 45)(2, "div", 46);
118
+ i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Conditional_2_For_14_Template_div_click_2_listener() { const appItem_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleExpanded(appItem_r4)); });
119
+ i0.ɵɵelementStart(3, "div", 47);
120
+ i0.ɵɵelement(4, "i", 22);
120
121
  i0.ɵɵelementEnd();
121
- i0.ɵɵelementStart(5, "div", 52)(6, "div", 53);
122
+ i0.ɵɵelementStart(5, "div", 48)(6, "div", 49);
122
123
  i0.ɵɵtext(7);
123
- i0.ɵɵelementStart(8, "span", 54);
124
+ i0.ɵɵelementStart(8, "span", 50);
124
125
  i0.ɵɵtext(9);
125
126
  i0.ɵɵelementEnd()();
126
- i0.ɵɵtemplate(10, APIApplicationsPanelComponent_ng_container_2_div_14_div_10_Template, 2, 1, "div", 55);
127
+ i0.ɵɵconditionalCreate(10, APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_10_Template, 2, 1, "div", 51);
127
128
  i0.ɵɵelementEnd();
128
- i0.ɵɵelementStart(11, "div", 56)(12, "div", 57);
129
- i0.ɵɵelement(13, "i", 28);
129
+ i0.ɵɵelementStart(11, "div", 52)(12, "div", 53);
130
+ i0.ɵɵelement(13, "i", 27);
130
131
  i0.ɵɵtext(14);
131
132
  i0.ɵɵelementEnd();
132
- i0.ɵɵelement(15, "i", 58);
133
+ i0.ɵɵelement(15, "i", 54);
133
134
  i0.ɵɵelementEnd()();
134
- i0.ɵɵelementStart(16, "button", 59);
135
- i0.ɵɵlistener("click", function APIApplicationsPanelComponent_ng_container_2_div_14_Template_button_click_16_listener($event) { const appItem_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.openEditPanel(appItem_r4); return i0.ɵɵresetView($event.stopPropagation()); });
136
- i0.ɵɵelement(17, "i", 60);
135
+ i0.ɵɵelementStart(16, "button", 55);
136
+ i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Conditional_2_For_14_Template_button_click_16_listener($event) { const appItem_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.openEditPanel(appItem_r4); return i0.ɵɵresetView($event.stopPropagation()); });
137
+ i0.ɵɵelement(17, "i", 56);
137
138
  i0.ɵɵelementEnd()();
138
- i0.ɵɵtemplate(18, APIApplicationsPanelComponent_ng_container_2_div_14_div_18_Template, 6, 2, "div", 61);
139
+ i0.ɵɵconditionalCreate(18, APIApplicationsPanelComponent_Conditional_2_For_14_Conditional_18_Template, 6, 2, "div", 57);
139
140
  i0.ɵɵelementEnd();
140
141
  } if (rf & 2) {
141
142
  const appItem_r4 = ctx.$implicit;
@@ -147,17 +148,17 @@ function APIApplicationsPanelComponent_ng_container_2_div_14_Template(rf, ctx) {
147
148
  i0.ɵɵadvance();
148
149
  i0.ɵɵtextInterpolate1(" ", appItem_r4.application.IsActive ? "Active" : "Inactive", " ");
149
150
  i0.ɵɵadvance();
150
- i0.ɵɵproperty("ngIf", appItem_r4.application.Description);
151
+ i0.ɵɵconditional(appItem_r4.application.Description ? 10 : -1);
151
152
  i0.ɵɵadvance(4);
152
153
  i0.ɵɵtextInterpolate1(" ", appItem_r4.scopeCount, " scopes ");
153
154
  i0.ɵɵadvance();
154
155
  i0.ɵɵclassProp("fa-chevron-down", !appItem_r4.expanded)("fa-chevron-up", appItem_r4.expanded);
155
156
  i0.ɵɵadvance(3);
156
- i0.ɵɵproperty("ngIf", appItem_r4.expanded);
157
+ i0.ɵɵconditional(appItem_r4.expanded ? 18 : -1);
157
158
  } }
158
- function APIApplicationsPanelComponent_ng_container_2_div_15_Template(rf, ctx) { if (rf & 1) {
159
- i0.ɵɵelementStart(0, "div", 79);
160
- i0.ɵɵelement(1, "i", 23);
159
+ function APIApplicationsPanelComponent_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
160
+ i0.ɵɵelementStart(0, "div", 41);
161
+ i0.ɵɵelement(1, "i", 22);
161
162
  i0.ɵɵelementStart(2, "span");
162
163
  i0.ɵɵtext(3, "No applications configured");
163
164
  i0.ɵɵelementEnd();
@@ -165,75 +166,75 @@ function APIApplicationsPanelComponent_ng_container_2_div_15_Template(rf, ctx) {
165
166
  i0.ɵɵtext(5, "Create an application to define scope ceilings for API key access");
166
167
  i0.ɵɵelementEnd()();
167
168
  } }
168
- function APIApplicationsPanelComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
169
+ function APIApplicationsPanelComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
169
170
  const _r1 = i0.ɵɵgetCurrentView();
170
- i0.ɵɵelementContainerStart(0);
171
- i0.ɵɵelementStart(1, "div", 33)(2, "div", 34)(3, "h3", 35);
172
- i0.ɵɵelement(4, "i", 23);
173
- i0.ɵɵtext(5, " API Applications ");
171
+ i0.ɵɵelementStart(0, "div", 31)(1, "div", 32)(2, "h3", 33);
172
+ i0.ɵɵelement(3, "i", 22);
173
+ i0.ɵɵtext(4, " API Applications ");
174
174
  i0.ɵɵelementEnd();
175
- i0.ɵɵelementStart(6, "p", 36);
176
- i0.ɵɵtext(7, "Manage applications and their default scope permissions");
175
+ i0.ɵɵelementStart(5, "p", 34);
176
+ i0.ɵɵtext(6, "Manage applications and their default scope permissions");
177
177
  i0.ɵɵelementEnd()();
178
- i0.ɵɵelementStart(8, "button", 37);
179
- i0.ɵɵlistener("click", function APIApplicationsPanelComponent_ng_container_2_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openCreatePanel()); });
180
- i0.ɵɵelement(9, "i", 38);
181
- i0.ɵɵtext(10, " New Application ");
178
+ i0.ɵɵelementStart(7, "button", 35);
179
+ i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Conditional_2_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openCreatePanel()); });
180
+ i0.ɵɵelement(8, "i", 36);
181
+ i0.ɵɵtext(9, " New Application ");
182
182
  i0.ɵɵelementEnd()();
183
- i0.ɵɵtemplate(11, APIApplicationsPanelComponent_ng_container_2_div_11_Template, 3, 1, "div", 39)(12, APIApplicationsPanelComponent_ng_container_2_div_12_Template, 3, 1, "div", 40);
184
- i0.ɵɵelementStart(13, "div", 41);
185
- i0.ɵɵtemplate(14, APIApplicationsPanelComponent_ng_container_2_div_14_Template, 19, 17, "div", 42)(15, APIApplicationsPanelComponent_ng_container_2_div_15_Template, 6, 0, "div", 43);
183
+ i0.ɵɵconditionalCreate(10, APIApplicationsPanelComponent_Conditional_2_Conditional_10_Template, 3, 1, "div", 37);
184
+ i0.ɵɵconditionalCreate(11, APIApplicationsPanelComponent_Conditional_2_Conditional_11_Template, 3, 1, "div", 38);
185
+ i0.ɵɵelementStart(12, "div", 39);
186
+ i0.ɵɵrepeaterCreate(13, APIApplicationsPanelComponent_Conditional_2_For_14_Template, 19, 17, "div", 40, i0.ɵɵrepeaterTrackByIdentity);
187
+ i0.ɵɵconditionalCreate(15, APIApplicationsPanelComponent_Conditional_2_Conditional_15_Template, 6, 0, "div", 41);
186
188
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementContainerEnd();
188
189
  } if (rf & 2) {
189
190
  const ctx_r1 = i0.ɵɵnextContext();
190
- i0.ɵɵadvance(11);
191
- i0.ɵɵproperty("ngIf", ctx_r1.SuccessMessage);
191
+ i0.ɵɵadvance(10);
192
+ i0.ɵɵconditional(ctx_r1.SuccessMessage ? 10 : -1);
192
193
  i0.ɵɵadvance();
193
- i0.ɵɵproperty("ngIf", ctx_r1.ErrorMessage);
194
+ i0.ɵɵconditional(ctx_r1.ErrorMessage ? 11 : -1);
194
195
  i0.ɵɵadvance(2);
195
- i0.ɵɵproperty("ngForOf", ctx_r1.Applications);
196
- i0.ɵɵadvance();
197
- i0.ɵɵproperty("ngIf", ctx_r1.Applications.length === 0);
196
+ i0.ɵɵrepeater(ctx_r1.Applications);
197
+ i0.ɵɵadvance(2);
198
+ i0.ɵɵconditional(ctx_r1.Applications.length === 0 ? 15 : -1);
198
199
  } }
199
- function APIApplicationsPanelComponent_div_3_Template(rf, ctx) { if (rf & 1) {
200
+ function APIApplicationsPanelComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
200
201
  const _r6 = i0.ɵɵgetCurrentView();
201
- i0.ɵɵelementStart(0, "div", 80);
202
- i0.ɵɵlistener("click", function APIApplicationsPanelComponent_div_3_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closePanel()); });
202
+ i0.ɵɵelementStart(0, "div", 69);
203
+ i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Conditional_3_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closePanel()); });
203
204
  i0.ɵɵelementEnd();
204
205
  } }
205
- function APIApplicationsPanelComponent_mj_loading_32_Template(rf, ctx) { if (rf & 1) {
206
- i0.ɵɵelement(0, "mj-loading", 81);
206
+ function APIApplicationsPanelComponent_Conditional_32_Template(rf, ctx) { if (rf & 1) {
207
+ i0.ɵɵelement(0, "mj-loading", 19);
207
208
  } if (rf & 2) {
208
209
  i0.ɵɵproperty("showText", false);
209
210
  } }
210
- function APIApplicationsPanelComponent_span_33_Template(rf, ctx) { if (rf & 1) {
211
+ function APIApplicationsPanelComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
211
212
  i0.ɵɵelementStart(0, "span");
212
- i0.ɵɵelement(1, "i", 82);
213
+ i0.ɵɵelement(1, "i", 70);
213
214
  i0.ɵɵtext(2, " Create Application ");
214
215
  i0.ɵɵelementEnd();
215
216
  } }
216
- function APIApplicationsPanelComponent_div_57_Template(rf, ctx) { if (rf & 1) {
217
+ function APIApplicationsPanelComponent_Conditional_57_Template(rf, ctx) { if (rf & 1) {
217
218
  const _r7 = i0.ɵɵgetCurrentView();
218
- i0.ɵɵelementStart(0, "div", 83)(1, "div", 11)(2, "div", 12)(3, "label");
219
+ i0.ɵɵelementStart(0, "div", 29)(1, "div", 10)(2, "div", 11)(3, "label");
219
220
  i0.ɵɵtext(4, "Application Name *");
220
221
  i0.ɵɵelementEnd();
221
- i0.ɵɵelementStart(5, "input", 13);
222
- i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_div_57_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EditName, $event) || (ctx_r1.EditName = $event); return i0.ɵɵresetView($event); });
222
+ i0.ɵɵelementStart(5, "input", 12);
223
+ i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Conditional_57_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EditName, $event) || (ctx_r1.EditName = $event); return i0.ɵɵresetView($event); });
223
224
  i0.ɵɵelementEnd()();
224
- i0.ɵɵelementStart(6, "div", 12)(7, "label");
225
+ i0.ɵɵelementStart(6, "div", 11)(7, "label");
225
226
  i0.ɵɵtext(8, "Description");
226
227
  i0.ɵɵelementEnd();
227
- i0.ɵɵelementStart(9, "textarea", 14);
228
- i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_div_57_Template_textarea_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDescription, $event) || (ctx_r1.EditDescription = $event); return i0.ɵɵresetView($event); });
228
+ i0.ɵɵelementStart(9, "textarea", 13);
229
+ i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Conditional_57_Template_textarea_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDescription, $event) || (ctx_r1.EditDescription = $event); return i0.ɵɵresetView($event); });
229
230
  i0.ɵɵelementEnd()();
230
- i0.ɵɵelementStart(10, "div", 12)(11, "label", 15)(12, "input", 16);
231
- i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_div_57_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EditIsActive, $event) || (ctx_r1.EditIsActive = $event); return i0.ɵɵresetView($event); });
231
+ i0.ɵɵelementStart(10, "div", 11)(11, "label", 14)(12, "input", 15);
232
+ i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Conditional_57_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EditIsActive, $event) || (ctx_r1.EditIsActive = $event); return i0.ɵɵresetView($event); });
232
233
  i0.ɵɵelementEnd();
233
234
  i0.ɵɵelementStart(13, "div")(14, "span");
234
235
  i0.ɵɵtext(15, "Active");
235
236
  i0.ɵɵelementEnd();
236
- i0.ɵɵelementStart(16, "span", 17);
237
+ i0.ɵɵelementStart(16, "span", 16);
237
238
  i0.ɵɵtext(17, "Inactive applications cannot be used with API keys");
238
239
  i0.ɵɵelementEnd()()()()()();
239
240
  } if (rf & 2) {
@@ -246,8 +247,8 @@ function APIApplicationsPanelComponent_div_57_Template(rf, ctx) { if (rf & 1) {
246
247
  i0.ɵɵadvance(3);
247
248
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditIsActive);
248
249
  } }
249
- function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
250
- i0.ɵɵelementStart(0, "span", 109);
250
+ function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
251
+ i0.ɵɵelementStart(0, "span", 90);
251
252
  i0.ɵɵtext(1);
252
253
  i0.ɵɵelementEnd();
253
254
  } if (rf & 2) {
@@ -255,9 +256,9 @@ function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_span_6_Template
255
256
  i0.ɵɵadvance();
256
257
  i0.ɵɵtextInterpolate1(" ", selection_r11.scope.Description, " ");
257
258
  } }
258
- function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_7_Template(rf, ctx) { if (rf & 1) {
259
- i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
260
- i0.ɵɵelement(2, "i", 112);
259
+ function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
260
+ i0.ɵɵelementStart(0, "div", 91)(1, "span", 93);
261
+ i0.ɵɵelement(2, "i", 94);
261
262
  i0.ɵɵtext(3);
262
263
  i0.ɵɵelementEnd()();
263
264
  } if (rf & 2) {
@@ -269,13 +270,13 @@ function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_7_Template(
269
270
  i0.ɵɵadvance();
270
271
  i0.ɵɵtextInterpolate1(" ", selection_r11.pattern || "*", " ");
271
272
  } }
272
- function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_8_Template(rf, ctx) { if (rf & 1) {
273
+ function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
273
274
  const _r12 = i0.ɵɵgetCurrentView();
274
- i0.ɵɵelementStart(0, "div", 113)(1, "input", 114);
275
- i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_8_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r12); const selection_r11 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(selection_r11.pattern, $event) || (selection_r11.pattern = $event); return i0.ɵɵresetView($event); });
275
+ i0.ɵɵelementStart(0, "div", 92)(1, "input", 95);
276
+ i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_8_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r12); const selection_r11 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(selection_r11.pattern, $event) || (selection_r11.pattern = $event); return i0.ɵɵresetView($event); });
276
277
  i0.ɵɵelementEnd();
277
- i0.ɵɵelementStart(2, "kendo-dropdownlist", 115);
278
- i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_8_Template_kendo_dropdownlist_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r12); const selection_r11 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(selection_r11.patternType, $event) || (selection_r11.patternType = $event); return i0.ɵɵresetView($event); });
278
+ i0.ɵɵelementStart(2, "kendo-dropdownlist", 96);
279
+ i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_8_Template_kendo_dropdownlist_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r12); const selection_r11 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(selection_r11.patternType, $event) || (selection_r11.patternType = $event); return i0.ɵɵresetView($event); });
279
280
  i0.ɵɵelementEnd()();
280
281
  } if (rf & 2) {
281
282
  const selection_r11 = i0.ɵɵnextContext().$implicit;
@@ -285,18 +286,19 @@ function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_8_Template(
285
286
  i0.ɵɵtwoWayProperty("ngModel", selection_r11.patternType);
286
287
  i0.ɵɵproperty("data", i0.ɵɵpureFunction0(4, _c0))("valuePrimitive", true);
287
288
  } }
288
- function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_Template(rf, ctx) { if (rf & 1) {
289
+ function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
289
290
  const _r10 = i0.ɵɵgetCurrentView();
290
- i0.ɵɵelementStart(0, "div", 101)(1, "label", 102)(2, "input", 103);
291
- i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_Template_input_ngModelChange_2_listener($event) { const selection_r11 = i0.ɵɵrestoreView(_r10).$implicit; i0.ɵɵtwoWayBindingSet(selection_r11.selected, $event) || (selection_r11.selected = $event); return i0.ɵɵresetView($event); });
292
- i0.ɵɵlistener("change", function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r10); const category_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.updateCategoryState(category_r9)); });
291
+ i0.ɵɵelementStart(0, "div", 85)(1, "label", 86)(2, "input", 87);
292
+ i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Template_input_ngModelChange_2_listener($event) { const selection_r11 = i0.ɵɵrestoreView(_r10).$implicit; i0.ɵɵtwoWayBindingSet(selection_r11.selected, $event) || (selection_r11.selected = $event); return i0.ɵɵresetView($event); });
293
+ i0.ɵɵlistener("change", function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r10); const category_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.updateCategoryState(category_r9)); });
293
294
  i0.ɵɵelementEnd();
294
- i0.ɵɵelementStart(3, "div", 104)(4, "span", 105);
295
+ i0.ɵɵelementStart(3, "div", 88)(4, "span", 89);
295
296
  i0.ɵɵtext(5);
296
297
  i0.ɵɵelementEnd();
297
- i0.ɵɵtemplate(6, APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_span_6_Template, 2, 1, "span", 106);
298
+ i0.ɵɵconditionalCreate(6, APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_6_Template, 2, 1, "span", 90);
298
299
  i0.ɵɵelementEnd()();
299
- i0.ɵɵtemplate(7, APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_7_Template, 4, 9, "div", 107)(8, APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_div_8_Template, 3, 5, "div", 108);
300
+ i0.ɵɵconditionalCreate(7, APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_7_Template, 4, 9, "div", 91);
301
+ i0.ɵɵconditionalCreate(8, APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Conditional_8_Template, 3, 5, "div", 92);
300
302
  i0.ɵɵelementEnd();
301
303
  } if (rf & 2) {
302
304
  const selection_r11 = ctx.$implicit;
@@ -306,44 +308,44 @@ function APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_Template(rf, ct
306
308
  i0.ɵɵadvance(3);
307
309
  i0.ɵɵtextInterpolate(selection_r11.displayName || "(unnamed scope)");
308
310
  i0.ɵɵadvance();
309
- i0.ɵɵproperty("ngIf", selection_r11.scope.Description);
311
+ i0.ɵɵconditional(selection_r11.scope.Description ? 6 : -1);
310
312
  i0.ɵɵadvance();
311
- i0.ɵɵproperty("ngIf", selection_r11.selected);
313
+ i0.ɵɵconditional(selection_r11.selected ? 7 : -1);
312
314
  i0.ɵɵadvance();
313
- i0.ɵɵproperty("ngIf", selection_r11.selected);
315
+ i0.ɵɵconditional(selection_r11.selected ? 8 : -1);
314
316
  } }
315
- function APIApplicationsPanelComponent_div_58_div_6_div_14_Template(rf, ctx) { if (rf & 1) {
316
- i0.ɵɵelementStart(0, "div", 99);
317
- i0.ɵɵtemplate(1, APIApplicationsPanelComponent_div_58_div_6_div_14_div_1_Template, 9, 7, "div", 100);
317
+ function APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_Template(rf, ctx) { if (rf & 1) {
318
+ i0.ɵɵelementStart(0, "div", 83);
319
+ i0.ɵɵrepeaterCreate(1, APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_For_2_Template, 9, 7, "div", 84, i0.ɵɵrepeaterTrackByIdentity);
318
320
  i0.ɵɵelementEnd();
319
321
  } if (rf & 2) {
320
322
  const category_r9 = i0.ɵɵnextContext().$implicit;
321
323
  i0.ɵɵadvance();
322
- i0.ɵɵproperty("ngForOf", category_r9.scopes);
324
+ i0.ɵɵrepeater(category_r9.scopes);
323
325
  } }
324
- function APIApplicationsPanelComponent_div_58_div_6_Template(rf, ctx) { if (rf & 1) {
326
+ function APIApplicationsPanelComponent_Conditional_58_For_7_Template(rf, ctx) { if (rf & 1) {
325
327
  const _r8 = i0.ɵɵgetCurrentView();
326
- i0.ɵɵelementStart(0, "div", 89)(1, "div", 90);
327
- i0.ɵɵlistener("click", function APIApplicationsPanelComponent_div_58_div_6_Template_div_click_1_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleScopeCategory(category_r9)); });
328
- i0.ɵɵelementStart(2, "div", 91);
328
+ i0.ɵɵelementStart(0, "div", 73)(1, "div", 75);
329
+ i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Conditional_58_For_7_Template_div_click_1_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleScopeCategory(category_r9)); });
330
+ i0.ɵɵelementStart(2, "div", 76);
329
331
  i0.ɵɵelement(3, "i");
330
- i0.ɵɵelementStart(4, "span", 92);
332
+ i0.ɵɵelementStart(4, "span", 77);
331
333
  i0.ɵɵtext(5);
332
334
  i0.ɵɵelementEnd();
333
- i0.ɵɵelementStart(6, "span", 93);
335
+ i0.ɵɵelementStart(6, "span", 78);
334
336
  i0.ɵɵtext(7);
335
337
  i0.ɵɵelementEnd()();
336
- i0.ɵɵelementStart(8, "div", 94)(9, "label", 95);
337
- i0.ɵɵlistener("click", function APIApplicationsPanelComponent_div_58_div_6_Template_label_click_9_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
338
- i0.ɵɵelementStart(10, "input", 96);
339
- i0.ɵɵlistener("change", function APIApplicationsPanelComponent_div_58_div_6_Template_input_change_10_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleCategoryAll(category_r9)); });
338
+ i0.ɵɵelementStart(8, "div", 79)(9, "label", 80);
339
+ i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Conditional_58_For_7_Template_label_click_9_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
340
+ i0.ɵɵelementStart(10, "input", 81);
341
+ i0.ɵɵlistener("change", function APIApplicationsPanelComponent_Conditional_58_For_7_Template_input_change_10_listener() { const category_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleCategoryAll(category_r9)); });
340
342
  i0.ɵɵelementEnd();
341
343
  i0.ɵɵelementStart(11, "span");
342
344
  i0.ɵɵtext(12, "All");
343
345
  i0.ɵɵelementEnd()();
344
- i0.ɵɵelement(13, "i", 97);
346
+ i0.ɵɵelement(13, "i", 82);
345
347
  i0.ɵɵelementEnd()();
346
- i0.ɵɵtemplate(14, APIApplicationsPanelComponent_div_58_div_6_div_14_Template, 2, 1, "div", 98);
348
+ i0.ɵɵconditionalCreate(14, APIApplicationsPanelComponent_Conditional_58_For_7_Conditional_14_Template, 3, 0, "div", 83);
347
349
  i0.ɵɵelementEnd();
348
350
  } if (rf & 2) {
349
351
  const category_r9 = ctx.$implicit;
@@ -360,39 +362,40 @@ function APIApplicationsPanelComponent_div_58_div_6_Template(rf, ctx) { if (rf &
360
362
  i0.ɵɵadvance(3);
361
363
  i0.ɵɵclassProp("fa-chevron-down", !category_r9.expanded)("fa-chevron-up", category_r9.expanded);
362
364
  i0.ɵɵadvance();
363
- i0.ɵɵproperty("ngIf", category_r9.expanded);
365
+ i0.ɵɵconditional(category_r9.expanded ? 14 : -1);
364
366
  } }
365
- function APIApplicationsPanelComponent_div_58_div_7_Template(rf, ctx) { if (rf & 1) {
366
- i0.ɵɵelementStart(0, "div", 116);
367
- i0.ɵɵelement(1, "i", 78);
367
+ function APIApplicationsPanelComponent_Conditional_58_Conditional_8_Template(rf, ctx) { if (rf & 1) {
368
+ i0.ɵɵelementStart(0, "div", 74);
369
+ i0.ɵɵelement(1, "i", 68);
368
370
  i0.ɵɵelementStart(2, "span");
369
371
  i0.ɵɵtext(3, "No scopes available");
370
372
  i0.ɵɵelementEnd()();
371
373
  } }
372
- function APIApplicationsPanelComponent_div_58_Template(rf, ctx) { if (rf & 1) {
373
- i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
374
- i0.ɵɵelement(2, "i", 27);
374
+ function APIApplicationsPanelComponent_Conditional_58_Template(rf, ctx) { if (rf & 1) {
375
+ i0.ɵɵelementStart(0, "div", 30)(1, "div", 71);
376
+ i0.ɵɵelement(2, "i", 26);
375
377
  i0.ɵɵelementStart(3, "span");
376
378
  i0.ɵɵtext(4, "Define the maximum permissions this application can grant to API keys.");
377
379
  i0.ɵɵelementEnd()();
378
- i0.ɵɵelementStart(5, "div", 86);
379
- i0.ɵɵtemplate(6, APIApplicationsPanelComponent_div_58_div_6_Template, 15, 13, "div", 87)(7, APIApplicationsPanelComponent_div_58_div_7_Template, 4, 0, "div", 88);
380
+ i0.ɵɵelementStart(5, "div", 72);
381
+ i0.ɵɵrepeaterCreate(6, APIApplicationsPanelComponent_Conditional_58_For_7_Template, 15, 13, "div", 73, i0.ɵɵrepeaterTrackByIdentity);
382
+ i0.ɵɵconditionalCreate(8, APIApplicationsPanelComponent_Conditional_58_Conditional_8_Template, 4, 0, "div", 74);
380
383
  i0.ɵɵelementEnd()();
381
384
  } if (rf & 2) {
382
385
  const ctx_r1 = i0.ɵɵnextContext();
383
386
  i0.ɵɵadvance(6);
384
- i0.ɵɵproperty("ngForOf", ctx_r1.ScopeCategories);
385
- i0.ɵɵadvance();
386
- i0.ɵɵproperty("ngIf", ctx_r1.ScopeCategories.length === 0);
387
+ i0.ɵɵrepeater(ctx_r1.ScopeCategories);
388
+ i0.ɵɵadvance(2);
389
+ i0.ɵɵconditional(ctx_r1.ScopeCategories.length === 0 ? 8 : -1);
387
390
  } }
388
- function APIApplicationsPanelComponent_mj_loading_61_Template(rf, ctx) { if (rf & 1) {
389
- i0.ɵɵelement(0, "mj-loading", 81);
391
+ function APIApplicationsPanelComponent_Conditional_61_Template(rf, ctx) { if (rf & 1) {
392
+ i0.ɵɵelement(0, "mj-loading", 19);
390
393
  } if (rf & 2) {
391
394
  i0.ɵɵproperty("showText", false);
392
395
  } }
393
- function APIApplicationsPanelComponent_span_62_Template(rf, ctx) { if (rf & 1) {
396
+ function APIApplicationsPanelComponent_Conditional_62_Template(rf, ctx) { if (rf & 1) {
394
397
  i0.ɵɵelementStart(0, "span");
395
- i0.ɵɵelement(1, "i", 82);
398
+ i0.ɵɵelement(1, "i", 70);
396
399
  i0.ɵɵtext(2, " Save Changes ");
397
400
  i0.ɵɵelementEnd();
398
401
  } }
@@ -400,10 +403,6 @@ const PANEL_WIDTH_SETTING_KEY = 'APIKeys.ApplicationsPanelWidth';
400
403
  const DEFAULT_PANEL_WIDTH = 570;
401
404
  const MIN_PANEL_WIDTH = 400;
402
405
  const MAX_PANEL_WIDTH = 800;
403
- /** Tree shaking prevention function */
404
- export function LoadAPIApplicationsPanel() {
405
- // This function prevents tree shaking
406
- }
407
406
  /**
408
407
  * API Applications Panel Component
409
408
  * Manages API Applications and their scope assignments
@@ -910,94 +909,99 @@ export class APIApplicationsPanelComponent {
910
909
  }
911
910
  static ɵfac = function APIApplicationsPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || APIApplicationsPanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
912
911
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: APIApplicationsPanelComponent, selectors: [["mj-api-applications-panel"]], hostBindings: function APIApplicationsPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
913
- i0.ɵɵlistener("mousemove", function APIApplicationsPanelComponent_mousemove_HostBindingHandler($event) { return ctx.onMouseMove($event); }, false, i0.ɵɵresolveDocument)("mouseup", function APIApplicationsPanelComponent_mouseup_HostBindingHandler() { return ctx.onMouseUp(); }, false, i0.ɵɵresolveDocument);
914
- } }, outputs: { ApplicationUpdated: "ApplicationUpdated" }, decls: 65, vars: 36, consts: [[1, "applications-panel"], ["text", "Loading applications...", 4, "ngIf"], [4, "ngIf"], ["class", "slideout-backdrop", 3, "click", 4, "ngIf"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-plus-circle"], ["title", "Close", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "slideout-content"], [1, "form-section"], [1, "form-field"], ["kendoTextBox", "", "placeholder", "e.g., MJAPI, MCP Server, Portal", 1, "form-input", 3, "ngModelChange", "ngModel"], ["kendoTextArea", "", "placeholder", "Describe the application's purpose...", 1, "form-textarea", 3, "ngModelChange", "ngModel", "rows"], [1, "checkbox-label"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "ngModel"], [1, "checkbox-hint"], [1, "slideout-footer"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], ["size", "small", 3, "showText", 4, "ngIf"], ["kendoButton", "", 3, "click"], [1, "slideout-resize-handle", 3, "mousedown"], [1, "fa-solid", "fa-cube"], [1, "status-pill"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge"], ["class", "tab-panel", 4, "ngIf"], ["class", "tab-panel scopes-panel", 4, "ngIf"], ["text", "Loading applications..."], [1, "panel-header"], [1, "header-left"], [1, "panel-title"], [1, "panel-subtitle"], [1, "btn-create", 3, "click"], [1, "fa-solid", "fa-plus"], ["class", "message success", 4, "ngIf"], ["class", "message error", 4, "ngIf"], [1, "applications-grid"], ["class", "app-card", 3, "inactive", "expanded", 4, "ngFor", "ngForOf"], ["class", "empty-state", 4, "ngIf"], [1, "message", "success"], [1, "fa-solid", "fa-check-circle"], [1, "message", "error"], [1, "fa-solid", "fa-circle-exclamation"], [1, "app-card"], [1, "app-header"], [1, "app-header-main", 3, "click"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], [1, "status-badge"], ["class", "app-description", 4, "ngIf"], [1, "app-stats"], [1, "scope-count"], [1, "fa-solid", "expand-icon"], ["title", "Edit Application", 1, "app-edit-btn", 3, "click"], [1, "fa-solid", "fa-pencil"], ["class", "app-details", 4, "ngIf"], [1, "app-description"], [1, "app-details"], [1, "details-section"], ["class", "scope-rules", 4, "ngIf"], ["class", "empty-scopes", 4, "ngIf"], [1, "scope-rules"], ["class", "scope-rule", 4, "ngFor", "ngForOf"], [1, "scope-rule"], [1, "rule-icon", 3, "ngClass"], [1, "rule-info"], [1, "rule-scope"], [1, "rule-pattern"], [1, "pattern-type"], ["class", "priority", 4, "ngIf"], [1, "priority"], [1, "empty-scopes"], [1, "fa-solid", "fa-shield-xmark"], [1, "empty-state"], [1, "slideout-backdrop", 3, "click"], ["size", "small", 3, "showText"], [1, "fa-solid", "fa-save"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "scopes-intro"], [1, "scope-categories-list"], ["class", "scope-category-card", 4, "ngFor", "ngForOf"], ["class", "empty-scopes-message", 4, "ngIf"], [1, "scope-category-card"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count-badge"], [1, "category-right"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", "kendoCheckBox", "", 3, "change", "checked"], [1, "fa-solid", "category-chevron"], ["class", "category-scopes-list", 4, "ngIf"], [1, "category-scopes-list"], ["class", "scope-row", 3, "selected", 4, "ngFor", "ngForOf"], [1, "scope-row"], [1, "scope-select"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "change", "ngModel"], [1, "scope-label"], [1, "scope-path"], ["class", "scope-description", 4, "ngIf"], ["class", "scope-pattern-display", 4, "ngIf"], ["class", "scope-pattern-config", 4, "ngIf"], [1, "scope-description"], [1, "scope-pattern-display"], [1, "pattern-tag"], [1, "fa-solid"], [1, "scope-pattern-config"], ["kendoTextBox", "", "placeholder", "*", "title", "Resource Pattern", 1, "pattern-field", 3, "ngModelChange", "ngModel"], ["title", "Pattern Type", 1, "type-field", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [1, "empty-scopes-message"]], template: function APIApplicationsPanelComponent_Template(rf, ctx) { if (rf & 1) {
912
+ i0.ɵɵlistener("mousemove", function APIApplicationsPanelComponent_mousemove_HostBindingHandler($event) { return ctx.onMouseMove($event); }, i0.ɵɵresolveDocument)("mouseup", function APIApplicationsPanelComponent_mouseup_HostBindingHandler() { return ctx.onMouseUp(); }, i0.ɵɵresolveDocument);
913
+ } }, outputs: { ApplicationUpdated: "ApplicationUpdated" }, standalone: false, decls: 65, vars: 36, consts: [[1, "applications-panel"], ["text", "Loading applications..."], [1, "slideout-backdrop"], [1, "slideout-panel"], [1, "slideout-header"], [1, "slideout-title"], [1, "fa-solid", "fa-plus-circle"], ["title", "Close", 1, "slideout-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "slideout-content"], [1, "form-section"], [1, "form-field"], ["kendoTextBox", "", "placeholder", "e.g., MJAPI, MCP Server, Portal", 1, "form-input", 3, "ngModelChange", "ngModel"], ["kendoTextArea", "", "placeholder", "Describe the application's purpose...", 1, "form-textarea", 3, "ngModelChange", "ngModel", "rows"], [1, "checkbox-label"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "ngModel"], [1, "checkbox-hint"], [1, "slideout-footer"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], ["size", "small", 3, "showText"], ["kendoButton", "", 3, "click"], [1, "slideout-resize-handle", 3, "mousedown"], [1, "fa-solid", "fa-cube"], [1, "status-pill"], [1, "slideout-tabs"], [1, "slideout-tab", 3, "click"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-shield-halved"], [1, "tab-badge"], [1, "tab-panel"], [1, "tab-panel", "scopes-panel"], [1, "panel-header"], [1, "header-left"], [1, "panel-title"], [1, "panel-subtitle"], [1, "btn-create", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "message", "success"], [1, "message", "error"], [1, "applications-grid"], [1, "app-card", 3, "inactive", "expanded"], [1, "empty-state"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-circle-exclamation"], [1, "app-card"], [1, "app-header"], [1, "app-header-main", 3, "click"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], [1, "status-badge"], [1, "app-description"], [1, "app-stats"], [1, "scope-count"], [1, "fa-solid", "expand-icon"], ["title", "Edit Application", 1, "app-edit-btn", 3, "click"], [1, "fa-solid", "fa-pencil"], [1, "app-details"], [1, "details-section"], [1, "scope-rules"], [1, "empty-scopes"], [1, "scope-rule"], [1, "rule-icon", 3, "ngClass"], [1, "rule-info"], [1, "rule-scope"], [1, "rule-pattern"], [1, "pattern-type"], [1, "priority"], [1, "fa-solid", "fa-shield-xmark"], [1, "slideout-backdrop", 3, "click"], [1, "fa-solid", "fa-save"], [1, "scopes-intro"], [1, "scope-categories-list"], [1, "scope-category-card"], [1, "empty-scopes-message"], [1, "category-header", 3, "click"], [1, "category-left"], [1, "category-name"], [1, "category-count-badge"], [1, "category-right"], [1, "category-all-toggle", 3, "click"], ["type", "checkbox", "kendoCheckBox", "", 3, "change", "checked"], [1, "fa-solid", "category-chevron"], [1, "category-scopes-list"], [1, "scope-row", 3, "selected"], [1, "scope-row"], [1, "scope-select"], ["type", "checkbox", "kendoCheckBox", "", 3, "ngModelChange", "change", "ngModel"], [1, "scope-label"], [1, "scope-path"], [1, "scope-description"], [1, "scope-pattern-display"], [1, "scope-pattern-config"], [1, "pattern-tag"], [1, "fa-solid"], ["kendoTextBox", "", "placeholder", "*", "title", "Resource Pattern", 1, "pattern-field", 3, "ngModelChange", "ngModel"], ["title", "Pattern Type", 1, "type-field", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"]], template: function APIApplicationsPanelComponent_Template(rf, ctx) { if (rf & 1) {
915
914
  i0.ɵɵelementStart(0, "div", 0);
916
- i0.ɵɵtemplate(1, APIApplicationsPanelComponent_mj_loading_1_Template, 1, 0, "mj-loading", 1)(2, APIApplicationsPanelComponent_ng_container_2_Template, 16, 4, "ng-container", 2)(3, APIApplicationsPanelComponent_div_3_Template, 1, 0, "div", 3);
917
- i0.ɵɵelementStart(4, "div", 4)(5, "div", 5)(6, "div", 6);
918
- i0.ɵɵelement(7, "i", 7);
915
+ i0.ɵɵconditionalCreate(1, APIApplicationsPanelComponent_Conditional_1_Template, 1, 0, "mj-loading", 1);
916
+ i0.ɵɵconditionalCreate(2, APIApplicationsPanelComponent_Conditional_2_Template, 16, 3);
917
+ i0.ɵɵconditionalCreate(3, APIApplicationsPanelComponent_Conditional_3_Template, 1, 0, "div", 2);
918
+ i0.ɵɵelementStart(4, "div", 3)(5, "div", 4)(6, "div", 5);
919
+ i0.ɵɵelement(7, "i", 6);
919
920
  i0.ɵɵelementStart(8, "span");
920
921
  i0.ɵɵtext(9, "New Application");
921
922
  i0.ɵɵelementEnd()();
922
- i0.ɵɵelementStart(10, "button", 8);
923
+ i0.ɵɵelementStart(10, "button", 7);
923
924
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_10_listener() { return ctx.closePanel(); });
924
- i0.ɵɵelement(11, "i", 9);
925
+ i0.ɵɵelement(11, "i", 8);
925
926
  i0.ɵɵelementEnd()();
926
- i0.ɵɵelementStart(12, "div", 10)(13, "div", 11)(14, "div", 12)(15, "label");
927
+ i0.ɵɵelementStart(12, "div", 9)(13, "div", 10)(14, "div", 11)(15, "label");
927
928
  i0.ɵɵtext(16, "Application Name *");
928
929
  i0.ɵɵelementEnd();
929
- i0.ɵɵelementStart(17, "input", 13);
930
+ i0.ɵɵelementStart(17, "input", 12);
930
931
  i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Template_input_ngModelChange_17_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.EditName, $event) || (ctx.EditName = $event); return $event; });
931
932
  i0.ɵɵelementEnd()();
932
- i0.ɵɵelementStart(18, "div", 12)(19, "label");
933
+ i0.ɵɵelementStart(18, "div", 11)(19, "label");
933
934
  i0.ɵɵtext(20, "Description");
934
935
  i0.ɵɵelementEnd();
935
- i0.ɵɵelementStart(21, "textarea", 14);
936
+ i0.ɵɵelementStart(21, "textarea", 13);
936
937
  i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Template_textarea_ngModelChange_21_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.EditDescription, $event) || (ctx.EditDescription = $event); return $event; });
937
938
  i0.ɵɵelementEnd()();
938
- i0.ɵɵelementStart(22, "div", 12)(23, "label", 15)(24, "input", 16);
939
+ i0.ɵɵelementStart(22, "div", 11)(23, "label", 14)(24, "input", 15);
939
940
  i0.ɵɵtwoWayListener("ngModelChange", function APIApplicationsPanelComponent_Template_input_ngModelChange_24_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.EditIsActive, $event) || (ctx.EditIsActive = $event); return $event; });
940
941
  i0.ɵɵelementEnd();
941
942
  i0.ɵɵelementStart(25, "div")(26, "span");
942
943
  i0.ɵɵtext(27, "Active");
943
944
  i0.ɵɵelementEnd();
944
- i0.ɵɵelementStart(28, "span", 17);
945
+ i0.ɵɵelementStart(28, "span", 16);
945
946
  i0.ɵɵtext(29, "Inactive applications cannot be used with API keys");
946
947
  i0.ɵɵelementEnd()()()()()();
947
- i0.ɵɵelementStart(30, "div", 18)(31, "button", 19);
948
+ i0.ɵɵelementStart(30, "div", 17)(31, "button", 18);
948
949
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_31_listener() { return ctx.saveApplication(); });
949
- i0.ɵɵtemplate(32, APIApplicationsPanelComponent_mj_loading_32_Template, 1, 1, "mj-loading", 20)(33, APIApplicationsPanelComponent_span_33_Template, 3, 0, "span", 2);
950
+ i0.ɵɵconditionalCreate(32, APIApplicationsPanelComponent_Conditional_32_Template, 1, 1, "mj-loading", 19);
951
+ i0.ɵɵconditionalCreate(33, APIApplicationsPanelComponent_Conditional_33_Template, 3, 0, "span");
950
952
  i0.ɵɵelementEnd();
951
- i0.ɵɵelementStart(34, "button", 21);
953
+ i0.ɵɵelementStart(34, "button", 20);
952
954
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_34_listener() { return ctx.closePanel(); });
953
955
  i0.ɵɵtext(35, "Cancel");
954
956
  i0.ɵɵelementEnd()()();
955
- i0.ɵɵelementStart(36, "div", 4)(37, "div", 22);
957
+ i0.ɵɵelementStart(36, "div", 3)(37, "div", 21);
956
958
  i0.ɵɵlistener("mousedown", function APIApplicationsPanelComponent_Template_div_mousedown_37_listener($event) { return ctx.startResize($event); });
957
959
  i0.ɵɵelementEnd();
958
- i0.ɵɵelementStart(38, "div", 5)(39, "div", 6);
959
- i0.ɵɵelement(40, "i", 23);
960
+ i0.ɵɵelementStart(38, "div", 4)(39, "div", 5);
961
+ i0.ɵɵelement(40, "i", 22);
960
962
  i0.ɵɵelementStart(41, "span");
961
963
  i0.ɵɵtext(42);
962
964
  i0.ɵɵelementEnd();
963
- i0.ɵɵelementStart(43, "span", 24);
965
+ i0.ɵɵelementStart(43, "span", 23);
964
966
  i0.ɵɵtext(44);
965
967
  i0.ɵɵelementEnd()();
966
- i0.ɵɵelementStart(45, "button", 8);
968
+ i0.ɵɵelementStart(45, "button", 7);
967
969
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_45_listener() { return ctx.closePanel(); });
968
- i0.ɵɵelement(46, "i", 9);
970
+ i0.ɵɵelement(46, "i", 8);
969
971
  i0.ɵɵelementEnd()();
970
- i0.ɵɵelementStart(47, "div", 25)(48, "button", 26);
972
+ i0.ɵɵelementStart(47, "div", 24)(48, "button", 25);
971
973
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_48_listener() { return ctx.EditTab = "details"; });
972
- i0.ɵɵelement(49, "i", 27);
974
+ i0.ɵɵelement(49, "i", 26);
973
975
  i0.ɵɵtext(50, " Details ");
974
976
  i0.ɵɵelementEnd();
975
- i0.ɵɵelementStart(51, "button", 26);
977
+ i0.ɵɵelementStart(51, "button", 25);
976
978
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_51_listener() { return ctx.EditTab = "scopes"; });
977
- i0.ɵɵelement(52, "i", 28);
979
+ i0.ɵɵelement(52, "i", 27);
978
980
  i0.ɵɵtext(53, " Scopes ");
979
- i0.ɵɵelementStart(54, "span", 29);
981
+ i0.ɵɵelementStart(54, "span", 28);
980
982
  i0.ɵɵtext(55);
981
983
  i0.ɵɵelementEnd()()();
982
- i0.ɵɵelementStart(56, "div", 10);
983
- i0.ɵɵtemplate(57, APIApplicationsPanelComponent_div_57_Template, 18, 4, "div", 30)(58, APIApplicationsPanelComponent_div_58_Template, 8, 2, "div", 31);
984
+ i0.ɵɵelementStart(56, "div", 9);
985
+ i0.ɵɵconditionalCreate(57, APIApplicationsPanelComponent_Conditional_57_Template, 18, 4, "div", 29);
986
+ i0.ɵɵconditionalCreate(58, APIApplicationsPanelComponent_Conditional_58_Template, 9, 1, "div", 30);
984
987
  i0.ɵɵelementEnd();
985
- i0.ɵɵelementStart(59, "div", 18)(60, "button", 19);
988
+ i0.ɵɵelementStart(59, "div", 17)(60, "button", 18);
986
989
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_60_listener() { return ctx.saveAll(); });
987
- i0.ɵɵtemplate(61, APIApplicationsPanelComponent_mj_loading_61_Template, 1, 1, "mj-loading", 20)(62, APIApplicationsPanelComponent_span_62_Template, 3, 0, "span", 2);
990
+ i0.ɵɵconditionalCreate(61, APIApplicationsPanelComponent_Conditional_61_Template, 1, 1, "mj-loading", 19);
991
+ i0.ɵɵconditionalCreate(62, APIApplicationsPanelComponent_Conditional_62_Template, 3, 0, "span");
988
992
  i0.ɵɵelementEnd();
989
- i0.ɵɵelementStart(63, "button", 21);
993
+ i0.ɵɵelementStart(63, "button", 20);
990
994
  i0.ɵɵlistener("click", function APIApplicationsPanelComponent_Template_button_click_63_listener() { return ctx.closePanel(); });
991
995
  i0.ɵɵtext(64, "Cancel");
992
996
  i0.ɵɵelementEnd()()()();
993
997
  } if (rf & 2) {
994
998
  i0.ɵɵclassProp("panel-open", ctx.ShowEditPanel || ctx.ShowCreatePanel);
995
999
  i0.ɵɵadvance();
996
- i0.ɵɵproperty("ngIf", ctx.IsLoading);
1000
+ i0.ɵɵconditional(ctx.IsLoading ? 1 : -1);
997
1001
  i0.ɵɵadvance();
998
- i0.ɵɵproperty("ngIf", !ctx.IsLoading);
1002
+ i0.ɵɵconditional(!ctx.IsLoading ? 2 : -1);
999
1003
  i0.ɵɵadvance();
1000
- i0.ɵɵproperty("ngIf", ctx.ShowEditPanel || ctx.ShowCreatePanel);
1004
+ i0.ɵɵconditional(ctx.ShowEditPanel || ctx.ShowCreatePanel ? 3 : -1);
1001
1005
  i0.ɵɵadvance();
1002
1006
  i0.ɵɵclassProp("open", ctx.ShowCreatePanel);
1003
1007
  i0.ɵɵadvance(13);
@@ -1010,9 +1014,9 @@ export class APIApplicationsPanelComponent {
1010
1014
  i0.ɵɵadvance(7);
1011
1015
  i0.ɵɵproperty("themeColor", "primary")("disabled", !ctx.EditName.trim() || ctx.IsSaving);
1012
1016
  i0.ɵɵadvance();
1013
- i0.ɵɵproperty("ngIf", ctx.IsSaving);
1017
+ i0.ɵɵconditional(ctx.IsSaving ? 32 : -1);
1014
1018
  i0.ɵɵadvance();
1015
- i0.ɵɵproperty("ngIf", !ctx.IsSaving);
1019
+ i0.ɵɵconditional(!ctx.IsSaving ? 33 : -1);
1016
1020
  i0.ɵɵadvance(3);
1017
1021
  i0.ɵɵstyleProp("width", ctx.PanelWidth, "px");
1018
1022
  i0.ɵɵclassProp("open", ctx.ShowEditPanel);
@@ -1031,20 +1035,20 @@ export class APIApplicationsPanelComponent {
1031
1035
  i0.ɵɵadvance(4);
1032
1036
  i0.ɵɵtextInterpolate(ctx.getSelectedScopeCount());
1033
1037
  i0.ɵɵadvance(2);
1034
- i0.ɵɵproperty("ngIf", ctx.EditTab === "details");
1038
+ i0.ɵɵconditional(ctx.EditTab === "details" ? 57 : -1);
1035
1039
  i0.ɵɵadvance();
1036
- i0.ɵɵproperty("ngIf", ctx.EditTab === "scopes");
1040
+ i0.ɵɵconditional(ctx.EditTab === "scopes" ? 58 : -1);
1037
1041
  i0.ɵɵadvance(2);
1038
1042
  i0.ɵɵproperty("themeColor", "primary")("disabled", !ctx.EditName.trim() || ctx.IsSaving);
1039
1043
  i0.ɵɵadvance();
1040
- i0.ɵɵproperty("ngIf", ctx.IsSaving);
1044
+ i0.ɵɵconditional(ctx.IsSaving ? 61 : -1);
1041
1045
  i0.ɵɵadvance();
1042
- i0.ɵɵproperty("ngIf", !ctx.IsSaving);
1043
- } }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.DropDownListComponent, i4.TextAreaDirective, i4.TextBoxDirective, i4.CheckBoxDirective, i5.ButtonComponent, i6.LoadingComponent], styles: [".applications-panel[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.applications-panel.panel-open[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #8b5cf6;\n}\n\n.panel-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.btn-create[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-create[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.4);\n}\n\n\n\n.message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 14px;\n}\n\n.message.success[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\n border: 1px solid #a7f3d0;\n}\n\n.message.error[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n border: 1px solid #fca5a5;\n}\n\n\n\n.applications-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.app-card[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n transition: box-shadow 0.2s ease;\n}\n\n.app-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.app-card.inactive[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.app-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n gap: 12px;\n}\n\n.app-header-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex: 1;\n cursor: pointer;\n transition: background 0.2s ease;\n border-radius: 8px;\n padding: 4px;\n margin: -4px;\n}\n\n.app-header-main[_ngcontent-%COMP%]:hover {\n background: var(--item-hover, #f9fafb);\n}\n\n.app-edit-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.app-edit-btn[_ngcontent-%COMP%]:hover {\n background: #8b5cf6;\n border-color: #8b5cf6;\n color: white;\n}\n\n.app-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n border-radius: 10px;\n margin-right: 16px;\n flex-shrink: 0;\n}\n\n.app-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: white;\n}\n\n.app-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.app-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.app-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n margin-top: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-left: 16px;\n}\n\n.scope-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.scope-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #8b5cf6;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #9ca3af);\n transition: transform 0.2s ease;\n}\n\n\n\n.app-details[_ngcontent-%COMP%] {\n padding: 0 20px 20px 20px;\n border-top: 1px solid var(--border-color, #e5e7eb);\n margin-top: 0;\n}\n\n.details-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.details-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 12px 0;\n}\n\n.scope-rules[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-rule[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n padding: 10px 12px;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.rule-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.rule-icon.pattern-include[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.rule-icon.pattern-exclude[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.rule-icon.pattern-deny[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.rule-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.rule-scope[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-primary, #1f2937);\n}\n\n.rule-pattern[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.rule-pattern[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n background: var(--tag-background, #e5e7eb);\n padding: 2px 6px;\n border-radius: 4px;\n color: var(--text-primary, #1f2937);\n}\n\n.pattern-type[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-secondary, #6b7280);\n}\n\n.priority[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #8b5cf6;\n}\n\n.empty-scopes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.empty-scopes[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin-top: 8px;\n}\n\n\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: 570px;\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 overflow: hidden;\n transform: translateX(100%);\n}\n\n.slideout-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n\n\n.slideout-resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 6px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n z-index: 10;\n transition: background 0.2s ease;\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:hover, \n.slideout-resize-handle.resizing[_ngcontent-%COMP%] {\n background: rgba(139, 92, 246, 0.3);\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2px;\n height: 40px;\n background: #d1d5db;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:hover::after {\n opacity: 1;\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: #8b5cf6;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.slideout-title[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 3px 10px;\n border-radius: 12px;\n background: #f3f4f6;\n color: #6b7280;\n flex-shrink: 0;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\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-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active[_ngcontent-%COMP%] {\n background: #8b5cf6;\n color: white;\n}\n\n.slideout-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:not(.active) .tab-badge[_ngcontent-%COMP%] {\n background: #e5e7eb;\n color: #374151;\n}\n\n\n\n.slideout-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.tab-panel[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.scopes-panel[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n.form-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n\n\n.form-field[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.form-field[_ngcontent-%COMP%]:last-of-type {\n margin-bottom: 0;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: #374151;\n margin-bottom: 8px;\n letter-spacing: 0.01em;\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n width: 100%;\n resize: vertical;\n min-height: 80px;\n}\n\n[_nghost-%COMP%] .form-input .k-input, \n[_nghost-%COMP%] .form-textarea .k-input-inner {\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 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);\n}\n\n\n\n.slideout-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button {\n min-width: 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, #8b5cf6 0%, #7c3aed 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 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(139, 92, 246, 0.4);\n}\n\n.checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n padding: 12px 16px;\n background: #f9fafb;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.2s ease;\n}\n\n.checkbox-label[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n border-color: #d1d5db;\n}\n\n.checkbox-label[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n font-weight: 600;\n color: #374151;\n font-size: 14px;\n}\n\n.checkbox-hint[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 4px;\n line-height: 1.4;\n}\n\n\n\n\n\n\n\n\n\n.scopes-intro[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 10px;\n font-size: 13px;\n color: #1e40af;\n margin-bottom: 16px;\n line-height: 1.4;\n}\n\n.scopes-intro[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n font-size: 14px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.scope-categories-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] {\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-header[_ngcontent-%COMP%]:hover {\n background: #f9fafb;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.category-count-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.category-all-toggle[_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-chevron[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-size: 11px;\n}\n\n.category-scopes-list[_ngcontent-%COMP%] {\n border-top: 1px solid #e5e7eb;\n padding: 8px;\n max-height: 280px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-radius: 8px;\n background: #f9fafb;\n transition: all 0.2s ease;\n}\n\n.scope-row[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.scope-row.selected[_ngcontent-%COMP%] {\n background: #ede9fe;\n border: 1px solid #c4b5fd;\n}\n\n.scope-select[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.scope-select[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.scope-label[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.scope-path[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #1f2937;\n font-family: 'SF Mono', 'Consolas', monospace;\n word-break: break-word;\n}\n\n.scope-description[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n color: #6b7280;\n margin-top: 2px;\n line-height: 1.3;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.scope-pattern-display[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n font-size: 11px;\n color: #6b7280;\n}\n\n.pattern-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n background: #f3f4f6;\n border-radius: 4px;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: #374151;\n}\n\n.pattern-tag.include[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\n}\n\n.pattern-tag.exclude[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.pattern-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.scope-pattern-config[_ngcontent-%COMP%] {\n display: none;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n}\n\n.scope-row[_ngcontent-%COMP%]:hover .scope-pattern-config[_ngcontent-%COMP%], \n.scope-row.editing[_ngcontent-%COMP%] .scope-pattern-config[_ngcontent-%COMP%] {\n display: flex;\n}\n\n.scope-row[_ngcontent-%COMP%]:hover .scope-pattern-display[_ngcontent-%COMP%], \n.scope-row.editing[_ngcontent-%COMP%] .scope-pattern-display[_ngcontent-%COMP%] {\n display: none;\n}\n\n.pattern-field[_ngcontent-%COMP%] {\n width: 60px;\n}\n\n[_nghost-%COMP%] .pattern-field .k-input {\n padding: 3px 6px;\n font-size: 11px;\n border-radius: 4px;\n height: 26px;\n}\n\n.type-field[_ngcontent-%COMP%] {\n width: 75px;\n}\n\n[_nghost-%COMP%] .type-field .k-dropdownlist {\n font-size: 11px;\n height: 26px;\n}\n\n[_nghost-%COMP%] .type-field .k-input-inner {\n padding: 2px 6px;\n font-size: 11px;\n}\n\n.empty-scopes-message[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-scopes-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n\n"] });
1046
+ i0.ɵɵconditional(!ctx.IsSaving ? 62 : -1);
1047
+ } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.DropDownListComponent, i4.TextBoxDirective, i4.TextAreaDirective, i4.CheckBoxDirective, i5.ButtonComponent, i6.LoadingComponent], styles: [".applications-panel[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.applications-panel.panel-open[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #8b5cf6;\n}\n\n.panel-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.btn-create[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-create[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.4);\n}\n\n\n\n.message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 14px;\n}\n\n.message.success[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\n border: 1px solid #a7f3d0;\n}\n\n.message.error[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n border: 1px solid #fca5a5;\n}\n\n\n\n.applications-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.app-card[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n transition: box-shadow 0.2s ease;\n}\n\n.app-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.app-card.inactive[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.app-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n gap: 12px;\n}\n\n.app-header-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex: 1;\n cursor: pointer;\n transition: background 0.2s ease;\n border-radius: 8px;\n padding: 4px;\n margin: -4px;\n}\n\n.app-header-main[_ngcontent-%COMP%]:hover {\n background: var(--item-hover, #f9fafb);\n}\n\n.app-edit-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.app-edit-btn[_ngcontent-%COMP%]:hover {\n background: #8b5cf6;\n border-color: #8b5cf6;\n color: white;\n}\n\n.app-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n border-radius: 10px;\n margin-right: 16px;\n flex-shrink: 0;\n}\n\n.app-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: white;\n}\n\n.app-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.app-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\n}\n\n.status-badge.inactive[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.app-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n margin-top: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-left: 16px;\n}\n\n.scope-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.scope-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #8b5cf6;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #9ca3af);\n transition: transform 0.2s ease;\n}\n\n\n\n.app-details[_ngcontent-%COMP%] {\n padding: 0 20px 20px 20px;\n border-top: 1px solid var(--border-color, #e5e7eb);\n margin-top: 0;\n}\n\n.details-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.details-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 12px 0;\n}\n\n.scope-rules[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-rule[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n padding: 10px 12px;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.rule-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.rule-icon.pattern-include[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.rule-icon.pattern-exclude[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.rule-icon.pattern-deny[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.rule-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.rule-scope[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-primary, #1f2937);\n}\n\n.rule-pattern[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.rule-pattern[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n background: var(--tag-background, #e5e7eb);\n padding: 2px 6px;\n border-radius: 4px;\n color: var(--text-primary, #1f2937);\n}\n\n.pattern-type[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-secondary, #6b7280);\n}\n\n.priority[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #8b5cf6;\n}\n\n.empty-scopes[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.empty-scopes[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin-top: 8px;\n}\n\n\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: 570px;\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 overflow: hidden;\n transform: translateX(100%);\n}\n\n.slideout-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n\n\n.slideout-resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 6px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n z-index: 10;\n transition: background 0.2s ease;\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:hover, \n.slideout-resize-handle.resizing[_ngcontent-%COMP%] {\n background: rgba(139, 92, 246, 0.3);\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2px;\n height: 40px;\n background: #d1d5db;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:hover::after {\n opacity: 1;\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: #8b5cf6;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.slideout-title[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 3px 10px;\n border-radius: 12px;\n background: #f3f4f6;\n color: #6b7280;\n flex-shrink: 0;\n}\n\n.status-pill.active[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\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-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active[_ngcontent-%COMP%] {\n background: #8b5cf6;\n color: white;\n}\n\n.slideout-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.slideout-tab[_ngcontent-%COMP%]:not(.active) .tab-badge[_ngcontent-%COMP%] {\n background: #e5e7eb;\n color: #374151;\n}\n\n\n\n.slideout-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.tab-panel[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.scopes-panel[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n.form-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n\n\n.form-field[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.form-field[_ngcontent-%COMP%]:last-of-type {\n margin-bottom: 0;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: #374151;\n margin-bottom: 8px;\n letter-spacing: 0.01em;\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n width: 100%;\n resize: vertical;\n min-height: 80px;\n}\n\n[_nghost-%COMP%] .form-input .k-input, \n[_nghost-%COMP%] .form-textarea .k-input-inner {\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 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);\n}\n\n\n\n.slideout-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n[_nghost-%COMP%] .slideout-footer .k-button {\n min-width: 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, #8b5cf6 0%, #7c3aed 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 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(139, 92, 246, 0.4);\n}\n\n.checkbox-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n padding: 12px 16px;\n background: #f9fafb;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.2s ease;\n}\n\n.checkbox-label[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n border-color: #d1d5db;\n}\n\n.checkbox-label[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n font-weight: 600;\n color: #374151;\n font-size: 14px;\n}\n\n.checkbox-hint[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 4px;\n line-height: 1.4;\n}\n\n\n\n\n\n\n\n\n\n.scopes-intro[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 10px;\n font-size: 13px;\n color: #1e40af;\n margin-bottom: 16px;\n line-height: 1.4;\n}\n\n.scopes-intro[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n font-size: 14px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.scope-categories-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] {\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-header[_ngcontent-%COMP%]:hover {\n background: #f9fafb;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.category-count-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.scope-category-card[_ngcontent-%COMP%] .category-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.category-all-toggle[_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-chevron[_ngcontent-%COMP%] {\n color: #9ca3af;\n font-size: 11px;\n}\n\n.category-scopes-list[_ngcontent-%COMP%] {\n border-top: 1px solid #e5e7eb;\n padding: 8px;\n max-height: 280px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-radius: 8px;\n background: #f9fafb;\n transition: all 0.2s ease;\n}\n\n.scope-row[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n}\n\n.scope-row.selected[_ngcontent-%COMP%] {\n background: #ede9fe;\n border: 1px solid #c4b5fd;\n}\n\n.scope-select[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.scope-select[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.scope-label[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.scope-path[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: #1f2937;\n font-family: 'SF Mono', 'Consolas', monospace;\n word-break: break-word;\n}\n\n.scope-description[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n color: #6b7280;\n margin-top: 2px;\n line-height: 1.3;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.scope-pattern-display[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n font-size: 11px;\n color: #6b7280;\n}\n\n.pattern-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n background: #f3f4f6;\n border-radius: 4px;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: #374151;\n}\n\n.pattern-tag.include[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #065f46;\n}\n\n.pattern-tag.exclude[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.pattern-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.scope-pattern-config[_ngcontent-%COMP%] {\n display: none;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n}\n\n.scope-row[_ngcontent-%COMP%]:hover .scope-pattern-config[_ngcontent-%COMP%], \n.scope-row.editing[_ngcontent-%COMP%] .scope-pattern-config[_ngcontent-%COMP%] {\n display: flex;\n}\n\n.scope-row[_ngcontent-%COMP%]:hover .scope-pattern-display[_ngcontent-%COMP%], \n.scope-row.editing[_ngcontent-%COMP%] .scope-pattern-display[_ngcontent-%COMP%] {\n display: none;\n}\n\n.pattern-field[_ngcontent-%COMP%] {\n width: 60px;\n}\n\n[_nghost-%COMP%] .pattern-field .k-input {\n padding: 3px 6px;\n font-size: 11px;\n border-radius: 4px;\n height: 26px;\n}\n\n.type-field[_ngcontent-%COMP%] {\n width: 75px;\n}\n\n[_nghost-%COMP%] .type-field .k-dropdownlist {\n font-size: 11px;\n height: 26px;\n}\n\n[_nghost-%COMP%] .type-field .k-input-inner {\n padding: 2px 6px;\n font-size: 11px;\n}\n\n.empty-scopes-message[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-scopes-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n\n"] });
1044
1048
  }
1045
1049
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(APIApplicationsPanelComponent, [{
1046
1050
  type: Component,
1047
- args: [{ selector: 'mj-api-applications-panel', template: "<div class=\"applications-panel\" [class.panel-open]=\"ShowEditPanel || ShowCreatePanel\">\n <mj-loading *ngIf=\"IsLoading\" text=\"Loading applications...\"></mj-loading>\n\n <ng-container *ngIf=\"!IsLoading\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-cube\"></i>\n API Applications\n </h3>\n <p class=\"panel-subtitle\">Manage applications and their default scope permissions</p>\n </div>\n <button class=\"btn-create\" (click)=\"openCreatePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Application\n </button>\n </div>\n\n <!-- Messages -->\n <div class=\"message success\" *ngIf=\"SuccessMessage\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{SuccessMessage}}\n </div>\n <div class=\"message error\" *ngIf=\"ErrorMessage\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ErrorMessage}}\n </div>\n\n <!-- Applications Grid -->\n <div class=\"applications-grid\">\n <div class=\"app-card\" *ngFor=\"let appItem of Applications\"\n [class.inactive]=\"!appItem.application.IsActive\"\n [class.expanded]=\"appItem.expanded\">\n <div class=\"app-header\">\n <div class=\"app-header-main\" (click)=\"toggleExpanded(appItem)\">\n <div class=\"app-icon\">\n <i class=\"fa-solid fa-cube\"></i>\n </div>\n <div class=\"app-info\">\n <div class=\"app-name\">\n {{appItem.application.Name}}\n <span class=\"status-badge\" [class.active]=\"appItem.application.IsActive\"\n [class.inactive]=\"!appItem.application.IsActive\">\n {{appItem.application.IsActive ? 'Active' : 'Inactive'}}\n </span>\n </div>\n <div class=\"app-description\" *ngIf=\"appItem.application.Description\">\n {{appItem.application.Description}}\n </div>\n </div>\n <div class=\"app-stats\">\n <div class=\"scope-count\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n {{appItem.scopeCount}} scopes\n </div>\n <i class=\"fa-solid expand-icon\"\n [class.fa-chevron-down]=\"!appItem.expanded\"\n [class.fa-chevron-up]=\"appItem.expanded\"></i>\n </div>\n </div>\n <button class=\"app-edit-btn\" (click)=\"openEditPanel(appItem); $event.stopPropagation()\" title=\"Edit Application\">\n <i class=\"fa-solid fa-pencil\"></i>\n </button>\n </div>\n\n <!-- Expanded Content -->\n <div class=\"app-details\" *ngIf=\"appItem.expanded\">\n <div class=\"details-section\">\n <h4>Scope Ceiling Rules</h4>\n <div class=\"scope-rules\" *ngIf=\"appItem.scopes.length > 0\">\n <div class=\"scope-rule\" *ngFor=\"let scope of appItem.scopes\">\n <div class=\"rule-icon\" [ngClass]=\"getPatternClass(scope.PatternType, scope.IsDeny)\">\n <i [class]=\"getPatternIcon(scope.PatternType, scope.IsDeny)\"></i>\n </div>\n <div class=\"rule-info\">\n <div class=\"rule-scope\">{{getScopeName(scope.ScopeID)}}</div>\n <div class=\"rule-pattern\">\n <code>{{scope.ResourcePattern}}</code>\n <span class=\"pattern-type\">{{scope.PatternType}}</span>\n <span class=\"priority\" *ngIf=\"scope.Priority > 0\">\n Priority: {{scope.Priority}}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"empty-scopes\" *ngIf=\"appItem.scopes.length === 0\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n <span>No scope rules defined - all access denied by default</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"Applications.length === 0\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>No applications configured</span>\n <p>Create an application to define scope ceilings for API key access</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Slide-out Backdrop -->\n <div class=\"slideout-backdrop\" *ngIf=\"ShowEditPanel || ShowCreatePanel\" (click)=\"closePanel()\"></div>\n\n <!-- Create Panel (Slide-out) -->\n <div class=\"slideout-panel\" [class.open]=\"ShowCreatePanel\">\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n <span>New Application</span>\n </div>\n <button class=\"slideout-close\" (click)=\"closePanel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <div class=\"form-section\">\n <div class=\"form-field\">\n <label>Application Name *</label>\n <input kendoTextBox [(ngModel)]=\"EditName\"\n placeholder=\"e.g., MJAPI, MCP Server, Portal\"\n class=\"form-input\" />\n </div>\n\n <div class=\"form-field\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"EditDescription\"\n placeholder=\"Describe the application's purpose...\"\n [rows]=\"3\"\n class=\"form-textarea\"></textarea>\n </div>\n\n <div class=\"form-field\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"EditIsActive\" />\n <div>\n <span>Active</span>\n <span class=\"checkbox-hint\">Inactive applications cannot be used with API keys</span>\n </div>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-footer\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"!EditName.trim() || IsSaving\"\n (click)=\"saveApplication()\">\n <mj-loading *ngIf=\"IsSaving\" [showText]=\"false\" size=\"small\"></mj-loading>\n <span *ngIf=\"!IsSaving\">\n <i class=\"fa-solid fa-save\"></i>\n Create Application\n </span>\n </button>\n <button kendoButton (click)=\"closePanel()\">Cancel</button>\n </div>\n </div>\n\n <!-- Edit Panel (Slide-out) -->\n <div class=\"slideout-panel\" [class.open]=\"ShowEditPanel\" [style.width.px]=\"PanelWidth\">\n <!-- Resize Handle -->\n <div class=\"slideout-resize-handle\"\n [class.resizing]=\"IsResizing\"\n (mousedown)=\"startResize($event)\"></div>\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>{{EditingApplication?.Name}}</span>\n <span class=\"status-pill\" [class.active]=\"EditIsActive\">\n {{EditIsActive ? 'Active' : 'Inactive'}}\n </span>\n </div>\n <button class=\"slideout-close\" (click)=\"closePanel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Tab Bar -->\n <div class=\"slideout-tabs\">\n <button class=\"slideout-tab\" [class.active]=\"EditTab === 'details'\"\n (click)=\"EditTab = 'details'\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Details\n </button>\n <button class=\"slideout-tab\" [class.active]=\"EditTab === 'scopes'\"\n (click)=\"EditTab = 'scopes'\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n Scopes\n <span class=\"tab-badge\">{{getSelectedScopeCount()}}</span>\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <!-- Details Tab -->\n <div class=\"tab-panel\" *ngIf=\"EditTab === 'details'\">\n <div class=\"form-section\">\n <div class=\"form-field\">\n <label>Application Name *</label>\n <input kendoTextBox [(ngModel)]=\"EditName\"\n placeholder=\"e.g., MJAPI, MCP Server, Portal\"\n class=\"form-input\" />\n </div>\n\n <div class=\"form-field\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"EditDescription\"\n placeholder=\"Describe the application's purpose...\"\n [rows]=\"4\"\n class=\"form-textarea\"></textarea>\n </div>\n\n <div class=\"form-field\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"EditIsActive\" />\n <div>\n <span>Active</span>\n <span class=\"checkbox-hint\">Inactive applications cannot be used with API keys</span>\n </div>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Scopes Tab -->\n <div class=\"tab-panel scopes-panel\" *ngIf=\"EditTab === 'scopes'\">\n <div class=\"scopes-intro\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Define the maximum permissions this application can grant to API keys.</span>\n </div>\n\n <div class=\"scope-categories-list\">\n <div class=\"scope-category-card\" *ngFor=\"let category of ScopeCategories\">\n <div class=\"category-header\" (click)=\"toggleScopeCategory(category)\">\n <div class=\"category-left\">\n <i [class]=\"category.icon\" [style.color]=\"category.color\"></i>\n <span class=\"category-name\">{{category.name}}</span>\n <span class=\"category-count-badge\">\n {{getCategorySelectedCount(category)}}/{{category.scopes.length}}\n </span>\n </div>\n <div class=\"category-right\">\n <label class=\"category-all-toggle\" (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 category-chevron\"\n [class.fa-chevron-down]=\"!category.expanded\"\n [class.fa-chevron-up]=\"category.expanded\"></i>\n </div>\n </div>\n\n <div class=\"category-scopes-list\" *ngIf=\"category.expanded\">\n <div class=\"scope-row\" *ngFor=\"let selection of category.scopes\"\n [class.selected]=\"selection.selected\">\n <label class=\"scope-select\">\n <input type=\"checkbox\" kendoCheckBox\n [(ngModel)]=\"selection.selected\"\n (change)=\"updateCategoryState(category)\" />\n <div class=\"scope-label\">\n <span class=\"scope-path\">{{selection.displayName || '(unnamed scope)'}}</span>\n <span class=\"scope-description\" *ngIf=\"selection.scope.Description\">\n {{selection.scope.Description}}\n </span>\n </div>\n </label>\n\n <!-- Read-only pattern display -->\n <div class=\"scope-pattern-display\" *ngIf=\"selection.selected\">\n <span class=\"pattern-tag\" [class.include]=\"selection.patternType === 'Include'\"\n [class.exclude]=\"selection.patternType === 'Exclude'\">\n <i class=\"fa-solid\" [class.fa-check]=\"selection.patternType === 'Include'\"\n [class.fa-minus]=\"selection.patternType === 'Exclude'\"></i>\n {{selection.pattern || '*'}}\n </span>\n </div>\n <!-- Editable pattern config - shown on hover -->\n <div class=\"scope-pattern-config\" *ngIf=\"selection.selected\">\n <input kendoTextBox [(ngModel)]=\"selection.pattern\"\n placeholder=\"*\"\n class=\"pattern-field\"\n title=\"Resource Pattern\" />\n <kendo-dropdownlist [(ngModel)]=\"selection.patternType\"\n [data]=\"['Include', 'Exclude']\"\n [valuePrimitive]=\"true\"\n class=\"type-field\"\n title=\"Pattern Type\">\n </kendo-dropdownlist>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"empty-scopes-message\" *ngIf=\"ScopeCategories.length === 0\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n <span>No scopes available</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-footer\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"!EditName.trim() || IsSaving\"\n (click)=\"saveAll()\">\n <mj-loading *ngIf=\"IsSaving\" [showText]=\"false\" size=\"small\"></mj-loading>\n <span *ngIf=\"!IsSaving\">\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n </button>\n <button kendoButton (click)=\"closePanel()\">Cancel</button>\n </div>\n </div>\n</div>\n", styles: [".applications-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.applications-panel.panel-open {\n overflow: hidden;\n}\n\n/* Panel Header */\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left {\n flex: 1;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.panel-title i {\n color: #8b5cf6;\n}\n\n.panel-subtitle {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.btn-create {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-create:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.4);\n}\n\n/* Messages */\n.message {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 14px;\n}\n\n.message.success {\n background: #d1fae5;\n color: #065f46;\n border: 1px solid #a7f3d0;\n}\n\n.message.error {\n background: #fee2e2;\n color: #991b1b;\n border: 1px solid #fca5a5;\n}\n\n/* Applications Grid */\n.applications-grid {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.app-card {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n transition: box-shadow 0.2s ease;\n}\n\n.app-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.app-card.inactive {\n opacity: 0.7;\n}\n\n.app-header {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n gap: 12px;\n}\n\n.app-header-main {\n display: flex;\n align-items: center;\n flex: 1;\n cursor: pointer;\n transition: background 0.2s ease;\n border-radius: 8px;\n padding: 4px;\n margin: -4px;\n}\n\n.app-header-main:hover {\n background: var(--item-hover, #f9fafb);\n}\n\n.app-edit-btn {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.app-edit-btn:hover {\n background: #8b5cf6;\n border-color: #8b5cf6;\n color: white;\n}\n\n.app-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n border-radius: 10px;\n margin-right: 16px;\n flex-shrink: 0;\n}\n\n.app-icon i {\n font-size: 20px;\n color: white;\n}\n\n.app-info {\n flex: 1;\n min-width: 0;\n}\n\n.app-name {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.status-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.active {\n background: #d1fae5;\n color: #065f46;\n}\n\n.status-badge.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.app-description {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n margin-top: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-stats {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-left: 16px;\n}\n\n.scope-count {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.scope-count i {\n color: #8b5cf6;\n}\n\n.expand-icon {\n color: var(--text-tertiary, #9ca3af);\n transition: transform 0.2s ease;\n}\n\n/* Expanded Details */\n.app-details {\n padding: 0 20px 20px 20px;\n border-top: 1px solid var(--border-color, #e5e7eb);\n margin-top: 0;\n}\n\n.details-section {\n margin-top: 16px;\n}\n\n.details-section h4 {\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 12px 0;\n}\n\n.scope-rules {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-rule {\n display: flex;\n align-items: flex-start;\n padding: 10px 12px;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.rule-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.rule-icon.pattern-include {\n background: #d1fae5;\n color: #059669;\n}\n\n.rule-icon.pattern-exclude {\n background: #fef3c7;\n color: #d97706;\n}\n\n.rule-icon.pattern-deny {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.rule-info {\n flex: 1;\n min-width: 0;\n}\n\n.rule-scope {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-primary, #1f2937);\n}\n\n.rule-pattern {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.rule-pattern code {\n font-family: monospace;\n font-size: 12px;\n background: var(--tag-background, #e5e7eb);\n padding: 2px 6px;\n border-radius: 4px;\n color: var(--text-primary, #1f2937);\n}\n\n.pattern-type {\n font-size: 11px;\n color: var(--text-secondary, #6b7280);\n}\n\n.priority {\n font-size: 11px;\n color: #8b5cf6;\n}\n\n.empty-scopes {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.empty-scopes i {\n font-size: 24px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n/* Legacy .details-actions removed - buttons now in header */\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.empty-state span {\n font-size: 16px;\n font-weight: 500;\n}\n\n.empty-state p {\n font-size: 14px;\n margin-top: 8px;\n}\n\n/* ========================================\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: 570px;\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 overflow: hidden;\n transform: translateX(100%);\n}\n\n.slideout-panel.open {\n transform: translateX(0);\n}\n\n/* Resize handle */\n.slideout-resize-handle {\n position: absolute;\n top: 0;\n left: 0;\n width: 6px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n z-index: 10;\n transition: background 0.2s ease;\n}\n\n.slideout-resize-handle:hover,\n.slideout-resize-handle.resizing {\n background: rgba(139, 92, 246, 0.3);\n}\n\n.slideout-resize-handle::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2px;\n height: 40px;\n background: #d1d5db;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.slideout-resize-handle:hover::after {\n opacity: 1;\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: #8b5cf6;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.slideout-title span:first-of-type {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.status-pill {\n font-size: 11px;\n font-weight: 500;\n padding: 3px 10px;\n border-radius: 12px;\n background: #f3f4f6;\n color: #6b7280;\n flex-shrink: 0;\n}\n\n.status-pill.active {\n background: #d1fae5;\n color: #065f46;\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 Tabs */\n.slideout-tabs {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.slideout-tab:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active {\n background: #8b5cf6;\n color: white;\n}\n\n.slideout-tab i {\n font-size: 14px;\n}\n\n.tab-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.slideout-tab:not(.active) .tab-badge {\n background: #e5e7eb;\n color: #374151;\n}\n\n/* Panel Content */\n.slideout-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.tab-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.scopes-panel {\n height: 100%;\n}\n\n/* Form Section */\n.form-section {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n/* Form Fields */\n.form-field {\n margin-bottom: 20px;\n}\n\n.form-field:last-of-type {\n margin-bottom: 0;\n}\n\n.form-field label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: #374151;\n margin-bottom: 8px;\n letter-spacing: 0.01em;\n}\n\n.form-input {\n width: 100%;\n}\n\n.form-textarea {\n width: 100%;\n resize: vertical;\n min-height: 80px;\n}\n\n:host ::ng-deep .form-input .k-input,\n:host ::ng-deep .form-textarea .k-input-inner {\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 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);\n}\n\n/* Slideout Footer */\n.slideout-footer {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n:host ::ng-deep .slideout-footer .k-button {\n min-width: 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, #8b5cf6 0%, #7c3aed 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 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(139, 92, 246, 0.4);\n}\n\n.checkbox-label {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n padding: 12px 16px;\n background: #f9fafb;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.2s ease;\n}\n\n.checkbox-label:hover {\n background: #f3f4f6;\n border-color: #d1d5db;\n}\n\n.checkbox-label input {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.checkbox-label span:first-of-type {\n font-weight: 600;\n color: #374151;\n font-size: 14px;\n}\n\n.checkbox-hint {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 4px;\n line-height: 1.4;\n}\n\n/* Legacy dialog-actions removed - now using slideout-footer */\n\n/* ========================================\n Scopes Panel - Slide-out Layout\n ======================================== */\n\n.scopes-intro {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 10px;\n font-size: 13px;\n color: #1e40af;\n margin-bottom: 16px;\n line-height: 1.4;\n}\n\n.scopes-intro i {\n color: #3b82f6;\n font-size: 14px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.scope-categories-list {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.scope-category-card {\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.scope-category-card .category-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.scope-category-card .category-header:hover {\n background: #f9fafb;\n}\n\n.scope-category-card .category-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.scope-category-card .category-left i {\n font-size: 14px;\n}\n\n.scope-category-card .category-name {\n font-size: 13px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.category-count-badge {\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.scope-category-card .category-right {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.category-all-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n cursor: pointer;\n}\n\n.category-chevron {\n color: #9ca3af;\n font-size: 11px;\n}\n\n.category-scopes-list {\n border-top: 1px solid #e5e7eb;\n padding: 8px;\n max-height: 280px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-radius: 8px;\n background: #f9fafb;\n transition: all 0.2s ease;\n}\n\n.scope-row:hover {\n background: #f3f4f6;\n}\n\n.scope-row.selected {\n background: #ede9fe;\n border: 1px solid #c4b5fd;\n}\n\n.scope-select {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.scope-select input {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.scope-label {\n flex: 1;\n min-width: 0;\n}\n\n.scope-path {\n font-size: 12px;\n font-weight: 500;\n color: #1f2937;\n font-family: 'SF Mono', 'Consolas', monospace;\n word-break: break-word;\n}\n\n.scope-description {\n display: block;\n font-size: 11px;\n color: #6b7280;\n margin-top: 2px;\n line-height: 1.3;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Pattern config for selected scopes - read-only display */\n.scope-pattern-display {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n font-size: 11px;\n color: #6b7280;\n}\n\n.pattern-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n background: #f3f4f6;\n border-radius: 4px;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: #374151;\n}\n\n.pattern-tag.include {\n background: #d1fae5;\n color: #065f46;\n}\n\n.pattern-tag.exclude {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.pattern-tag i {\n font-size: 10px;\n}\n\n/* Editable pattern config - shown on hover/edit */\n.scope-pattern-config {\n display: none;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n}\n\n.scope-row:hover .scope-pattern-config,\n.scope-row.editing .scope-pattern-config {\n display: flex;\n}\n\n.scope-row:hover .scope-pattern-display,\n.scope-row.editing .scope-pattern-display {\n display: none;\n}\n\n.pattern-field {\n width: 60px;\n}\n\n:host ::ng-deep .pattern-field .k-input {\n padding: 3px 6px;\n font-size: 11px;\n border-radius: 4px;\n height: 26px;\n}\n\n.type-field {\n width: 75px;\n}\n\n:host ::ng-deep .type-field .k-dropdownlist {\n font-size: 11px;\n height: 26px;\n}\n\n:host ::ng-deep .type-field .k-input-inner {\n padding: 2px 6px;\n font-size: 11px;\n}\n\n.empty-scopes-message {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-scopes-message i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n/* Legacy dialog styles removed - now using slide-out panels */\n"] }]
1051
+ args: [{ standalone: false, selector: 'mj-api-applications-panel', template: "<div class=\"applications-panel\" [class.panel-open]=\"ShowEditPanel || ShowCreatePanel\">\n @if (IsLoading) {\n <mj-loading text=\"Loading applications...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-left\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-cube\"></i>\n API Applications\n </h3>\n <p class=\"panel-subtitle\">Manage applications and their default scope permissions</p>\n </div>\n <button class=\"btn-create\" (click)=\"openCreatePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Application\n </button>\n </div>\n <!-- Messages -->\n @if (SuccessMessage) {\n <div class=\"message success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{SuccessMessage}}\n </div>\n }\n @if (ErrorMessage) {\n <div class=\"message error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ErrorMessage}}\n </div>\n }\n <!-- Applications Grid -->\n <div class=\"applications-grid\">\n @for (appItem of Applications; track appItem) {\n <div class=\"app-card\"\n [class.inactive]=\"!appItem.application.IsActive\"\n [class.expanded]=\"appItem.expanded\">\n <div class=\"app-header\">\n <div class=\"app-header-main\" (click)=\"toggleExpanded(appItem)\">\n <div class=\"app-icon\">\n <i class=\"fa-solid fa-cube\"></i>\n </div>\n <div class=\"app-info\">\n <div class=\"app-name\">\n {{appItem.application.Name}}\n <span class=\"status-badge\" [class.active]=\"appItem.application.IsActive\"\n [class.inactive]=\"!appItem.application.IsActive\">\n {{appItem.application.IsActive ? 'Active' : 'Inactive'}}\n </span>\n </div>\n @if (appItem.application.Description) {\n <div class=\"app-description\">\n {{appItem.application.Description}}\n </div>\n }\n </div>\n <div class=\"app-stats\">\n <div class=\"scope-count\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n {{appItem.scopeCount}} scopes\n </div>\n <i class=\"fa-solid expand-icon\"\n [class.fa-chevron-down]=\"!appItem.expanded\"\n [class.fa-chevron-up]=\"appItem.expanded\"></i>\n </div>\n </div>\n <button class=\"app-edit-btn\" (click)=\"openEditPanel(appItem); $event.stopPropagation()\" title=\"Edit Application\">\n <i class=\"fa-solid fa-pencil\"></i>\n </button>\n </div>\n <!-- Expanded Content -->\n @if (appItem.expanded) {\n <div class=\"app-details\">\n <div class=\"details-section\">\n <h4>Scope Ceiling Rules</h4>\n @if (appItem.scopes.length > 0) {\n <div class=\"scope-rules\">\n @for (scope of appItem.scopes; track scope) {\n <div class=\"scope-rule\">\n <div class=\"rule-icon\" [ngClass]=\"getPatternClass(scope.PatternType, scope.IsDeny)\">\n <i [class]=\"getPatternIcon(scope.PatternType, scope.IsDeny)\"></i>\n </div>\n <div class=\"rule-info\">\n <div class=\"rule-scope\">{{getScopeName(scope.ScopeID)}}</div>\n <div class=\"rule-pattern\">\n <code>{{scope.ResourcePattern}}</code>\n <span class=\"pattern-type\">{{scope.PatternType}}</span>\n @if (scope.Priority > 0) {\n <span class=\"priority\">\n Priority: {{scope.Priority}}\n </span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (appItem.scopes.length === 0) {\n <div class=\"empty-scopes\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n <span>No scope rules defined - all access denied by default</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (Applications.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>No applications configured</span>\n <p>Create an application to define scope ceilings for API key access</p>\n </div>\n }\n </div>\n }\n\n <!-- Slide-out Backdrop -->\n @if (ShowEditPanel || ShowCreatePanel) {\n <div class=\"slideout-backdrop\" (click)=\"closePanel()\"></div>\n }\n\n <!-- Create Panel (Slide-out) -->\n <div class=\"slideout-panel\" [class.open]=\"ShowCreatePanel\">\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n <span>New Application</span>\n </div>\n <button class=\"slideout-close\" (click)=\"closePanel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <div class=\"form-section\">\n <div class=\"form-field\">\n <label>Application Name *</label>\n <input kendoTextBox [(ngModel)]=\"EditName\"\n placeholder=\"e.g., MJAPI, MCP Server, Portal\"\n class=\"form-input\" />\n </div>\n\n <div class=\"form-field\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"EditDescription\"\n placeholder=\"Describe the application's purpose...\"\n [rows]=\"3\"\n class=\"form-textarea\"></textarea>\n </div>\n\n <div class=\"form-field\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"EditIsActive\" />\n <div>\n <span>Active</span>\n <span class=\"checkbox-hint\">Inactive applications cannot be used with API keys</span>\n </div>\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"slideout-footer\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"!EditName.trim() || IsSaving\"\n (click)=\"saveApplication()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Create Application\n </span>\n }\n </button>\n <button kendoButton (click)=\"closePanel()\">Cancel</button>\n </div>\n </div>\n\n <!-- Edit Panel (Slide-out) -->\n <div class=\"slideout-panel\" [class.open]=\"ShowEditPanel\" [style.width.px]=\"PanelWidth\">\n <!-- Resize Handle -->\n <div class=\"slideout-resize-handle\"\n [class.resizing]=\"IsResizing\"\n (mousedown)=\"startResize($event)\"></div>\n <div class=\"slideout-header\">\n <div class=\"slideout-title\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>{{EditingApplication?.Name}}</span>\n <span class=\"status-pill\" [class.active]=\"EditIsActive\">\n {{EditIsActive ? 'Active' : 'Inactive'}}\n </span>\n </div>\n <button class=\"slideout-close\" (click)=\"closePanel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Tab Bar -->\n <div class=\"slideout-tabs\">\n <button class=\"slideout-tab\" [class.active]=\"EditTab === 'details'\"\n (click)=\"EditTab = 'details'\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Details\n </button>\n <button class=\"slideout-tab\" [class.active]=\"EditTab === 'scopes'\"\n (click)=\"EditTab = 'scopes'\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n Scopes\n <span class=\"tab-badge\">{{getSelectedScopeCount()}}</span>\n </button>\n </div>\n\n <div class=\"slideout-content\">\n <!-- Details Tab -->\n @if (EditTab === 'details') {\n <div class=\"tab-panel\">\n <div class=\"form-section\">\n <div class=\"form-field\">\n <label>Application Name *</label>\n <input kendoTextBox [(ngModel)]=\"EditName\"\n placeholder=\"e.g., MJAPI, MCP Server, Portal\"\n class=\"form-input\" />\n </div>\n <div class=\"form-field\">\n <label>Description</label>\n <textarea kendoTextArea [(ngModel)]=\"EditDescription\"\n placeholder=\"Describe the application's purpose...\"\n [rows]=\"4\"\n class=\"form-textarea\"></textarea>\n </div>\n <div class=\"form-field\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox [(ngModel)]=\"EditIsActive\" />\n <div>\n <span>Active</span>\n <span class=\"checkbox-hint\">Inactive applications cannot be used with API keys</span>\n </div>\n </label>\n </div>\n </div>\n </div>\n }\n\n <!-- Scopes Tab -->\n @if (EditTab === 'scopes') {\n <div class=\"tab-panel scopes-panel\">\n <div class=\"scopes-intro\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Define the maximum permissions this application can grant to API keys.</span>\n </div>\n <div class=\"scope-categories-list\">\n @for (category of ScopeCategories; track category) {\n <div class=\"scope-category-card\">\n <div class=\"category-header\" (click)=\"toggleScopeCategory(category)\">\n <div class=\"category-left\">\n <i [class]=\"category.icon\" [style.color]=\"category.color\"></i>\n <span class=\"category-name\">{{category.name}}</span>\n <span class=\"category-count-badge\">\n {{getCategorySelectedCount(category)}}/{{category.scopes.length}}\n </span>\n </div>\n <div class=\"category-right\">\n <label class=\"category-all-toggle\" (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 category-chevron\"\n [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-list\">\n @for (selection of category.scopes; track selection) {\n <div class=\"scope-row\"\n [class.selected]=\"selection.selected\">\n <label class=\"scope-select\">\n <input type=\"checkbox\" kendoCheckBox\n [(ngModel)]=\"selection.selected\"\n (change)=\"updateCategoryState(category)\" />\n <div class=\"scope-label\">\n <span class=\"scope-path\">{{selection.displayName || '(unnamed scope)'}}</span>\n @if (selection.scope.Description) {\n <span class=\"scope-description\">\n {{selection.scope.Description}}\n </span>\n }\n </div>\n </label>\n <!-- Read-only pattern display -->\n @if (selection.selected) {\n <div class=\"scope-pattern-display\">\n <span class=\"pattern-tag\" [class.include]=\"selection.patternType === 'Include'\"\n [class.exclude]=\"selection.patternType === 'Exclude'\">\n <i class=\"fa-solid\" [class.fa-check]=\"selection.patternType === 'Include'\"\n [class.fa-minus]=\"selection.patternType === 'Exclude'\"></i>\n {{selection.pattern || '*'}}\n </span>\n </div>\n }\n <!-- Editable pattern config - shown on hover -->\n @if (selection.selected) {\n <div class=\"scope-pattern-config\">\n <input kendoTextBox [(ngModel)]=\"selection.pattern\"\n placeholder=\"*\"\n class=\"pattern-field\"\n title=\"Resource Pattern\" />\n <kendo-dropdownlist [(ngModel)]=\"selection.patternType\"\n [data]=\"['Include', 'Exclude']\"\n [valuePrimitive]=\"true\"\n class=\"type-field\"\n title=\"Pattern Type\">\n </kendo-dropdownlist>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (ScopeCategories.length === 0) {\n <div class=\"empty-scopes-message\">\n <i class=\"fa-solid fa-shield-xmark\"></i>\n <span>No scopes available</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <div class=\"slideout-footer\">\n <button kendoButton [themeColor]=\"'primary'\"\n [disabled]=\"!EditName.trim() || IsSaving\"\n (click)=\"saveAll()\">\n @if (IsSaving) {\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n }\n @if (!IsSaving) {\n <span>\n <i class=\"fa-solid fa-save\"></i>\n Save Changes\n </span>\n }\n </button>\n <button kendoButton (click)=\"closePanel()\">Cancel</button>\n </div>\n </div>\n</div>\n", styles: [".applications-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n\n.applications-panel.panel-open {\n overflow: hidden;\n}\n\n/* Panel Header */\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left {\n flex: 1;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.panel-title i {\n color: #8b5cf6;\n}\n\n.panel-subtitle {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.btn-create {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n border-radius: 8px;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-create:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.4);\n}\n\n/* Messages */\n.message {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n border-radius: 8px;\n margin-bottom: 16px;\n font-size: 14px;\n}\n\n.message.success {\n background: #d1fae5;\n color: #065f46;\n border: 1px solid #a7f3d0;\n}\n\n.message.error {\n background: #fee2e2;\n color: #991b1b;\n border: 1px solid #fca5a5;\n}\n\n/* Applications Grid */\n.applications-grid {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.app-card {\n background: var(--card-background, #ffffff);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n transition: box-shadow 0.2s ease;\n}\n\n.app-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n}\n\n.app-card.inactive {\n opacity: 0.7;\n}\n\n.app-header {\n display: flex;\n align-items: center;\n padding: 16px 20px;\n gap: 12px;\n}\n\n.app-header-main {\n display: flex;\n align-items: center;\n flex: 1;\n cursor: pointer;\n transition: background 0.2s ease;\n border-radius: 8px;\n padding: 4px;\n margin: -4px;\n}\n\n.app-header-main:hover {\n background: var(--item-hover, #f9fafb);\n}\n\n.app-edit-btn {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.app-edit-btn:hover {\n background: #8b5cf6;\n border-color: #8b5cf6;\n color: white;\n}\n\n.app-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n border-radius: 10px;\n margin-right: 16px;\n flex-shrink: 0;\n}\n\n.app-icon i {\n font-size: 20px;\n color: white;\n}\n\n.app-info {\n flex: 1;\n min-width: 0;\n}\n\n.app-name {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.status-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.active {\n background: #d1fae5;\n color: #065f46;\n}\n\n.status-badge.inactive {\n background: #f3f4f6;\n color: #6b7280;\n}\n\n.app-description {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n margin-top: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.app-stats {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-left: 16px;\n}\n\n.scope-count {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.scope-count i {\n color: #8b5cf6;\n}\n\n.expand-icon {\n color: var(--text-tertiary, #9ca3af);\n transition: transform 0.2s ease;\n}\n\n/* Expanded Details */\n.app-details {\n padding: 0 20px 20px 20px;\n border-top: 1px solid var(--border-color, #e5e7eb);\n margin-top: 0;\n}\n\n.details-section {\n margin-top: 16px;\n}\n\n.details-section h4 {\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 12px 0;\n}\n\n.scope-rules {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.scope-rule {\n display: flex;\n align-items: flex-start;\n padding: 10px 12px;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.rule-icon {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n margin-right: 12px;\n flex-shrink: 0;\n}\n\n.rule-icon.pattern-include {\n background: #d1fae5;\n color: #059669;\n}\n\n.rule-icon.pattern-exclude {\n background: #fef3c7;\n color: #d97706;\n}\n\n.rule-icon.pattern-deny {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.rule-info {\n flex: 1;\n min-width: 0;\n}\n\n.rule-scope {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-primary, #1f2937);\n}\n\n.rule-pattern {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.rule-pattern code {\n font-family: monospace;\n font-size: 12px;\n background: var(--tag-background, #e5e7eb);\n padding: 2px 6px;\n border-radius: 4px;\n color: var(--text-primary, #1f2937);\n}\n\n.pattern-type {\n font-size: 11px;\n color: var(--text-secondary, #6b7280);\n}\n\n.priority {\n font-size: 11px;\n color: #8b5cf6;\n}\n\n.empty-scopes {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n background: var(--item-background, #f9fafb);\n border-radius: 8px;\n}\n\n.empty-scopes i {\n font-size: 24px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n/* Legacy .details-actions removed - buttons now in header */\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n color: var(--text-secondary, #6b7280);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.empty-state span {\n font-size: 16px;\n font-weight: 500;\n}\n\n.empty-state p {\n font-size: 14px;\n margin-top: 8px;\n}\n\n/* ========================================\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: 570px;\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 overflow: hidden;\n transform: translateX(100%);\n}\n\n.slideout-panel.open {\n transform: translateX(0);\n}\n\n/* Resize handle */\n.slideout-resize-handle {\n position: absolute;\n top: 0;\n left: 0;\n width: 6px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n z-index: 10;\n transition: background 0.2s ease;\n}\n\n.slideout-resize-handle:hover,\n.slideout-resize-handle.resizing {\n background: rgba(139, 92, 246, 0.3);\n}\n\n.slideout-resize-handle::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2px;\n height: 40px;\n background: #d1d5db;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.slideout-resize-handle:hover::after {\n opacity: 1;\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: #8b5cf6;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.slideout-title span:first-of-type {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.status-pill {\n font-size: 11px;\n font-weight: 500;\n padding: 3px 10px;\n border-radius: 12px;\n background: #f3f4f6;\n color: #6b7280;\n flex-shrink: 0;\n}\n\n.status-pill.active {\n background: #d1fae5;\n color: #065f46;\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 Tabs */\n.slideout-tabs {\n display: flex;\n gap: 4px;\n padding: 12px 24px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.slideout-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n background: transparent;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.slideout-tab:hover {\n background: #e5e7eb;\n color: #374151;\n}\n\n.slideout-tab.active {\n background: #8b5cf6;\n color: white;\n}\n\n.slideout-tab i {\n font-size: 14px;\n}\n\n.tab-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.slideout-tab:not(.active) .tab-badge {\n background: #e5e7eb;\n color: #374151;\n}\n\n/* Panel Content */\n.slideout-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.tab-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.scopes-panel {\n height: 100%;\n}\n\n/* Form Section */\n.form-section {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n/* Form Fields */\n.form-field {\n margin-bottom: 20px;\n}\n\n.form-field:last-of-type {\n margin-bottom: 0;\n}\n\n.form-field label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: #374151;\n margin-bottom: 8px;\n letter-spacing: 0.01em;\n}\n\n.form-input {\n width: 100%;\n}\n\n.form-textarea {\n width: 100%;\n resize: vertical;\n min-height: 80px;\n}\n\n:host ::ng-deep .form-input .k-input,\n:host ::ng-deep .form-textarea .k-input-inner {\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 box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);\n}\n\n/* Slideout Footer */\n.slideout-footer {\n display: flex;\n gap: 12px;\n padding: 16px 24px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n:host ::ng-deep .slideout-footer .k-button {\n min-width: 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, #8b5cf6 0%, #7c3aed 100%);\n border: none;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 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(139, 92, 246, 0.4);\n}\n\n.checkbox-label {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n cursor: pointer;\n padding: 12px 16px;\n background: #f9fafb;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.2s ease;\n}\n\n.checkbox-label:hover {\n background: #f3f4f6;\n border-color: #d1d5db;\n}\n\n.checkbox-label input {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.checkbox-label span:first-of-type {\n font-weight: 600;\n color: #374151;\n font-size: 14px;\n}\n\n.checkbox-hint {\n display: block;\n font-size: 12px;\n color: #6b7280;\n margin-top: 4px;\n line-height: 1.4;\n}\n\n/* Legacy dialog-actions removed - now using slideout-footer */\n\n/* ========================================\n Scopes Panel - Slide-out Layout\n ======================================== */\n\n.scopes-intro {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 16px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 10px;\n font-size: 13px;\n color: #1e40af;\n margin-bottom: 16px;\n line-height: 1.4;\n}\n\n.scopes-intro i {\n color: #3b82f6;\n font-size: 14px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.scope-categories-list {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.scope-category-card {\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.scope-category-card .category-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.scope-category-card .category-header:hover {\n background: #f9fafb;\n}\n\n.scope-category-card .category-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.scope-category-card .category-left i {\n font-size: 14px;\n}\n\n.scope-category-card .category-name {\n font-size: 13px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.category-count-badge {\n font-size: 11px;\n color: #6b7280;\n background: #f3f4f6;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.scope-category-card .category-right {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.category-all-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #6b7280;\n cursor: pointer;\n}\n\n.category-chevron {\n color: #9ca3af;\n font-size: 11px;\n}\n\n.category-scopes-list {\n border-top: 1px solid #e5e7eb;\n padding: 8px;\n max-height: 280px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-radius: 8px;\n background: #f9fafb;\n transition: all 0.2s ease;\n}\n\n.scope-row:hover {\n background: #f3f4f6;\n}\n\n.scope-row.selected {\n background: #ede9fe;\n border: 1px solid #c4b5fd;\n}\n\n.scope-select {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.scope-select input {\n margin-top: 2px;\n flex-shrink: 0;\n}\n\n.scope-label {\n flex: 1;\n min-width: 0;\n}\n\n.scope-path {\n font-size: 12px;\n font-weight: 500;\n color: #1f2937;\n font-family: 'SF Mono', 'Consolas', monospace;\n word-break: break-word;\n}\n\n.scope-description {\n display: block;\n font-size: 11px;\n color: #6b7280;\n margin-top: 2px;\n line-height: 1.3;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Pattern config for selected scopes - read-only display */\n.scope-pattern-display {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n font-size: 11px;\n color: #6b7280;\n}\n\n.pattern-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n background: #f3f4f6;\n border-radius: 4px;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: #374151;\n}\n\n.pattern-tag.include {\n background: #d1fae5;\n color: #065f46;\n}\n\n.pattern-tag.exclude {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.pattern-tag i {\n font-size: 10px;\n}\n\n/* Editable pattern config - shown on hover/edit */\n.scope-pattern-config {\n display: none;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n}\n\n.scope-row:hover .scope-pattern-config,\n.scope-row.editing .scope-pattern-config {\n display: flex;\n}\n\n.scope-row:hover .scope-pattern-display,\n.scope-row.editing .scope-pattern-display {\n display: none;\n}\n\n.pattern-field {\n width: 60px;\n}\n\n:host ::ng-deep .pattern-field .k-input {\n padding: 3px 6px;\n font-size: 11px;\n border-radius: 4px;\n height: 26px;\n}\n\n.type-field {\n width: 75px;\n}\n\n:host ::ng-deep .type-field .k-dropdownlist {\n font-size: 11px;\n height: 26px;\n}\n\n:host ::ng-deep .type-field .k-input-inner {\n padding: 2px 6px;\n font-size: 11px;\n}\n\n.empty-scopes-message {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 32px;\n color: #9ca3af;\n text-align: center;\n}\n\n.empty-scopes-message i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n/* Legacy dialog styles removed - now using slide-out panels */\n"] }]
1048
1052
  }], () => [{ type: i0.ChangeDetectorRef }], { ApplicationUpdated: [{
1049
1053
  type: Output
1050
1054
  }], onMouseMove: [{
@@ -1054,5 +1058,5 @@ export class APIApplicationsPanelComponent {
1054
1058
  type: HostListener,
1055
1059
  args: ['document:mouseup']
1056
1060
  }] }); })();
1057
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIApplicationsPanelComponent, { className: "APIApplicationsPanelComponent", filePath: "src/APIKeys/api-applications-panel.component.ts", lineNumber: 54 }); })();
1061
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(APIApplicationsPanelComponent, { className: "APIApplicationsPanelComponent", filePath: "src/APIKeys/api-applications-panel.component.ts", lineNumber: 49 }); })();
1058
1062
  //# sourceMappingURL=api-applications-panel.component.js.map