@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
@@ -16,7 +16,7 @@ import * as i14 from "@memberjunction/ng-code-editor";
16
16
  import * as i15 from "../shared/shared-pipes.module";
17
17
  export declare class MCPModule {
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<MCPModule, never>;
19
- static ɵmod: i0.ɵɵNgModuleDeclaration<MCPModule, [typeof i1.MCPDashboardComponent, typeof i2.MCPResourceComponent, typeof i3.MCPFilterPanelComponent, typeof i4.MCPServerDialogComponent, typeof i5.MCPConnectionDialogComponent, typeof i6.MCPTestToolDialogComponent, typeof i7.MCPLogDetailPanelComponent], [typeof i8.CommonModule, typeof i9.FormsModule, typeof i9.ReactiveFormsModule, typeof i10.ScrollingModule, typeof i11.MJButtonDirective, typeof i11.MJDialogComponent, typeof i11.MJDialogActionsComponent, typeof i11.MJDropdownComponent, typeof i11.MJNumericInputComponent, typeof i12.SharedGenericModule, typeof i13.CredentialsModule, typeof i14.CodeEditorModule, typeof i15.SharedPipesModule], [typeof i1.MCPDashboardComponent, typeof i2.MCPResourceComponent, typeof i3.MCPFilterPanelComponent, typeof i4.MCPServerDialogComponent, typeof i5.MCPConnectionDialogComponent, typeof i6.MCPTestToolDialogComponent, typeof i7.MCPLogDetailPanelComponent]>;
19
+ static ɵmod: i0.ɵɵNgModuleDeclaration<MCPModule, [typeof i1.MCPDashboardComponent, typeof i2.MCPResourceComponent, typeof i3.MCPFilterPanelComponent, typeof i4.MCPServerDialogComponent, typeof i5.MCPConnectionDialogComponent, typeof i6.MCPTestToolDialogComponent, typeof i7.MCPLogDetailPanelComponent], [typeof i8.CommonModule, typeof i9.FormsModule, typeof i9.ReactiveFormsModule, typeof i10.ScrollingModule, typeof i11.MJButtonDirective, typeof i11.MJDialogComponent, typeof i11.MJDialogActionsComponent, typeof i11.MJDropdownComponent, typeof i11.MJNumericInputComponent, typeof i11.MJPageHeaderComponent, typeof i11.MJPageLayoutComponent, typeof i11.MJPageBodyComponent, typeof i11.MJFilterPopoverComponent, typeof i11.MJFilterPanelComponent, typeof i11.MJFilterFieldComponent, typeof i11.MJPageSearchComponent, typeof i11.MJTabNavComponent, typeof i11.MJViewToggleComponent, typeof i11.MJRefreshButtonComponent, typeof i11.MJStatBadgeComponent, typeof i12.SharedGenericModule, typeof i13.CredentialsModule, typeof i14.CodeEditorModule, typeof i15.SharedPipesModule], [typeof i1.MCPDashboardComponent, typeof i2.MCPResourceComponent, typeof i3.MCPFilterPanelComponent, typeof i4.MCPServerDialogComponent, typeof i5.MCPConnectionDialogComponent, typeof i6.MCPTestToolDialogComponent, typeof i7.MCPLogDetailPanelComponent]>;
20
20
  static ɵinj: i0.ɵɵInjectorDeclaration<MCPModule>;
21
21
  }
22
22
  //# sourceMappingURL=mcp.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.d.ts","sourceRoot":"","sources":["../../src/MCP/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsCA,qBAmCa,SAAS;yCAAT,SAAS;0CAAT,SAAS;0CAAT,SAAS;CAAI"}
1
+ {"version":3,"file":"mcp.module.d.ts","sourceRoot":"","sources":["../../src/MCP/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAiDA,qBA8Ca,SAAS;yCAAT,SAAS;0CAAT,SAAS;0CAAT,SAAS;CAAI"}
@@ -9,7 +9,7 @@ import { CommonModule } from '@angular/common';
9
9
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
10
10
  import { ScrollingModule } from '@angular/cdk/scrolling';
11
11
  // MJ UI Components
12
- import { MJButtonDirective, MJDialogComponent, MJDialogActionsComponent, MJDropdownComponent, MJNumericInputComponent } from '@memberjunction/ng-ui-components';
12
+ import { MJButtonDirective, MJDialogComponent, MJDialogActionsComponent, MJDropdownComponent, MJNumericInputComponent, MJPageHeaderComponent, MJPageLayoutComponent, MJPageBodyComponent, MJFilterPopoverComponent, MJFilterPanelComponent, MJFilterFieldComponent, MJPageSearchComponent, MJTabNavComponent, MJViewToggleComponent, MJRefreshButtonComponent, MJStatBadgeComponent } from '@memberjunction/ng-ui-components';
13
13
  // MemberJunction Modules
14
14
  import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
15
15
  import { CredentialsModule } from '@memberjunction/ng-credentials';
@@ -36,6 +36,17 @@ export class MCPModule {
36
36
  MJDialogActionsComponent,
37
37
  MJDropdownComponent,
38
38
  MJNumericInputComponent,
39
+ MJPageHeaderComponent,
40
+ MJPageLayoutComponent,
41
+ MJPageBodyComponent,
42
+ MJFilterPopoverComponent,
43
+ MJFilterPanelComponent,
44
+ MJFilterFieldComponent,
45
+ MJPageSearchComponent,
46
+ MJTabNavComponent,
47
+ MJViewToggleComponent,
48
+ MJRefreshButtonComponent,
49
+ MJStatBadgeComponent,
39
50
  SharedGenericModule,
40
51
  CredentialsModule,
41
52
  CodeEditorModule,
@@ -63,6 +74,17 @@ export class MCPModule {
63
74
  MJDialogActionsComponent,
64
75
  MJDropdownComponent,
65
76
  MJNumericInputComponent,
77
+ MJPageHeaderComponent,
78
+ MJPageLayoutComponent,
79
+ MJPageBodyComponent,
80
+ MJFilterPopoverComponent,
81
+ MJFilterPanelComponent,
82
+ MJFilterFieldComponent,
83
+ MJPageSearchComponent,
84
+ MJTabNavComponent,
85
+ MJViewToggleComponent,
86
+ MJRefreshButtonComponent,
87
+ MJStatBadgeComponent,
66
88
  SharedGenericModule,
67
89
  CredentialsModule,
68
90
  CodeEditorModule,
@@ -94,6 +116,17 @@ export class MCPModule {
94
116
  MJDialogActionsComponent,
95
117
  MJDropdownComponent,
96
118
  MJNumericInputComponent,
119
+ MJPageHeaderComponent,
120
+ MJPageLayoutComponent,
121
+ MJPageBodyComponent,
122
+ MJFilterPopoverComponent,
123
+ MJFilterPanelComponent,
124
+ MJFilterFieldComponent,
125
+ MJPageSearchComponent,
126
+ MJTabNavComponent,
127
+ MJViewToggleComponent,
128
+ MJRefreshButtonComponent,
129
+ MJStatBadgeComponent,
97
130
  SharedGenericModule,
98
131
  CredentialsModule,
99
132
  CodeEditorModule,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../src/MCP/mcp.module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,mBAAmB;AACnB,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EAC1B,MAAM,kCAAkC,CAAC;AAE1C,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;;AAqCzF,MAAM,OAAO,SAAS;mGAAT,SAAS;4DAAT,SAAS;gEAxBd,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,eAAe;YAEf,iBAAiB;YACjB,wBAAwB;YACxB,mBAAmB;YACnB,uBAAuB;YACvB,mBAAmB;YACnB,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;;iFAYZ,SAAS;cAnCrB,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,qBAAqB;oBACrB,oBAAoB;oBACpB,uBAAuB;oBACvB,wBAAwB;oBACxB,4BAA4B;oBAC5B,0BAA0B;oBAC1B,0BAA0B;iBAC7B;gBACD,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,eAAe;oBACf,iBAAiB;oBACjB,iBAAiB;oBACjB,wBAAwB;oBACxB,mBAAmB;oBACnB,uBAAuB;oBACvB,mBAAmB;oBACnB,iBAAiB;oBACjB,gBAAgB;oBAChB,iBAAiB;iBACpB;gBACD,OAAO,EAAE;oBACL,qBAAqB;oBACrB,oBAAoB;oBACpB,uBAAuB;oBACvB,wBAAwB;oBACxB,4BAA4B;oBAC5B,0BAA0B;oBAC1B,0BAA0B;iBAC7B;aACJ;;wFACY,SAAS,mBAjCd,qBAAqB;QACrB,oBAAoB;QACpB,uBAAuB;QACvB,wBAAwB;QACxB,4BAA4B;QAC5B,0BAA0B;QAC1B,0BAA0B,aAG1B,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,eAAe;QACf,iBAAiB;QACjB,iBAAiB;QACjB,wBAAwB;QACxB,mBAAmB;QACnB,uBAAuB;QACvB,mBAAmB;QACnB,iBAAiB;QACjB,gBAAgB;QAChB,iBAAiB,aAGjB,qBAAqB;QACrB,oBAAoB;QACpB,uBAAuB;QACvB,wBAAwB;QACxB,4BAA4B;QAC5B,0BAA0B;QAC1B,0BAA0B","sourcesContent":["/**\n * @fileoverview MCP Management Module\n *\n * Angular module for MCP (Model Context Protocol) server management.\n * Provides components for managing servers, connections, tools, and viewing logs.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\n// MJ UI Components\nimport {\n MJButtonDirective,\n MJDialogComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n MJNumericInputComponent\n} from '@memberjunction/ng-ui-components';\n\n// MemberJunction Modules\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { CredentialsModule } from '@memberjunction/ng-credentials';\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\n\n// Shared Pipes Module\nimport { SharedPipesModule } from '../shared/shared-pipes.module';\n\n// MCP Components\nimport { MCPDashboardComponent } from './mcp-dashboard.component';\nimport { MCPResourceComponent } from './mcp-resource.component';\nimport { MCPFilterPanelComponent } from './mcp-filter-panel.component';\nimport { MCPServerDialogComponent } from './components/mcp-server-dialog.component';\nimport { MCPConnectionDialogComponent } from './components/mcp-connection-dialog.component';\nimport { MCPTestToolDialogComponent } from './components/mcp-test-tool-dialog.component';\nimport { MCPLogDetailPanelComponent } from './components/mcp-log-detail-panel.component';\n\n@NgModule({\n declarations: [\n MCPDashboardComponent,\n MCPResourceComponent,\n MCPFilterPanelComponent,\n MCPServerDialogComponent,\n MCPConnectionDialogComponent,\n MCPTestToolDialogComponent,\n MCPLogDetailPanelComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ScrollingModule,\n MJButtonDirective,\n MJDialogComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n MJNumericInputComponent,\n SharedGenericModule,\n CredentialsModule,\n CodeEditorModule,\n SharedPipesModule\n ],\n exports: [\n MCPDashboardComponent,\n MCPResourceComponent,\n MCPFilterPanelComponent,\n MCPServerDialogComponent,\n MCPConnectionDialogComponent,\n MCPTestToolDialogComponent,\n MCPLogDetailPanelComponent\n ]\n})\nexport class MCPModule { }\n"]}
1
+ {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../src/MCP/mcp.module.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Management Module\n *\n * Angular module for MCP (Model Context Protocol) server management.\n * Provides components for managing servers, connections, tools, and viewing logs.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\n// MJ UI Components\nimport {\n MJButtonDirective,\n MJDialogComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n MJNumericInputComponent,\n MJPageHeaderComponent,\n MJPageLayoutComponent,\n MJPageBodyComponent,\n MJFilterPopoverComponent,\n MJFilterPanelComponent,\n MJFilterFieldComponent,\n MJPageSearchComponent,\n MJTabNavComponent,\n MJViewToggleComponent,\n MJRefreshButtonComponent,\n MJStatBadgeComponent\n} from '@memberjunction/ng-ui-components';\n\n// MemberJunction Modules\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { CredentialsModule } from '@memberjunction/ng-credentials';\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\n\n// Shared Pipes Module\nimport { SharedPipesModule } from '../shared/shared-pipes.module';\n\n// MCP Components\nimport { MCPDashboardComponent } from './mcp-dashboard.component';\nimport { MCPResourceComponent } from './mcp-resource.component';\nimport { MCPFilterPanelComponent } from './mcp-filter-panel.component';\nimport { MCPServerDialogComponent } from './components/mcp-server-dialog.component';\nimport { MCPConnectionDialogComponent } from './components/mcp-connection-dialog.component';\nimport { MCPTestToolDialogComponent } from './components/mcp-test-tool-dialog.component';\nimport { MCPLogDetailPanelComponent } from './components/mcp-log-detail-panel.component';\n\n@NgModule({\n declarations: [\n MCPDashboardComponent,\n MCPResourceComponent,\n MCPFilterPanelComponent,\n MCPServerDialogComponent,\n MCPConnectionDialogComponent,\n MCPTestToolDialogComponent,\n MCPLogDetailPanelComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ScrollingModule,\n MJButtonDirective,\n MJDialogComponent,\n MJDialogActionsComponent,\n MJDropdownComponent,\n MJNumericInputComponent,\n MJPageHeaderComponent,\n MJPageLayoutComponent,\n MJPageBodyComponent,\n MJFilterPopoverComponent,\n MJFilterPanelComponent,\n MJFilterFieldComponent,\n MJPageSearchComponent,\n MJTabNavComponent,\n MJViewToggleComponent,\n MJRefreshButtonComponent,\n MJStatBadgeComponent,\n SharedGenericModule,\n CredentialsModule,\n CodeEditorModule,\n SharedPipesModule\n ],\n exports: [\n MCPDashboardComponent,\n MCPResourceComponent,\n MCPFilterPanelComponent,\n MCPServerDialogComponent,\n MCPConnectionDialogComponent,\n MCPTestToolDialogComponent,\n MCPLogDetailPanelComponent\n ]\n})\nexport class MCPModule { }\n"]}
@@ -15,9 +15,9 @@ import * as i2 from "@memberjunction/ng-ui-components";
15
15
  import * as i3 from "@memberjunction/ng-shared-generic";
16
16
  import * as i4 from "@angular/common";
17
17
  const _forTrack0 = ($index, $item) => $item.ID;
18
- function PermissionsAuditLogResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "div", 6);
20
- i0.ɵɵelement(1, "i", 22);
18
+ function PermissionsAuditLogResourceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "div", 1);
20
+ i0.ɵɵelement(1, "i", 17);
21
21
  i0.ɵɵelementStart(2, "span");
22
22
  i0.ɵɵtext(3);
23
23
  i0.ɵɵelementEnd()();
@@ -26,8 +26,8 @@ function PermissionsAuditLogResourceComponent_Conditional_11_Template(rf, ctx) {
26
26
  i0.ɵɵadvance(3);
27
27
  i0.ɵɵtextInterpolate(ctx_r0.ErrorMessage);
28
28
  } }
29
- function PermissionsAuditLogResourceComponent_For_19_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelementStart(0, "option", 10);
29
+ function PermissionsAuditLogResourceComponent_For_11_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelementStart(0, "option", 5);
31
31
  i0.ɵɵtext(1);
32
32
  i0.ɵɵelementEnd();
33
33
  } if (rf & 2) {
@@ -36,8 +36,8 @@ function PermissionsAuditLogResourceComponent_For_19_Template(rf, ctx) { if (rf
36
36
  i0.ɵɵadvance();
37
37
  i0.ɵɵtextInterpolate(d_r2.Name);
38
38
  } }
39
- function PermissionsAuditLogResourceComponent_For_26_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementStart(0, "option", 10);
39
+ function PermissionsAuditLogResourceComponent_For_18_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "option", 5);
41
41
  i0.ɵɵtext(1);
42
42
  i0.ɵɵelementEnd();
43
43
  } if (rf & 2) {
@@ -46,37 +46,37 @@ function PermissionsAuditLogResourceComponent_For_26_Template(rf, ctx) { if (rf
46
46
  i0.ɵɵadvance();
47
47
  i0.ɵɵtextInterpolate(user_r3.Name);
48
48
  } }
49
- function PermissionsAuditLogResourceComponent_Conditional_34_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelement(0, "i", 23);
49
+ function PermissionsAuditLogResourceComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelement(0, "i", 18);
51
51
  i0.ɵɵtext(1, " Querying... ");
52
52
  } }
53
- function PermissionsAuditLogResourceComponent_Conditional_35_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelement(0, "i", 24);
53
+ function PermissionsAuditLogResourceComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵelement(0, "i", 19);
55
55
  i0.ɵɵtext(1, " Query ");
56
56
  } }
57
- function PermissionsAuditLogResourceComponent_Conditional_39_Template(rf, ctx) { if (rf & 1) {
58
- i0.ɵɵelement(0, "mj-loading", 20);
57
+ function PermissionsAuditLogResourceComponent_Conditional_31_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelement(0, "mj-loading", 15);
59
59
  } }
60
- function PermissionsAuditLogResourceComponent_Conditional_40_Template(rf, ctx) { if (rf & 1) {
61
- i0.ɵɵelementStart(0, "div", 21);
62
- i0.ɵɵelement(1, "i", 25);
60
+ function PermissionsAuditLogResourceComponent_Conditional_32_Template(rf, ctx) { if (rf & 1) {
61
+ i0.ɵɵelementStart(0, "div", 16);
62
+ i0.ɵɵelement(1, "i", 20);
63
63
  i0.ɵɵelementStart(2, "p");
64
64
  i0.ɵɵtext(3, "Set your filters and press Query to see audit entries.");
65
65
  i0.ɵɵelementEnd()();
66
66
  } }
67
- function PermissionsAuditLogResourceComponent_Conditional_41_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵelementStart(0, "div", 21);
69
- i0.ɵɵelement(1, "i", 26);
67
+ function PermissionsAuditLogResourceComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
68
+ i0.ɵɵelementStart(0, "div", 16);
69
+ i0.ɵɵelement(1, "i", 21);
70
70
  i0.ɵɵelementStart(2, "p");
71
71
  i0.ɵɵtext(3, "No audit entries match your filters.");
72
72
  i0.ɵɵelementEnd()();
73
73
  } }
74
- function PermissionsAuditLogResourceComponent_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelementStart(0, "span", 28);
74
+ function PermissionsAuditLogResourceComponent_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵelementStart(0, "span", 23);
76
76
  i0.ɵɵtext(1, "(capped at 500 \u2014 narrow the filters to see more)");
77
77
  i0.ɵɵelementEnd();
78
78
  } }
79
- function PermissionsAuditLogResourceComponent_Conditional_42_For_25_Conditional_19_Template(rf, ctx) { if (rf & 1) {
79
+ function PermissionsAuditLogResourceComponent_Conditional_34_For_25_Conditional_19_Template(rf, ctx) { if (rf & 1) {
80
80
  i0.ɵɵelementStart(0, "span");
81
81
  i0.ɵɵtext(1);
82
82
  i0.ɵɵelementEnd();
@@ -85,12 +85,12 @@ function PermissionsAuditLogResourceComponent_Conditional_42_For_25_Conditional_
85
85
  i0.ɵɵadvance();
86
86
  i0.ɵɵtextInterpolate(entry_r4.Summary);
87
87
  } }
88
- function PermissionsAuditLogResourceComponent_Conditional_42_For_25_Conditional_20_Template(rf, ctx) { if (rf & 1) {
89
- i0.ɵɵelementStart(0, "span", 28);
88
+ function PermissionsAuditLogResourceComponent_Conditional_34_For_25_Conditional_20_Template(rf, ctx) { if (rf & 1) {
89
+ i0.ɵɵelementStart(0, "span", 23);
90
90
  i0.ɵɵtext(1, "\u2014");
91
91
  i0.ɵɵelementEnd();
92
92
  } }
93
- function PermissionsAuditLogResourceComponent_Conditional_42_For_25_Template(rf, ctx) { if (rf & 1) {
93
+ function PermissionsAuditLogResourceComponent_Conditional_34_For_25_Template(rf, ctx) { if (rf & 1) {
94
94
  i0.ɵɵelementStart(0, "tr")(1, "td");
95
95
  i0.ɵɵtext(2);
96
96
  i0.ɵɵpipe(3, "date");
@@ -98,21 +98,21 @@ function PermissionsAuditLogResourceComponent_Conditional_42_For_25_Template(rf,
98
98
  i0.ɵɵelementStart(4, "td");
99
99
  i0.ɵɵtext(5);
100
100
  i0.ɵɵelementEnd();
101
- i0.ɵɵelementStart(6, "td")(7, "span", 31);
101
+ i0.ɵɵelementStart(6, "td")(7, "span", 26);
102
102
  i0.ɵɵelement(8, "i");
103
103
  i0.ɵɵtext(9);
104
104
  i0.ɵɵelementEnd()();
105
105
  i0.ɵɵelementStart(10, "td");
106
106
  i0.ɵɵtext(11);
107
107
  i0.ɵɵelementEnd();
108
- i0.ɵɵelementStart(12, "td")(13, "span", 28);
108
+ i0.ɵɵelementStart(12, "td")(13, "span", 23);
109
109
  i0.ɵɵtext(14);
110
110
  i0.ɵɵelementEnd()();
111
- i0.ɵɵelementStart(15, "td", 32)(16, "span", 33);
111
+ i0.ɵɵelementStart(15, "td", 27)(16, "span", 28);
112
112
  i0.ɵɵtext(17);
113
113
  i0.ɵɵelementEnd()();
114
114
  i0.ɵɵelementStart(18, "td");
115
- i0.ɵɵconditionalCreate(19, PermissionsAuditLogResourceComponent_Conditional_42_For_25_Conditional_19_Template, 2, 1, "span")(20, PermissionsAuditLogResourceComponent_Conditional_42_For_25_Conditional_20_Template, 2, 0, "span", 28);
115
+ i0.ɵɵconditionalCreate(19, PermissionsAuditLogResourceComponent_Conditional_34_For_25_Conditional_19_Template, 2, 1, "span")(20, PermissionsAuditLogResourceComponent_Conditional_34_For_25_Conditional_20_Template, 2, 0, "span", 23);
116
116
  i0.ɵɵelementEnd()();
117
117
  } if (rf & 2) {
118
118
  const entry_r4 = ctx.$implicit;
@@ -134,14 +134,14 @@ function PermissionsAuditLogResourceComponent_Conditional_42_For_25_Template(rf,
134
134
  i0.ɵɵadvance(2);
135
135
  i0.ɵɵconditional(entry_r4.Summary ? 19 : 20);
136
136
  } }
137
- function PermissionsAuditLogResourceComponent_Conditional_42_Template(rf, ctx) { if (rf & 1) {
138
- i0.ɵɵelementStart(0, "div", 27)(1, "strong");
137
+ function PermissionsAuditLogResourceComponent_Conditional_34_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "div", 22)(1, "strong");
139
139
  i0.ɵɵtext(2);
140
140
  i0.ɵɵelementEnd();
141
141
  i0.ɵɵtext(3);
142
- i0.ɵɵconditionalCreate(4, PermissionsAuditLogResourceComponent_Conditional_42_Conditional_4_Template, 2, 0, "span", 28);
142
+ i0.ɵɵconditionalCreate(4, PermissionsAuditLogResourceComponent_Conditional_34_Conditional_4_Template, 2, 0, "span", 23);
143
143
  i0.ɵɵelementEnd();
144
- i0.ɵɵelementStart(5, "div", 29)(6, "table", 30)(7, "thead")(8, "tr")(9, "th");
144
+ i0.ɵɵelementStart(5, "div", 24)(6, "table", 25)(7, "thead")(8, "tr")(9, "th");
145
145
  i0.ɵɵtext(10, "When");
146
146
  i0.ɵɵelementEnd();
147
147
  i0.ɵɵelementStart(11, "th");
@@ -163,7 +163,7 @@ function PermissionsAuditLogResourceComponent_Conditional_42_Template(rf, ctx) {
163
163
  i0.ɵɵtext(22, "Summary");
164
164
  i0.ɵɵelementEnd()()();
165
165
  i0.ɵɵelementStart(23, "tbody");
166
- i0.ɵɵrepeaterCreate(24, PermissionsAuditLogResourceComponent_Conditional_42_For_25_Template, 21, 12, "tr", null, i0.ɵɵcomponentInstance().TrackByAuditEntry, true);
166
+ i0.ɵɵrepeaterCreate(24, PermissionsAuditLogResourceComponent_Conditional_34_For_25_Template, 21, 12, "tr", null, i0.ɵɵcomponentInstance().TrackByAuditEntry, true);
167
167
  i0.ɵɵelementEnd()()();
168
168
  } if (rf & 2) {
169
169
  const ctx_r0 = i0.ɵɵnextContext();
@@ -274,66 +274,57 @@ let PermissionsAuditLogResourceComponent = class PermissionsAuditLogResourceComp
274
274
  }
275
275
  }
276
276
  static ɵfac = function PermissionsAuditLogResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PermissionsAuditLogResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
277
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PermissionsAuditLogResourceComponent, selectors: [["mj-permissions-audit-log-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 43, vars: 15, consts: [[1, "permissions-container"], [1, "header"], [1, "header-left"], [1, "fa-solid", "fa-clock-rotate-left", "header-icon"], [1, "header-title"], [1, "description"], [1, "message", "error-message"], [1, "selector-row", "wrap"], ["for", "audit-domain-select", 1, "selector-label"], ["id", "audit-domain-select", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["for", "audit-user-select", 1, "selector-label"], ["id", "audit-user-select", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["for", "audit-start-date", 1, "selector-label"], ["id", "audit-start-date", "type", "date", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["for", "audit-end-date", 1, "selector-label"], ["id", "audit-end-date", "type", "date", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], ["text", "Loading audit entries...", "size", "medium"], [1, "empty-state"], [1, "fa-solid", "fa-circle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "fa-solid", "fa-folder-open"], [1, "total-summary"], [1, "muted"], [1, "domain-body"], [1, "perms-table"], [1, "action-chip"], [1, "resource-cell"], [1, "resource-id"]], template: function PermissionsAuditLogResourceComponent_Template(rf, ctx) { if (rf & 1) {
278
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
279
- i0.ɵɵelement(3, "i", 3);
280
- i0.ɵɵelementStart(4, "h2", 4);
281
- i0.ɵɵtext(5, "Audit Log");
282
- i0.ɵɵelementEnd()()();
283
- i0.ɵɵelementStart(6, "p", 5);
284
- i0.ɵɵtext(7, " Chronological log of Create, Update, and Delete events against any permission record across every registered domain. Filter by domain, user, or date range. Data comes from ");
285
- i0.ɵɵelementStart(8, "code");
286
- i0.ɵɵtext(9, "MJ: Record Changes");
287
- i0.ɵɵelementEnd();
288
- i0.ɵɵtext(10, "; domains whose entities don't track changes won't appear here. ");
289
- i0.ɵɵelementEnd();
290
- i0.ɵɵconditionalCreate(11, PermissionsAuditLogResourceComponent_Conditional_11_Template, 4, 1, "div", 6);
291
- i0.ɵɵelementStart(12, "div", 7)(13, "label", 8);
292
- i0.ɵɵtext(14, "Domain:");
277
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PermissionsAuditLogResourceComponent, selectors: [["mj-permissions-audit-log-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 35, vars: 15, consts: [["Title", "Audit Log", "Icon", "fa-solid fa-clock-rotate-left", "Subtitle", "Chronological log of Create / Update / Delete events across every permission domain"], [1, "message", "error-message"], [1, "selector-row", "wrap"], ["for", "audit-domain-select", 1, "selector-label"], ["id", "audit-domain-select", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["for", "audit-user-select", 1, "selector-label"], ["id", "audit-user-select", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["for", "audit-start-date", 1, "selector-label"], ["id", "audit-start-date", "type", "date", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["for", "audit-end-date", 1, "selector-label"], ["id", "audit-end-date", "type", "date", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate-left"], ["text", "Loading audit entries...", "size", "medium"], [1, "empty-state"], [1, "fa-solid", "fa-circle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "fa-solid", "fa-folder-open"], [1, "total-summary"], [1, "muted"], [1, "domain-body"], [1, "perms-table"], [1, "action-chip"], [1, "resource-cell"], [1, "resource-id"]], template: function PermissionsAuditLogResourceComponent_Template(rf, ctx) { if (rf & 1) {
278
+ i0.ɵɵelementStart(0, "mj-page-layout");
279
+ i0.ɵɵelement(1, "mj-page-header", 0);
280
+ i0.ɵɵelementStart(2, "mj-page-body");
281
+ i0.ɵɵconditionalCreate(3, PermissionsAuditLogResourceComponent_Conditional_3_Template, 4, 1, "div", 1);
282
+ i0.ɵɵelementStart(4, "div", 2)(5, "label", 3);
283
+ i0.ɵɵtext(6, "Domain:");
293
284
  i0.ɵɵelementEnd();
294
- i0.ɵɵelementStart(15, "select", 9);
295
- i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_select_ngModelChange_15_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.DomainFilter, $event) || (ctx.DomainFilter = $event); return $event; });
296
- i0.ɵɵelementStart(16, "option", 10);
297
- i0.ɵɵtext(17, "All domains");
285
+ i0.ɵɵelementStart(7, "select", 4);
286
+ i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_select_ngModelChange_7_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.DomainFilter, $event) || (ctx.DomainFilter = $event); return $event; });
287
+ i0.ɵɵelementStart(8, "option", 5);
288
+ i0.ɵɵtext(9, "All domains");
298
289
  i0.ɵɵelementEnd();
299
- i0.ɵɵrepeaterCreate(18, PermissionsAuditLogResourceComponent_For_19_Template, 2, 2, "option", 10, _forTrack0);
290
+ i0.ɵɵrepeaterCreate(10, PermissionsAuditLogResourceComponent_For_11_Template, 2, 2, "option", 5, _forTrack0);
300
291
  i0.ɵɵelementEnd();
301
- i0.ɵɵelementStart(20, "label", 11);
302
- i0.ɵɵtext(21, "Changed by:");
292
+ i0.ɵɵelementStart(12, "label", 6);
293
+ i0.ɵɵtext(13, "Changed by:");
303
294
  i0.ɵɵelementEnd();
304
- i0.ɵɵelementStart(22, "select", 12);
305
- i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_select_ngModelChange_22_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.UserFilter, $event) || (ctx.UserFilter = $event); return $event; });
306
- i0.ɵɵelementStart(23, "option", 10);
307
- i0.ɵɵtext(24, "Any user");
295
+ i0.ɵɵelementStart(14, "select", 7);
296
+ i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_select_ngModelChange_14_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.UserFilter, $event) || (ctx.UserFilter = $event); return $event; });
297
+ i0.ɵɵelementStart(15, "option", 5);
298
+ i0.ɵɵtext(16, "Any user");
308
299
  i0.ɵɵelementEnd();
309
- i0.ɵɵrepeaterCreate(25, PermissionsAuditLogResourceComponent_For_26_Template, 2, 2, "option", 10, _forTrack0);
300
+ i0.ɵɵrepeaterCreate(17, PermissionsAuditLogResourceComponent_For_18_Template, 2, 2, "option", 5, _forTrack0);
310
301
  i0.ɵɵelementEnd();
311
- i0.ɵɵelementStart(27, "label", 13);
312
- i0.ɵɵtext(28, "From:");
302
+ i0.ɵɵelementStart(19, "label", 8);
303
+ i0.ɵɵtext(20, "From:");
313
304
  i0.ɵɵelementEnd();
314
- i0.ɵɵelementStart(29, "input", 14);
315
- i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_input_ngModelChange_29_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.StartDate, $event) || (ctx.StartDate = $event); return $event; });
305
+ i0.ɵɵelementStart(21, "input", 9);
306
+ i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_input_ngModelChange_21_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.StartDate, $event) || (ctx.StartDate = $event); return $event; });
316
307
  i0.ɵɵelementEnd();
317
- i0.ɵɵelementStart(30, "label", 15);
318
- i0.ɵɵtext(31, "To:");
308
+ i0.ɵɵelementStart(22, "label", 10);
309
+ i0.ɵɵtext(23, "To:");
319
310
  i0.ɵɵelementEnd();
320
- i0.ɵɵelementStart(32, "input", 16);
321
- i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_input_ngModelChange_32_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.EndDate, $event) || (ctx.EndDate = $event); return $event; });
311
+ i0.ɵɵelementStart(24, "input", 11);
312
+ i0.ɵɵtwoWayListener("ngModelChange", function PermissionsAuditLogResourceComponent_Template_input_ngModelChange_24_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.EndDate, $event) || (ctx.EndDate = $event); return $event; });
322
313
  i0.ɵɵelementEnd();
323
- i0.ɵɵelementStart(33, "button", 17);
324
- i0.ɵɵlistener("click", function PermissionsAuditLogResourceComponent_Template_button_click_33_listener() { return ctx.OnRunQuery(); });
325
- i0.ɵɵconditionalCreate(34, PermissionsAuditLogResourceComponent_Conditional_34_Template, 2, 0)(35, PermissionsAuditLogResourceComponent_Conditional_35_Template, 2, 0);
314
+ i0.ɵɵelementStart(25, "button", 12);
315
+ i0.ɵɵlistener("click", function PermissionsAuditLogResourceComponent_Template_button_click_25_listener() { return ctx.OnRunQuery(); });
316
+ i0.ɵɵconditionalCreate(26, PermissionsAuditLogResourceComponent_Conditional_26_Template, 2, 0)(27, PermissionsAuditLogResourceComponent_Conditional_27_Template, 2, 0);
326
317
  i0.ɵɵelementEnd();
327
- i0.ɵɵelementStart(36, "button", 18);
328
- i0.ɵɵlistener("click", function PermissionsAuditLogResourceComponent_Template_button_click_36_listener() { return ctx.OnResetFilters(); });
329
- i0.ɵɵelement(37, "i", 19);
330
- i0.ɵɵtext(38, " Reset ");
318
+ i0.ɵɵelementStart(28, "button", 13);
319
+ i0.ɵɵlistener("click", function PermissionsAuditLogResourceComponent_Template_button_click_28_listener() { return ctx.OnResetFilters(); });
320
+ i0.ɵɵelement(29, "i", 14);
321
+ i0.ɵɵtext(30, " Reset ");
322
+ i0.ɵɵelementEnd()();
323
+ i0.ɵɵconditionalCreate(31, PermissionsAuditLogResourceComponent_Conditional_31_Template, 1, 0, "mj-loading", 15)(32, PermissionsAuditLogResourceComponent_Conditional_32_Template, 4, 0, "div", 16)(33, PermissionsAuditLogResourceComponent_Conditional_33_Template, 4, 0, "div", 16)(34, PermissionsAuditLogResourceComponent_Conditional_34_Template, 26, 3);
331
324
  i0.ɵɵelementEnd()();
332
- i0.ɵɵconditionalCreate(39, PermissionsAuditLogResourceComponent_Conditional_39_Template, 1, 0, "mj-loading", 20)(40, PermissionsAuditLogResourceComponent_Conditional_40_Template, 4, 0, "div", 21)(41, PermissionsAuditLogResourceComponent_Conditional_41_Template, 4, 0, "div", 21)(42, PermissionsAuditLogResourceComponent_Conditional_42_Template, 26, 3);
333
- i0.ɵɵelementEnd();
334
325
  } if (rf & 2) {
335
- i0.ɵɵadvance(11);
336
- i0.ɵɵconditional(ctx.ErrorMessage ? 11 : -1);
326
+ i0.ɵɵadvance(3);
327
+ i0.ɵɵconditional(ctx.ErrorMessage ? 3 : -1);
337
328
  i0.ɵɵadvance(4);
338
329
  i0.ɵɵtwoWayProperty("ngModel", ctx.DomainFilter);
339
330
  i0.ɵɵproperty("disabled", ctx.IsLoading);
@@ -357,12 +348,12 @@ let PermissionsAuditLogResourceComponent = class PermissionsAuditLogResourceComp
357
348
  i0.ɵɵadvance();
358
349
  i0.ɵɵproperty("disabled", ctx.IsLoading);
359
350
  i0.ɵɵadvance();
360
- i0.ɵɵconditional(ctx.IsLoading ? 34 : 35);
351
+ i0.ɵɵconditional(ctx.IsLoading ? 26 : 27);
361
352
  i0.ɵɵadvance(2);
362
353
  i0.ɵɵproperty("disabled", ctx.IsLoading);
363
354
  i0.ɵɵadvance(3);
364
- i0.ɵɵconditional(ctx.IsLoading ? 39 : !ctx.HasRunQuery ? 40 : ctx.Entries.length === 0 ? 41 : 42);
365
- } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i3.LoadingComponent, i4.DatePipe], styles: [".permissions-container[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1080px;\n margin: 0 auto;\n height: 100%;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-icon[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-brand-primary);\n}\n\n.header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 14px;\n margin-bottom: 20px;\n line-height: 1.5;\n}\n\n\n\n.tab-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.tab[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 10px 16px;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font: inherit;\n font-weight: 500;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.tab-active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.selector-row.wrap[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n\n.mj-input.mono[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n min-width: 300px;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.message[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border-radius: 6px;\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n}\n\n\n\n.user-selector-row[_ngcontent-%COMP%], \n.selector-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.user-selector-label[_ngcontent-%COMP%], \n.selector-label[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n#user-select[_ngcontent-%COMP%], \n#domain-select[_ngcontent-%COMP%] {\n min-width: 320px;\n flex: 0 1 auto;\n}\n\n.roles-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n.total-summary[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.total-summary[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n\n\n.domain-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.domain-group[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.domain-header[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: none;\n cursor: pointer;\n text-align: left;\n color: var(--mj-text-primary);\n font: inherit;\n}\n\n.domain-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.domain-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.domain-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 16px;\n}\n\n.domain-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n}\n\n.domain-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 20px;\n padding: 0 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 10px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n transition: transform 0.15s ease;\n color: var(--mj-text-muted);\n}\n\n.toggle-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.domain-body[_ngcontent-%COMP%] {\n padding: 0;\n background: var(--mj-bg-surface);\n overflow-x: auto;\n}\n\n\n\n.perms-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.perms-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.perms-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 8px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.perms-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 600;\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n}\n\n.perms-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.perms-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.resource-cell[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.resource-name[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.resource-id[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-family: var(--mj-font-mono, monospace);\n}\n\n\n\n.action-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.action-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n}\n\n\n\n.effect-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.effect-allow[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.effect-deny[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}"] });
355
+ i0.ɵɵconditional(ctx.IsLoading ? 31 : !ctx.HasRunQuery ? 32 : ctx.Entries.length === 0 ? 33 : 34);
356
+ } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageHeaderComponent, i2.MJPageLayoutComponent, i2.MJPageBodyComponent, i3.LoadingComponent, i4.DatePipe], styles: ["\n\n.tab-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.tab[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 10px 16px;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font: inherit;\n font-weight: 500;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.tab-active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.selector-row.wrap[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n}\n\n.mj-input.mono[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n min-width: 300px;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.message[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border-radius: 6px;\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n}\n\n\n\n.user-selector-row[_ngcontent-%COMP%], \n.selector-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.user-selector-label[_ngcontent-%COMP%], \n.selector-label[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n#user-select[_ngcontent-%COMP%], \n#domain-select[_ngcontent-%COMP%] {\n min-width: 320px;\n flex: 0 1 auto;\n}\n\n.roles-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n.total-summary[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.total-summary[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n\n\n.domain-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.domain-group[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.domain-header[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: none;\n cursor: pointer;\n text-align: left;\n color: var(--mj-text-primary);\n font: inherit;\n}\n\n.domain-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.domain-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.domain-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 16px;\n}\n\n.domain-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n}\n\n.domain-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 20px;\n padding: 0 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 10px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n transition: transform 0.15s ease;\n color: var(--mj-text-muted);\n}\n\n.toggle-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.domain-body[_ngcontent-%COMP%] {\n padding: 0;\n background: var(--mj-bg-surface);\n overflow-x: auto;\n}\n\n\n\n.perms-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.perms-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.perms-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 8px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.perms-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 600;\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n}\n\n.perms-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.perms-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.resource-cell[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.resource-name[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.resource-id[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-family: var(--mj-font-mono, monospace);\n}\n\n\n\n.action-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.action-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n}\n\n\n\n.effect-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.effect-allow[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.effect-deny[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}"] });
366
357
  };
367
358
  PermissionsAuditLogResourceComponent = __decorate([
368
359
  RegisterClass(BaseResourceComponent, 'PermissionsAuditLogResource')
@@ -370,7 +361,7 @@ PermissionsAuditLogResourceComponent = __decorate([
370
361
  export { PermissionsAuditLogResourceComponent };
371
362
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PermissionsAuditLogResourceComponent, [{
372
363
  type: Component,
373
- args: [{ standalone: false, selector: 'mj-permissions-audit-log-resource', template: "<div class=\"permissions-container\">\n <div class=\"header\">\n <div class=\"header-left\">\n <i class=\"fa-solid fa-clock-rotate-left header-icon\"></i>\n <h2 class=\"header-title\">Audit Log</h2>\n </div>\n </div>\n\n <p class=\"description\">\n Chronological log of Create, Update, and Delete events against any permission\n record across every registered domain. Filter by domain, user, or date range.\n Data comes from <code>MJ: Record Changes</code>; domains whose entities don't\n track changes won't appear here.\n </p>\n\n @if (ErrorMessage) {\n <div class=\"message error-message\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n <div class=\"selector-row wrap\">\n <label class=\"selector-label\" for=\"audit-domain-select\">Domain:</label>\n <select\n id=\"audit-domain-select\"\n class=\"mj-input\"\n [(ngModel)]=\"DomainFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">All domains</option>\n @for (d of Domains; track d.ID) {\n <option [ngValue]=\"d.Name\">{{ d.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-user-select\">Changed by:</label>\n <select\n id=\"audit-user-select\"\n class=\"mj-input\"\n [(ngModel)]=\"UserFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">Any user</option>\n @for (user of Users; track user.ID) {\n <option [ngValue]=\"user.ID\">{{ user.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-start-date\">From:</label>\n <input\n id=\"audit-start-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"StartDate\"\n [disabled]=\"IsLoading\"\n />\n\n <label class=\"selector-label\" for=\"audit-end-date\">To:</label>\n <input\n id=\"audit-end-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"EndDate\"\n [disabled]=\"IsLoading\"\n />\n\n <button mjButton variant=\"primary\" (click)=\"OnRunQuery()\" [disabled]=\"IsLoading\">\n @if (IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Querying...\n } @else {\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query\n }\n </button>\n\n <button mjButton variant=\"secondary\" (click)=\"OnResetFilters()\" [disabled]=\"IsLoading\">\n <i class=\"fa-solid fa-rotate-left\"></i> Reset\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading audit entries...\" size=\"medium\"></mj-loading>\n } @else if (!HasRunQuery) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <p>Set your filters and press Query to see audit entries.</p>\n </div>\n } @else if (Entries.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No audit entries match your filters.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ Entries.length }}</strong> entr{{ Entries.length === 1 ? 'y' : 'ies' }}\n @if (Entries.length === 500) {\n <span class=\"muted\">(capped at 500 \u2014 narrow the filters to see more)</span>\n }\n </div>\n\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>When</th>\n <th>Who</th>\n <th>Change</th>\n <th>Domain</th>\n <th>Entity</th>\n <th>Record</th>\n <th>Summary</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of Entries; track TrackByAuditEntry($index, entry)) {\n <tr>\n <td>{{ entry.ChangedAt | date:'medium' }}</td>\n <td>{{ entry.ChangedByUserName || entry.ChangedByUserID || 'System' }}</td>\n <td>\n <span class=\"action-chip\">\n <i [class]=\"ChangeIcon(entry.ChangeType)\"></i>\n {{ entry.ChangeType }}\n </span>\n </td>\n <td>{{ entry.DomainName }}</td>\n <td><span class=\"muted\">{{ entry.EntityName }}</span></td>\n <td class=\"resource-cell\">\n <span class=\"resource-id\">{{ entry.RecordID }}</span>\n </td>\n <td>\n @if (entry.Summary) {\n <span>{{ entry.Summary }}</span>\n } @else {\n <span class=\"muted\">\u2014</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</div>\n", styles: [".permissions-container {\n padding: 24px;\n max-width: 1080px;\n margin: 0 auto;\n height: 100%;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* Header */\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.header-icon {\n font-size: 24px;\n color: var(--mj-brand-primary);\n}\n\n.header-title {\n margin: 0;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.description {\n color: var(--mj-text-secondary);\n font-size: 14px;\n margin-bottom: 20px;\n line-height: 1.5;\n}\n\n/* Tab bar */\n.tab-bar {\n display: flex;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.tab {\n background: transparent;\n border: none;\n padding: 10px 16px;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font: inherit;\n font-weight: 500;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.tab:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.tab-active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.selector-row.wrap {\n flex-wrap: wrap;\n}\n\n.mj-input.mono {\n font-family: var(--mj-font-mono, monospace);\n min-width: 300px;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n/* Messages */\n.message {\n padding: 10px 14px;\n border-radius: 6px;\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n}\n\n.error-message {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n}\n\n/* User selector (legacy name kept for User Access tab, plus generic selector-row for Resource tab) */\n.user-selector-row,\n.selector-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.user-selector-label,\n.selector-label {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n#user-select,\n#domain-select {\n min-width: 320px;\n flex: 0 1 auto;\n}\n\n.roles-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n.total-summary {\n color: var(--mj-text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.total-summary strong {\n color: var(--mj-text-primary);\n}\n\n/* Domain groups */\n.domain-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.domain-group {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.domain-header {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: none;\n cursor: pointer;\n text-align: left;\n color: var(--mj-text-primary);\n font: inherit;\n}\n\n.domain-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.domain-header-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.domain-icon {\n color: var(--mj-brand-primary);\n font-size: 16px;\n}\n\n.domain-name {\n font-weight: 600;\n font-size: 15px;\n}\n\n.domain-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 20px;\n padding: 0 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 10px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.toggle-icon {\n transition: transform 0.15s ease;\n color: var(--mj-text-muted);\n}\n\n.toggle-icon.rotated {\n transform: rotate(180deg);\n}\n\n.domain-body {\n padding: 0;\n background: var(--mj-bg-surface);\n overflow-x: auto;\n}\n\n/* Permissions table */\n.perms-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.perms-table th,\n.perms-table td {\n padding: 8px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.perms-table th {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 600;\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n}\n\n.perms-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.perms-table tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.resource-cell {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.resource-name {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.resource-id {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-family: var(--mj-font-mono, monospace);\n}\n\n/* Action chips */\n.action-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.action-chip {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n}\n\n/* Effect badge */\n.effect-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.effect-allow {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.effect-deny {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n"] }]
364
+ args: [{ standalone: false, selector: 'mj-permissions-audit-log-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Audit Log\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Chronological log of Create / Update / Delete events across every permission domain\">\n </mj-page-header>\n\n <mj-page-body>\n\n @if (ErrorMessage) {\n <div class=\"message error-message\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n <div class=\"selector-row wrap\">\n <label class=\"selector-label\" for=\"audit-domain-select\">Domain:</label>\n <select\n id=\"audit-domain-select\"\n class=\"mj-input\"\n [(ngModel)]=\"DomainFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">All domains</option>\n @for (d of Domains; track d.ID) {\n <option [ngValue]=\"d.Name\">{{ d.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-user-select\">Changed by:</label>\n <select\n id=\"audit-user-select\"\n class=\"mj-input\"\n [(ngModel)]=\"UserFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">Any user</option>\n @for (user of Users; track user.ID) {\n <option [ngValue]=\"user.ID\">{{ user.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-start-date\">From:</label>\n <input\n id=\"audit-start-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"StartDate\"\n [disabled]=\"IsLoading\"\n />\n\n <label class=\"selector-label\" for=\"audit-end-date\">To:</label>\n <input\n id=\"audit-end-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"EndDate\"\n [disabled]=\"IsLoading\"\n />\n\n <button mjButton variant=\"primary\" (click)=\"OnRunQuery()\" [disabled]=\"IsLoading\">\n @if (IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Querying...\n } @else {\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query\n }\n </button>\n\n <button mjButton variant=\"secondary\" (click)=\"OnResetFilters()\" [disabled]=\"IsLoading\">\n <i class=\"fa-solid fa-rotate-left\"></i> Reset\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading audit entries...\" size=\"medium\"></mj-loading>\n } @else if (!HasRunQuery) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <p>Set your filters and press Query to see audit entries.</p>\n </div>\n } @else if (Entries.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No audit entries match your filters.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ Entries.length }}</strong> entr{{ Entries.length === 1 ? 'y' : 'ies' }}\n @if (Entries.length === 500) {\n <span class=\"muted\">(capped at 500 \u2014 narrow the filters to see more)</span>\n }\n </div>\n\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>When</th>\n <th>Who</th>\n <th>Change</th>\n <th>Domain</th>\n <th>Entity</th>\n <th>Record</th>\n <th>Summary</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of Entries; track TrackByAuditEntry($index, entry)) {\n <tr>\n <td>{{ entry.ChangedAt | date:'medium' }}</td>\n <td>{{ entry.ChangedByUserName || entry.ChangedByUserID || 'System' }}</td>\n <td>\n <span class=\"action-chip\">\n <i [class]=\"ChangeIcon(entry.ChangeType)\"></i>\n {{ entry.ChangeType }}\n </span>\n </td>\n <td>{{ entry.DomainName }}</td>\n <td><span class=\"muted\">{{ entry.EntityName }}</span></td>\n <td class=\"resource-cell\">\n <span class=\"resource-id\">{{ entry.RecordID }}</span>\n </td>\n <td>\n @if (entry.Summary) {\n <span>{{ entry.Summary }}</span>\n } @else {\n <span class=\"muted\">\u2014</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Tab bar */\n.tab-bar {\n display: flex;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.tab {\n background: transparent;\n border: none;\n padding: 10px 16px;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font: inherit;\n font-weight: 500;\n border-bottom: 2px solid transparent;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.tab:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.tab-active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.selector-row.wrap {\n flex-wrap: wrap;\n}\n\n.mj-input.mono {\n font-family: var(--mj-font-mono, monospace);\n min-width: 300px;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n/* Messages */\n.message {\n padding: 10px 14px;\n border-radius: 6px;\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n}\n\n.error-message {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n}\n\n/* User selector (legacy name kept for User Access tab, plus generic selector-row for Resource tab) */\n.user-selector-row,\n.selector-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.user-selector-label,\n.selector-label {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n#user-select,\n#domain-select {\n min-width: 320px;\n flex: 0 1 auto;\n}\n\n.roles-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n display: block;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n.total-summary {\n color: var(--mj-text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.total-summary strong {\n color: var(--mj-text-primary);\n}\n\n/* Domain groups */\n.domain-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.domain-group {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.domain-header {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: none;\n cursor: pointer;\n text-align: left;\n color: var(--mj-text-primary);\n font: inherit;\n}\n\n.domain-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.domain-header-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.domain-icon {\n color: var(--mj-brand-primary);\n font-size: 16px;\n}\n\n.domain-name {\n font-weight: 600;\n font-size: 15px;\n}\n\n.domain-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 20px;\n padding: 0 8px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 10px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.toggle-icon {\n transition: transform 0.15s ease;\n color: var(--mj-text-muted);\n}\n\n.toggle-icon.rotated {\n transform: rotate(180deg);\n}\n\n.domain-body {\n padding: 0;\n background: var(--mj-bg-surface);\n overflow-x: auto;\n}\n\n/* Permissions table */\n.perms-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.perms-table th,\n.perms-table td {\n padding: 8px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: top;\n}\n\n.perms-table th {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: 600;\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n}\n\n.perms-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.perms-table tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.resource-cell {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.resource-name {\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.resource-id {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-family: var(--mj-font-mono, monospace);\n}\n\n/* Action chips */\n.action-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.action-chip {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n}\n\n/* Effect badge */\n.effect-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.effect-allow {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.effect-deny {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n"] }]
374
365
  }], () => [{ type: i0.ChangeDetectorRef }], null); })();
375
366
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PermissionsAuditLogResourceComponent, { className: "PermissionsAuditLogResourceComponent", filePath: "src/Permissions/audit-log-resource.component.ts", lineNumber: 21 }); })();
376
367
  /** Tree-shaking prevention — referenced from `public-api.ts`. */
@@ -1 +1 @@
1
- {"version":3,"file":"audit-log-resource.component.js","sourceRoot":"","sources":["../../src/Permissions/audit-log-resource.component.ts","../../src/Permissions/audit-log-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { PermissionAuditEntry } from '@memberjunction/core';\nimport { MJPermissionDomainEntity, PermissionEngine, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\nimport { PermissionsUserOption, loadPermissionsUsers } from './permissions-shared';\n\n/**\n * Audit Log resource — one of three tabs in the Permissions admin application.\n * Chronological log of Create / Update / Delete events against any permission\n * record across every registered domain. Powered by `PermissionEngine.GetAuditTimeline`.\n */\n@RegisterClass(BaseResourceComponent, 'PermissionsAuditLogResource')\n@Component({\n standalone: false,\n selector: 'mj-permissions-audit-log-resource',\n templateUrl: './audit-log-resource.component.html',\n styleUrls: ['./permissions-resource.component.css'],\n})\nexport class PermissionsAuditLogResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n Domains: MJPermissionDomainEntity[] = [];\n Users: PermissionsUserOption[] = [];\n\n DomainFilter: string | '' = '';\n UserFilter: string | '' = '';\n StartDate: string = '';\n EndDate: string = '';\n Entries: PermissionAuditEntry[] = [];\n IsLoading = false;\n HasRunQuery = false;\n ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n override async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Audit Log';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.Domains = PermissionEngine.Instance.Domains;\n try {\n this.Users = await loadPermissionsUsers();\n } catch (e) {\n this.ErrorMessage = `Error loading users: ${e instanceof Error ? e.message : String(e)}`;\n }\n this.NotifyLoadComplete();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async OnRunQuery(): Promise<void> {\n this.ErrorMessage = null;\n this.IsLoading = true;\n this.Entries = [];\n this.cdr.detectChanges();\n\n try {\n const filter: Parameters<typeof PermissionEngine.Instance.GetAuditTimeline>[0] = {\n MaxRows: 500,\n };\n if (this.DomainFilter) filter.DomainName = this.DomainFilter;\n if (this.UserFilter) filter.ChangedByUserID = this.UserFilter;\n if (this.StartDate) filter.StartDate = new Date(this.StartDate);\n if (this.EndDate) {\n // End-of-day semantics — include everything on the selected day\n const d = new Date(this.EndDate);\n d.setHours(23, 59, 59, 999);\n filter.EndDate = d;\n }\n\n this.Entries = await PermissionEngine.Instance.GetAuditTimeline(filter);\n this.HasRunQuery = true;\n } catch (e) {\n this.ErrorMessage = `Error loading audit timeline: ${e instanceof Error ? e.message : String(e)}`;\n }\n\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n\n OnResetFilters(): void {\n this.DomainFilter = '';\n this.UserFilter = '';\n this.StartDate = '';\n this.EndDate = '';\n this.Entries = [];\n this.HasRunQuery = false;\n this.cdr.detectChanges();\n }\n\n TrackByAuditEntry(_index: number, entry: PermissionAuditEntry): string {\n return entry.SourceRecordChangeID;\n }\n\n ChangeIcon(type: PermissionAuditEntry['ChangeType']): string {\n switch (type) {\n case 'Create':\n return 'fa-solid fa-plus';\n case 'Update':\n return 'fa-solid fa-pen';\n case 'Delete':\n return 'fa-solid fa-trash';\n case 'Snapshot':\n return 'fa-solid fa-camera';\n default:\n return 'fa-solid fa-circle';\n }\n }\n}\n\n/** Tree-shaking prevention — referenced from `public-api.ts`. */\nexport function LoadPermissionsAuditLogResource(): void {\n // intentionally empty\n}\n","<div class=\"permissions-container\">\n <div class=\"header\">\n <div class=\"header-left\">\n <i class=\"fa-solid fa-clock-rotate-left header-icon\"></i>\n <h2 class=\"header-title\">Audit Log</h2>\n </div>\n </div>\n\n <p class=\"description\">\n Chronological log of Create, Update, and Delete events against any permission\n record across every registered domain. Filter by domain, user, or date range.\n Data comes from <code>MJ: Record Changes</code>; domains whose entities don't\n track changes won't appear here.\n </p>\n\n @if (ErrorMessage) {\n <div class=\"message error-message\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n <div class=\"selector-row wrap\">\n <label class=\"selector-label\" for=\"audit-domain-select\">Domain:</label>\n <select\n id=\"audit-domain-select\"\n class=\"mj-input\"\n [(ngModel)]=\"DomainFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">All domains</option>\n @for (d of Domains; track d.ID) {\n <option [ngValue]=\"d.Name\">{{ d.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-user-select\">Changed by:</label>\n <select\n id=\"audit-user-select\"\n class=\"mj-input\"\n [(ngModel)]=\"UserFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">Any user</option>\n @for (user of Users; track user.ID) {\n <option [ngValue]=\"user.ID\">{{ user.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-start-date\">From:</label>\n <input\n id=\"audit-start-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"StartDate\"\n [disabled]=\"IsLoading\"\n />\n\n <label class=\"selector-label\" for=\"audit-end-date\">To:</label>\n <input\n id=\"audit-end-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"EndDate\"\n [disabled]=\"IsLoading\"\n />\n\n <button mjButton variant=\"primary\" (click)=\"OnRunQuery()\" [disabled]=\"IsLoading\">\n @if (IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Querying...\n } @else {\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query\n }\n </button>\n\n <button mjButton variant=\"secondary\" (click)=\"OnResetFilters()\" [disabled]=\"IsLoading\">\n <i class=\"fa-solid fa-rotate-left\"></i> Reset\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading audit entries...\" size=\"medium\"></mj-loading>\n } @else if (!HasRunQuery) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <p>Set your filters and press Query to see audit entries.</p>\n </div>\n } @else if (Entries.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No audit entries match your filters.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ Entries.length }}</strong> entr{{ Entries.length === 1 ? 'y' : 'ies' }}\n @if (Entries.length === 500) {\n <span class=\"muted\">(capped at 500 — narrow the filters to see more)</span>\n }\n </div>\n\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>When</th>\n <th>Who</th>\n <th>Change</th>\n <th>Domain</th>\n <th>Entity</th>\n <th>Record</th>\n <th>Summary</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of Entries; track TrackByAuditEntry($index, entry)) {\n <tr>\n <td>{{ entry.ChangedAt | date:'medium' }}</td>\n <td>{{ entry.ChangedByUserName || entry.ChangedByUserID || 'System' }}</td>\n <td>\n <span class=\"action-chip\">\n <i [class]=\"ChangeIcon(entry.ChangeType)\"></i>\n {{ entry.ChangeType }}\n </span>\n </td>\n <td>{{ entry.DomainName }}</td>\n <td><span class=\"muted\">{{ entry.EntityName }}</span></td>\n <td class=\"resource-cell\">\n <span class=\"resource-id\">{{ entry.RecordID }}</span>\n </td>\n <td>\n @if (entry.Summary) {\n <span>{{ entry.Summary }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"audit-log-resource.component.js","sourceRoot":"","sources":["../../src/Permissions/audit-log-resource.component.ts","../../src/Permissions/audit-log-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { PermissionAuditEntry } from '@memberjunction/core';\nimport { MJPermissionDomainEntity, PermissionEngine, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\nimport { PermissionsUserOption, loadPermissionsUsers } from './permissions-shared';\n\n/**\n * Audit Log resource — one of three tabs in the Permissions admin application.\n * Chronological log of Create / Update / Delete events against any permission\n * record across every registered domain. Powered by `PermissionEngine.GetAuditTimeline`.\n */\n@RegisterClass(BaseResourceComponent, 'PermissionsAuditLogResource')\n@Component({\n standalone: false,\n selector: 'mj-permissions-audit-log-resource',\n templateUrl: './audit-log-resource.component.html',\n styleUrls: ['./permissions-resource.component.css'],\n})\nexport class PermissionsAuditLogResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n Domains: MJPermissionDomainEntity[] = [];\n Users: PermissionsUserOption[] = [];\n\n DomainFilter: string | '' = '';\n UserFilter: string | '' = '';\n StartDate: string = '';\n EndDate: string = '';\n Entries: PermissionAuditEntry[] = [];\n IsLoading = false;\n HasRunQuery = false;\n ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n override async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Audit Log';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.Domains = PermissionEngine.Instance.Domains;\n try {\n this.Users = await loadPermissionsUsers();\n } catch (e) {\n this.ErrorMessage = `Error loading users: ${e instanceof Error ? e.message : String(e)}`;\n }\n this.NotifyLoadComplete();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async OnRunQuery(): Promise<void> {\n this.ErrorMessage = null;\n this.IsLoading = true;\n this.Entries = [];\n this.cdr.detectChanges();\n\n try {\n const filter: Parameters<typeof PermissionEngine.Instance.GetAuditTimeline>[0] = {\n MaxRows: 500,\n };\n if (this.DomainFilter) filter.DomainName = this.DomainFilter;\n if (this.UserFilter) filter.ChangedByUserID = this.UserFilter;\n if (this.StartDate) filter.StartDate = new Date(this.StartDate);\n if (this.EndDate) {\n // End-of-day semantics — include everything on the selected day\n const d = new Date(this.EndDate);\n d.setHours(23, 59, 59, 999);\n filter.EndDate = d;\n }\n\n this.Entries = await PermissionEngine.Instance.GetAuditTimeline(filter);\n this.HasRunQuery = true;\n } catch (e) {\n this.ErrorMessage = `Error loading audit timeline: ${e instanceof Error ? e.message : String(e)}`;\n }\n\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n\n OnResetFilters(): void {\n this.DomainFilter = '';\n this.UserFilter = '';\n this.StartDate = '';\n this.EndDate = '';\n this.Entries = [];\n this.HasRunQuery = false;\n this.cdr.detectChanges();\n }\n\n TrackByAuditEntry(_index: number, entry: PermissionAuditEntry): string {\n return entry.SourceRecordChangeID;\n }\n\n ChangeIcon(type: PermissionAuditEntry['ChangeType']): string {\n switch (type) {\n case 'Create':\n return 'fa-solid fa-plus';\n case 'Update':\n return 'fa-solid fa-pen';\n case 'Delete':\n return 'fa-solid fa-trash';\n case 'Snapshot':\n return 'fa-solid fa-camera';\n default:\n return 'fa-solid fa-circle';\n }\n }\n}\n\n/** Tree-shaking prevention — referenced from `public-api.ts`. */\nexport function LoadPermissionsAuditLogResource(): void {\n // intentionally empty\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Audit Log\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Chronological log of Create / Update / Delete events across every permission domain\">\n </mj-page-header>\n\n <mj-page-body>\n\n @if (ErrorMessage) {\n <div class=\"message error-message\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n <span>{{ ErrorMessage }}</span>\n </div>\n }\n\n <div class=\"selector-row wrap\">\n <label class=\"selector-label\" for=\"audit-domain-select\">Domain:</label>\n <select\n id=\"audit-domain-select\"\n class=\"mj-input\"\n [(ngModel)]=\"DomainFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">All domains</option>\n @for (d of Domains; track d.ID) {\n <option [ngValue]=\"d.Name\">{{ d.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-user-select\">Changed by:</label>\n <select\n id=\"audit-user-select\"\n class=\"mj-input\"\n [(ngModel)]=\"UserFilter\"\n [disabled]=\"IsLoading\"\n >\n <option [ngValue]=\"''\">Any user</option>\n @for (user of Users; track user.ID) {\n <option [ngValue]=\"user.ID\">{{ user.Name }}</option>\n }\n </select>\n\n <label class=\"selector-label\" for=\"audit-start-date\">From:</label>\n <input\n id=\"audit-start-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"StartDate\"\n [disabled]=\"IsLoading\"\n />\n\n <label class=\"selector-label\" for=\"audit-end-date\">To:</label>\n <input\n id=\"audit-end-date\"\n type=\"date\"\n class=\"mj-input\"\n [(ngModel)]=\"EndDate\"\n [disabled]=\"IsLoading\"\n />\n\n <button mjButton variant=\"primary\" (click)=\"OnRunQuery()\" [disabled]=\"IsLoading\">\n @if (IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Querying...\n } @else {\n <i class=\"fa-solid fa-magnifying-glass\"></i> Query\n }\n </button>\n\n <button mjButton variant=\"secondary\" (click)=\"OnResetFilters()\" [disabled]=\"IsLoading\">\n <i class=\"fa-solid fa-rotate-left\"></i> Reset\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Loading audit entries...\" size=\"medium\"></mj-loading>\n } @else if (!HasRunQuery) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <p>Set your filters and press Query to see audit entries.</p>\n </div>\n } @else if (Entries.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No audit entries match your filters.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ Entries.length }}</strong> entr{{ Entries.length === 1 ? 'y' : 'ies' }}\n @if (Entries.length === 500) {\n <span class=\"muted\">(capped at 500 — narrow the filters to see more)</span>\n }\n </div>\n\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>When</th>\n <th>Who</th>\n <th>Change</th>\n <th>Domain</th>\n <th>Entity</th>\n <th>Record</th>\n <th>Summary</th>\n </tr>\n </thead>\n <tbody>\n @for (entry of Entries; track TrackByAuditEntry($index, entry)) {\n <tr>\n <td>{{ entry.ChangedAt | date:'medium' }}</td>\n <td>{{ entry.ChangedByUserName || entry.ChangedByUserID || 'System' }}</td>\n <td>\n <span class=\"action-chip\">\n <i [class]=\"ChangeIcon(entry.ChangeType)\"></i>\n {{ entry.ChangeType }}\n </span>\n </td>\n <td>{{ entry.DomainName }}</td>\n <td><span class=\"muted\">{{ entry.EntityName }}</span></td>\n <td class=\"resource-cell\">\n <span class=\"resource-id\">{{ entry.RecordID }}</span>\n </td>\n <td>\n @if (entry.Summary) {\n <span>{{ entry.Summary }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </mj-page-body>\n</mj-page-layout>\n"]}