@memberjunction/ng-dashboards 5.34.1 → 5.36.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 (407) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  40. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
  41. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  44. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  45. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  46. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  47. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  48. package/dist/AI/components/models/model-management.component.js +370 -425
  49. package/dist/AI/components/models/model-management.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  51. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  52. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  53. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  55. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  56. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  57. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  59. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  60. package/dist/AI/components/system/system-configuration.component.js +403 -362
  61. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  62. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  63. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
  65. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  66. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  67. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  68. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  69. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  70. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  71. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  72. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  73. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  74. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  75. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  76. package/dist/Actions/components/actions-overview.component.js +202 -158
  77. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  78. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  79. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  80. package/dist/Actions/components/execution-monitoring.component.js +191 -142
  81. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  82. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  83. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  84. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  85. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  86. package/dist/Actions/components/explorer/index.d.ts +0 -1
  87. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  88. package/dist/Actions/components/explorer/index.js +0 -1
  89. package/dist/Actions/components/explorer/index.js.map +1 -1
  90. package/dist/Admin/admin-data-schema.component.js +19 -79
  91. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  92. package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
  93. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  94. package/dist/Admin/admin-identity-access.component.js +19 -79
  95. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  96. package/dist/Admin/admin-monitoring.component.js +19 -79
  97. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  98. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  99. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  100. package/dist/Admin/base-admin-container.component.js +26 -17
  101. package/dist/Admin/base-admin-container.component.js.map +1 -1
  102. package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
  103. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  104. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  105. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  106. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  107. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  108. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  109. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  110. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  111. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  112. package/dist/Communication/communication-logs-resource.component.js +80 -99
  113. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  115. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  116. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  117. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  118. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  119. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  120. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  121. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  122. package/dist/Communication/communication-providers-resource.component.js +44 -45
  123. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  124. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  125. package/dist/Communication/communication-runs-resource.component.js +60 -58
  126. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  127. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  128. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  129. package/dist/Communication/communication-templates-resource.component.js +139 -162
  130. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  131. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  132. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  133. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  134. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  135. package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
  136. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  137. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  138. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  139. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  140. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  141. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  142. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  143. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  144. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  145. package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
  146. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  147. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  148. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  149. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
  150. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  151. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  152. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  153. package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
  154. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  155. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  156. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  157. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
  158. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  159. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  160. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  161. package/dist/DevTools/app-state-inspector.component.js +46 -72
  162. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  163. package/dist/DevTools/class-registry.component.js +88 -100
  164. package/dist/DevTools/class-registry.component.js.map +1 -1
  165. package/dist/DevTools/event-monitor.component.js +158 -168
  166. package/dist/DevTools/event-monitor.component.js.map +1 -1
  167. package/dist/DevTools/graphql-console.component.js +257 -264
  168. package/dist/DevTools/graphql-console.component.js.map +1 -1
  169. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  170. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  171. package/dist/DevTools/layout-inspector.component.js +46 -64
  172. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  173. package/dist/DevTools/lazy-module-status.component.js +75 -84
  174. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  175. package/dist/DevTools/settings-explorer.component.js +76 -85
  176. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  177. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  178. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  179. package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
  180. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  181. package/dist/Home/home-dashboard.component.d.ts +6 -0
  182. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  183. package/dist/Home/home-dashboard.component.js +521 -485
  184. package/dist/Home/home-dashboard.component.js.map +1 -1
  185. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  186. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  187. package/dist/Integration/components/activity/activity.component.js +307 -318
  188. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  189. package/dist/Integration/components/connections/connections.component.js +654 -648
  190. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  191. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  192. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  193. package/dist/Integration/components/overview/overview.component.js +182 -163
  194. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  195. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  196. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  197. package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
  198. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  199. package/dist/Integration/components/schedules/schedules.component.js +230 -241
  200. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  201. package/dist/Integration/integration.module.d.ts +1 -1
  202. package/dist/Integration/integration.module.d.ts.map +1 -1
  203. package/dist/Integration/integration.module.js +28 -1
  204. package/dist/Integration/integration.module.js.map +1 -1
  205. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  206. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  207. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
  208. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  209. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  210. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  211. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  212. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  213. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
  214. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  215. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  216. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  217. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  218. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  219. package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
  220. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  221. package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
  222. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  223. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  224. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  225. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  226. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  227. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  228. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  229. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  230. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  231. package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
  232. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  233. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  234. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  235. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  236. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  237. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  238. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  239. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  240. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  241. package/dist/Lists/index.d.ts +1 -0
  242. package/dist/Lists/index.d.ts.map +1 -1
  243. package/dist/Lists/index.js +1 -0
  244. package/dist/Lists/index.js.map +1 -1
  245. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  246. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  247. package/dist/Lists/services/list-set-operations.service.js +236 -10
  248. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  249. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  250. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  251. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  252. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  253. package/dist/MCP/mcp.module.d.ts +1 -1
  254. package/dist/MCP/mcp.module.d.ts.map +1 -1
  255. package/dist/MCP/mcp.module.js +34 -1
  256. package/dist/MCP/mcp.module.js.map +1 -1
  257. package/dist/Permissions/audit-log-resource.component.js +76 -85
  258. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  259. package/dist/Permissions/resource-access-resource.component.js +64 -69
  260. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  261. package/dist/Permissions/user-access-resource.component.js +63 -74
  262. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  264. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  266. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  267. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  268. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  270. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  271. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  272. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  273. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  274. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  275. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  276. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  277. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  278. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  279. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  280. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  281. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  282. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  283. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  284. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  285. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  286. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  287. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  288. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  289. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  290. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  291. package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
  292. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  293. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  294. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  295. package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
  296. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  297. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  298. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  299. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  300. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  301. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  302. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  303. package/dist/Testing/components/testing-analytics.component.js +420 -393
  304. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  305. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  306. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  307. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  308. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  309. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  310. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  311. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  312. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  313. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  314. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  315. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  316. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  317. package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
  318. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  319. package/dist/Testing/components/testing-explorer.component.js +679 -786
  320. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  321. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  322. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  323. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  324. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  325. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  326. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  327. package/dist/Testing/components/testing-review.component.js +310 -274
  328. package/dist/Testing/components/testing-review.component.js.map +1 -1
  329. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  330. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  331. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  332. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  333. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  334. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  335. package/dist/Testing/components/testing-runs.component.js +307 -273
  336. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  337. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  338. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  339. package/dist/Testing/testing-dashboard.component.js +114 -99
  340. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  341. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  342. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  343. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  344. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  345. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  346. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  347. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  348. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  349. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  350. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  351. package/dist/actions-dashboards.module.d.ts +15 -16
  352. package/dist/actions-dashboards.module.d.ts.map +1 -1
  353. package/dist/actions-dashboards.module.js +34 -11
  354. package/dist/actions-dashboards.module.js.map +1 -1
  355. package/dist/ai-dashboards.module.d.ts +45 -48
  356. package/dist/ai-dashboards.module.d.ts.map +1 -1
  357. package/dist/ai-dashboards.module.js +51 -10
  358. package/dist/ai-dashboards.module.js.map +1 -1
  359. package/dist/archiving-dashboards.module.d.ts +2 -1
  360. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  361. package/dist/archiving-dashboards.module.js +12 -2
  362. package/dist/archiving-dashboards.module.js.map +1 -1
  363. package/dist/communication-dashboards.module.d.ts +9 -6
  364. package/dist/communication-dashboards.module.d.ts.map +1 -1
  365. package/dist/communication-dashboards.module.js +37 -7
  366. package/dist/communication-dashboards.module.js.map +1 -1
  367. package/dist/core-dashboards.module.d.ts +1 -1
  368. package/dist/core-dashboards.module.d.ts.map +1 -1
  369. package/dist/core-dashboards.module.js +46 -1
  370. package/dist/core-dashboards.module.js.map +1 -1
  371. package/dist/credentials-dashboards.module.d.ts +1 -1
  372. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  373. package/dist/credentials-dashboards.module.js +28 -1
  374. package/dist/credentials-dashboards.module.js.map +1 -1
  375. package/dist/lists-dashboards.module.d.ts +10 -9
  376. package/dist/lists-dashboards.module.d.ts.map +1 -1
  377. package/dist/lists-dashboards.module.js +40 -2
  378. package/dist/lists-dashboards.module.js.map +1 -1
  379. package/dist/public-api.d.ts +3 -2
  380. package/dist/public-api.d.ts.map +1 -1
  381. package/dist/public-api.js +4 -3
  382. package/dist/public-api.js.map +1 -1
  383. package/dist/scheduling-dashboards.module.d.ts +1 -1
  384. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  385. package/dist/scheduling-dashboards.module.js +31 -1
  386. package/dist/scheduling-dashboards.module.js.map +1 -1
  387. package/dist/testing-dashboards.module.d.ts +8 -7
  388. package/dist/testing-dashboards.module.d.ts.map +1 -1
  389. package/dist/testing-dashboards.module.js +42 -0
  390. package/dist/testing-dashboards.module.js.map +1 -1
  391. package/package.json +53 -52
  392. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  393. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  394. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  395. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  396. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  397. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  398. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  399. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  400. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  401. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  402. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  403. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  404. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  405. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  406. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  407. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"admin-dev-tools-resource.component.js","sourceRoot":"","sources":["../../src/Admin/admin-dev-tools-resource.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Developer Tools. Diagnostic and inspection sub-tools for developers.\n */\n@RegisterClass(BaseResourceComponent, 'AdminDeveloperTools')\n@Component({\n standalone: false,\n selector: 'mj-admin-dev-tools-resource',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminDevToolsResourceComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Developer Tools';\n public readonly ContainerIcon = 'fa-solid fa-screwdriver-wrench';\n public readonly ContainerSubtitle = 'Diagnostic and inspection tools for developers';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'graphql',\n label: 'GraphQL Console',\n icon: 'fa-solid fa-code',\n description: 'Run queries against the API',\n source: { kind: 'resource', driverClass: 'GraphQLConsoleInspector' }\n },\n {\n id: 'events',\n label: 'Event Monitor',\n icon: 'fa-solid fa-bolt',\n description: 'Live tail of MJ events',\n source: { kind: 'resource', driverClass: 'EventMonitorInspector' }\n },\n {\n id: 'classes',\n label: 'Class Registry',\n icon: 'fa-solid fa-cubes',\n description: 'All @RegisterClass entries',\n source: { kind: 'resource', driverClass: 'ClassRegistryInspector' }\n },\n {\n id: 'lazy',\n label: 'Lazy Loading',\n icon: 'fa-solid fa-puzzle-piece',\n description: 'Code-split chunk status',\n source: { kind: 'resource', driverClass: 'LazyModuleStatusInspector' }\n },\n {\n id: 'settings',\n label: 'Settings Explorer',\n icon: 'fa-solid fa-sliders',\n description: 'User and instance settings',\n source: { kind: 'resource', driverClass: 'SettingsExplorerInspector' }\n },\n {\n id: 'app-state',\n label: 'App State',\n icon: 'fa-solid fa-magnifying-glass-chart',\n description: 'Snapshot of user, provider, workspace',\n source: { kind: 'resource', driverClass: 'AppStateInspector' }\n },\n {\n id: 'layout',\n label: 'Layout',\n icon: 'fa-solid fa-table-columns',\n description: 'Workspace + Golden Layout config',\n source: { kind: 'resource', driverClass: 'LayoutInspector' }\n }\n ];\n}\n","<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading…</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"admin-dev-tools-resource.component.js","sourceRoot":"","sources":["../../src/Admin/admin-dev-tools-resource.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAgB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;;AAE7F;;GAEG;AAQI,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,2BAA2B;IAC3D,cAAc,GAAG,iBAAiB,CAAC;IACnC,aAAa,GAAG,gCAAgC,CAAC;IACjD,iBAAiB,GAAG,gDAAgD,CAAC;IAErE,QAAQ,GAAmB;QACvC;YACI,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,6BAA6B;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,yBAAyB,EAAE;SACvE;QACD;YACI,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,wBAAwB;YACrC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE;SACrE;QACD;YACI,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,4BAA4B;YACzC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,wBAAwB,EAAE;SACtE;QACD;YACI,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,0BAA0B;YAChC,WAAW,EAAE,yBAAyB;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACzE;QACD;YACI,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,4BAA4B;YACzC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACzE;QACD;YACI,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,oCAAoC;YAC1C,WAAW,EAAE,uCAAuC;YACpD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE;SACjE;QACD;YACI,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,kCAAkC;YAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE;SAC/D;KACJ,CAAC;qSAvDO,8BAA8B,yBAA9B,8BAA8B;6DAA9B,8BAA8B;;YCf3C,sCAAgB;YACZ,oCAIiB;YAGb,AADJ,uCAA8D,qBAIb;YAAzC,wKAAe,4BAAwB,KAAC;YAC5C,iBAAc;YACd,8CAA+D;YAC3D,iCAA0C;YAGtD,AADI,AADI,iBAAsB,EACX,EACF;;YAfT,cAAwB;YAExB,AADA,AADA,0CAAwB,2BACF,mCACQ;YAGpB,cAAa;YAAC,AAAd,2BAAa,kBAAkB;YAErC,cAAwB;YACxB,AADA,0CAAwB,+BACE;YAGT,cAAqB;YAAC,AAAtB,uCAAqB,wBAAoB;;;ADEzD,8BAA8B;IAP1C,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAO/C,8BAA8B,CAwD1C;;iFAxDY,8BAA8B;cAN1C,SAAS;6BACM,KAAK,YACP,6BAA6B;;kFAI9B,8BAA8B","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Developer Tools. Diagnostic and inspection sub-tools for developers.\n */\n@RegisterClass(BaseResourceComponent, 'AdminDeveloperTools')\n@Component({\n standalone: false,\n selector: 'mj-admin-dev-tools-resource',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminDevToolsResourceComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Developer Tools';\n public readonly ContainerIcon = 'fa-solid fa-screwdriver-wrench';\n public readonly ContainerSubtitle = 'Diagnostic and inspection tools for developers';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'graphql',\n label: 'GraphQL Console',\n icon: 'fa-solid fa-code',\n description: 'Run queries against the API',\n source: { kind: 'resource', driverClass: 'GraphQLConsoleInspector' }\n },\n {\n id: 'events',\n label: 'Event Monitor',\n icon: 'fa-solid fa-bolt',\n description: 'Live tail of MJ events',\n source: { kind: 'resource', driverClass: 'EventMonitorInspector' }\n },\n {\n id: 'classes',\n label: 'Class Registry',\n icon: 'fa-solid fa-cubes',\n description: 'All @RegisterClass entries',\n source: { kind: 'resource', driverClass: 'ClassRegistryInspector' }\n },\n {\n id: 'lazy',\n label: 'Lazy Loading',\n icon: 'fa-solid fa-puzzle-piece',\n description: 'Code-split chunk status',\n source: { kind: 'resource', driverClass: 'LazyModuleStatusInspector' }\n },\n {\n id: 'settings',\n label: 'Settings Explorer',\n icon: 'fa-solid fa-sliders',\n description: 'User and instance settings',\n source: { kind: 'resource', driverClass: 'SettingsExplorerInspector' }\n },\n {\n id: 'app-state',\n label: 'App State',\n icon: 'fa-solid fa-magnifying-glass-chart',\n description: 'Snapshot of user, provider, workspace',\n source: { kind: 'resource', driverClass: 'AppStateInspector' }\n },\n {\n id: 'layout',\n label: 'Layout',\n icon: 'fa-solid fa-table-columns',\n description: 'Workspace + Golden Layout config',\n source: { kind: 'resource', driverClass: 'LayoutInspector' }\n }\n ];\n}\n","<mj-page-layout>\n <mj-page-header\n [Title]=\"ContainerTitle\"\n [Icon]=\"ContainerIcon\"\n [Subtitle]=\"ContainerSubtitle\">\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\" Direction=\"row\">\n <mj-left-nav\n [Sections]=\"NavSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"OnNavItemClicked($event)\">\n </mj-left-nav>\n <mj-left-nav-content [Loading]=\"IsLoading\" [Error]=\"LoadError\">\n <ng-container #contentHost></ng-container>\n </mj-left-nav-content>\n </mj-page-body>\n</mj-page-layout>\n"]}
@@ -9,55 +9,7 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
9
9
  import { RegisterClass } from '@memberjunction/global';
10
10
  import { BaseAdminContainerComponent } from './base-admin-container.component';
11
11
  import * as i0 from "@angular/core";
12
- const _forTrack0 = ($index, $item) => $item.id;
13
- function AdminIdentityAccessComponent_For_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
14
- i0.ɵɵelementStart(0, "div", 17);
15
- i0.ɵɵtext(1);
16
- i0.ɵɵelementEnd();
17
- } if (rf & 2) {
18
- const section_r2 = i0.ɵɵnextContext().$implicit;
19
- i0.ɵɵadvance();
20
- i0.ɵɵtextInterpolate(section_r2.description);
21
- } }
22
- function AdminIdentityAccessComponent_For_12_Template(rf, ctx) { if (rf & 1) {
23
- const _r1 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "button", 13);
25
- i0.ɵɵlistener("click", function AdminIdentityAccessComponent_For_12_Template_button_click_0_listener() { const section_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionClick(section_r2)); });
26
- i0.ɵɵelement(1, "i", 14);
27
- i0.ɵɵelementStart(2, "div", 15)(3, "div", 16);
28
- i0.ɵɵtext(4);
29
- i0.ɵɵelementEnd();
30
- i0.ɵɵconditionalCreate(5, AdminIdentityAccessComponent_For_12_Conditional_5_Template, 2, 1, "div", 17);
31
- i0.ɵɵelementEnd()();
32
- } if (rf & 2) {
33
- const section_r2 = ctx.$implicit;
34
- const ctx_r2 = i0.ɵɵnextContext();
35
- i0.ɵɵclassProp("admin-container__nav-item--active", ctx_r2.ActiveSection === section_r2.id);
36
- i0.ɵɵadvance();
37
- i0.ɵɵclassMap(section_r2.icon);
38
- i0.ɵɵadvance(3);
39
- i0.ɵɵtextInterpolate(section_r2.label);
40
- i0.ɵɵadvance();
41
- i0.ɵɵconditional(section_r2.description ? 5 : -1);
42
- } }
43
- function AdminIdentityAccessComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 10);
45
- i0.ɵɵelement(1, "i", 18);
46
- i0.ɵɵelementStart(2, "span");
47
- i0.ɵɵtext(3);
48
- i0.ɵɵelementEnd()();
49
- } if (rf & 2) {
50
- const ctx_r2 = i0.ɵɵnextContext();
51
- i0.ɵɵadvance(3);
52
- i0.ɵɵtextInterpolate(ctx_r2.LoadError);
53
- } }
54
- function AdminIdentityAccessComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵelementStart(0, "div", 11);
56
- i0.ɵɵelement(1, "i", 19);
57
- i0.ɵɵelementStart(2, "span");
58
- i0.ɵɵtext(3, "Loading\u2026");
59
- i0.ɵɵelementEnd()();
60
- } }
12
+ import * as i1 from "@memberjunction/ng-ui-components";
61
13
  /**
62
14
  * Admin → Identity & Access. Users, roles, app-role assignments,
63
15
  * entity permissions, and API keys.
@@ -111,38 +63,26 @@ let AdminIdentityAccessComponent = class AdminIdentityAccessComponent extends Ba
111
63
  }
112
64
  ];
113
65
  static ɵfac = /*@__PURE__*/ (() => { let ɵAdminIdentityAccessComponent_BaseFactory; return function AdminIdentityAccessComponent_Factory(__ngFactoryType__) { return (ɵAdminIdentityAccessComponent_BaseFactory || (ɵAdminIdentityAccessComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AdminIdentityAccessComponent)))(__ngFactoryType__ || AdminIdentityAccessComponent); }; })();
114
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminIdentityAccessComponent, selectors: [["mj-admin-identity-access"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 7, consts: [["contentHost", ""], [1, "admin-container"], [1, "admin-container__header"], [1, "admin-container__header-icon"], [1, "admin-container__header-title"], [1, "admin-container__header-sub"], [1, "admin-container__body"], [1, "admin-container__nav"], ["type", "button", 1, "admin-container__nav-item", 3, "admin-container__nav-item--active"], [1, "admin-container__content"], [1, "admin-container__error"], [1, "admin-container__loading"], [1, "admin-container__host"], ["type", "button", 1, "admin-container__nav-item", 3, "click"], [1, "admin-container__nav-icon"], [1, "admin-container__nav-text"], [1, "admin-container__nav-label"], [1, "admin-container__nav-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AdminIdentityAccessComponent_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "div", 1)(1, "header", 2)(2, "div", 3);
116
- i0.ɵɵelement(3, "i");
66
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminIdentityAccessComponent, selectors: [["mj-admin-identity-access"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 9, consts: [["contentHost", ""], [3, "Title", "Icon", "Subtitle"], ["Direction", "row", 3, "Flex", "Padding"], [3, "ItemClicked", "Sections", "ActiveId"], [3, "Loading", "Error"]], template: function AdminIdentityAccessComponent_Template(rf, ctx) { if (rf & 1) {
67
+ const _r1 = i0.ɵɵgetCurrentView();
68
+ i0.ɵɵelementStart(0, "mj-page-layout");
69
+ i0.ɵɵelement(1, "mj-page-header", 1);
70
+ i0.ɵɵelementStart(2, "mj-page-body", 2)(3, "mj-left-nav", 3);
71
+ i0.ɵɵlistener("ItemClicked", function AdminIdentityAccessComponent_Template_mj_left_nav_ItemClicked_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.OnNavItemClicked($event)); });
117
72
  i0.ɵɵelementEnd();
118
- i0.ɵɵelementStart(4, "div")(5, "h3", 4);
119
- i0.ɵɵtext(6);
120
- i0.ɵɵelementEnd();
121
- i0.ɵɵelementStart(7, "div", 5);
122
- i0.ɵɵtext(8);
73
+ i0.ɵɵelementStart(4, "mj-left-nav-content", 4);
74
+ i0.ɵɵelementContainer(5, null, 0);
123
75
  i0.ɵɵelementEnd()()();
124
- i0.ɵɵelementStart(9, "div", 6)(10, "aside", 7);
125
- i0.ɵɵrepeaterCreate(11, AdminIdentityAccessComponent_For_12_Template, 6, 6, "button", 8, _forTrack0);
126
- i0.ɵɵelementEnd();
127
- i0.ɵɵelementStart(13, "main", 9);
128
- i0.ɵɵconditionalCreate(14, AdminIdentityAccessComponent_Conditional_14_Template, 4, 1, "div", 10)(15, AdminIdentityAccessComponent_Conditional_15_Template, 4, 0, "div", 11);
129
- i0.ɵɵelementStart(16, "div", 12);
130
- i0.ɵɵelementContainer(17, null, 0);
131
- i0.ɵɵelementEnd()()()();
132
76
  } if (rf & 2) {
133
- i0.ɵɵadvance(3);
134
- i0.ɵɵclassMap(ctx.ContainerIcon);
135
- i0.ɵɵadvance(3);
136
- i0.ɵɵtextInterpolate(ctx.ContainerTitle);
137
- i0.ɵɵadvance(2);
138
- i0.ɵɵtextInterpolate(ctx.ContainerSubtitle);
139
- i0.ɵɵadvance(3);
140
- i0.ɵɵrepeater(ctx.Sections);
141
- i0.ɵɵadvance(3);
142
- i0.ɵɵconditional(ctx.LoadError ? 14 : ctx.IsLoading ? 15 : -1);
143
- i0.ɵɵadvance(2);
144
- i0.ɵɵclassProp("admin-container__host--hidden", ctx.LoadError || ctx.IsLoading);
145
- } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.admin-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.admin-container__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.admin-container__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.admin-container__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] .admin-container__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.admin-container__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n\n\n.admin-container__host[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden[_ngcontent-%COMP%] { display: none; }\n.admin-container__host[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.admin-container__empty[_ngcontent-%COMP%], \n.admin-container__error[_ngcontent-%COMP%], \n.admin-container__loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.admin-container__error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 20px; }\n.admin-container__loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body[_ngcontent-%COMP%] { flex-direction: column; }\n .admin-container__nav[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc[_ngcontent-%COMP%] { display: none; }\n .admin-container__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}"] });
77
+ i0.ɵɵadvance();
78
+ i0.ɵɵproperty("Title", ctx.ContainerTitle)("Icon", ctx.ContainerIcon)("Subtitle", ctx.ContainerSubtitle);
79
+ i0.ɵɵadvance();
80
+ i0.ɵɵproperty("Flex", true)("Padding", false);
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵproperty("Sections", ctx.NavSections)("ActiveId", ctx.ActiveSection);
83
+ i0.ɵɵadvance();
84
+ i0.ɵɵproperty("Loading", ctx.IsLoading)("Error", ctx.LoadError);
85
+ } }, dependencies: [i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJLeftNavComponent, i1.MJLeftNavContentComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n@media (max-width: 700px) {\n [_nghost-%COMP%] mj-page-body.mj-page-body--row {\n flex-direction: column;\n }\n}"] });
146
86
  };
147
87
  AdminIdentityAccessComponent = __decorate([
148
88
  RegisterClass(BaseResourceComponent, 'AdminIdentityAccess')
@@ -150,7 +90,7 @@ AdminIdentityAccessComponent = __decorate([
150
90
  export { AdminIdentityAccessComponent };
151
91
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminIdentityAccessComponent, [{
152
92
  type: Component,
153
- args: [{ standalone: false, selector: 'mj-admin-identity-access', template: "<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading\u2026</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.admin-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.admin-container__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Layout: sidebar + content */\n.admin-container__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text { flex: 1; min-width: 0; }\n.admin-container__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active .admin-container__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.admin-container__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n/* Dynamic host */\n.admin-container__host {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden { display: none; }\n.admin-container__host > * {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty + error + loading states */\n.admin-container__empty,\n.admin-container__error,\n.admin-container__loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error {\n color: var(--mj-status-error);\n}\n.admin-container__error i { font-size: 20px; }\n.admin-container__loading i { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body { flex-direction: column; }\n .admin-container__nav {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc { display: none; }\n .admin-container__header { padding: 12px 14px; gap: 10px; }\n}\n"] }]
93
+ args: [{ standalone: false, selector: 'mj-admin-identity-access', template: "<mj-page-layout>\n <mj-page-header\n [Title]=\"ContainerTitle\"\n [Icon]=\"ContainerIcon\"\n [Subtitle]=\"ContainerSubtitle\">\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\" Direction=\"row\">\n <mj-left-nav\n [Sections]=\"NavSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"OnNavItemClicked($event)\">\n </mj-left-nav>\n <mj-left-nav-content [Loading]=\"IsLoading\" [Error]=\"LoadError\">\n <ng-container #contentHost></ng-container>\n </mj-left-nav-content>\n </mj-page-body>\n</mj-page-layout>\n", styles: [":host { display: block; height: 100%; }\n\n/* Layout, rail styling, and content-area chrome all live in the shared\n <mj-page-body> / <mj-left-nav> / <mj-left-nav-content> components. The\n only thing this file owns is the responsive collapse of the parent flex\n direction at narrow viewports. See Section 10 of explorer-chrome-conventions. */\n@media (max-width: 700px) {\n :host ::ng-deep mj-page-body.mj-page-body--row {\n flex-direction: column;\n }\n}\n"] }]
154
94
  }], null, null); })();
155
95
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AdminIdentityAccessComponent, { className: "AdminIdentityAccessComponent", filePath: "src/Admin/admin-identity-access.component.ts", lineNumber: 17 }); })();
156
96
  //# sourceMappingURL=admin-identity-access.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-identity-access.component.js","sourceRoot":"","sources":["../../src/Admin/admin-identity-access.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Identity & Access. Users, roles, app-role assignments,\n * entity permissions, and API keys.\n */\n@RegisterClass(BaseResourceComponent, 'AdminIdentityAccess')\n@Component({\n standalone: false,\n selector: 'mj-admin-identity-access',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminIdentityAccessComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Identity & Access';\n public readonly ContainerIcon = 'fa-solid fa-shield-halved';\n public readonly ContainerSubtitle = 'Users, roles, permissions, and API keys';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'users',\n label: 'Users',\n icon: 'fa-solid fa-users',\n description: 'Manage user accounts',\n source: { kind: 'dashboard', dashboardName: 'User Management' }\n },\n {\n id: 'roles',\n label: 'Roles',\n icon: 'fa-solid fa-user-shield',\n description: 'Define roles and assignments',\n source: { kind: 'dashboard', dashboardName: 'Role Management' }\n },\n {\n id: 'apps',\n label: 'Apps',\n icon: 'fa-solid fa-th-large',\n description: 'Application configuration',\n source: { kind: 'dashboard', dashboardName: 'Application Management' }\n },\n {\n id: 'app-roles',\n label: 'App Roles',\n icon: 'fa-solid fa-people-roof',\n description: 'Role assignments per application',\n source: { kind: 'resource', driverClass: 'ApplicationRolesResource' }\n },\n {\n id: 'permissions',\n label: 'Permissions',\n icon: 'fa-solid fa-lock',\n description: 'Entity-level access and audit',\n source: { kind: 'dashboard', dashboardName: 'Entity Permissions' }\n },\n {\n id: 'api-keys',\n label: 'API Keys',\n icon: 'fa-solid fa-key',\n description: 'API authentication and scopes',\n source: { kind: 'resource', driverClass: 'APIKeysResource' }\n }\n ];\n}\n","<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading…</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"admin-identity-access.component.js","sourceRoot":"","sources":["../../src/Admin/admin-identity-access.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAgB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;;AAE7F;;;GAGG;AAQI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,2BAA2B;IACzD,cAAc,GAAG,mBAAmB,CAAC;IACrC,aAAa,GAAG,2BAA2B,CAAC;IAC5C,iBAAiB,GAAG,yCAAyC,CAAC;IAE9D,QAAQ,GAAmB;QACvC;YACI,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,sBAAsB;YACnC,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE;SAClE;QACD;YACI,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE;SAClE;QACD;YACI,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,2BAA2B;YACxC,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,wBAAwB,EAAE;SACzE;QACD;YACI,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE,kCAAkC;YAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,0BAA0B,EAAE;SACxE;QACD;YACI,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE;SACrE;QACD;YACI,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE;SAC/D;KACJ,CAAC;6RAhDO,4BAA4B,yBAA5B,4BAA4B;6DAA5B,4BAA4B;;YChBzC,sCAAgB;YACZ,oCAIiB;YAGb,AADJ,uCAA8D,qBAIb;YAAzC,sKAAe,4BAAwB,KAAC;YAC5C,iBAAc;YACd,8CAA+D;YAC3D,iCAA0C;YAGtD,AADI,AADI,iBAAsB,EACX,EACF;;YAfT,cAAwB;YAExB,AADA,AADA,0CAAwB,2BACF,mCACQ;YAGpB,cAAa;YAAC,AAAd,2BAAa,kBAAkB;YAErC,cAAwB;YACxB,AADA,0CAAwB,+BACE;YAGT,cAAqB;YAAC,AAAtB,uCAAqB,wBAAoB;;;ADGzD,4BAA4B;IAPxC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAO/C,4BAA4B,CAiDxC;;iFAjDY,4BAA4B;cANxC,SAAS;6BACM,KAAK,YACP,0BAA0B;;kFAI3B,4BAA4B","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Identity & Access. Users, roles, app-role assignments,\n * entity permissions, and API keys.\n */\n@RegisterClass(BaseResourceComponent, 'AdminIdentityAccess')\n@Component({\n standalone: false,\n selector: 'mj-admin-identity-access',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminIdentityAccessComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Identity & Access';\n public readonly ContainerIcon = 'fa-solid fa-shield-halved';\n public readonly ContainerSubtitle = 'Users, roles, permissions, and API keys';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'users',\n label: 'Users',\n icon: 'fa-solid fa-users',\n description: 'Manage user accounts',\n source: { kind: 'dashboard', dashboardName: 'User Management' }\n },\n {\n id: 'roles',\n label: 'Roles',\n icon: 'fa-solid fa-user-shield',\n description: 'Define roles and assignments',\n source: { kind: 'dashboard', dashboardName: 'Role Management' }\n },\n {\n id: 'apps',\n label: 'Apps',\n icon: 'fa-solid fa-th-large',\n description: 'Application configuration',\n source: { kind: 'dashboard', dashboardName: 'Application Management' }\n },\n {\n id: 'app-roles',\n label: 'App Roles',\n icon: 'fa-solid fa-people-roof',\n description: 'Role assignments per application',\n source: { kind: 'resource', driverClass: 'ApplicationRolesResource' }\n },\n {\n id: 'permissions',\n label: 'Permissions',\n icon: 'fa-solid fa-lock',\n description: 'Entity-level access and audit',\n source: { kind: 'dashboard', dashboardName: 'Entity Permissions' }\n },\n {\n id: 'api-keys',\n label: 'API Keys',\n icon: 'fa-solid fa-key',\n description: 'API authentication and scopes',\n source: { kind: 'resource', driverClass: 'APIKeysResource' }\n }\n ];\n}\n","<mj-page-layout>\n <mj-page-header\n [Title]=\"ContainerTitle\"\n [Icon]=\"ContainerIcon\"\n [Subtitle]=\"ContainerSubtitle\">\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\" Direction=\"row\">\n <mj-left-nav\n [Sections]=\"NavSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"OnNavItemClicked($event)\">\n </mj-left-nav>\n <mj-left-nav-content [Loading]=\"IsLoading\" [Error]=\"LoadError\">\n <ng-container #contentHost></ng-container>\n </mj-left-nav-content>\n </mj-page-body>\n</mj-page-layout>\n"]}
@@ -9,55 +9,7 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
9
9
  import { RegisterClass } from '@memberjunction/global';
10
10
  import { BaseAdminContainerComponent } from './base-admin-container.component';
11
11
  import * as i0 from "@angular/core";
12
- const _forTrack0 = ($index, $item) => $item.id;
13
- function AdminMonitoringComponent_For_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
14
- i0.ɵɵelementStart(0, "div", 17);
15
- i0.ɵɵtext(1);
16
- i0.ɵɵelementEnd();
17
- } if (rf & 2) {
18
- const section_r2 = i0.ɵɵnextContext().$implicit;
19
- i0.ɵɵadvance();
20
- i0.ɵɵtextInterpolate(section_r2.description);
21
- } }
22
- function AdminMonitoringComponent_For_12_Template(rf, ctx) { if (rf & 1) {
23
- const _r1 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "button", 13);
25
- i0.ɵɵlistener("click", function AdminMonitoringComponent_For_12_Template_button_click_0_listener() { const section_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionClick(section_r2)); });
26
- i0.ɵɵelement(1, "i", 14);
27
- i0.ɵɵelementStart(2, "div", 15)(3, "div", 16);
28
- i0.ɵɵtext(4);
29
- i0.ɵɵelementEnd();
30
- i0.ɵɵconditionalCreate(5, AdminMonitoringComponent_For_12_Conditional_5_Template, 2, 1, "div", 17);
31
- i0.ɵɵelementEnd()();
32
- } if (rf & 2) {
33
- const section_r2 = ctx.$implicit;
34
- const ctx_r2 = i0.ɵɵnextContext();
35
- i0.ɵɵclassProp("admin-container__nav-item--active", ctx_r2.ActiveSection === section_r2.id);
36
- i0.ɵɵadvance();
37
- i0.ɵɵclassMap(section_r2.icon);
38
- i0.ɵɵadvance(3);
39
- i0.ɵɵtextInterpolate(section_r2.label);
40
- i0.ɵɵadvance();
41
- i0.ɵɵconditional(section_r2.description ? 5 : -1);
42
- } }
43
- function AdminMonitoringComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 10);
45
- i0.ɵɵelement(1, "i", 18);
46
- i0.ɵɵelementStart(2, "span");
47
- i0.ɵɵtext(3);
48
- i0.ɵɵelementEnd()();
49
- } if (rf & 2) {
50
- const ctx_r2 = i0.ɵɵnextContext();
51
- i0.ɵɵadvance(3);
52
- i0.ɵɵtextInterpolate(ctx_r2.LoadError);
53
- } }
54
- function AdminMonitoringComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵelementStart(0, "div", 11);
56
- i0.ɵɵelement(1, "i", 19);
57
- i0.ɵɵelementStart(2, "span");
58
- i0.ɵɵtext(3, "Loading\u2026");
59
- i0.ɵɵelementEnd()();
60
- } }
12
+ import * as i1 from "@memberjunction/ng-ui-components";
61
13
  /**
62
14
  * Admin → Monitoring. System health, SQL execution logs, and outbound
63
15
  * communication delivery monitoring.
@@ -85,38 +37,26 @@ let AdminMonitoringComponent = class AdminMonitoringComponent extends BaseAdminC
85
37
  }
86
38
  ];
87
39
  static ɵfac = /*@__PURE__*/ (() => { let ɵAdminMonitoringComponent_BaseFactory; return function AdminMonitoringComponent_Factory(__ngFactoryType__) { return (ɵAdminMonitoringComponent_BaseFactory || (ɵAdminMonitoringComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AdminMonitoringComponent)))(__ngFactoryType__ || AdminMonitoringComponent); }; })();
88
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminMonitoringComponent, selectors: [["mj-admin-monitoring"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 7, consts: [["contentHost", ""], [1, "admin-container"], [1, "admin-container__header"], [1, "admin-container__header-icon"], [1, "admin-container__header-title"], [1, "admin-container__header-sub"], [1, "admin-container__body"], [1, "admin-container__nav"], ["type", "button", 1, "admin-container__nav-item", 3, "admin-container__nav-item--active"], [1, "admin-container__content"], [1, "admin-container__error"], [1, "admin-container__loading"], [1, "admin-container__host"], ["type", "button", 1, "admin-container__nav-item", 3, "click"], [1, "admin-container__nav-icon"], [1, "admin-container__nav-text"], [1, "admin-container__nav-label"], [1, "admin-container__nav-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AdminMonitoringComponent_Template(rf, ctx) { if (rf & 1) {
89
- i0.ɵɵelementStart(0, "div", 1)(1, "header", 2)(2, "div", 3);
90
- i0.ɵɵelement(3, "i");
40
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminMonitoringComponent, selectors: [["mj-admin-monitoring"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 9, consts: [["contentHost", ""], [3, "Title", "Icon", "Subtitle"], ["Direction", "row", 3, "Flex", "Padding"], [3, "ItemClicked", "Sections", "ActiveId"], [3, "Loading", "Error"]], template: function AdminMonitoringComponent_Template(rf, ctx) { if (rf & 1) {
41
+ const _r1 = i0.ɵɵgetCurrentView();
42
+ i0.ɵɵelementStart(0, "mj-page-layout");
43
+ i0.ɵɵelement(1, "mj-page-header", 1);
44
+ i0.ɵɵelementStart(2, "mj-page-body", 2)(3, "mj-left-nav", 3);
45
+ i0.ɵɵlistener("ItemClicked", function AdminMonitoringComponent_Template_mj_left_nav_ItemClicked_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.OnNavItemClicked($event)); });
91
46
  i0.ɵɵelementEnd();
92
- i0.ɵɵelementStart(4, "div")(5, "h3", 4);
93
- i0.ɵɵtext(6);
94
- i0.ɵɵelementEnd();
95
- i0.ɵɵelementStart(7, "div", 5);
96
- i0.ɵɵtext(8);
47
+ i0.ɵɵelementStart(4, "mj-left-nav-content", 4);
48
+ i0.ɵɵelementContainer(5, null, 0);
97
49
  i0.ɵɵelementEnd()()();
98
- i0.ɵɵelementStart(9, "div", 6)(10, "aside", 7);
99
- i0.ɵɵrepeaterCreate(11, AdminMonitoringComponent_For_12_Template, 6, 6, "button", 8, _forTrack0);
100
- i0.ɵɵelementEnd();
101
- i0.ɵɵelementStart(13, "main", 9);
102
- i0.ɵɵconditionalCreate(14, AdminMonitoringComponent_Conditional_14_Template, 4, 1, "div", 10)(15, AdminMonitoringComponent_Conditional_15_Template, 4, 0, "div", 11);
103
- i0.ɵɵelementStart(16, "div", 12);
104
- i0.ɵɵelementContainer(17, null, 0);
105
- i0.ɵɵelementEnd()()()();
106
50
  } if (rf & 2) {
107
- i0.ɵɵadvance(3);
108
- i0.ɵɵclassMap(ctx.ContainerIcon);
109
- i0.ɵɵadvance(3);
110
- i0.ɵɵtextInterpolate(ctx.ContainerTitle);
111
- i0.ɵɵadvance(2);
112
- i0.ɵɵtextInterpolate(ctx.ContainerSubtitle);
113
- i0.ɵɵadvance(3);
114
- i0.ɵɵrepeater(ctx.Sections);
115
- i0.ɵɵadvance(3);
116
- i0.ɵɵconditional(ctx.LoadError ? 14 : ctx.IsLoading ? 15 : -1);
117
- i0.ɵɵadvance(2);
118
- i0.ɵɵclassProp("admin-container__host--hidden", ctx.LoadError || ctx.IsLoading);
119
- } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.admin-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.admin-container__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.admin-container__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.admin-container__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] .admin-container__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.admin-container__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n\n\n.admin-container__host[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden[_ngcontent-%COMP%] { display: none; }\n.admin-container__host[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.admin-container__empty[_ngcontent-%COMP%], \n.admin-container__error[_ngcontent-%COMP%], \n.admin-container__loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.admin-container__error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 20px; }\n.admin-container__loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body[_ngcontent-%COMP%] { flex-direction: column; }\n .admin-container__nav[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc[_ngcontent-%COMP%] { display: none; }\n .admin-container__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}"] });
51
+ i0.ɵɵadvance();
52
+ i0.ɵɵproperty("Title", ctx.ContainerTitle)("Icon", ctx.ContainerIcon)("Subtitle", ctx.ContainerSubtitle);
53
+ i0.ɵɵadvance();
54
+ i0.ɵɵproperty("Flex", true)("Padding", false);
55
+ i0.ɵɵadvance();
56
+ i0.ɵɵproperty("Sections", ctx.NavSections)("ActiveId", ctx.ActiveSection);
57
+ i0.ɵɵadvance();
58
+ i0.ɵɵproperty("Loading", ctx.IsLoading)("Error", ctx.LoadError);
59
+ } }, dependencies: [i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJLeftNavComponent, i1.MJLeftNavContentComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n@media (max-width: 700px) {\n [_nghost-%COMP%] mj-page-body.mj-page-body--row {\n flex-direction: column;\n }\n}"] });
120
60
  };
121
61
  AdminMonitoringComponent = __decorate([
122
62
  RegisterClass(BaseResourceComponent, 'AdminMonitoring')
@@ -124,7 +64,7 @@ AdminMonitoringComponent = __decorate([
124
64
  export { AdminMonitoringComponent };
125
65
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminMonitoringComponent, [{
126
66
  type: Component,
127
- args: [{ standalone: false, selector: 'mj-admin-monitoring', template: "<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading\u2026</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.admin-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.admin-container__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Layout: sidebar + content */\n.admin-container__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text { flex: 1; min-width: 0; }\n.admin-container__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active .admin-container__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.admin-container__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n/* Dynamic host */\n.admin-container__host {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden { display: none; }\n.admin-container__host > * {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty + error + loading states */\n.admin-container__empty,\n.admin-container__error,\n.admin-container__loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error {\n color: var(--mj-status-error);\n}\n.admin-container__error i { font-size: 20px; }\n.admin-container__loading i { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body { flex-direction: column; }\n .admin-container__nav {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc { display: none; }\n .admin-container__header { padding: 12px 14px; gap: 10px; }\n}\n"] }]
67
+ args: [{ standalone: false, selector: 'mj-admin-monitoring', template: "<mj-page-layout>\n <mj-page-header\n [Title]=\"ContainerTitle\"\n [Icon]=\"ContainerIcon\"\n [Subtitle]=\"ContainerSubtitle\">\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\" Direction=\"row\">\n <mj-left-nav\n [Sections]=\"NavSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"OnNavItemClicked($event)\">\n </mj-left-nav>\n <mj-left-nav-content [Loading]=\"IsLoading\" [Error]=\"LoadError\">\n <ng-container #contentHost></ng-container>\n </mj-left-nav-content>\n </mj-page-body>\n</mj-page-layout>\n", styles: [":host { display: block; height: 100%; }\n\n/* Layout, rail styling, and content-area chrome all live in the shared\n <mj-page-body> / <mj-left-nav> / <mj-left-nav-content> components. The\n only thing this file owns is the responsive collapse of the parent flex\n direction at narrow viewports. See Section 10 of explorer-chrome-conventions. */\n@media (max-width: 700px) {\n :host ::ng-deep mj-page-body.mj-page-body--row {\n flex-direction: column;\n }\n}\n"] }]
128
68
  }], null, null); })();
129
69
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AdminMonitoringComponent, { className: "AdminMonitoringComponent", filePath: "src/Admin/admin-monitoring.component.ts", lineNumber: 17 }); })();
130
70
  //# sourceMappingURL=admin-monitoring.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-monitoring.component.js","sourceRoot":"","sources":["../../src/Admin/admin-monitoring.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAgB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;;;ICiBjE,+BAAuC;IAAA,YAAyB;IAAA,iBAAM;;;IAA/B,cAAyB;IAAzB,4CAAyB;;;;IAR5E,kCAG0C;IAAlC,kNAAS,iCAAuB,KAAC;IACrC,wBAAgE;IAE5D,AADJ,+BAAuC,cACK;IAAA,YAAmB;IAAA,iBAAM;IACjE,kGAA2B;IAInC,AADI,iBAAM,EACD;;;;IATD,2FAAwE;IAEvC,cAAsB;IAAtB,8BAAsB;IAEf,eAAmB;IAAnB,sCAAmB;IAC3D,cAEC;IAFD,iDAEC;;;IAQT,+BAAoC;IAChC,wBAAgD;IAChD,4BAAM;IAAA,YAAe;IACzB,AADyB,iBAAO,EAC1B;;;IADI,eAAe;IAAf,sCAAe;;;IAGzB,+BAAsC;IAClC,wBAA2C;IAC3C,4BAAM;IAAA,6BAAQ;IAClB,AADkB,iBAAO,EACnB;;ADhCtB;;;GAGG;AAQI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2BAA2B;IACrD,cAAc,GAAG,YAAY,CAAC;IAC9B,aAAa,GAAG,yBAAyB,CAAC;IAC1C,iBAAiB,GAAG,wCAAwC,CAAC;IAE7E,4EAA4E;IAC5E,sEAAsE;IACtD,QAAQ,GAAmB;QACvC;YACI,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE,iCAAiC;YAC9C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACzE;QACD;YACI,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,6BAA6B;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE;SAC9D;KACJ,CAAC;6QAtBO,wBAAwB,yBAAxB,wBAAwB;6DAAxB,wBAAwB;YCd7B,AADJ,AADJ,8BAA6B,gBACe,aACM;YAAA,oBAA+B;YAAA,iBAAM;YAE3E,AADJ,2BAAK,YACyC;YAAA,YAAoB;YAAA,iBAAK;YACnE,8BAAyC;YAAA,YAAuB;YAExE,AADI,AADoE,iBAAM,EACpE,EACD;YAGL,AADJ,8BAAmC,gBACK;YAChC,gGAaC;YACL,iBAAQ;YAER,gCAAuC;YAMjC,AALF,6FAAiB,uEAKO;YAMxB,gCAAkG;YAC9F,kCAA0C;YAI1D,AADI,AADI,AADI,iBAAM,EACH,EACL,EACJ;;YA1C+C,eAAuB;YAAvB,gCAAuB;YAEtB,eAAoB;YAApB,wCAAoB;YACrB,eAAuB;YAAvB,2CAAuB;YAMhE,eAaC;YAbD,2BAaC;YAID,eAUC;YAVD,8DAUC;YACkC,eAA8D;YAA9D,+EAA8D;;;ADvBhG,wBAAwB;IAPpC,aAAa,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;GAO3C,wBAAwB,CAuBpC;;iFAvBY,wBAAwB;cANpC,SAAS;6BACM,KAAK,YACP,qBAAqB;;kFAItB,wBAAwB","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Monitoring. System health, SQL execution logs, and outbound\n * communication delivery monitoring.\n */\n@RegisterClass(BaseResourceComponent, 'AdminMonitoring')\n@Component({\n standalone: false,\n selector: 'mj-admin-monitoring',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminMonitoringComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Monitoring';\n public readonly ContainerIcon = 'fa-solid fa-stethoscope';\n public readonly ContainerSubtitle = 'System health and query execution logs';\n\n // Communication Monitor intentionally NOT included here — outbound delivery\n // monitoring belongs in the Communications app, not in the Admin app.\n public readonly Sections: AdminSection[] = [\n {\n id: 'diagnostics',\n label: 'Diagnostics',\n icon: 'fa-solid fa-stethoscope',\n description: 'Runtime health and connectivity',\n source: { kind: 'resource', driverClass: 'SystemDiagnosticsResource' }\n },\n {\n id: 'sql-logging',\n label: 'SQL Logging',\n icon: 'fa-solid fa-file-code',\n description: 'Captured SQL execution logs',\n source: { kind: 'dashboard', dashboardName: 'SQL Logging' }\n }\n ];\n}\n","<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading…</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"admin-monitoring.component.js","sourceRoot":"","sources":["../../src/Admin/admin-monitoring.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAgB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;;AAE7F;;;GAGG;AAQI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2BAA2B;IACrD,cAAc,GAAG,YAAY,CAAC;IAC9B,aAAa,GAAG,yBAAyB,CAAC;IAC1C,iBAAiB,GAAG,wCAAwC,CAAC;IAE7E,4EAA4E;IAC5E,sEAAsE;IACtD,QAAQ,GAAmB;QACvC;YACI,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE,iCAAiC;YAC9C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACzE;QACD;YACI,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,6BAA6B;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE;SAC9D;KACJ,CAAC;6QAtBO,wBAAwB,yBAAxB,wBAAwB;6DAAxB,wBAAwB;;YChBrC,sCAAgB;YACZ,oCAIiB;YAGb,AADJ,uCAA8D,qBAIb;YAAzC,kKAAe,4BAAwB,KAAC;YAC5C,iBAAc;YACd,8CAA+D;YAC3D,iCAA0C;YAGtD,AADI,AADI,iBAAsB,EACX,EACF;;YAfT,cAAwB;YAExB,AADA,AADA,0CAAwB,2BACF,mCACQ;YAGpB,cAAa;YAAC,AAAd,2BAAa,kBAAkB;YAErC,cAAwB;YACxB,AADA,0CAAwB,+BACE;YAGT,cAAqB;YAAC,AAAtB,uCAAqB,wBAAoB;;;ADGzD,wBAAwB;IAPpC,aAAa,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;GAO3C,wBAAwB,CAuBpC;;iFAvBY,wBAAwB;cANpC,SAAS;6BACM,KAAK,YACP,qBAAqB;;kFAItB,wBAAwB","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Monitoring. System health, SQL execution logs, and outbound\n * communication delivery monitoring.\n */\n@RegisterClass(BaseResourceComponent, 'AdminMonitoring')\n@Component({\n standalone: false,\n selector: 'mj-admin-monitoring',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminMonitoringComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Monitoring';\n public readonly ContainerIcon = 'fa-solid fa-stethoscope';\n public readonly ContainerSubtitle = 'System health and query execution logs';\n\n // Communication Monitor intentionally NOT included here — outbound delivery\n // monitoring belongs in the Communications app, not in the Admin app.\n public readonly Sections: AdminSection[] = [\n {\n id: 'diagnostics',\n label: 'Diagnostics',\n icon: 'fa-solid fa-stethoscope',\n description: 'Runtime health and connectivity',\n source: { kind: 'resource', driverClass: 'SystemDiagnosticsResource' }\n },\n {\n id: 'sql-logging',\n label: 'SQL Logging',\n icon: 'fa-solid fa-file-code',\n description: 'Captured SQL execution logs',\n source: { kind: 'dashboard', dashboardName: 'SQL Logging' }\n }\n ];\n}\n","<mj-page-layout>\n <mj-page-header\n [Title]=\"ContainerTitle\"\n [Icon]=\"ContainerIcon\"\n [Subtitle]=\"ContainerSubtitle\">\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\" Direction=\"row\">\n <mj-left-nav\n [Sections]=\"NavSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"OnNavItemClicked($event)\">\n </mj-left-nav>\n <mj-left-nav-content [Loading]=\"IsLoading\" [Error]=\"LoadError\">\n <ng-container #contentHost></ng-container>\n </mj-left-nav-content>\n </mj-page-body>\n</mj-page-layout>\n"]}
@@ -1,5 +1,6 @@
1
1
  import { OnInit, OnDestroy, ChangeDetectorRef, ViewContainerRef, ComponentRef } from '@angular/core';
2
2
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
3
+ import { MJLeftNavItem, MJLeftNavSection } from '@memberjunction/ng-ui-components';
3
4
  import * as i0 from "@angular/core";
4
5
  /** A single sub-section inside an admin container's left-nav. */
5
6
  export interface AdminSection {
@@ -58,6 +59,14 @@ export declare abstract class BaseAdminContainerComponent extends BaseResourceCo
58
59
  ngOnDestroy(): void;
59
60
  GetResourceDisplayName(): Promise<string>;
60
61
  GetResourceIconClass(): Promise<string>;
62
+ /**
63
+ * Single-section view of `Sections` shaped for `<mj-left-nav>`. AdminSection
64
+ * already has the required id / label / icon / description fields, so it's
65
+ * structurally compatible with MJLeftNavItem.
66
+ */
67
+ get NavSections(): MJLeftNavSection[];
68
+ /** Adapter from `<mj-left-nav>`'s ItemClicked event back to `selectSection`. */
69
+ OnNavItemClicked(item: MJLeftNavItem): void;
61
70
  /** Called by the framework on browser back/forward + deep-link entry. */
62
71
  protected OnQueryParamsChanged(params: Record<string, string>, _source: 'popstate' | 'deeplink'): void;
63
72
  OnSectionClick(section: AdminSection): Promise<void>;
@@ -66,13 +75,6 @@ export declare abstract class BaseAdminContainerComponent extends BaseResourceCo
66
75
  private detachCurrent;
67
76
  private createResourceRef;
68
77
  private createDashboardRef;
69
- /**
70
- * Force the rendered sub-component's host element to fill the container
71
- * cell. Mirrors what `tab-container` does for top-level resources — many
72
- * dashboards rely on inline `height: 100%` to bound their internal layout
73
- * (so their own `overflow-y: auto` regions actually scroll).
74
- */
75
- private applyHostSizing;
76
78
  private findSection;
77
79
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseAdminContainerComponent, never>;
78
80
  static ɵdir: i0.ɵɵDirectiveDeclaration<BaseAdminContainerComponent, never, never, {}, {}, never, never, true, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"base-admin-container.component.d.ts","sourceRoot":"","sources":["../../src/Admin/base-admin-container.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,MAAM,EACN,SAAS,EACT,iBAAiB,EAEjB,gBAAgB,EAChB,YAAY,EAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAC;;AAIjF,iEAAiE;AACjE,MAAM,WAAW,YAAY;IACzB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GACxB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD;;;;;;;;;GASG;AACH,8BACsB,2BAA4B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IACxG,kBAAyB,cAAc,EAAE,MAAM,CAAC;IAChD,kBAAyB,aAAa,EAAE,MAAM,CAAC;IAC/C,kBAAyB,iBAAiB,EAAE,MAAM,CAAC;IACnD,kBAAyB,QAAQ,EAAE,YAAY,EAAE,CAAC;IAGlD,SAAS,CAAC,WAAW,EAAG,gBAAgB,CAAC;IAElC,aAAa,SAAM;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,SAAS,UAAS;IAEzB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,qCAA4C;IAC3D,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD,SAAS,CAAC,QAAQ,CAAC,GAAG,oBAA6B;IAE7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB/B,WAAW,IAAI,IAAI;IASb,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7D,yEAAyE;cACtD,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IASlG,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAOnD,aAAa;YAoBb,aAAa;IAyB3B,OAAO,CAAC,aAAa;YAQP,iBAAiB;YAYjB,kBAAkB;IA2BhC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,WAAW;yCApLD,2BAA2B;2CAA3B,2BAA2B;CAwLhD"}
1
+ {"version":3,"file":"base-admin-container.component.d.ts","sourceRoot":"","sources":["../../src/Admin/base-admin-container.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,MAAM,EACN,SAAS,EACT,iBAAiB,EAEjB,gBAAgB,EAChB,YAAY,EAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;;AAEnF,iEAAiE;AACjE,MAAM,WAAW,YAAY;IACzB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GACxB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD;;;;;;;;;GASG;AACH,8BACsB,2BAA4B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IACxG,kBAAyB,cAAc,EAAE,MAAM,CAAC;IAChD,kBAAyB,aAAa,EAAE,MAAM,CAAC;IAC/C,kBAAyB,iBAAiB,EAAE,MAAM,CAAC;IACnD,kBAAyB,QAAQ,EAAE,YAAY,EAAE,CAAC;IAGlD,SAAS,CAAC,WAAW,EAAG,gBAAgB,CAAC;IAElC,aAAa,SAAM;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,SAAS,UAAS;IAEzB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,qCAA4C;IAC3D,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD,SAAS,CAAC,QAAQ,CAAC,GAAG,oBAA6B;IAE7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB/B,WAAW,IAAI,IAAI;IASb,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAE7D;;;;OAIG;IACH,IAAW,WAAW,IAAI,gBAAgB,EAAE,CAE3C;IAED,gFAAgF;IACzE,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAOlD,yEAAyE;cACtD,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IASlG,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAOnD,aAAa;YA+Bb,aAAa;IAwB3B,OAAO,CAAC,aAAa;YAQP,iBAAiB;YAYjB,kBAAkB;IA2BhC,OAAO,CAAC,WAAW;yCA/LD,2BAA2B;2CAA3B,2BAA2B;CAmMhD"}
@@ -56,6 +56,21 @@ export class BaseAdminContainerComponent extends BaseResourceComponent {
56
56
  }
57
57
  async GetResourceDisplayName() { return this.ContainerTitle; }
58
58
  async GetResourceIconClass() { return this.ContainerIcon; }
59
+ /**
60
+ * Single-section view of `Sections` shaped for `<mj-left-nav>`. AdminSection
61
+ * already has the required id / label / icon / description fields, so it's
62
+ * structurally compatible with MJLeftNavItem.
63
+ */
64
+ get NavSections() {
65
+ return [{ items: this.Sections }];
66
+ }
67
+ /** Adapter from `<mj-left-nav>`'s ItemClicked event back to `selectSection`. */
68
+ OnNavItemClicked(item) {
69
+ const section = this.Sections.find(s => s.id === item.id);
70
+ if (section) {
71
+ void this.OnSectionClick(section);
72
+ }
73
+ }
59
74
  /** Called by the framework on browser back/forward + deep-link entry. */
60
75
  OnQueryParamsChanged(params, _source) {
61
76
  const section = params['section'];
@@ -73,6 +88,17 @@ export class BaseAdminContainerComponent extends BaseResourceComponent {
73
88
  }
74
89
  // ---------- protected ----------
75
90
  async selectSection(section, syncUrl) {
91
+ // Guard against duplicate calls for the same section. Without this,
92
+ // ngOnInit's own GetQueryParams read races with the workspace stream's
93
+ // synchronous replay through OnQueryParamsChanged on first mount —
94
+ // both call selectSection with the same target, both reach
95
+ // createComponent, and two instances of the sub-page end up mounted
96
+ // in the contentHost. OnSectionClick + OnQueryParamsChanged each
97
+ // guard their own call site, but defense-in-depth here covers any
98
+ // future caller (and the ngOnInit ↔ stream-replay race specifically).
99
+ if (section.id === this.ActiveSection) {
100
+ return;
101
+ }
76
102
  this.ActiveSection = section.id;
77
103
  this.IsLoading = true;
78
104
  this.LoadError = null;
@@ -107,7 +133,6 @@ export class BaseAdminContainerComponent extends BaseResourceComponent {
107
133
  ? await this.createResourceRef(section.source.driverClass)
108
134
  : await this.createDashboardRef(section.source.dashboardName);
109
135
  if (ref) {
110
- this.applyHostSizing(ref);
111
136
  this.cache.set(section.id, ref);
112
137
  this.currentSectionId = section.id;
113
138
  }
@@ -160,22 +185,6 @@ export class BaseAdminContainerComponent extends BaseResourceComponent {
160
185
  instance.Refresh();
161
186
  return ref;
162
187
  }
163
- /**
164
- * Force the rendered sub-component's host element to fill the container
165
- * cell. Mirrors what `tab-container` does for top-level resources — many
166
- * dashboards rely on inline `height: 100%` to bound their internal layout
167
- * (so their own `overflow-y: auto` regions actually scroll).
168
- */
169
- applyHostSizing(ref) {
170
- const hostEl = ref.hostView.rootNodes[0];
171
- if (!hostEl || !(hostEl instanceof HTMLElement))
172
- return;
173
- hostEl.style.height = '100%';
174
- hostEl.style.minHeight = '0';
175
- hostEl.style.display = 'flex';
176
- hostEl.style.flexDirection = 'column';
177
- hostEl.style.flex = '1 1 auto';
178
- }
179
188
  findSection(id) {
180
189
  if (!id)
181
190
  return undefined;