@memberjunction/ng-dashboards 5.38.0 → 5.40.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 (321) hide show
  1. package/README.md +14 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  31. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  33. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  35. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  37. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  39. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  41. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  43. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  45. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  47. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  49. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  50. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  51. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  53. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  54. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  55. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  57. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  58. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  59. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  61. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  63. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  65. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
  67. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
  69. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  71. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  73. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  74. package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
  75. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
  77. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  78. package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
  79. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  81. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  83. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  85. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
  87. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
  89. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  90. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  91. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  92. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  93. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  94. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
  95. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  96. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
  97. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  98. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
  99. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  100. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
  101. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  102. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
  103. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  104. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
  105. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  106. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  107. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  108. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  109. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  110. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
  111. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  112. package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
  113. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  114. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  115. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  116. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
  117. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  118. package/dist/AI/components/execution-monitoring.component.js +1 -1
  119. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  120. package/dist/AI/components/models/model-management.component.js +209 -208
  121. package/dist/AI/components/models/model-management.component.js.map +1 -1
  122. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  123. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  124. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  125. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  126. package/dist/AI/components/system/system-configuration.component.js +17 -17
  127. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  128. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  129. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  130. package/dist/AI/components/tags/tags-resource.component.js +578 -538
  131. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  132. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  133. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  134. package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
  135. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  136. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  137. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  138. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  139. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  140. package/dist/AI/services/cache-metrics.d.ts +50 -0
  141. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  142. package/dist/AI/services/cache-metrics.js +43 -0
  143. package/dist/AI/services/cache-metrics.js.map +1 -0
  144. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  145. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  146. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  147. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  148. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  149. package/dist/Actions/components/actions-overview.component.js +141 -141
  150. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  151. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  152. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  153. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  154. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  155. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  156. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  157. package/dist/Admin/admin-data-schema.component.js +2 -2
  158. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  159. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  160. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  161. package/dist/Admin/admin-identity-access.component.js +2 -2
  162. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  163. package/dist/Admin/admin-monitoring.component.js +2 -2
  164. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  165. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  166. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  168. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-logs-resource.component.js +72 -50
  170. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  171. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  172. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  173. package/dist/Communication/communication-providers-resource.component.js +52 -51
  174. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  175. package/dist/Communication/communication-runs-resource.component.js +39 -38
  176. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  177. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  178. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-templates-resource.component.js +92 -89
  180. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  181. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  182. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  183. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  184. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  185. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  186. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  187. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  188. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  189. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  190. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  191. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  192. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  193. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  194. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  195. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  196. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  197. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  198. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  199. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  200. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  201. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  202. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  203. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  204. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  205. package/dist/DevTools/app-state-inspector.component.js +18 -17
  206. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  207. package/dist/DevTools/class-registry.component.js +88 -85
  208. package/dist/DevTools/class-registry.component.js.map +1 -1
  209. package/dist/DevTools/event-monitor.component.js +155 -150
  210. package/dist/DevTools/event-monitor.component.js.map +1 -1
  211. package/dist/DevTools/graphql-console.component.js +245 -243
  212. package/dist/DevTools/graphql-console.component.js.map +1 -1
  213. package/dist/DevTools/layout-inspector.component.js +18 -17
  214. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  215. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  216. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  217. package/dist/Home/home-dashboard.component.js +2 -2
  218. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  219. package/dist/Integration/components/activity/activity.component.js +236 -229
  220. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  221. package/dist/Integration/components/connections/connections.component.js +390 -389
  222. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  223. package/dist/Integration/components/overview/overview.component.js +2 -2
  224. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  225. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
  226. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  227. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  228. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  229. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
  230. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  231. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  232. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  233. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  234. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  235. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  236. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  237. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  238. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  239. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  240. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  241. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  242. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  243. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  244. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  245. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  246. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  247. package/dist/KnowledgeHub/index.d.ts +3 -0
  248. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  249. package/dist/KnowledgeHub/index.js +3 -0
  250. package/dist/KnowledgeHub/index.js.map +1 -1
  251. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  252. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  253. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  254. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  255. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  256. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  257. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  258. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  259. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  260. package/dist/MCP/mcp-dashboard.component.js +443 -438
  261. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  262. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  264. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  266. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  267. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  268. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  270. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  271. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  272. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  273. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  274. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  275. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  276. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  277. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  278. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  279. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  280. package/dist/Testing/components/testing-explorer.component.js +436 -427
  281. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  282. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  283. package/dist/Testing/components/testing-runs.component.js +116 -115
  284. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +6 -7
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  288. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  289. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  290. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  291. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  292. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  293. package/dist/ai-dashboards.module.d.ts +57 -35
  294. package/dist/ai-dashboards.module.d.ts.map +1 -1
  295. package/dist/ai-dashboards.module.js +80 -1
  296. package/dist/ai-dashboards.module.js.map +1 -1
  297. package/dist/communication-dashboards.module.d.ts +1 -1
  298. package/dist/communication-dashboards.module.d.ts.map +1 -1
  299. package/dist/communication-dashboards.module.js +7 -1
  300. package/dist/communication-dashboards.module.js.map +1 -1
  301. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  302. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  303. package/dist/data-explorer-dashboards.module.js +5 -14
  304. package/dist/data-explorer-dashboards.module.js.map +1 -1
  305. package/dist/public-api.d.ts +3 -0
  306. package/dist/public-api.d.ts.map +1 -1
  307. package/dist/public-api.js +3 -0
  308. package/dist/public-api.js.map +1 -1
  309. package/dist/testing-dashboards.module.d.ts +4 -5
  310. package/dist/testing-dashboards.module.d.ts.map +1 -1
  311. package/dist/testing-dashboards.module.js +7 -5
  312. package/dist/testing-dashboards.module.js.map +1 -1
  313. package/package.json +57 -54
  314. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  315. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  316. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  317. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  318. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  319. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  320. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  321. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -15,21 +15,22 @@ import * as i2 from "@memberjunction/ng-shared-generic";
15
15
  import * as i3 from "@memberjunction/ng-credentials";
16
16
  import * as i4 from "@angular/common";
17
17
  const _c0 = ["categoryEditPanel"];
18
- function CredentialsCategoriesResourceComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
18
+ function CredentialsCategoriesResourceComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
19
19
  const _r2 = i0.ɵɵgetCurrentView();
20
- i0.ɵɵelementStart(0, "button", 14);
21
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
22
- i0.ɵɵelement(1, "i", 15);
23
- i0.ɵɵtext(2, " New Category ");
24
- i0.ɵɵelementEnd();
20
+ i0.ɵɵelementStart(0, "button", 15);
21
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
22
+ i0.ɵɵelement(1, "i", 16);
23
+ i0.ɵɵelementStart(2, "span", 5);
24
+ i0.ɵɵtext(3, "New Category");
25
+ i0.ɵɵelementEnd()();
25
26
  } }
26
- function CredentialsCategoriesResourceComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelement(0, "mj-loading", 11);
27
+ function CredentialsCategoriesResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵelement(0, "mj-loading", 12);
28
29
  } }
29
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
30
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
30
31
  const _r6 = i0.ɵɵgetCurrentView();
31
- i0.ɵɵelementStart(0, "button", 36);
32
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleExpand(node_r5, $event)); });
32
+ i0.ɵɵelementStart(0, "button", 37);
33
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleExpand(node_r5, $event)); });
33
34
  i0.ɵɵelement(1, "i");
34
35
  i0.ɵɵelementEnd();
35
36
  } if (rf & 2) {
@@ -37,11 +38,11 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
37
38
  i0.ɵɵadvance();
38
39
  i0.ɵɵclassMap(node_r5.expanded ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
39
40
  } }
40
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelement(0, "span", 25);
41
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelement(0, "span", 26);
42
43
  } }
43
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 29);
44
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelementStart(0, "div", 30);
45
46
  i0.ɵɵtext(1);
46
47
  i0.ɵɵpipe(2, "slice");
47
48
  i0.ɵɵelementEnd();
@@ -50,9 +51,9 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
50
51
  i0.ɵɵadvance();
51
52
  i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind3(2, 2, node_r5.category.Description, 0, 50), "", node_r5.category.Description.length > 50 ? "..." : "", " ");
52
53
  } }
53
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelementStart(0, "span", 31);
55
- i0.ɵɵelement(1, "i", 37);
54
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "span", 32);
56
+ i0.ɵɵelement(1, "i", 38);
56
57
  i0.ɵɵtext(2);
57
58
  i0.ɵɵelementEnd();
58
59
  } if (rf & 2) {
@@ -60,9 +61,9 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
60
61
  i0.ɵɵadvance(2);
61
62
  i0.ɵɵtextInterpolate1(" ", node_r5.typeCount, " ");
62
63
  } }
63
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵelementStart(0, "span", 32);
65
- i0.ɵɵelement(1, "i", 38);
64
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementStart(0, "span", 33);
66
+ i0.ɵɵelement(1, "i", 39);
66
67
  i0.ɵɵtext(2);
67
68
  i0.ɵɵelementEnd();
68
69
  } if (rf & 2) {
@@ -70,46 +71,46 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
70
71
  i0.ɵɵadvance(2);
71
72
  i0.ɵɵtextInterpolate1(" ", node_r5.children.length, " ");
72
73
  } }
73
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
74
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
74
75
  const _r7 = i0.ɵɵgetCurrentView();
75
- i0.ɵɵelementStart(0, "button", 39);
76
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_14_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(node_r5, $event)); });
77
- i0.ɵɵelement(1, "i", 40);
76
+ i0.ɵɵelementStart(0, "button", 40);
77
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_14_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(node_r5, $event)); });
78
+ i0.ɵɵelement(1, "i", 41);
78
79
  i0.ɵɵelementEnd();
79
80
  } }
80
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
81
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
81
82
  const _r8 = i0.ɵɵgetCurrentView();
82
- i0.ɵɵelementStart(0, "button", 41);
83
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_15_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCategory(node_r5, $event)); });
84
- i0.ɵɵelement(1, "i", 42);
83
+ i0.ɵɵelementStart(0, "button", 42);
84
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_15_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCategory(node_r5, $event)); });
85
+ i0.ɵɵelement(1, "i", 43);
85
86
  i0.ɵɵelementEnd();
86
87
  } }
87
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
88
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
88
89
  const _r4 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "div", 22);
90
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Template_div_click_0_listener() { const node_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectNode(node_r5)); });
91
- i0.ɵɵelementStart(1, "div", 23);
92
- i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_2_Template, 2, 2, "button", 24);
93
- i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_3_Template, 1, 0, "span", 25);
94
- i0.ɵɵelementStart(4, "div", 26);
90
+ i0.ɵɵelementStart(0, "div", 23);
91
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Template_div_click_0_listener() { const node_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectNode(node_r5)); });
92
+ i0.ɵɵelementStart(1, "div", 24);
93
+ i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_2_Template, 2, 2, "button", 25);
94
+ i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_3_Template, 1, 0, "span", 26);
95
+ i0.ɵɵelementStart(4, "div", 27);
95
96
  i0.ɵɵelement(5, "i");
96
97
  i0.ɵɵelementEnd();
97
- i0.ɵɵelementStart(6, "div", 27)(7, "div", 28);
98
+ i0.ɵɵelementStart(6, "div", 28)(7, "div", 29);
98
99
  i0.ɵɵtext(8);
99
100
  i0.ɵɵelementEnd();
100
- i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_9_Template, 3, 6, "div", 29);
101
+ i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_9_Template, 3, 6, "div", 30);
101
102
  i0.ɵɵelementEnd();
102
- i0.ɵɵelementStart(10, "div", 30);
103
- i0.ɵɵconditionalCreate(11, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_11_Template, 3, 1, "span", 31);
104
- i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_12_Template, 3, 1, "span", 32);
103
+ i0.ɵɵelementStart(10, "div", 31);
104
+ i0.ɵɵconditionalCreate(11, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_11_Template, 3, 1, "span", 32);
105
+ i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_12_Template, 3, 1, "span", 33);
105
106
  i0.ɵɵelementEnd();
106
- i0.ɵɵelementStart(13, "div", 33);
107
- i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_14_Template, 2, 0, "button", 34);
108
- i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_15_Template, 2, 0, "button", 35);
107
+ i0.ɵɵelementStart(13, "div", 34);
108
+ i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_14_Template, 2, 0, "button", 35);
109
+ i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Conditional_15_Template, 2, 0, "button", 36);
109
110
  i0.ɵɵelementEnd()()();
110
111
  } if (rf & 2) {
111
112
  const node_r5 = ctx.$implicit;
112
- const ɵ$index_42_r9 = ctx.$index;
113
+ const ɵ$index_48_r9 = ctx.$index;
113
114
  const ctx_r2 = i0.ɵɵnextContext(3);
114
115
  i0.ɵɵstyleProp("padding-left", 12 + node_r5.level * 20, "px");
115
116
  i0.ɵɵclassProp("selected", ctx_r2.IsNodeSelected(node_r5));
@@ -118,7 +119,7 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
118
119
  i0.ɵɵadvance();
119
120
  i0.ɵɵconditional(node_r5.children.length === 0 ? 3 : -1);
120
121
  i0.ɵɵadvance();
121
- i0.ɵɵstyleProp("background-color", ctx_r2.getCategoryColor(ɵ$index_42_r9) + "15")("color", ctx_r2.getCategoryColor(ɵ$index_42_r9));
122
+ i0.ɵɵstyleProp("background-color", ctx_r2.getCategoryColor(ɵ$index_48_r9) + "15")("color", ctx_r2.getCategoryColor(ɵ$index_48_r9));
122
123
  i0.ɵɵadvance();
123
124
  i0.ɵɵclassMap(node_r5.category.IconClass || "fa-solid fa-folder");
124
125
  i0.ɵɵadvance(3);
@@ -134,47 +135,47 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For
134
135
  i0.ɵɵadvance();
135
136
  i0.ɵɵconditional(ctx_r2.UserCanDelete && node_r5.children.length === 0 && node_r5.typeCount === 0 ? 15 : -1);
136
137
  } }
137
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
138
- i0.ɵɵelementStart(0, "div", 17);
139
- i0.ɵɵrepeaterCreate(1, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Template, 16, 18, "div", 21, i0.ɵɵrepeaterTrackByIdentity);
138
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
139
+ i0.ɵɵelementStart(0, "div", 18);
140
+ i0.ɵɵrepeaterCreate(1, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_For_2_Template, 16, 18, "div", 22, i0.ɵɵrepeaterTrackByIdentity);
140
141
  i0.ɵɵelementEnd();
141
142
  } if (rf & 2) {
142
143
  const ctx_r2 = i0.ɵɵnextContext(2);
143
144
  i0.ɵɵadvance();
144
145
  i0.ɵɵrepeater(ctx_r2.getFlattenedNodes());
145
146
  } }
146
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
147
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
147
148
  const _r10 = i0.ɵɵgetCurrentView();
148
149
  i0.ɵɵelementStart(0, "p");
149
150
  i0.ɵɵtext(1, " No categories match your search. ");
150
- i0.ɵɵelementStart(2, "button", 46);
151
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearSearch()); });
151
+ i0.ɵɵelementStart(2, "button", 47);
152
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearSearch()); });
152
153
  i0.ɵɵtext(3, "Clear search");
153
154
  i0.ɵɵelementEnd()();
154
155
  } }
155
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
156
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
156
157
  i0.ɵɵelementStart(0, "p");
157
158
  i0.ɵɵtext(1, " Get started by creating your first category. ");
158
159
  i0.ɵɵelementEnd();
159
160
  } }
160
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
161
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
161
162
  const _r11 = i0.ɵɵgetCurrentView();
162
- i0.ɵɵelementStart(0, "button", 47);
163
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
164
- i0.ɵɵelement(1, "i", 15);
163
+ i0.ɵɵelementStart(0, "button", 48);
164
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
165
+ i0.ɵɵelement(1, "i", 16);
165
166
  i0.ɵɵtext(2, " Create Category ");
166
167
  i0.ɵɵelementEnd();
167
168
  } }
168
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Template(rf, ctx) { if (rf & 1) {
169
- i0.ɵɵelementStart(0, "div", 18)(1, "div", 43);
170
- i0.ɵɵelement(2, "i", 44);
169
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵelementStart(0, "div", 19)(1, "div", 44);
171
+ i0.ɵɵelement(2, "i", 45);
171
172
  i0.ɵɵelementEnd();
172
173
  i0.ɵɵelementStart(3, "h3");
173
174
  i0.ɵɵtext(4, "No Categories");
174
175
  i0.ɵɵelementEnd();
175
- i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_5_Template, 4, 0, "p");
176
- i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_6_Template, 2, 0, "p");
177
- i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_7_Template, 3, 0, "button", 45);
176
+ i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_5_Template, 4, 0, "p");
177
+ i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_6_Template, 2, 0, "p");
178
+ i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Conditional_7_Template, 3, 0, "button", 46);
178
179
  i0.ɵɵelementEnd();
179
180
  } if (rf & 2) {
180
181
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -185,8 +186,8 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Tem
185
186
  i0.ɵɵadvance();
186
187
  i0.ɵɵconditional(ctx_r2.UserCanCreate && !ctx_r2.searchText ? 7 : -1);
187
188
  } }
188
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
189
- i0.ɵɵelementStart(0, "span", 51);
189
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
190
+ i0.ɵɵelementStart(0, "span", 52);
190
191
  i0.ɵɵtext(1);
191
192
  i0.ɵɵelementEnd();
192
193
  } if (rf & 2) {
@@ -194,19 +195,19 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
194
195
  i0.ɵɵadvance();
195
196
  i0.ɵɵtextInterpolate1(" Level ", ctx_r2.selectedNode.level + 1, " ");
196
197
  } }
197
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
198
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
198
199
  const _r13 = i0.ɵɵgetCurrentView();
199
- i0.ɵɵelementStart(0, "button", 39);
200
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(ctx_r2.selectedNode)); });
201
- i0.ɵɵelement(1, "i", 40);
200
+ i0.ɵɵelementStart(0, "button", 40);
201
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(ctx_r2.selectedNode)); });
202
+ i0.ɵɵelement(1, "i", 41);
202
203
  i0.ɵɵelementEnd();
203
204
  } }
204
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_24_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelementStart(0, "div", 60)(1, "h3");
206
- i0.ɵɵelement(2, "i", 65);
205
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_24_Template(rf, ctx) { if (rf & 1) {
206
+ i0.ɵɵelementStart(0, "div", 61)(1, "h3");
207
+ i0.ɵɵelement(2, "i", 66);
207
208
  i0.ɵɵtext(3, " Description ");
208
209
  i0.ɵɵelementEnd();
209
- i0.ɵɵelementStart(4, "p", 66);
210
+ i0.ɵɵelementStart(4, "p", 67);
210
211
  i0.ɵɵtext(5);
211
212
  i0.ɵɵelementEnd()();
212
213
  } if (rf & 2) {
@@ -214,8 +215,8 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
214
215
  i0.ɵɵadvance(5);
215
216
  i0.ɵɵtextInterpolate(ctx_r2.selectedNode.category.Description);
216
217
  } }
217
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
218
- i0.ɵɵelementStart(0, "div", 72);
218
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
219
+ i0.ɵɵelementStart(0, "div", 73);
219
220
  i0.ɵɵtext(1);
220
221
  i0.ɵɵpipe(2, "slice");
221
222
  i0.ɵɵelementEnd();
@@ -224,14 +225,14 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
224
225
  i0.ɵɵadvance();
225
226
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind3(2, 1, type_r14.Description, 0, 60));
226
227
  } }
227
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Template(rf, ctx) { if (rf & 1) {
228
- i0.ɵɵelementStart(0, "div", 68)(1, "div", 69);
228
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Template(rf, ctx) { if (rf & 1) {
229
+ i0.ɵɵelementStart(0, "div", 69)(1, "div", 70);
229
230
  i0.ɵɵelement(2, "i");
230
231
  i0.ɵɵelementEnd();
231
- i0.ɵɵelementStart(3, "div", 70)(4, "div", 71);
232
+ i0.ɵɵelementStart(3, "div", 71)(4, "div", 72);
232
233
  i0.ɵɵtext(5);
233
234
  i0.ɵɵelementEnd();
234
- i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Conditional_6_Template, 3, 5, "div", 72);
235
+ i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Conditional_6_Template, 3, 5, "div", 73);
235
236
  i0.ɵɵelementEnd()();
236
237
  } if (rf & 2) {
237
238
  const type_r14 = ctx.$implicit;
@@ -242,21 +243,21 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
242
243
  i0.ɵɵadvance();
243
244
  i0.ɵɵconditional(type_r14.Description ? 6 : -1);
244
245
  } }
245
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_Template(rf, ctx) { if (rf & 1) {
246
- i0.ɵɵelementStart(0, "div", 61)(1, "h3");
247
- i0.ɵɵelement(2, "i", 37);
246
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_Template(rf, ctx) { if (rf & 1) {
247
+ i0.ɵɵelementStart(0, "div", 62)(1, "h3");
248
+ i0.ɵɵelement(2, "i", 38);
248
249
  i0.ɵɵtext(3, " Credential Types ");
249
250
  i0.ɵɵelementEnd();
250
- i0.ɵɵelementStart(4, "div", 67);
251
- i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Template, 7, 4, "div", 68, i0.ɵɵrepeaterTrackByIdentity);
251
+ i0.ɵɵelementStart(4, "div", 68);
252
+ i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_For_6_Template, 7, 4, "div", 69, i0.ɵɵrepeaterTrackByIdentity);
252
253
  i0.ɵɵelementEnd()();
253
254
  } if (rf & 2) {
254
255
  const ctx_r2 = i0.ɵɵnextContext(3);
255
256
  i0.ɵɵadvance(5);
256
257
  i0.ɵɵrepeater(ctx_r2.getTypesForCategory(ctx_r2.selectedNode.category.Name));
257
258
  } }
258
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
259
- i0.ɵɵelementStart(0, "span", 77);
259
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
260
+ i0.ɵɵelementStart(0, "span", 78);
260
261
  i0.ɵɵtext(1);
261
262
  i0.ɵɵelementEnd();
262
263
  } if (rf & 2) {
@@ -264,15 +265,15 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
264
265
  i0.ɵɵadvance();
265
266
  i0.ɵɵtextInterpolate1("", child_r16.typeCount, " types");
266
267
  } }
267
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
268
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
268
269
  const _r15 = i0.ɵɵgetCurrentView();
269
- i0.ɵɵelementStart(0, "div", 76);
270
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Template_div_click_0_listener() { const child_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectNode(child_r16)); });
270
+ i0.ɵɵelementStart(0, "div", 77);
271
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Template_div_click_0_listener() { const child_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectNode(child_r16)); });
271
272
  i0.ɵɵelement(1, "i");
272
273
  i0.ɵɵelementStart(2, "span");
273
274
  i0.ɵɵtext(3);
274
275
  i0.ɵɵelementEnd();
275
- i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Conditional_4_Template, 2, 1, "span", 77);
276
+ i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Conditional_4_Template, 2, 1, "span", 78);
276
277
  i0.ɵɵelementEnd();
277
278
  } if (rf & 2) {
278
279
  const child_r16 = ctx.$implicit;
@@ -283,63 +284,63 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Con
283
284
  i0.ɵɵadvance();
284
285
  i0.ɵɵconditional(child_r16.typeCount > 0 ? 4 : -1);
285
286
  } }
286
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_Template(rf, ctx) { if (rf & 1) {
287
- i0.ɵɵelementStart(0, "div", 62)(1, "h3");
288
- i0.ɵɵelement(2, "i", 73);
287
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_Template(rf, ctx) { if (rf & 1) {
288
+ i0.ɵɵelementStart(0, "div", 63)(1, "h3");
289
+ i0.ɵɵelement(2, "i", 74);
289
290
  i0.ɵɵtext(3, " Subcategories ");
290
291
  i0.ɵɵelementEnd();
291
- i0.ɵɵelementStart(4, "div", 74);
292
- i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Template, 5, 4, "div", 75, i0.ɵɵrepeaterTrackByIdentity);
292
+ i0.ɵɵelementStart(4, "div", 75);
293
+ i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_For_6_Template, 5, 4, "div", 76, i0.ɵɵrepeaterTrackByIdentity);
293
294
  i0.ɵɵelementEnd()();
294
295
  } if (rf & 2) {
295
296
  const ctx_r2 = i0.ɵɵnextContext(3);
296
297
  i0.ɵɵadvance(5);
297
298
  i0.ɵɵrepeater(ctx_r2.selectedNode.children);
298
299
  } }
299
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_28_Template(rf, ctx) { if (rf & 1) {
300
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_28_Template(rf, ctx) { if (rf & 1) {
300
301
  const _r17 = i0.ɵɵgetCurrentView();
301
- i0.ɵɵelementStart(0, "button", 78);
302
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.viewTypesForCategory(ctx_r2.selectedNode.category.Name)); });
303
- i0.ɵɵelement(1, "i", 37);
302
+ i0.ɵɵelementStart(0, "button", 79);
303
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.viewTypesForCategory(ctx_r2.selectedNode.category.Name)); });
304
+ i0.ɵɵelement(1, "i", 38);
304
305
  i0.ɵɵtext(2, " View Types ");
305
306
  i0.ɵɵelementEnd();
306
307
  } }
307
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template(rf, ctx) { if (rf & 1) {
308
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template(rf, ctx) { if (rf & 1) {
308
309
  const _r12 = i0.ɵɵgetCurrentView();
309
- i0.ɵɵelementStart(0, "div", 19)(1, "div", 48)(2, "div", 49);
310
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 49)(2, "div", 50);
310
311
  i0.ɵɵelement(3, "i");
311
312
  i0.ɵɵelementEnd();
312
- i0.ɵɵelementStart(4, "div", 50)(5, "h2");
313
+ i0.ɵɵelementStart(4, "div", 51)(5, "h2");
313
314
  i0.ɵɵtext(6);
314
315
  i0.ɵɵelementEnd();
315
- i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_7_Template, 2, 1, "span", 51);
316
+ i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_7_Template, 2, 1, "span", 52);
316
317
  i0.ɵɵelementEnd();
317
- i0.ɵɵelementStart(8, "div", 52);
318
- i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_9_Template, 2, 0, "button", 34);
319
- i0.ɵɵelementStart(10, "button", 53);
320
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectedNode = null); });
321
- i0.ɵɵelement(11, "i", 54);
318
+ i0.ɵɵelementStart(8, "div", 53);
319
+ i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_9_Template, 2, 0, "button", 35);
320
+ i0.ɵɵelementStart(10, "button", 54);
321
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectedNode = null); });
322
+ i0.ɵɵelement(11, "i", 55);
322
323
  i0.ɵɵelementEnd()()();
323
- i0.ɵɵelementStart(12, "div", 55)(13, "div", 56)(14, "div", 57)(15, "div", 58);
324
+ i0.ɵɵelementStart(12, "div", 56)(13, "div", 57)(14, "div", 58)(15, "div", 59);
324
325
  i0.ɵɵtext(16);
325
326
  i0.ɵɵelementEnd();
326
- i0.ɵɵelementStart(17, "div", 59);
327
+ i0.ɵɵelementStart(17, "div", 60);
327
328
  i0.ɵɵtext(18, "Credential Types");
328
329
  i0.ɵɵelementEnd()();
329
- i0.ɵɵelementStart(19, "div", 57)(20, "div", 58);
330
+ i0.ɵɵelementStart(19, "div", 58)(20, "div", 59);
330
331
  i0.ɵɵtext(21);
331
332
  i0.ɵɵelementEnd();
332
- i0.ɵɵelementStart(22, "div", 59);
333
+ i0.ɵɵelementStart(22, "div", 60);
333
334
  i0.ɵɵtext(23, "Subcategories");
334
335
  i0.ɵɵelementEnd()()();
335
- i0.ɵɵconditionalCreate(24, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_24_Template, 6, 1, "div", 60);
336
- i0.ɵɵconditionalCreate(25, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_Template, 7, 0, "div", 61);
337
- i0.ɵɵconditionalCreate(26, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_Template, 7, 0, "div", 62);
338
- i0.ɵɵelementStart(27, "div", 63);
339
- i0.ɵɵconditionalCreate(28, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_28_Template, 3, 0, "button", 64);
340
- i0.ɵɵelementStart(29, "button", 47);
341
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createCredentialWithCategory(ctx_r2.selectedNode.category.ID)); });
342
- i0.ɵɵelement(30, "i", 15);
336
+ i0.ɵɵconditionalCreate(24, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_24_Template, 6, 1, "div", 61);
337
+ i0.ɵɵconditionalCreate(25, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_25_Template, 7, 0, "div", 62);
338
+ i0.ɵɵconditionalCreate(26, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_26_Template, 7, 0, "div", 63);
339
+ i0.ɵɵelementStart(27, "div", 64);
340
+ i0.ɵɵconditionalCreate(28, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Conditional_28_Template, 3, 0, "button", 65);
341
+ i0.ɵɵelementStart(29, "button", 48);
342
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createCredentialWithCategory(ctx_r2.selectedNode.category.ID)); });
343
+ i0.ɵɵelement(30, "i", 16);
343
344
  i0.ɵɵtext(31, " Create Credential ");
344
345
  i0.ɵɵelementEnd()()()();
345
346
  } if (rf & 2) {
@@ -367,9 +368,9 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Tem
367
368
  i0.ɵɵadvance(2);
368
369
  i0.ɵɵconditional(ctx_r2.selectedNode.typeCount > 0 ? 28 : -1);
369
370
  } }
370
- function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
371
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 79);
372
- i0.ɵɵelement(2, "i", 80);
371
+ function CredentialsCategoriesResourceComponent_Conditional_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
372
+ i0.ɵɵelementStart(0, "div", 21)(1, "div", 80);
373
+ i0.ɵɵelement(2, "i", 81);
373
374
  i0.ɵɵelementEnd();
374
375
  i0.ɵɵelementStart(3, "h3");
375
376
  i0.ɵɵtext(4, "Select a Category");
@@ -378,13 +379,13 @@ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_5_Tem
378
379
  i0.ɵɵtext(6, "Click on a category to view its details and credential types");
379
380
  i0.ɵɵelementEnd()();
380
381
  } }
381
- function CredentialsCategoriesResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
382
- i0.ɵɵelementStart(0, "div", 12)(1, "div", 16);
383
- i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_Template, 3, 0, "div", 17);
384
- i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Template, 8, 3, "div", 18);
382
+ function CredentialsCategoriesResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
383
+ i0.ɵɵelementStart(0, "div", 13)(1, "div", 17);
384
+ i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_2_Template, 3, 0, "div", 18);
385
+ i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_3_Template, 8, 3, "div", 19);
385
386
  i0.ɵɵelementEnd();
386
- i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template, 32, 15, "div", 19);
387
- i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_5_Template, 7, 0, "div", 20);
387
+ i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_4_Template, 32, 15, "div", 20);
388
+ i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_17_Conditional_5_Template, 7, 0, "div", 21);
388
389
  i0.ɵɵelementEnd();
389
390
  } if (rf & 2) {
390
391
  const ctx_r2 = i0.ɵɵnextContext();
@@ -750,44 +751,46 @@ let CredentialsCategoriesResourceComponent = class CredentialsCategoriesResource
750
751
  } if (rf & 2) {
751
752
  let _t;
752
753
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.categoryEditPanel = _t.first);
753
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 5, consts: [["categoryEditPanel", ""], ["Title", "Categories", "Icon", "fa-solid fa-folder-tree"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand all", 3, "click"], [1, "fa-solid", "fa-expand"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse all", 3, "click"], [1, "fa-solid", "fa-compress"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search categories...", 3, "ValueChange", "Value"], ["text", "Loading categories..."], [1, "categories-layout"], [3, "saved", "deleted"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "tree-panel"], [1, "tree-container"], [1, "empty-state"], [1, "detail-panel"], [1, "no-selection"], [1, "tree-node", 3, "selected", "padding-left"], [1, "tree-node", 3, "click"], [1, "node-content"], [1, "expand-btn"], [1, "expand-placeholder"], [1, "node-icon"], [1, "node-info"], [1, "node-name"], [1, "node-description"], [1, "node-badges"], [1, "badge", "types"], [1, "badge", "children"], [1, "node-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "expand-btn", 3, "click"], [1, "fa-solid", "fa-shapes"], [1, "fa-solid", "fa-folder"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-open"], [1, "btn-primary"], [1, "btn-link", 3, "click"], [1, "btn-primary", 3, "click"], [1, "detail-header"], [1, "detail-icon"], [1, "detail-title"], [1, "level-badge"], [1, "detail-actions"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-body"], [1, "detail-stats"], [1, "detail-stat"], [1, "stat-value"], [1, "stat-label"], [1, "description-section"], [1, "types-section"], [1, "subcategories-section"], [1, "detail-quick-actions"], [1, "btn-secondary"], [1, "fa-solid", "fa-align-left"], [1, "description"], [1, "type-list"], [1, "type-item"], [1, "type-icon"], [1, "type-info"], [1, "type-name"], [1, "type-desc"], [1, "fa-solid", "fa-folder-tree"], [1, "subcategory-list"], [1, "subcategory-item"], [1, "subcategory-item", 3, "click"], [1, "sub-type-count"], [1, "btn-secondary", 3, "click"], [1, "no-selection-icon"], [1, "fa-solid", "fa-hand-pointer"]], template: function CredentialsCategoriesResourceComponent_Template(rf, ctx) { if (rf & 1) {
754
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 5, consts: [["categoryEditPanel", ""], ["Title", "Categories", "Icon", "fa-solid fa-folder-tree"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand all", 3, "click"], [1, "fa-solid", "fa-expand"], [1, "action-btn-label"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse all", 3, "click"], [1, "fa-solid", "fa-compress"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search categories...", 3, "ValueChange", "Value"], ["text", "Loading categories..."], [1, "categories-layout"], [3, "saved", "deleted"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "tree-panel"], [1, "tree-container"], [1, "empty-state"], [1, "detail-panel"], [1, "no-selection"], [1, "tree-node", 3, "selected", "padding-left"], [1, "tree-node", 3, "click"], [1, "node-content"], [1, "expand-btn"], [1, "expand-placeholder"], [1, "node-icon"], [1, "node-info"], [1, "node-name"], [1, "node-description"], [1, "node-badges"], [1, "badge", "types"], [1, "badge", "children"], [1, "node-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "expand-btn", 3, "click"], [1, "fa-solid", "fa-shapes"], [1, "fa-solid", "fa-folder"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-open"], [1, "btn-primary"], [1, "btn-link", 3, "click"], [1, "btn-primary", 3, "click"], [1, "detail-header"], [1, "detail-icon"], [1, "detail-title"], [1, "level-badge"], [1, "detail-actions"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-body"], [1, "detail-stats"], [1, "detail-stat"], [1, "stat-value"], [1, "stat-label"], [1, "description-section"], [1, "types-section"], [1, "subcategories-section"], [1, "detail-quick-actions"], [1, "btn-secondary"], [1, "fa-solid", "fa-align-left"], [1, "description"], [1, "type-list"], [1, "type-item"], [1, "type-icon"], [1, "type-info"], [1, "type-name"], [1, "type-desc"], [1, "fa-solid", "fa-folder-tree"], [1, "subcategory-list"], [1, "subcategory-item"], [1, "subcategory-item", 3, "click"], [1, "sub-type-count"], [1, "btn-secondary", 3, "click"], [1, "no-selection-icon"], [1, "fa-solid", "fa-hand-pointer"]], template: function CredentialsCategoriesResourceComponent_Template(rf, ctx) { if (rf & 1) {
754
755
  const _r1 = i0.ɵɵgetCurrentView();
755
756
  i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2)(3, "button", 3);
756
757
  i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.expandAll()); });
757
758
  i0.ɵɵelement(4, "i", 4);
758
- i0.ɵɵtext(5, " Expand ");
759
- i0.ɵɵelementEnd();
760
- i0.ɵɵelementStart(6, "button", 5);
761
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.collapseAll()); });
762
- i0.ɵɵelement(7, "i", 6);
763
- i0.ɵɵtext(8, " Collapse ");
764
- i0.ɵɵelementEnd();
765
- i0.ɵɵelementStart(9, "mj-refresh-button", 7);
766
- i0.ɵɵlistener("Clicked", function CredentialsCategoriesResourceComponent_Template_mj_refresh_button_Clicked_9_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
759
+ i0.ɵɵelementStart(5, "span", 5);
760
+ i0.ɵɵtext(6, "Expand");
761
+ i0.ɵɵelementEnd()();
762
+ i0.ɵɵelementStart(7, "button", 6);
763
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.collapseAll()); });
764
+ i0.ɵɵelement(8, "i", 7);
765
+ i0.ɵɵelementStart(9, "span", 5);
766
+ i0.ɵɵtext(10, "Collapse");
767
+ i0.ɵɵelementEnd()();
768
+ i0.ɵɵelementStart(11, "mj-refresh-button", 8);
769
+ i0.ɵɵlistener("Clicked", function CredentialsCategoriesResourceComponent_Template_mj_refresh_button_Clicked_11_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
767
770
  i0.ɵɵelementEnd();
768
- i0.ɵɵconditionalCreate(10, CredentialsCategoriesResourceComponent_Conditional_10_Template, 3, 0, "button", 8);
771
+ i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_12_Template, 4, 0, "button", 9);
769
772
  i0.ɵɵelementEnd();
770
- i0.ɵɵelementStart(11, "div", 9)(12, "mj-page-search", 10);
771
- i0.ɵɵlistener("ValueChange", function CredentialsCategoriesResourceComponent_Template_mj_page_search_ValueChange_12_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
773
+ i0.ɵɵelementStart(13, "div", 10)(14, "mj-page-search", 11);
774
+ i0.ɵɵlistener("ValueChange", function CredentialsCategoriesResourceComponent_Template_mj_page_search_ValueChange_14_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
772
775
  i0.ɵɵelementEnd()()();
773
- i0.ɵɵelementStart(13, "mj-page-body");
774
- i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_14_Template, 1, 0, "mj-loading", 11);
775
- i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_15_Template, 6, 4, "div", 12);
776
+ i0.ɵɵelementStart(15, "mj-page-body");
777
+ i0.ɵɵconditionalCreate(16, CredentialsCategoriesResourceComponent_Conditional_16_Template, 1, 0, "mj-loading", 12);
778
+ i0.ɵɵconditionalCreate(17, CredentialsCategoriesResourceComponent_Conditional_17_Template, 6, 4, "div", 13);
776
779
  i0.ɵɵelementEnd();
777
- i0.ɵɵelementStart(16, "mj-credential-category-edit-panel", 13, 0);
778
- i0.ɵɵlistener("saved", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_saved_16_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategorySaved($event)); })("deleted", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_deleted_16_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategoryDeleted($event)); });
780
+ i0.ɵɵelementStart(18, "mj-credential-category-edit-panel", 14, 0);
781
+ i0.ɵɵlistener("saved", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_saved_18_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategorySaved($event)); })("deleted", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_deleted_18_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategoryDeleted($event)); });
779
782
  i0.ɵɵelementEnd()();
780
783
  } if (rf & 2) {
781
- i0.ɵɵadvance(9);
784
+ i0.ɵɵadvance(11);
782
785
  i0.ɵɵproperty("Loading", ctx.isLoading);
783
786
  i0.ɵɵadvance();
784
- i0.ɵɵconditional(ctx.UserCanCreate ? 10 : -1);
787
+ i0.ɵɵconditional(ctx.UserCanCreate ? 12 : -1);
785
788
  i0.ɵɵadvance(2);
786
789
  i0.ɵɵproperty("Value", ctx.searchText);
787
790
  i0.ɵɵadvance(2);
788
- i0.ɵɵconditional(ctx.isLoading ? 14 : -1);
791
+ i0.ɵɵconditional(ctx.isLoading ? 16 : -1);
789
792
  i0.ɵɵadvance();
790
- i0.ɵɵconditional(!ctx.isLoading ? 15 : -1);
793
+ i0.ɵɵconditional(!ctx.isLoading ? 17 : -1);
791
794
  } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageSearchComponent, i1.MJRefreshButtonComponent, i2.LoadingComponent, i3.CredentialCategoryEditPanelComponent, i4.SlicePipe], styles: ["\n\n.categories-layout[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n\n\n.tree-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container[_ngcontent-%COMP%] {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n\n\n.tree-node[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n\n\n.expand-btn[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder[_ngcontent-%COMP%] {\n width: 24px;\n flex-shrink: 0;\n}\n\n\n\n.node-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.node-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.node-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.node-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.node-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover .node-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-body[_ngcontent-%COMP%] {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n.detail-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n\n\n.description-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n\n\n.types-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.type-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.type-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.subcategories-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.subcategory-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n\n\n.detail-quick-actions[_ngcontent-%COMP%] {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions[_ngcontent-%COMP%] .btn-secondary[_ngcontent-%COMP%], \n.detail-quick-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n}\n\n\n\n.no-selection[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-border-strong);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n@media (max-width: 1024px) {\n .categories-layout[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .detail-panel[_ngcontent-%COMP%], \n .no-selection[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .categories-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%], \n .toolbar-right[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .search-container[_ngcontent-%COMP%] {\n max-width: none;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: flex-end;\n }\n}"], changeDetection: 0 });
792
795
  };
793
796
  CredentialsCategoriesResourceComponent = __decorate([
@@ -796,7 +799,7 @@ CredentialsCategoriesResourceComponent = __decorate([
796
799
  export { CredentialsCategoriesResourceComponent };
797
800
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsCategoriesResourceComponent, [{
798
801
  type: Component,
799
- args: [{ standalone: false, selector: 'mj-credentials-categories-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Categories\"\n Icon=\"fa-solid fa-folder-tree\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n The categories count mirrored the visible tree; the cross-entity\n types count belongs on the Types page, not here. -->\n\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"expandAll()\" title=\"Expand all\">\n <i class=\"fa-solid fa-expand\"></i> Expand\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"collapseAll()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-compress\"></i> Collapse\n </button>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i> New Category\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search categories...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading categories...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <div class=\"categories-layout\">\n <!-- Tree Container -->\n <div class=\"tree-panel\">\n @if (categoryTree.length > 0) {\n <div class=\"tree-container\">\n @for (node of getFlattenedNodes(); track node; let i = $index) {\n <div\n class=\"tree-node\"\n [class.selected]=\"IsNodeSelected(node)\"\n [style.padding-left.px]=\"12 + (node.level * 20)\"\n (click)=\"selectNode(node)\"\n >\n <div class=\"node-content\">\n @if (node.children.length > 0) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node, $event)\"\n >\n <i [class]=\"node.expanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (node.children.length === 0) {\n <span class=\"expand-placeholder\"></span>\n }\n <div class=\"node-icon\" [style.backgroundColor]=\"getCategoryColor(i) + '15'\" [style.color]=\"getCategoryColor(i)\">\n <i [class]=\"node.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"node-info\">\n <div class=\"node-name\">{{node.category.Name}}</div>\n @if (node.category.Description) {\n <div class=\"node-description\">\n {{node.category.Description | slice:0:50}}{{node.category.Description.length > 50 ? '...' : ''}}\n </div>\n }\n </div>\n <div class=\"node-badges\">\n @if (node.typeCount > 0) {\n <span class=\"badge types\">\n <i class=\"fa-solid fa-shapes\"></i>\n {{node.typeCount}}\n </span>\n }\n @if (node.children.length > 0) {\n <span class=\"badge children\">\n <i class=\"fa-solid fa-folder\"></i>\n {{node.children.length}}\n </span>\n }\n </div>\n <div class=\"node-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCategory(node, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete && node.children.length === 0 && node.typeCount === 0) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCategory(node, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (categoryTree.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Categories</h3>\n @if (searchText) {\n <p>\n No categories match your search.\n <button class=\"btn-link\" (click)=\"clearSearch()\">Clear search</button>\n </p>\n }\n @if (!searchText) {\n <p>\n Get started by creating your first category.\n </p>\n }\n @if (UserCanCreate && !searchText) {\n <button class=\"btn-primary\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Category\n </button>\n }\n </div>\n }\n </div>\n <!-- Detail Panel -->\n @if (selectedNode) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-icon\" [style.backgroundColor]=\"getCategoryColor(0) + '15'\" [style.color]=\"getCategoryColor(0)\">\n <i [class]=\"selectedNode.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"detail-title\">\n <h2>{{selectedNode.category.Name}}</h2>\n @if (selectedNode.level > 0) {\n <span class=\"level-badge\">\n Level {{selectedNode.level + 1}}\n </span>\n }\n </div>\n <div class=\"detail-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"editCategory(selectedNode)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n <button class=\"close-btn\" (click)=\"selectedNode = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-body\">\n <!-- Stats -->\n <div class=\"detail-stats\">\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.typeCount}}</div>\n <div class=\"stat-label\">Credential Types</div>\n </div>\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.children.length}}</div>\n <div class=\"stat-label\">Subcategories</div>\n </div>\n </div>\n <!-- Description -->\n @if (selectedNode.category.Description) {\n <div class=\"description-section\">\n <h3>\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h3>\n <p class=\"description\">{{selectedNode.category.Description}}</p>\n </div>\n }\n <!-- Types in Category -->\n @if (selectedNode.typeCount > 0) {\n <div class=\"types-section\">\n <h3>\n <i class=\"fa-solid fa-shapes\"></i>\n Credential Types\n </h3>\n <div class=\"type-list\">\n @for (type of getTypesForCategory(selectedNode.category.Name); track type) {\n <div class=\"type-item\">\n <div class=\"type-icon\">\n <i [class]=\"type.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.Name}}</div>\n @if (type.Description) {\n <div class=\"type-desc\">{{type.Description | slice:0:60}}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Subcategories -->\n @if (selectedNode.children.length > 0) {\n <div class=\"subcategories-section\">\n <h3>\n <i class=\"fa-solid fa-folder-tree\"></i>\n Subcategories\n </h3>\n <div class=\"subcategory-list\">\n @for (child of selectedNode.children; track child) {\n <div class=\"subcategory-item\" (click)=\"selectNode(child)\">\n <i [class]=\"child.category.IconClass || 'fa-solid fa-folder'\"></i>\n <span>{{child.category.Name}}</span>\n @if (child.typeCount > 0) {\n <span class=\"sub-type-count\">{{child.typeCount}} types</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Quick Actions -->\n <div class=\"detail-quick-actions\">\n @if (selectedNode.typeCount > 0) {\n <button\n class=\"btn-secondary\"\n (click)=\"viewTypesForCategory(selectedNode.category.Name)\"\n >\n <i class=\"fa-solid fa-shapes\"></i>\n View Types\n </button>\n }\n <button\n class=\"btn-primary\"\n (click)=\"createCredentialWithCategory(selectedNode.category.ID)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </div>\n </div>\n }\n <!-- No Selection -->\n @if (!selectedNode && categoryTree.length > 0) {\n <div class=\"no-selection\">\n <div class=\"no-selection-icon\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n </div>\n <h3>Select a Category</h3>\n <p>Click on a category to view its details and credential types</p>\n </div>\n }\n </div>\n }\n </mj-page-body>\n\n <!-- Category Edit Panel -->\n <mj-credential-category-edit-panel\n #categoryEditPanel\n (saved)=\"onCategorySaved($any($event))\"\n (deleted)=\"onCategoryDeleted($any($event))\"\n ></mj-credential-category-edit-panel>\n</mj-page-layout>\n", styles: ["/* Layout */\n.categories-layout {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n/* Tree Panel */\n.tree-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n/* Tree Node */\n.tree-node {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node:last-child {\n border-bottom: none;\n}\n\n.tree-node:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n/* Expand Button */\n.expand-btn {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn i {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder {\n width: 24px;\n flex-shrink: 0;\n}\n\n/* Node Icon */\n.node-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon i {\n font-size: 14px;\n}\n\n/* Node Info */\n.node-info {\n flex: 1;\n min-width: 0;\n}\n\n.node-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Node Badges */\n.node-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge i {\n font-size: 10px;\n}\n\n/* Node Actions */\n.node-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node:hover .node-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n/* Detail Panel */\n.detail-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon i {\n font-size: 20px;\n}\n\n.detail-title {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title h2 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n/* Detail Body */\n.detail-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Detail Stats */\n.detail-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat .stat-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Description Section */\n.description-section {\n margin-bottom: 20px;\n}\n\n.description-section h3,\n.types-section h3,\n.subcategories-section h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section h3 i,\n.types-section h3 i,\n.subcategories-section h3 i {\n font-size: 12px;\n}\n\n.description {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n/* Types Section */\n.types-section {\n margin-bottom: 20px;\n}\n\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Subcategories Section */\n.subcategories-section {\n margin-bottom: 20px;\n}\n\n.subcategory-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item span {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n/* Quick Actions */\n.detail-quick-actions {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions .btn-secondary,\n.detail-quick-actions .btn-primary {\n flex: 1;\n}\n\n.btn-secondary {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-border-default);\n}\n\n/* No Selection State */\n.no-selection {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon i {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection p {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--mj-border-strong);\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .detail-panel,\n .no-selection {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container {\n padding: 16px;\n }\n\n .categories-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left,\n .toolbar-right {\n width: 100%;\n }\n\n .search-container {\n max-width: none;\n }\n\n .toolbar-right {\n justify-content: flex-end;\n }\n}\n"] }]
802
+ args: [{ standalone: false, selector: 'mj-credentials-categories-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Categories\"\n Icon=\"fa-solid fa-folder-tree\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n The categories count mirrored the visible tree; the cross-entity\n types count belongs on the Types page, not here. -->\n\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"expandAll()\" title=\"Expand all\">\n <i class=\"fa-solid fa-expand\"></i> <span class=\"action-btn-label\">Expand</span>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"collapseAll()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-compress\"></i> <span class=\"action-btn-label\">Collapse</span>\n </button>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">New Category</span>\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search categories...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading categories...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <div class=\"categories-layout\">\n <!-- Tree Container -->\n <div class=\"tree-panel\">\n @if (categoryTree.length > 0) {\n <div class=\"tree-container\">\n @for (node of getFlattenedNodes(); track node; let i = $index) {\n <div\n class=\"tree-node\"\n [class.selected]=\"IsNodeSelected(node)\"\n [style.padding-left.px]=\"12 + (node.level * 20)\"\n (click)=\"selectNode(node)\"\n >\n <div class=\"node-content\">\n @if (node.children.length > 0) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node, $event)\"\n >\n <i [class]=\"node.expanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (node.children.length === 0) {\n <span class=\"expand-placeholder\"></span>\n }\n <div class=\"node-icon\" [style.backgroundColor]=\"getCategoryColor(i) + '15'\" [style.color]=\"getCategoryColor(i)\">\n <i [class]=\"node.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"node-info\">\n <div class=\"node-name\">{{node.category.Name}}</div>\n @if (node.category.Description) {\n <div class=\"node-description\">\n {{node.category.Description | slice:0:50}}{{node.category.Description.length > 50 ? '...' : ''}}\n </div>\n }\n </div>\n <div class=\"node-badges\">\n @if (node.typeCount > 0) {\n <span class=\"badge types\">\n <i class=\"fa-solid fa-shapes\"></i>\n {{node.typeCount}}\n </span>\n }\n @if (node.children.length > 0) {\n <span class=\"badge children\">\n <i class=\"fa-solid fa-folder\"></i>\n {{node.children.length}}\n </span>\n }\n </div>\n <div class=\"node-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCategory(node, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete && node.children.length === 0 && node.typeCount === 0) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCategory(node, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (categoryTree.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Categories</h3>\n @if (searchText) {\n <p>\n No categories match your search.\n <button class=\"btn-link\" (click)=\"clearSearch()\">Clear search</button>\n </p>\n }\n @if (!searchText) {\n <p>\n Get started by creating your first category.\n </p>\n }\n @if (UserCanCreate && !searchText) {\n <button class=\"btn-primary\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Category\n </button>\n }\n </div>\n }\n </div>\n <!-- Detail Panel -->\n @if (selectedNode) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-icon\" [style.backgroundColor]=\"getCategoryColor(0) + '15'\" [style.color]=\"getCategoryColor(0)\">\n <i [class]=\"selectedNode.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"detail-title\">\n <h2>{{selectedNode.category.Name}}</h2>\n @if (selectedNode.level > 0) {\n <span class=\"level-badge\">\n Level {{selectedNode.level + 1}}\n </span>\n }\n </div>\n <div class=\"detail-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"editCategory(selectedNode)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n <button class=\"close-btn\" (click)=\"selectedNode = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-body\">\n <!-- Stats -->\n <div class=\"detail-stats\">\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.typeCount}}</div>\n <div class=\"stat-label\">Credential Types</div>\n </div>\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.children.length}}</div>\n <div class=\"stat-label\">Subcategories</div>\n </div>\n </div>\n <!-- Description -->\n @if (selectedNode.category.Description) {\n <div class=\"description-section\">\n <h3>\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h3>\n <p class=\"description\">{{selectedNode.category.Description}}</p>\n </div>\n }\n <!-- Types in Category -->\n @if (selectedNode.typeCount > 0) {\n <div class=\"types-section\">\n <h3>\n <i class=\"fa-solid fa-shapes\"></i>\n Credential Types\n </h3>\n <div class=\"type-list\">\n @for (type of getTypesForCategory(selectedNode.category.Name); track type) {\n <div class=\"type-item\">\n <div class=\"type-icon\">\n <i [class]=\"type.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.Name}}</div>\n @if (type.Description) {\n <div class=\"type-desc\">{{type.Description | slice:0:60}}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Subcategories -->\n @if (selectedNode.children.length > 0) {\n <div class=\"subcategories-section\">\n <h3>\n <i class=\"fa-solid fa-folder-tree\"></i>\n Subcategories\n </h3>\n <div class=\"subcategory-list\">\n @for (child of selectedNode.children; track child) {\n <div class=\"subcategory-item\" (click)=\"selectNode(child)\">\n <i [class]=\"child.category.IconClass || 'fa-solid fa-folder'\"></i>\n <span>{{child.category.Name}}</span>\n @if (child.typeCount > 0) {\n <span class=\"sub-type-count\">{{child.typeCount}} types</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Quick Actions -->\n <div class=\"detail-quick-actions\">\n @if (selectedNode.typeCount > 0) {\n <button\n class=\"btn-secondary\"\n (click)=\"viewTypesForCategory(selectedNode.category.Name)\"\n >\n <i class=\"fa-solid fa-shapes\"></i>\n View Types\n </button>\n }\n <button\n class=\"btn-primary\"\n (click)=\"createCredentialWithCategory(selectedNode.category.ID)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </div>\n </div>\n }\n <!-- No Selection -->\n @if (!selectedNode && categoryTree.length > 0) {\n <div class=\"no-selection\">\n <div class=\"no-selection-icon\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n </div>\n <h3>Select a Category</h3>\n <p>Click on a category to view its details and credential types</p>\n </div>\n }\n </div>\n }\n </mj-page-body>\n\n <!-- Category Edit Panel -->\n <mj-credential-category-edit-panel\n #categoryEditPanel\n (saved)=\"onCategorySaved($any($event))\"\n (deleted)=\"onCategoryDeleted($any($event))\"\n ></mj-credential-category-edit-panel>\n</mj-page-layout>\n", styles: ["/* Layout */\n.categories-layout {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n/* Tree Panel */\n.tree-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n/* Tree Node */\n.tree-node {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node:last-child {\n border-bottom: none;\n}\n\n.tree-node:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n/* Expand Button */\n.expand-btn {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn i {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder {\n width: 24px;\n flex-shrink: 0;\n}\n\n/* Node Icon */\n.node-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon i {\n font-size: 14px;\n}\n\n/* Node Info */\n.node-info {\n flex: 1;\n min-width: 0;\n}\n\n.node-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Node Badges */\n.node-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge i {\n font-size: 10px;\n}\n\n/* Node Actions */\n.node-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node:hover .node-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n/* Detail Panel */\n.detail-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon i {\n font-size: 20px;\n}\n\n.detail-title {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title h2 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n/* Detail Body */\n.detail-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Detail Stats */\n.detail-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat .stat-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Description Section */\n.description-section {\n margin-bottom: 20px;\n}\n\n.description-section h3,\n.types-section h3,\n.subcategories-section h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section h3 i,\n.types-section h3 i,\n.subcategories-section h3 i {\n font-size: 12px;\n}\n\n.description {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n/* Types Section */\n.types-section {\n margin-bottom: 20px;\n}\n\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Subcategories Section */\n.subcategories-section {\n margin-bottom: 20px;\n}\n\n.subcategory-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item span {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n/* Quick Actions */\n.detail-quick-actions {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions .btn-secondary,\n.detail-quick-actions .btn-primary {\n flex: 1;\n}\n\n.btn-secondary {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-border-default);\n}\n\n/* No Selection State */\n.no-selection {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon i {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection p {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--mj-border-strong);\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .detail-panel,\n .no-selection {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container {\n padding: 16px;\n }\n\n .categories-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left,\n .toolbar-right {\n width: 100%;\n }\n\n .search-container {\n max-width: none;\n }\n\n .toolbar-right {\n justify-content: flex-end;\n }\n}\n"] }]
800
803
  }], () => [{ type: i0.ChangeDetectorRef }], { categoryEditPanel: [{
801
804
  type: ViewChild,
802
805
  args: ['categoryEditPanel']