@memberjunction/ng-dashboards 5.30.1 → 5.31.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 (424) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  2. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.js +8 -6
  7. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
  9. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  10. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
  11. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  12. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
  13. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  14. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
  15. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  16. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
  17. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  18. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
  19. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  20. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
  21. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  22. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
  23. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  24. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
  25. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
  27. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  28. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
  29. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
  31. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  32. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
  33. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  34. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  36. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  37. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  39. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  41. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  42. package/dist/AI/components/execution-monitoring.component.js +4 -3
  43. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.js +2 -2
  45. package/dist/AI/components/models/model-management.component.js.map +1 -1
  46. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
  47. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  48. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
  49. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  51. package/dist/AI/components/prompts/prompt-management.component.js +2 -2
  52. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  53. package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
  54. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  55. package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
  56. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  57. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
  58. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  59. package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
  60. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
  61. package/dist/AI/components/tags/tags-resource.component.js +7487 -0
  62. package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/AI/index.d.ts +1 -0
  67. package/dist/AI/index.d.ts.map +1 -1
  68. package/dist/AI/index.js +5 -0
  69. package/dist/AI/index.js.map +1 -1
  70. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  71. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  72. package/dist/AI/services/ai-instrumentation.service.js +12 -4
  73. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  74. package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
  75. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  76. package/dist/APIKeys/api-applications-panel.component.js +5 -4
  77. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  78. package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
  79. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  80. package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
  81. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  82. package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
  83. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  84. package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
  85. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  86. package/dist/APIKeys/api-key-list.component.d.ts +2 -1
  87. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  88. package/dist/APIKeys/api-key-list.component.js +6 -5
  89. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  90. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  91. package/dist/APIKeys/api-keys-resource.component.js +4 -4
  92. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  93. package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
  94. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  95. package/dist/APIKeys/api-scopes-panel.component.js +8 -6
  96. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  97. package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
  98. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  99. package/dist/APIKeys/api-usage-panel.component.js +10 -8
  100. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  101. package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
  102. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  103. package/dist/Actions/components/actions-list-view.component.js +6 -5
  104. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  105. package/dist/Actions/components/actions-overview.component.js +2 -2
  106. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  107. package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
  108. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  109. package/dist/Actions/components/categories-list-view.component.js +6 -5
  110. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  111. package/dist/Actions/components/execution-monitoring.component.js +1 -1
  112. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  113. package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
  114. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  115. package/dist/Actions/components/explorer/action-card.component.js +6 -4
  116. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  117. package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
  118. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
  120. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
  122. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  123. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
  124. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
  126. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  127. package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
  128. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  129. package/dist/Communication/communication-logs-resource.component.js +1 -1
  130. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  131. package/dist/Communication/communication-monitor-resource.component.js +1 -1
  132. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  133. package/dist/Communication/communication-providers-resource.component.js +3 -3
  134. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  135. package/dist/Communication/communication-runs-resource.component.js +1 -1
  136. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  137. package/dist/Communication/communication-templates-resource.component.js +3 -3
  138. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  139. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  140. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  141. package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
  142. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  143. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
  144. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  145. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
  146. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  147. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
  148. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  149. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
  150. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  151. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
  152. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  153. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
  154. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  155. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
  156. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  157. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
  158. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
  160. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  161. package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
  162. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  163. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
  164. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  165. package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
  166. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  167. package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
  168. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  169. package/dist/ComponentStudio/services/component-version.service.js +16 -6
  170. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  171. package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
  172. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  173. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  174. package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
  175. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  176. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  177. package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
  178. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  179. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  180. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  181. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  182. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  183. package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
  184. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  185. package/dist/Credentials/credentials-dashboard.component.js +1 -1
  186. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  187. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
  188. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  189. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
  190. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
  191. package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
  192. package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
  193. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
  194. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  195. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
  196. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  197. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
  198. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  199. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
  200. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  201. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
  202. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  203. package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
  204. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  205. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  206. package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
  207. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  208. package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
  209. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  210. package/dist/DataExplorer/services/explorer-state.service.js +15 -5
  211. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  212. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
  213. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
  214. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
  215. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
  216. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
  217. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
  218. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
  219. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
  220. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
  221. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
  222. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
  223. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
  224. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
  225. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
  226. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
  227. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
  228. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
  229. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
  230. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
  231. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
  232. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
  233. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
  234. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
  235. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
  236. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
  237. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
  238. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
  239. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
  240. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
  241. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
  242. package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
  243. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
  244. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
  245. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
  246. package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
  247. package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
  248. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
  249. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
  250. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
  251. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
  252. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
  253. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
  254. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
  255. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
  256. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
  257. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
  258. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
  259. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
  260. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
  261. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
  262. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
  263. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
  264. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
  265. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
  266. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
  267. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
  268. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
  269. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
  270. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
  271. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
  272. package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
  273. package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
  274. package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
  275. package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
  276. package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
  277. package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
  278. package/dist/DatabaseDesigner/database-designer.types.js +26 -0
  279. package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
  280. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
  281. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
  282. package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
  283. package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
  284. package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
  285. package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
  286. package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
  287. package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
  288. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
  289. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
  290. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
  291. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
  292. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  293. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  294. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  295. package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
  296. package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
  297. package/dist/Home/action-pin-config-dialog.component.js +6 -4
  298. package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
  299. package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
  300. package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
  301. package/dist/Home/action-pin-runner-dialog.component.js +5 -4
  302. package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
  303. package/dist/Home/home-application.d.ts.map +1 -1
  304. package/dist/Home/home-application.js +10 -12
  305. package/dist/Home/home-application.js.map +1 -1
  306. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  307. package/dist/Home/home-dashboard.component.js +3 -3
  308. package/dist/Home/home-dashboard.component.js.map +1 -1
  309. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  310. package/dist/Integration/components/activity/activity.component.js +1 -0
  311. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  312. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  313. package/dist/Integration/components/connections/connections.component.js +11 -10
  314. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  315. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  316. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
  317. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  318. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  319. package/dist/Integration/components/overview/overview.component.js +1 -0
  320. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  321. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  322. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  323. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  324. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  325. package/dist/Integration/components/schedules/schedules.component.js +5 -4
  326. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  327. package/dist/Integration/services/integration-data.service.d.ts +5 -1
  328. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  329. package/dist/Integration/services/integration-data.service.js +27 -19
  330. package/dist/Integration/services/integration-data.service.js.map +1 -1
  331. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
  332. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  333. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  334. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
  335. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  336. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
  337. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  338. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
  339. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  340. package/dist/Lists/components/lists-browse-resource.component.js +6 -6
  341. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  342. package/dist/Lists/components/lists-categories-resource.component.js +4 -4
  343. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  344. package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
  345. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  346. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  347. package/dist/Lists/components/lists-operations-resource.component.js +11 -10
  348. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  349. package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
  350. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  351. package/dist/Lists/services/list-set-operations.service.js +11 -3
  352. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  353. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
  354. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  355. package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
  356. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  357. package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
  358. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  359. package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
  360. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  361. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  362. package/dist/MCP/mcp-dashboard.component.js +12 -12
  363. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  364. package/dist/Permissions/permissions-shared.d.ts +3 -3
  365. package/dist/Permissions/permissions-shared.d.ts.map +1 -1
  366. package/dist/Permissions/permissions-shared.js +5 -5
  367. package/dist/Permissions/permissions-shared.js.map +1 -1
  368. package/dist/Permissions/resource-access-resource.component.js +1 -1
  369. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  370. package/dist/Permissions/user-access-resource.component.js +1 -2
  371. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  372. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  373. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  374. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  375. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  376. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  377. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  378. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
  379. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  380. package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
  381. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  382. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  383. package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
  384. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  385. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  386. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-explorer.component.js +9 -7
  388. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  389. package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
  390. package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
  391. package/dist/Testing/services/testing-instrumentation.service.js +21 -11
  392. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
  393. package/dist/Testing/testing-dashboard.component.d.ts +3 -1
  394. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  395. package/dist/Testing/testing-dashboard.component.js +15 -11
  396. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  397. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  398. package/dist/VersionHistory/components/diff-resource.component.js +5 -5
  399. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  400. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  401. package/dist/VersionHistory/components/graph-resource.component.js +1 -2
  402. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  403. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  404. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  405. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  406. package/dist/VersionHistory/components/restore-resource.component.js +1 -1
  407. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  408. package/dist/ai-dashboards.module.d.ts +35 -34
  409. package/dist/ai-dashboards.module.d.ts.map +1 -1
  410. package/dist/ai-dashboards.module.js +6 -0
  411. package/dist/ai-dashboards.module.js.map +1 -1
  412. package/dist/module.d.ts +13 -12
  413. package/dist/module.d.ts.map +1 -1
  414. package/dist/module.js +7 -0
  415. package/dist/module.js.map +1 -1
  416. package/dist/public-api.d.ts +3 -1
  417. package/dist/public-api.d.ts.map +1 -1
  418. package/dist/public-api.js +3 -1
  419. package/dist/public-api.js.map +1 -1
  420. package/dist/shared/entity-field-display.d.ts +4 -3
  421. package/dist/shared/entity-field-display.d.ts.map +1 -1
  422. package/dist/shared/entity-field-display.js +9 -9
  423. package/dist/shared/entity-field-display.js.map +1 -1
  424. package/package.json +52 -51
@@ -1,4 +1,4 @@
1
- import { NormalizedPermission, UserInfo } from '@memberjunction/core';
1
+ import { IMetadataProvider, NormalizedPermission, UserInfo } from '@memberjunction/core';
2
2
  /**
3
3
  * Narrow shape the Permissions admin resource components need when rendering a user picker.
4
4
  * We only pull the handful of columns used in dropdown labels and UserInfo hydration.
@@ -30,7 +30,7 @@ export interface PermissionsDomainGroup {
30
30
  * Load every user from `MJ: Users` with just the columns the Permissions admin
31
31
  * dropdowns need. Sorted by Name.
32
32
  */
33
- export declare function loadPermissionsUsers(): Promise<PermissionsUserOption[]>;
33
+ export declare function loadPermissionsUsers(provider?: IMetadataProvider): Promise<PermissionsUserOption[]>;
34
34
  /**
35
35
  * Hydrate a full `UserInfo` for the user we want to report against. When the target
36
36
  * is the current user we reuse `Metadata.CurrentUser` directly (it already has
@@ -38,7 +38,7 @@ export declare function loadPermissionsUsers(): Promise<PermissionsUserOption[]>
38
38
  * object with the target user's roles attached, because every provider needs roles
39
39
  * to evaluate access correctly.
40
40
  */
41
- export declare function resolvePermissionsUser(userId: string, userDropdown: PermissionsUserOption[]): Promise<UserInfo | null>;
41
+ export declare function resolvePermissionsUser(userId: string, userDropdown: PermissionsUserOption[], provider?: IMetadataProvider): Promise<UserInfo | null>;
42
42
  /**
43
43
  * Bucket a flat list of {@link NormalizedPermission} into {@link PermissionsDomainGroup}s,
44
44
  * sorted by each domain's catalog DisplayOrder (falling back to alpha when the
@@ -1 +1 @@
1
- {"version":3,"file":"permissions-shared.d.ts","sourceRoot":"","sources":["../../src/Permissions/permissions-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,oBAAoB,EAAW,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAIvG;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,wBAA0B,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAY7E;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,qBAAqB,EAAE,GACtC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,oBAAoB,EAAE,EAC5B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,sBAAsB,EAAE,CAqB1B"}
1
+ {"version":3,"file":"permissions-shared.d.ts","sourceRoot":"","sources":["../../src/Permissions/permissions-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAY,oBAAoB,EAAW,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAI1H;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,wBAA0B,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAYzG;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,qBAAqB,EAAE,EACrC,QAAQ,CAAC,EAAE,iBAAiB,GAC7B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,oBAAoB,EAAE,EAC5B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,sBAAsB,EAAE,CAqB1B"}
@@ -12,8 +12,8 @@ export const PERMISSIONS_DOMAIN_ICONS = PERMISSION_DOMAIN_ICONS;
12
12
  * Load every user from `MJ: Users` with just the columns the Permissions admin
13
13
  * dropdowns need. Sorted by Name.
14
14
  */
15
- export async function loadPermissionsUsers() {
16
- const rv = new RunView();
15
+ export async function loadPermissionsUsers(provider) {
16
+ const rv = provider ? RunView.FromMetadataProvider(provider) : new RunView();
17
17
  const result = await rv.RunView({
18
18
  EntityName: 'MJ: Users',
19
19
  Fields: ['ID', 'Name', 'Email'],
@@ -32,12 +32,12 @@ export async function loadPermissionsUsers() {
32
32
  * object with the target user's roles attached, because every provider needs roles
33
33
  * to evaluate access correctly.
34
34
  */
35
- export async function resolvePermissionsUser(userId, userDropdown) {
36
- const md = new Metadata();
35
+ export async function resolvePermissionsUser(userId, userDropdown, provider) {
36
+ const md = (provider ?? new Metadata());
37
37
  if (md.CurrentUser && UUIDsEqual(md.CurrentUser.ID, userId)) {
38
38
  return md.CurrentUser;
39
39
  }
40
- const rv = new RunView();
40
+ const rv = provider ? RunView.FromMetadataProvider(provider) : new RunView();
41
41
  const rolesResult = await rv.RunView({
42
42
  EntityName: 'MJ: User Roles',
43
43
  ExtraFilter: `UserID='${userId}'`,
@@ -1 +1 @@
1
- {"version":3,"file":"permissions-shared.js","sourceRoot":"","sources":["../../src/Permissions/permissions-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { Metadata, NormalizedPermission, RunView, UserInfo, UserRoleInfo } from '@memberjunction/core';\nimport { PERMISSION_DOMAIN_ICONS, PermissionEngine } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Narrow shape the Permissions admin resource components need when rendering a user picker.\n * We only pull the handful of columns used in dropdown labels and UserInfo hydration.\n */\nexport interface PermissionsUserOption {\n ID: string;\n Name: string;\n Email: string;\n}\n\n/**\n * Domain-to-icon lookup used by the User Access Report and the Audit Log tabs.\n * Re-exports the shared constant from `@memberjunction/core-entities` so the admin\n * dashboard and the end-user Sharing Center always render the same glyph. Add new\n * domains in `core-entities/src/engines/PermissionEngine.ts`, not here.\n */\nexport const PERMISSIONS_DOMAIN_ICONS = PERMISSION_DOMAIN_ICONS;\n\n/**\n * A single domain section in the User Access Report — used by the UI to render\n * collapsible groups of {@link NormalizedPermission} rows.\n */\nexport interface PermissionsDomainGroup {\n DomainName: string;\n Icon: string;\n Count: number;\n Expanded: boolean;\n Rows: NormalizedPermission[];\n}\n\n/**\n * Load every user from `MJ: Users` with just the columns the Permissions admin\n * dropdowns need. Sorted by Name.\n */\nexport async function loadPermissionsUsers(): Promise<PermissionsUserOption[]> {\n const rv = new RunView();\n const result = await rv.RunView<PermissionsUserOption>({\n EntityName: 'MJ: Users',\n Fields: ['ID', 'Name', 'Email'],\n OrderBy: 'Name',\n ResultType: 'simple',\n });\n if (!result.Success) {\n throw new Error(result.ErrorMessage ?? 'Failed to load users');\n }\n return result.Results ?? [];\n}\n\n/**\n * Hydrate a full `UserInfo` for the user we want to report against. When the target\n * is the current user we reuse `Metadata.CurrentUser` directly (it already has\n * roles loaded). Otherwise we hit `MJ: User Roles` to assemble a UserInfo-shaped\n * object with the target user's roles attached, because every provider needs roles\n * to evaluate access correctly.\n */\nexport async function resolvePermissionsUser(\n userId: string,\n userDropdown: PermissionsUserOption[]\n): Promise<UserInfo | null> {\n const md = new Metadata();\n if (md.CurrentUser && UUIDsEqual(md.CurrentUser.ID, userId)) {\n return md.CurrentUser;\n }\n\n const rv = new RunView();\n const rolesResult = await rv.RunView<{\n ID: string;\n UserID: string;\n RoleID: string;\n Role: string;\n }>({\n EntityName: 'MJ: User Roles',\n ExtraFilter: `UserID='${userId}'`,\n Fields: ['ID', 'UserID', 'RoleID', 'Role'],\n ResultType: 'simple',\n });\n\n const hit = userDropdown.find((u) => UUIDsEqual(u.ID, userId));\n if (!hit) return null;\n\n const userRoles: UserRoleInfo[] = (rolesResult.Results ?? []).map(\n (r) =>\n new UserRoleInfo({\n ID: r.ID,\n UserID: r.UserID,\n RoleID: r.RoleID,\n Role: r.Role,\n })\n );\n\n return new UserInfo(undefined, {\n ID: hit.ID,\n Name: hit.Name,\n Email: hit.Email,\n UserRoles: userRoles,\n });\n}\n\n/**\n * Bucket a flat list of {@link NormalizedPermission} into {@link PermissionsDomainGroup}s,\n * sorted by each domain's catalog DisplayOrder (falling back to alpha when the\n * engine's domain catalog doesn't know the domain).\n *\n * @param domainOrderMap map of domain name → DisplayOrder, typically built from\n * `PermissionEngine.Instance.Domains`.\n */\nexport function groupPermissionsByDomain(\n rows: NormalizedPermission[],\n domainOrderMap: Map<string, number>\n): PermissionsDomainGroup[] {\n const bucket = new Map<string, NormalizedPermission[]>();\n for (const row of rows) {\n const list = bucket.get(row.DomainName) ?? [];\n list.push(row);\n bucket.set(row.DomainName, list);\n }\n\n const groups: PermissionsDomainGroup[] = [];\n for (const [domainName, list] of bucket) {\n groups.push({\n DomainName: domainName,\n Icon: PermissionEngine.DomainIconFor(domainName),\n Count: list.length,\n Expanded: list.length <= 10,\n Rows: list.sort((a, b) => (a.ResourceName ?? '').localeCompare(b.ResourceName ?? '')),\n });\n }\n\n groups.sort((a, b) => (domainOrderMap.get(a.DomainName) ?? 999) - (domainOrderMap.get(b.DomainName) ?? 999));\n return groups;\n}\n"]}
1
+ {"version":3,"file":"permissions-shared.js","sourceRoot":"","sources":["../../src/Permissions/permissions-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { IMetadataProvider, Metadata, NormalizedPermission, RunView, UserInfo, UserRoleInfo } from '@memberjunction/core';\nimport { PERMISSION_DOMAIN_ICONS, PermissionEngine } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Narrow shape the Permissions admin resource components need when rendering a user picker.\n * We only pull the handful of columns used in dropdown labels and UserInfo hydration.\n */\nexport interface PermissionsUserOption {\n ID: string;\n Name: string;\n Email: string;\n}\n\n/**\n * Domain-to-icon lookup used by the User Access Report and the Audit Log tabs.\n * Re-exports the shared constant from `@memberjunction/core-entities` so the admin\n * dashboard and the end-user Sharing Center always render the same glyph. Add new\n * domains in `core-entities/src/engines/PermissionEngine.ts`, not here.\n */\nexport const PERMISSIONS_DOMAIN_ICONS = PERMISSION_DOMAIN_ICONS;\n\n/**\n * A single domain section in the User Access Report — used by the UI to render\n * collapsible groups of {@link NormalizedPermission} rows.\n */\nexport interface PermissionsDomainGroup {\n DomainName: string;\n Icon: string;\n Count: number;\n Expanded: boolean;\n Rows: NormalizedPermission[];\n}\n\n/**\n * Load every user from `MJ: Users` with just the columns the Permissions admin\n * dropdowns need. Sorted by Name.\n */\nexport async function loadPermissionsUsers(provider?: IMetadataProvider): Promise<PermissionsUserOption[]> {\n const rv = provider ? RunView.FromMetadataProvider(provider) : new RunView();\n const result = await rv.RunView<PermissionsUserOption>({\n EntityName: 'MJ: Users',\n Fields: ['ID', 'Name', 'Email'],\n OrderBy: 'Name',\n ResultType: 'simple',\n });\n if (!result.Success) {\n throw new Error(result.ErrorMessage ?? 'Failed to load users');\n }\n return result.Results ?? [];\n}\n\n/**\n * Hydrate a full `UserInfo` for the user we want to report against. When the target\n * is the current user we reuse `Metadata.CurrentUser` directly (it already has\n * roles loaded). Otherwise we hit `MJ: User Roles` to assemble a UserInfo-shaped\n * object with the target user's roles attached, because every provider needs roles\n * to evaluate access correctly.\n */\nexport async function resolvePermissionsUser(\n userId: string,\n userDropdown: PermissionsUserOption[],\n provider?: IMetadataProvider\n): Promise<UserInfo | null> {\n const md = (provider ?? new Metadata()) as unknown as IMetadataProvider;\n if (md.CurrentUser && UUIDsEqual(md.CurrentUser.ID, userId)) {\n return md.CurrentUser;\n }\n\n const rv = provider ? RunView.FromMetadataProvider(provider) : new RunView();\n const rolesResult = await rv.RunView<{\n ID: string;\n UserID: string;\n RoleID: string;\n Role: string;\n }>({\n EntityName: 'MJ: User Roles',\n ExtraFilter: `UserID='${userId}'`,\n Fields: ['ID', 'UserID', 'RoleID', 'Role'],\n ResultType: 'simple',\n });\n\n const hit = userDropdown.find((u) => UUIDsEqual(u.ID, userId));\n if (!hit) return null;\n\n const userRoles: UserRoleInfo[] = (rolesResult.Results ?? []).map(\n (r) =>\n new UserRoleInfo({\n ID: r.ID,\n UserID: r.UserID,\n RoleID: r.RoleID,\n Role: r.Role,\n })\n );\n\n return new UserInfo(undefined, {\n ID: hit.ID,\n Name: hit.Name,\n Email: hit.Email,\n UserRoles: userRoles,\n });\n}\n\n/**\n * Bucket a flat list of {@link NormalizedPermission} into {@link PermissionsDomainGroup}s,\n * sorted by each domain's catalog DisplayOrder (falling back to alpha when the\n * engine's domain catalog doesn't know the domain).\n *\n * @param domainOrderMap map of domain name → DisplayOrder, typically built from\n * `PermissionEngine.Instance.Domains`.\n */\nexport function groupPermissionsByDomain(\n rows: NormalizedPermission[],\n domainOrderMap: Map<string, number>\n): PermissionsDomainGroup[] {\n const bucket = new Map<string, NormalizedPermission[]>();\n for (const row of rows) {\n const list = bucket.get(row.DomainName) ?? [];\n list.push(row);\n bucket.set(row.DomainName, list);\n }\n\n const groups: PermissionsDomainGroup[] = [];\n for (const [domainName, list] of bucket) {\n groups.push({\n DomainName: domainName,\n Icon: PermissionEngine.DomainIconFor(domainName),\n Count: list.length,\n Expanded: list.length <= 10,\n Rows: list.sort((a, b) => (a.ResourceName ?? '').localeCompare(b.ResourceName ?? '')),\n });\n }\n\n groups.sort((a, b) => (domainOrderMap.get(a.DomainName) ?? 999) - (domainOrderMap.get(b.DomainName) ?? 999));\n return groups;\n}\n"]}
@@ -258,7 +258,7 @@ let PermissionsResourceAccessResourceComponent = class PermissionsResourceAccess
258
258
  this.ResourceTypeInput = '';
259
259
  return;
260
260
  }
261
- this.ResourceTypes = PermissionEngine.Instance.GetResourceTypes(domainName);
261
+ this.ResourceTypes = PermissionEngine.Instance.GetResourceTypes(domainName, this.ProviderToUse);
262
262
  if (this.ResourceTypes.length === 1) {
263
263
  this.ResourceTypeInput = this.ResourceTypes[0];
264
264
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resource-access-resource.component.js","sourceRoot":"","sources":["../../src/Permissions/resource-access-resource.component.ts","../../src/Permissions/resource-access-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { NormalizedPermission } from '@memberjunction/core';\nimport { MJPermissionDomainEntity, PermissionEngine, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\n/**\n * Resource Access Report resource — one of three tabs in the Permissions admin application.\n * Given a (domain, resource type, resource ID) triple, lists every grantee on that resource\n * with their effective actions, effect (Allow/Deny), and optional expiration.\n * Powered by `PermissionEngine.GetResourcePermissions`.\n */\n@RegisterClass(BaseResourceComponent, 'PermissionsResourceAccessResource')\n@Component({\n standalone: false,\n selector: 'mj-permissions-resource-access-resource',\n templateUrl: './resource-access-resource.component.html',\n styleUrls: ['./permissions-resource.component.css'],\n})\nexport class PermissionsResourceAccessResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n Domains: MJPermissionDomainEntity[] = [];\n SelectedDomainName: string | null = null;\n /** Auto-populated whenever the selected domain changes. Empty = adapter doesn't enumerate its types. */\n ResourceTypes: string[] = [];\n ResourceTypeInput = '';\n ResourceIdInput = '';\n ResourceAccessRows: NormalizedPermission[] = [];\n IsLoading = false;\n LastQueryLabel: string | null = null;\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 'Resource Access Report';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-cube';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.Domains = PermissionEngine.Instance.Domains;\n if (this.Domains.length > 0) {\n this.SelectedDomainName = this.Domains[0].Name;\n this.loadResourceTypesForDomain(this.SelectedDomainName);\n }\n this.NotifyLoadComplete();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async OnLookupResource(): Promise<void> {\n if (!this.SelectedDomainName) {\n this.ErrorMessage = 'Pick a permission domain first.';\n return;\n }\n if (!this.ResourceTypeInput.trim() || !this.ResourceIdInput.trim()) {\n this.ErrorMessage = 'Resource type and resource ID are both required.';\n return;\n }\n\n this.ErrorMessage = null;\n this.IsLoading = true;\n this.ResourceAccessRows = [];\n this.LastQueryLabel = null;\n this.cdr.detectChanges();\n\n try {\n const rows = await PermissionEngine.Instance.GetResourcePermissions(\n this.SelectedDomainName,\n this.ResourceTypeInput.trim(),\n this.ResourceIdInput.trim()\n );\n this.ResourceAccessRows = rows.sort((a, b) =>\n (a.GranteeName ?? '').localeCompare(b.GranteeName ?? '')\n );\n this.LastQueryLabel = `${this.SelectedDomainName} / ${this.ResourceTypeInput.trim()} / ${this.ResourceIdInput.trim()}`;\n } catch (e) {\n this.ErrorMessage = `Error looking up resource: ${e instanceof Error ? e.message : String(e)}`;\n }\n\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n\n OnDomainChanged(domainName: string): void {\n this.SelectedDomainName = domainName;\n this.loadResourceTypesForDomain(domainName);\n this.ResourceAccessRows = [];\n this.LastQueryLabel = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Populate {@link ResourceTypes} from the provider behind `domainName`. If the\n * current `ResourceTypeInput` isn't a member of the new list, clear it — the\n * previous choice doesn't make sense against a different domain. When a\n * domain has exactly one supported type we auto-select it so the user\n * doesn't have to open the picker for a trivial choice.\n */\n private loadResourceTypesForDomain(domainName: string | null): void {\n if (!domainName) {\n this.ResourceTypes = [];\n this.ResourceTypeInput = '';\n return;\n }\n this.ResourceTypes = PermissionEngine.Instance.GetResourceTypes(domainName);\n if (this.ResourceTypes.length === 1) {\n this.ResourceTypeInput = this.ResourceTypes[0];\n } else if (!this.ResourceTypes.includes(this.ResourceTypeInput)) {\n this.ResourceTypeInput = '';\n }\n }\n\n TrackByResourceRow(_index: number, row: NormalizedPermission): string {\n return row.SourceRecordID ?? `${row.GranteeType}|${row.GranteeID ?? ''}`;\n }\n}\n\n/** Tree-shaking prevention — referenced from `public-api.ts`. */\nexport function LoadPermissionsResourceAccessResource(): 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-cube header-icon\"></i>\n <h2 class=\"header-title\">Resource Access Report</h2>\n </div>\n </div>\n\n <p class=\"description\">\n Look up every grantee for a specific resource. Pick a permission domain, supply the resource\n type and the resource's ID, then press Lookup.\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=\"domain-select\">Domain:</label>\n <select\n id=\"domain-select\"\n class=\"mj-input\"\n [ngModel]=\"SelectedDomainName\"\n (ngModelChange)=\"OnDomainChanged($event)\"\n [disabled]=\"IsLoading\"\n >\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=\"rtype-input\">Resource Type:</label>\n <mj-combobox\n id=\"rtype-input\"\n [Data]=\"ResourceTypes\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n [AllowCustom]=\"true\"\n Placeholder=\"Select or type a resource type\"\n [Disabled]=\"IsLoading || !SelectedDomainName\"\n [(ngModel)]=\"ResourceTypeInput\">\n </mj-combobox>\n\n <label class=\"selector-label\" for=\"rid-input\">Resource ID:</label>\n <input\n id=\"rid-input\"\n class=\"mj-input mono\"\n placeholder=\"UUID or record ID\"\n [(ngModel)]=\"ResourceIdInput\"\n [disabled]=\"IsLoading\"\n />\n\n <button\n mjButton\n variant=\"primary\"\n (click)=\"OnLookupResource()\"\n [disabled]=\"IsLoading\"\n >\n @if (IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Looking up...\n } @else {\n <i class=\"fa-solid fa-magnifying-glass\"></i> Lookup\n }\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Looking up grantees...\" size=\"medium\"></mj-loading>\n } @else if (!LastQueryLabel) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-cube\"></i>\n <p>Pick a domain and enter a resource type + ID, then press Lookup to see who has access.</p>\n </div>\n } @else if (ResourceAccessRows.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>No grantees found for <strong>{{ LastQueryLabel }}</strong>.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ ResourceAccessRows.length }}</strong> grantee{{ ResourceAccessRows.length === 1 ? '' : 's' }}\n on <strong>{{ LastQueryLabel }}</strong>\n </div>\n\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>Grantee</th>\n <th>Type</th>\n <th>Actions</th>\n <th>Effect</th>\n <th>Expires</th>\n </tr>\n </thead>\n <tbody>\n @for (row of ResourceAccessRows; track TrackByResourceRow($index, row)) {\n <tr>\n <td class=\"resource-cell\">\n <span class=\"resource-name\">{{ row.GranteeName || row.GranteeID || row.GranteeType }}</span>\n @if (row.GranteeID && row.GranteeName && row.GranteeName !== row.GranteeID) {\n <span class=\"resource-id\">{{ row.GranteeID }}</span>\n }\n </td>\n <td>{{ row.GranteeType }}</td>\n <td>\n <div class=\"action-chips\">\n @for (action of row.Actions; track action) {\n <span class=\"action-chip\">{{ action }}</span>\n }\n </div>\n </td>\n <td>\n <span class=\"effect-badge\" [class.effect-allow]=\"row.Effect === 'Allow'\" [class.effect-deny]=\"row.Effect === 'Deny'\">\n {{ row.Effect }}\n </span>\n </td>\n <td>\n @if (row.ExpiresAt) {\n <span>{{ row.ExpiresAt | date:'short' }}</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":"resource-access-resource.component.js","sourceRoot":"","sources":["../../src/Permissions/resource-access-resource.component.ts","../../src/Permissions/resource-access-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { NormalizedPermission } from '@memberjunction/core';\nimport { MJPermissionDomainEntity, PermissionEngine, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\n/**\n * Resource Access Report resource — one of three tabs in the Permissions admin application.\n * Given a (domain, resource type, resource ID) triple, lists every grantee on that resource\n * with their effective actions, effect (Allow/Deny), and optional expiration.\n * Powered by `PermissionEngine.GetResourcePermissions`.\n */\n@RegisterClass(BaseResourceComponent, 'PermissionsResourceAccessResource')\n@Component({\n standalone: false,\n selector: 'mj-permissions-resource-access-resource',\n templateUrl: './resource-access-resource.component.html',\n styleUrls: ['./permissions-resource.component.css'],\n})\nexport class PermissionsResourceAccessResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n Domains: MJPermissionDomainEntity[] = [];\n SelectedDomainName: string | null = null;\n /** Auto-populated whenever the selected domain changes. Empty = adapter doesn't enumerate its types. */\n ResourceTypes: string[] = [];\n ResourceTypeInput = '';\n ResourceIdInput = '';\n ResourceAccessRows: NormalizedPermission[] = [];\n IsLoading = false;\n LastQueryLabel: string | null = null;\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 'Resource Access Report';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-cube';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.Domains = PermissionEngine.Instance.Domains;\n if (this.Domains.length > 0) {\n this.SelectedDomainName = this.Domains[0].Name;\n this.loadResourceTypesForDomain(this.SelectedDomainName);\n }\n this.NotifyLoadComplete();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async OnLookupResource(): Promise<void> {\n if (!this.SelectedDomainName) {\n this.ErrorMessage = 'Pick a permission domain first.';\n return;\n }\n if (!this.ResourceTypeInput.trim() || !this.ResourceIdInput.trim()) {\n this.ErrorMessage = 'Resource type and resource ID are both required.';\n return;\n }\n\n this.ErrorMessage = null;\n this.IsLoading = true;\n this.ResourceAccessRows = [];\n this.LastQueryLabel = null;\n this.cdr.detectChanges();\n\n try {\n const rows = await PermissionEngine.Instance.GetResourcePermissions(\n this.SelectedDomainName,\n this.ResourceTypeInput.trim(),\n this.ResourceIdInput.trim()\n );\n this.ResourceAccessRows = rows.sort((a, b) =>\n (a.GranteeName ?? '').localeCompare(b.GranteeName ?? '')\n );\n this.LastQueryLabel = `${this.SelectedDomainName} / ${this.ResourceTypeInput.trim()} / ${this.ResourceIdInput.trim()}`;\n } catch (e) {\n this.ErrorMessage = `Error looking up resource: ${e instanceof Error ? e.message : String(e)}`;\n }\n\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n\n OnDomainChanged(domainName: string): void {\n this.SelectedDomainName = domainName;\n this.loadResourceTypesForDomain(domainName);\n this.ResourceAccessRows = [];\n this.LastQueryLabel = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Populate {@link ResourceTypes} from the provider behind `domainName`. If the\n * current `ResourceTypeInput` isn't a member of the new list, clear it — the\n * previous choice doesn't make sense against a different domain. When a\n * domain has exactly one supported type we auto-select it so the user\n * doesn't have to open the picker for a trivial choice.\n */\n private loadResourceTypesForDomain(domainName: string | null): void {\n if (!domainName) {\n this.ResourceTypes = [];\n this.ResourceTypeInput = '';\n return;\n }\n this.ResourceTypes = PermissionEngine.Instance.GetResourceTypes(domainName, this.ProviderToUse);\n if (this.ResourceTypes.length === 1) {\n this.ResourceTypeInput = this.ResourceTypes[0];\n } else if (!this.ResourceTypes.includes(this.ResourceTypeInput)) {\n this.ResourceTypeInput = '';\n }\n }\n\n TrackByResourceRow(_index: number, row: NormalizedPermission): string {\n return row.SourceRecordID ?? `${row.GranteeType}|${row.GranteeID ?? ''}`;\n }\n}\n\n/** Tree-shaking prevention — referenced from `public-api.ts`. */\nexport function LoadPermissionsResourceAccessResource(): 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-cube header-icon\"></i>\n <h2 class=\"header-title\">Resource Access Report</h2>\n </div>\n </div>\n\n <p class=\"description\">\n Look up every grantee for a specific resource. Pick a permission domain, supply the resource\n type and the resource's ID, then press Lookup.\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=\"domain-select\">Domain:</label>\n <select\n id=\"domain-select\"\n class=\"mj-input\"\n [ngModel]=\"SelectedDomainName\"\n (ngModelChange)=\"OnDomainChanged($event)\"\n [disabled]=\"IsLoading\"\n >\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=\"rtype-input\">Resource Type:</label>\n <mj-combobox\n id=\"rtype-input\"\n [Data]=\"ResourceTypes\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n [AllowCustom]=\"true\"\n Placeholder=\"Select or type a resource type\"\n [Disabled]=\"IsLoading || !SelectedDomainName\"\n [(ngModel)]=\"ResourceTypeInput\">\n </mj-combobox>\n\n <label class=\"selector-label\" for=\"rid-input\">Resource ID:</label>\n <input\n id=\"rid-input\"\n class=\"mj-input mono\"\n placeholder=\"UUID or record ID\"\n [(ngModel)]=\"ResourceIdInput\"\n [disabled]=\"IsLoading\"\n />\n\n <button\n mjButton\n variant=\"primary\"\n (click)=\"OnLookupResource()\"\n [disabled]=\"IsLoading\"\n >\n @if (IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Looking up...\n } @else {\n <i class=\"fa-solid fa-magnifying-glass\"></i> Lookup\n }\n </button>\n </div>\n\n @if (IsLoading) {\n <mj-loading text=\"Looking up grantees...\" size=\"medium\"></mj-loading>\n } @else if (!LastQueryLabel) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-cube\"></i>\n <p>Pick a domain and enter a resource type + ID, then press Lookup to see who has access.</p>\n </div>\n } @else if (ResourceAccessRows.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>No grantees found for <strong>{{ LastQueryLabel }}</strong>.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ ResourceAccessRows.length }}</strong> grantee{{ ResourceAccessRows.length === 1 ? '' : 's' }}\n on <strong>{{ LastQueryLabel }}</strong>\n </div>\n\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>Grantee</th>\n <th>Type</th>\n <th>Actions</th>\n <th>Effect</th>\n <th>Expires</th>\n </tr>\n </thead>\n <tbody>\n @for (row of ResourceAccessRows; track TrackByResourceRow($index, row)) {\n <tr>\n <td class=\"resource-cell\">\n <span class=\"resource-name\">{{ row.GranteeName || row.GranteeID || row.GranteeType }}</span>\n @if (row.GranteeID && row.GranteeName && row.GranteeName !== row.GranteeID) {\n <span class=\"resource-id\">{{ row.GranteeID }}</span>\n }\n </td>\n <td>{{ row.GranteeType }}</td>\n <td>\n <div class=\"action-chips\">\n @for (action of row.Actions; track action) {\n <span class=\"action-chip\">{{ action }}</span>\n }\n </div>\n </td>\n <td>\n <span class=\"effect-badge\" [class.effect-allow]=\"row.Effect === 'Allow'\" [class.effect-deny]=\"row.Effect === 'Deny'\">\n {{ row.Effect }}\n </span>\n </td>\n <td>\n @if (row.ExpiresAt) {\n <span>{{ row.ExpiresAt | date:'short' }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</div>\n"]}
@@ -5,7 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { Component } from '@angular/core';
8
- import { Metadata } from '@memberjunction/core';
9
8
  import { PermissionEngine } from '@memberjunction/core-entities';
10
9
  import { RegisterClass } from '@memberjunction/global';
11
10
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
@@ -226,7 +225,7 @@ let PermissionsUserAccessResourceComponent = class PermissionsUserAccessResource
226
225
  this.ErrorMessage = null;
227
226
  try {
228
227
  this.Users = await loadPermissionsUsers();
229
- const md = new Metadata();
228
+ const md = this.ProviderToUse;
230
229
  this.SelectedUserId = md.CurrentUser?.ID ?? null;
231
230
  if (this.SelectedUserId) {
232
231
  await this.loadPermissionsForSelectedUser();
@@ -1 +1 @@
1
- {"version":3,"file":"user-access-resource.component.js","sourceRoot":"","sources":["../../src/Permissions/user-access-resource.component.ts","../../src/Permissions/user-access-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Metadata, NormalizedPermission, PermissionAction } from '@memberjunction/core';\nimport { PermissionEngine, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\nimport {\n PermissionsDomainGroup,\n PermissionsUserOption,\n groupPermissionsByDomain,\n loadPermissionsUsers,\n resolvePermissionsUser,\n} from './permissions-shared';\n\n/**\n * User Access Report resource — one of three tabs in the Permissions admin application.\n * Lets an admin pick any user and see every resource that user has access to across\n * every registered permission domain. Powered by `PermissionEngine.GetAllUserPermissions`.\n */\n@RegisterClass(BaseResourceComponent, 'PermissionsUserAccessResource')\n@Component({\n standalone: false,\n selector: 'mj-permissions-user-access-resource',\n templateUrl: './user-access-resource.component.html',\n styleUrls: ['./permissions-resource.component.css'],\n})\nexport class PermissionsUserAccessResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n Users: PermissionsUserOption[] = [];\n SelectedUserId: string | null = null;\n SelectedUserRoles: string[] = [];\n DomainGroups: PermissionsDomainGroup[] = [];\n IsLoadingUsers = true;\n IsLoadingPermissions = 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 'User Access Report';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-user';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadUsers();\n this.NotifyLoadComplete();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async loadUsers(): Promise<void> {\n this.IsLoadingUsers = true;\n this.ErrorMessage = null;\n try {\n this.Users = await loadPermissionsUsers();\n const md = new Metadata();\n this.SelectedUserId = md.CurrentUser?.ID ?? null;\n if (this.SelectedUserId) {\n await this.loadPermissionsForSelectedUser();\n }\n } catch (e) {\n this.ErrorMessage = `Error loading users: ${e instanceof Error ? e.message : String(e)}`;\n }\n this.IsLoadingUsers = false;\n this.cdr.detectChanges();\n }\n\n async OnUserChanged(userId: string): Promise<void> {\n this.SelectedUserId = userId;\n await this.loadPermissionsForSelectedUser();\n }\n\n private async loadPermissionsForSelectedUser(): Promise<void> {\n this.IsLoadingPermissions = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n\n try {\n const user = await resolvePermissionsUser(this.SelectedUserId!, this.Users);\n if (!user) {\n this.ErrorMessage = 'Could not load roles for the selected user.';\n this.DomainGroups = [];\n this.IsLoadingPermissions = false;\n this.cdr.detectChanges();\n return;\n }\n\n this.SelectedUserRoles = (user.UserRoles ?? []).map((ur) => ur.Role).filter((n): n is string => !!n);\n const rows = await PermissionEngine.Instance.GetAllUserPermissions(user);\n const orderMap = new Map<string, number>();\n for (const d of PermissionEngine.Instance.Domains) {\n orderMap.set(d.Name, d.DisplayOrder ?? 999);\n }\n this.DomainGroups = groupPermissionsByDomain(rows, orderMap);\n } catch (e) {\n this.ErrorMessage = `Error loading permissions: ${e instanceof Error ? e.message : String(e)}`;\n this.DomainGroups = [];\n }\n\n this.IsLoadingPermissions = false;\n this.cdr.detectChanges();\n }\n\n ToggleGroup(group: PermissionsDomainGroup): void {\n group.Expanded = !group.Expanded;\n this.cdr.detectChanges();\n }\n\n TrackByDomain(_index: number, group: PermissionsDomainGroup): string {\n return group.DomainName;\n }\n\n TrackByPermission(_index: number, row: NormalizedPermission): string {\n return row.SourceRecordID ?? `${row.DomainName}|${row.ResourceType}|${row.ResourceID ?? ''}|${row.GranteeID ?? ''}`;\n }\n\n ActionsLabel(actions: PermissionAction[]): string {\n return actions.join(', ');\n }\n\n get TotalCount(): number {\n return this.DomainGroups.reduce((sum, g) => sum + g.Count, 0);\n }\n}\n\n/** Tree-shaking prevention — referenced from `public-api.ts`. */\nexport function LoadPermissionsUserAccessResource(): 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-user header-icon\"></i>\n <h2 class=\"header-title\">User Access Report</h2>\n </div>\n <div class=\"header-actions\">\n <button mjButton variant=\"secondary\" (click)=\"loadUsers()\" [disabled]=\"IsLoadingUsers || IsLoadingPermissions\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"IsLoadingUsers\"></i> Refresh\n </button>\n </div>\n </div>\n\n <p class=\"description\">\n Select a user to see every resource they can access across all registered permission domains.\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\">\n <label class=\"selector-label\" for=\"user-select\">User:</label>\n <select\n id=\"user-select\"\n class=\"mj-input\"\n [ngModel]=\"SelectedUserId\"\n (ngModelChange)=\"OnUserChanged($event)\"\n [disabled]=\"IsLoadingUsers || IsLoadingPermissions\"\n >\n @for (user of Users; track user.ID) {\n <option [ngValue]=\"user.ID\">{{ user.Name }}{{ user.Email ? ' — ' + user.Email : '' }}</option>\n }\n </select>\n\n @if (SelectedUserRoles.length > 0) {\n <div class=\"roles-badge\" title=\"Roles assigned to this user\">\n <i class=\"fa-solid fa-user-tag\"></i>\n <span>{{ SelectedUserRoles.join(', ') }}</span>\n </div>\n }\n </div>\n\n @if (IsLoadingPermissions) {\n <mj-loading text=\"Loading permissions...\" size=\"medium\"></mj-loading>\n } @else if (!SelectedUserId) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>Select a user above to see their access report.</p>\n </div>\n } @else if (DomainGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>This user has no permissions granted in any domain.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ TotalCount }}</strong> permission{{ TotalCount === 1 ? '' : 's' }} across\n <strong>{{ DomainGroups.length }}</strong> domain{{ DomainGroups.length === 1 ? '' : 's' }}\n </div>\n\n <div class=\"domain-groups\">\n @for (group of DomainGroups; track TrackByDomain($index, group)) {\n <div class=\"domain-group\" [class.expanded]=\"group.Expanded\">\n <button type=\"button\" class=\"domain-header\" (click)=\"ToggleGroup(group)\">\n <div class=\"domain-header-left\">\n <i [class]=\"group.Icon\" class=\"domain-icon\"></i>\n <span class=\"domain-name\">{{ group.DomainName }}</span>\n <span class=\"domain-count\">{{ group.Count }}</span>\n </div>\n <i class=\"fa-solid fa-chevron-down toggle-icon\" [class.rotated]=\"group.Expanded\"></i>\n </button>\n\n @if (group.Expanded) {\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>Resource</th>\n <th>Type</th>\n <th>Actions</th>\n <th>Effect</th>\n </tr>\n </thead>\n <tbody>\n @for (row of group.Rows; track TrackByPermission($index, row)) {\n <tr>\n <td class=\"resource-cell\">\n <span class=\"resource-name\">{{ row.ResourceName || row.ResourceID || '—' }}</span>\n @if (row.ResourceID && row.ResourceName && row.ResourceName !== row.ResourceID) {\n <span class=\"resource-id\">{{ row.ResourceID }}</span>\n }\n </td>\n <td>{{ row.ResourceType }}</td>\n <td>\n <div class=\"action-chips\">\n @for (action of row.Actions; track action) {\n <span class=\"action-chip\">{{ action }}</span>\n }\n </div>\n </td>\n <td>\n <span class=\"effect-badge\" [class.effect-allow]=\"row.Effect === 'Allow'\" [class.effect-deny]=\"row.Effect === 'Deny'\">\n {{ row.Effect }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"user-access-resource.component.js","sourceRoot":"","sources":["../../src/Permissions/user-access-resource.component.ts","../../src/Permissions/user-access-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Metadata, NormalizedPermission, PermissionAction } from '@memberjunction/core';\nimport { PermissionEngine, ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\n\nimport {\n PermissionsDomainGroup,\n PermissionsUserOption,\n groupPermissionsByDomain,\n loadPermissionsUsers,\n resolvePermissionsUser,\n} from './permissions-shared';\n\n/**\n * User Access Report resource — one of three tabs in the Permissions admin application.\n * Lets an admin pick any user and see every resource that user has access to across\n * every registered permission domain. Powered by `PermissionEngine.GetAllUserPermissions`.\n */\n@RegisterClass(BaseResourceComponent, 'PermissionsUserAccessResource')\n@Component({\n standalone: false,\n selector: 'mj-permissions-user-access-resource',\n templateUrl: './user-access-resource.component.html',\n styleUrls: ['./permissions-resource.component.css'],\n})\nexport class PermissionsUserAccessResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n Users: PermissionsUserOption[] = [];\n SelectedUserId: string | null = null;\n SelectedUserRoles: string[] = [];\n DomainGroups: PermissionsDomainGroup[] = [];\n IsLoadingUsers = true;\n IsLoadingPermissions = 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 'User Access Report';\n }\n\n override async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-user';\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadUsers();\n this.NotifyLoadComplete();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n async loadUsers(): Promise<void> {\n this.IsLoadingUsers = true;\n this.ErrorMessage = null;\n try {\n this.Users = await loadPermissionsUsers();\n const md = this.ProviderToUse;\n this.SelectedUserId = md.CurrentUser?.ID ?? null;\n if (this.SelectedUserId) {\n await this.loadPermissionsForSelectedUser();\n }\n } catch (e) {\n this.ErrorMessage = `Error loading users: ${e instanceof Error ? e.message : String(e)}`;\n }\n this.IsLoadingUsers = false;\n this.cdr.detectChanges();\n }\n\n async OnUserChanged(userId: string): Promise<void> {\n this.SelectedUserId = userId;\n await this.loadPermissionsForSelectedUser();\n }\n\n private async loadPermissionsForSelectedUser(): Promise<void> {\n this.IsLoadingPermissions = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n\n try {\n const user = await resolvePermissionsUser(this.SelectedUserId!, this.Users);\n if (!user) {\n this.ErrorMessage = 'Could not load roles for the selected user.';\n this.DomainGroups = [];\n this.IsLoadingPermissions = false;\n this.cdr.detectChanges();\n return;\n }\n\n this.SelectedUserRoles = (user.UserRoles ?? []).map((ur) => ur.Role).filter((n): n is string => !!n);\n const rows = await PermissionEngine.Instance.GetAllUserPermissions(user);\n const orderMap = new Map<string, number>();\n for (const d of PermissionEngine.Instance.Domains) {\n orderMap.set(d.Name, d.DisplayOrder ?? 999);\n }\n this.DomainGroups = groupPermissionsByDomain(rows, orderMap);\n } catch (e) {\n this.ErrorMessage = `Error loading permissions: ${e instanceof Error ? e.message : String(e)}`;\n this.DomainGroups = [];\n }\n\n this.IsLoadingPermissions = false;\n this.cdr.detectChanges();\n }\n\n ToggleGroup(group: PermissionsDomainGroup): void {\n group.Expanded = !group.Expanded;\n this.cdr.detectChanges();\n }\n\n TrackByDomain(_index: number, group: PermissionsDomainGroup): string {\n return group.DomainName;\n }\n\n TrackByPermission(_index: number, row: NormalizedPermission): string {\n return row.SourceRecordID ?? `${row.DomainName}|${row.ResourceType}|${row.ResourceID ?? ''}|${row.GranteeID ?? ''}`;\n }\n\n ActionsLabel(actions: PermissionAction[]): string {\n return actions.join(', ');\n }\n\n get TotalCount(): number {\n return this.DomainGroups.reduce((sum, g) => sum + g.Count, 0);\n }\n}\n\n/** Tree-shaking prevention — referenced from `public-api.ts`. */\nexport function LoadPermissionsUserAccessResource(): 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-user header-icon\"></i>\n <h2 class=\"header-title\">User Access Report</h2>\n </div>\n <div class=\"header-actions\">\n <button mjButton variant=\"secondary\" (click)=\"loadUsers()\" [disabled]=\"IsLoadingUsers || IsLoadingPermissions\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"IsLoadingUsers\"></i> Refresh\n </button>\n </div>\n </div>\n\n <p class=\"description\">\n Select a user to see every resource they can access across all registered permission domains.\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\">\n <label class=\"selector-label\" for=\"user-select\">User:</label>\n <select\n id=\"user-select\"\n class=\"mj-input\"\n [ngModel]=\"SelectedUserId\"\n (ngModelChange)=\"OnUserChanged($event)\"\n [disabled]=\"IsLoadingUsers || IsLoadingPermissions\"\n >\n @for (user of Users; track user.ID) {\n <option [ngValue]=\"user.ID\">{{ user.Name }}{{ user.Email ? ' — ' + user.Email : '' }}</option>\n }\n </select>\n\n @if (SelectedUserRoles.length > 0) {\n <div class=\"roles-badge\" title=\"Roles assigned to this user\">\n <i class=\"fa-solid fa-user-tag\"></i>\n <span>{{ SelectedUserRoles.join(', ') }}</span>\n </div>\n }\n </div>\n\n @if (IsLoadingPermissions) {\n <mj-loading text=\"Loading permissions...\" size=\"medium\"></mj-loading>\n } @else if (!SelectedUserId) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>Select a user above to see their access report.</p>\n </div>\n } @else if (DomainGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>This user has no permissions granted in any domain.</p>\n </div>\n } @else {\n <div class=\"total-summary\">\n <strong>{{ TotalCount }}</strong> permission{{ TotalCount === 1 ? '' : 's' }} across\n <strong>{{ DomainGroups.length }}</strong> domain{{ DomainGroups.length === 1 ? '' : 's' }}\n </div>\n\n <div class=\"domain-groups\">\n @for (group of DomainGroups; track TrackByDomain($index, group)) {\n <div class=\"domain-group\" [class.expanded]=\"group.Expanded\">\n <button type=\"button\" class=\"domain-header\" (click)=\"ToggleGroup(group)\">\n <div class=\"domain-header-left\">\n <i [class]=\"group.Icon\" class=\"domain-icon\"></i>\n <span class=\"domain-name\">{{ group.DomainName }}</span>\n <span class=\"domain-count\">{{ group.Count }}</span>\n </div>\n <i class=\"fa-solid fa-chevron-down toggle-icon\" [class.rotated]=\"group.Expanded\"></i>\n </button>\n\n @if (group.Expanded) {\n <div class=\"domain-body\">\n <table class=\"perms-table\">\n <thead>\n <tr>\n <th>Resource</th>\n <th>Type</th>\n <th>Actions</th>\n <th>Effect</th>\n </tr>\n </thead>\n <tbody>\n @for (row of group.Rows; track TrackByPermission($index, row)) {\n <tr>\n <td class=\"resource-cell\">\n <span class=\"resource-name\">{{ row.ResourceName || row.ResourceID || '—' }}</span>\n @if (row.ResourceID && row.ResourceName && row.ResourceName !== row.ResourceID) {\n <span class=\"resource-id\">{{ row.ResourceID }}</span>\n }\n </td>\n <td>{{ row.ResourceType }}</td>\n <td>\n <div class=\"action-chips\">\n @for (action of row.Actions; track action) {\n <span class=\"action-chip\">{{ action }}</span>\n }\n </div>\n </td>\n <td>\n <span class=\"effect-badge\" [class.effect-allow]=\"row.Effect === 'Allow'\" [class.effect-deny]=\"row.Effect === 'Deny'\">\n {{ row.Effect }}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"query-browser-resource.component.d.ts","sourceRoot":"","sources":["../../src/QueryBrowser/query-browser-resource.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-browser-resource.component.d.ts","sourceRoot":"","sources":["../../src/QueryBrowser/query-browser-resource.component.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { Component, ChangeDetectionStrategy, HostListener, ViewChild } from '@an
9
9
  import { Subject } from 'rxjs';
10
10
  import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
11
11
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
12
- import { Metadata, QueryCategoryInfo, CompositeKey } from '@memberjunction/core';
12
+ import { QueryCategoryInfo, CompositeKey } from '@memberjunction/core';
13
13
  import { UserInfoEngine } from '@memberjunction/core-entities';
14
14
  import * as i0 from "@angular/core";
15
15
  import * as i1 from "@angular/common";
@@ -541,7 +541,7 @@ let QueryBrowserResourceComponent = class QueryBrowserResourceComponent extends
541
541
  AllStatuses = ['Approved', 'Pending', 'Rejected', 'Expired'];
542
542
  /** Tracks expanded state by category ID — persisted across sessions */
543
543
  expandedState = new Map();
544
- metadata = new Metadata();
544
+ metadata = this.ProviderToUse;
545
545
  destroy$ = new Subject();
546
546
  dataLoaded = false;
547
547
  // Bound event handlers for resize (need references for removeEventListener)