@memberjunction/ng-dashboards 5.30.0 → 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 +1 @@
1
- {"version":3,"file":"entity-admin-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAuC,MAAM,+BAA+B,CAAC;;AAKlG,qBAOa,6BAA8B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IACpD,YAAY,EAAG,qBAAqB,CAAC;IAE5E,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,SAAM;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,kBAAkB,UAAQ;IAC1B,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IAG3C,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,eAAe,IAAI,IAAI;IASjB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,WAAW,IAAI,IAAI;IAK5B,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAOzB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAkB7C,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAKjD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxC,YAAY,CAAC,KAAK,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAOjE,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;YACW,yBAAyB;IA8BvC;;OAEG;YACW,uBAAuB;yCAlI1B,6BAA6B;2CAA7B,6BAA6B;CA4JzC"}
1
+ {"version":3,"file":"entity-admin-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAuC,MAAM,+BAA+B,CAAC;;AAKlG,qBAOa,6BAA8B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IACpD,YAAY,EAAG,qBAAqB,CAAC;IAE5E,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,SAAM;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,kBAAkB,UAAQ;IAC1B,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IAG3C,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,eAAe,IAAI,IAAI;IASjB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,WAAW,IAAI,IAAI;IAK5B,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAOzB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAkB7C,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAKjD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxC,YAAY,CAAC,KAAK,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAOjE,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;YACW,yBAAyB;IA8BvC;;OAEG;YACW,uBAAuB;yCAlI1B,6BAA6B;2CAA7B,6BAA6B;CA4JzC"}
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { Component, ViewChild } from '@angular/core';
8
8
  import { BaseDashboard } from '@memberjunction/ng-shared';
9
9
  import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
10
- import { CompositeKey, Metadata } from '@memberjunction/core';
10
+ import { CompositeKey } from '@memberjunction/core';
11
11
  import { Subject } from 'rxjs';
12
12
  import { debounceTime } from 'rxjs/operators';
13
13
  import { UserInfoEngine } from '@memberjunction/core-entities';
@@ -58,7 +58,7 @@ let EntityAdminDashboardComponent = class EntityAdminDashboardComponent extends
58
58
  // State management
59
59
  userStateChangeSubject = new Subject();
60
60
  hasLoadedUserState = false;
61
- metadata = new Metadata();
61
+ metadata = this.ProviderToUse;
62
62
  userSettingEntity = null;
63
63
  ngAfterViewInit() {
64
64
  // Setup debounced state persistence to MJ: User Settings
@@ -1 +1 @@
1
- {"version":3,"file":"entity-admin-dashboard.component.js","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts","../../src/EntityAdmin/entity-admin-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { EntityInfo, CompositeKey, Metadata } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ERDCompositeComponent, ERDCompositeState } from '@memberjunction/ng-entity-relationship-diagram';\nimport { ResourceData, MJUserSettingEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\n/** Settings key for ERD state persistence */\nconst ERD_SETTINGS_KEY = 'MJ.Admin.Entity.ERD';\n\n@Component({\n standalone: false,\n selector: 'mj-entity-admin-dashboard',\n templateUrl: './entity-admin-dashboard.component.html',\n styleUrls: ['./entity-admin-dashboard.component.css']\n})\n@RegisterClass(BaseDashboard, 'EntityAdmin')\nexport class EntityAdminDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n @ViewChild('erdComposite', { static: false }) erdComposite!: ERDCompositeComponent;\n\n public isLoading = false;\n public isRefreshingERD = false;\n public loadingMessage = '';\n public error: string | null = null;\n\n // Filter panel visibility for header controls\n public filterPanelVisible = true;\n public selectedEntity: EntityInfo | null = null;\n public filteredEntities: EntityInfo[] = [];\n\n // State management\n private userStateChangeSubject = new Subject<ERDCompositeState>();\n private hasLoadedUserState = false;\n private metadata = new Metadata();\n private userSettingEntity: MJUserSettingEntity | null = null;\n\n ngAfterViewInit(): void {\n // Setup debounced state persistence to MJ: User Settings\n this.userStateChangeSubject.pipe(\n debounceTime(1000)\n ).subscribe(state => {\n this.saveStateToUserSettings(state);\n });\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return \"Entity Administration\"\n }\n\n override ngOnDestroy(): void {\n this.userStateChangeSubject.complete();\n super.ngOnDestroy();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard - called by BaseDashboard\n }\n\n protected loadData(): void {\n // Data loading is handled by ERDCompositeComponent\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n if (this.erdComposite) {\n this.erdComposite.onToggleFilterPanel();\n }\n }\n\n public onStateChange(state: ERDCompositeState): void {\n // Update local state to keep header controls in sync\n this.filterPanelVisible = state.filterPanelVisible;\n this.filteredEntities = this.erdComposite?.filteredEntities || [];\n\n if (state.selectedEntityId && this.erdComposite) {\n this.selectedEntity = this.erdComposite.entities.find(e => UUIDsEqual(e.ID, state.selectedEntityId)) || null;\n } else {\n this.selectedEntity = null;\n }\n\n // Load user state when data becomes available for the first time\n if (this.erdComposite?.isDataLoaded && !this.hasLoadedUserState) {\n this.hasLoadedUserState = true;\n this.loadStateFromUserSettings();\n }\n }\n\n public onUserStateChange(state: ERDCompositeState): void {\n // Queue state for debounced persistence\n this.userStateChangeSubject.next(state);\n }\n\n public onEntityOpened(entity: EntityInfo): void {\n this.openEntity(entity);\n }\n\n public onOpenRecord(event: {EntityName: string, RecordID: string}): void {\n this.OpenEntityRecord.emit({\n EntityName: event.EntityName,\n RecordPKey: new CompositeKey([{FieldName: 'ID', Value: event.RecordID}])\n });\n }\n\n public openEntity(entity: EntityInfo): void {\n this.Interaction.emit({\n type: 'openEntity',\n entity: entity,\n data: { entityId: entity.ID, entityName: entity.Name }\n });\n }\n\n /**\n * Load ERD state from MJ: User Settings entity using UserInfoEngine for cached access\n */\n private async loadStateFromUserSettings(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) {\n this.NotifyLoadComplete();\n return;\n }\n\n const engine = UserInfoEngine.Instance;\n\n // Find setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n if (this.userSettingEntity.Value) {\n const savedState = JSON.parse(this.userSettingEntity.Value) as Partial<ERDCompositeState>;\n if (this.erdComposite) {\n this.erdComposite.loadUserState(savedState);\n }\n }\n }\n\n this.NotifyLoadComplete();\n } catch (error) {\n console.warn('Failed to load ERD state from User Settings:', error);\n this.NotifyLoadComplete();\n }\n }\n\n /**\n * Save ERD state to MJ: User Settings entity using UserInfoEngine for cached lookup\n */\n private async saveStateToUserSettings(state: ERDCompositeState): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Find existing setting from cached user settings if not already loaded\n if (!this.userSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n } else {\n this.userSettingEntity = await this.metadata.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.userSettingEntity.UserID = userId;\n this.userSettingEntity.Setting = ERD_SETTINGS_KEY;\n }\n }\n\n // Save the state as JSON\n this.userSettingEntity.Value = JSON.stringify(state);\n await this.userSettingEntity.Save();\n } catch (error) {\n console.warn('Failed to save ERD state to User Settings:', error);\n }\n }\n}\n","<div class=\"entity-admin-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <span class=\"visible-entities-count\">{{ filteredEntities.length }} visible entities</span>\n </div>\n <div class=\"header-controls\">\n <button \n class=\"control-btn\" \n (click)=\"toggleFilterPanel()\" \n [class.active]=\"filterPanelVisible\"\n title=\"Toggle Filters\">\n <span class=\"fa-solid fa-filter\"></span>\n Filters\n </button>\n </div>\n </div>\n \n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n }\n \n @if (error) {\n <div class=\"error-container\">\n <p class=\"error-message\">{{ error }}</p>\n </div>\n }\n \n @if (!isLoading && !error) {\n <div class=\"dashboard-content\">\n <mj-erd-composite \n #erdComposite\n [isRefreshingERD]=\"isRefreshingERD\"\n (stateChange)=\"onStateChange($event)\"\n (userStateChange)=\"onUserStateChange($event)\"\n (entityOpened)=\"onEntityOpened($event)\"\n (openRecord)=\"onOpenRecord($event)\"\n >\n </mj-erd-composite>\n </div>\n }\n</div>"]}
1
+ {"version":3,"file":"entity-admin-dashboard.component.js","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts","../../src/EntityAdmin/entity-admin-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { EntityInfo, CompositeKey, Metadata } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { ERDCompositeComponent, ERDCompositeState } from '@memberjunction/ng-entity-relationship-diagram';\nimport { ResourceData, MJUserSettingEntity, UserInfoEngine } from '@memberjunction/core-entities';\n\n/** Settings key for ERD state persistence */\nconst ERD_SETTINGS_KEY = 'MJ.Admin.Entity.ERD';\n\n@Component({\n standalone: false,\n selector: 'mj-entity-admin-dashboard',\n templateUrl: './entity-admin-dashboard.component.html',\n styleUrls: ['./entity-admin-dashboard.component.css']\n})\n@RegisterClass(BaseDashboard, 'EntityAdmin')\nexport class EntityAdminDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n @ViewChild('erdComposite', { static: false }) erdComposite!: ERDCompositeComponent;\n\n public isLoading = false;\n public isRefreshingERD = false;\n public loadingMessage = '';\n public error: string | null = null;\n\n // Filter panel visibility for header controls\n public filterPanelVisible = true;\n public selectedEntity: EntityInfo | null = null;\n public filteredEntities: EntityInfo[] = [];\n\n // State management\n private userStateChangeSubject = new Subject<ERDCompositeState>();\n private hasLoadedUserState = false;\n private metadata = this.ProviderToUse;\n private userSettingEntity: MJUserSettingEntity | null = null;\n\n ngAfterViewInit(): void {\n // Setup debounced state persistence to MJ: User Settings\n this.userStateChangeSubject.pipe(\n debounceTime(1000)\n ).subscribe(state => {\n this.saveStateToUserSettings(state);\n });\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return \"Entity Administration\"\n }\n\n override ngOnDestroy(): void {\n this.userStateChangeSubject.complete();\n super.ngOnDestroy();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard - called by BaseDashboard\n }\n\n protected loadData(): void {\n // Data loading is handled by ERDCompositeComponent\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n if (this.erdComposite) {\n this.erdComposite.onToggleFilterPanel();\n }\n }\n\n public onStateChange(state: ERDCompositeState): void {\n // Update local state to keep header controls in sync\n this.filterPanelVisible = state.filterPanelVisible;\n this.filteredEntities = this.erdComposite?.filteredEntities || [];\n\n if (state.selectedEntityId && this.erdComposite) {\n this.selectedEntity = this.erdComposite.entities.find(e => UUIDsEqual(e.ID, state.selectedEntityId)) || null;\n } else {\n this.selectedEntity = null;\n }\n\n // Load user state when data becomes available for the first time\n if (this.erdComposite?.isDataLoaded && !this.hasLoadedUserState) {\n this.hasLoadedUserState = true;\n this.loadStateFromUserSettings();\n }\n }\n\n public onUserStateChange(state: ERDCompositeState): void {\n // Queue state for debounced persistence\n this.userStateChangeSubject.next(state);\n }\n\n public onEntityOpened(entity: EntityInfo): void {\n this.openEntity(entity);\n }\n\n public onOpenRecord(event: {EntityName: string, RecordID: string}): void {\n this.OpenEntityRecord.emit({\n EntityName: event.EntityName,\n RecordPKey: new CompositeKey([{FieldName: 'ID', Value: event.RecordID}])\n });\n }\n\n public openEntity(entity: EntityInfo): void {\n this.Interaction.emit({\n type: 'openEntity',\n entity: entity,\n data: { entityId: entity.ID, entityName: entity.Name }\n });\n }\n\n /**\n * Load ERD state from MJ: User Settings entity using UserInfoEngine for cached access\n */\n private async loadStateFromUserSettings(): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) {\n this.NotifyLoadComplete();\n return;\n }\n\n const engine = UserInfoEngine.Instance;\n\n // Find setting from cached user settings\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n if (this.userSettingEntity.Value) {\n const savedState = JSON.parse(this.userSettingEntity.Value) as Partial<ERDCompositeState>;\n if (this.erdComposite) {\n this.erdComposite.loadUserState(savedState);\n }\n }\n }\n\n this.NotifyLoadComplete();\n } catch (error) {\n console.warn('Failed to load ERD state from User Settings:', error);\n this.NotifyLoadComplete();\n }\n }\n\n /**\n * Save ERD state to MJ: User Settings entity using UserInfoEngine for cached lookup\n */\n private async saveStateToUserSettings(state: ERDCompositeState): Promise<void> {\n try {\n const userId = this.metadata.CurrentUser?.ID;\n if (!userId) return;\n\n // Find existing setting from cached user settings if not already loaded\n if (!this.userSettingEntity) {\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === ERD_SETTINGS_KEY);\n\n if (setting) {\n this.userSettingEntity = setting;\n } else {\n this.userSettingEntity = await this.metadata.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n this.userSettingEntity.UserID = userId;\n this.userSettingEntity.Setting = ERD_SETTINGS_KEY;\n }\n }\n\n // Save the state as JSON\n this.userSettingEntity.Value = JSON.stringify(state);\n await this.userSettingEntity.Save();\n } catch (error) {\n console.warn('Failed to save ERD state to User Settings:', error);\n }\n }\n}\n","<div class=\"entity-admin-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <span class=\"visible-entities-count\">{{ filteredEntities.length }} visible entities</span>\n </div>\n <div class=\"header-controls\">\n <button \n class=\"control-btn\" \n (click)=\"toggleFilterPanel()\" \n [class.active]=\"filterPanelVisible\"\n title=\"Toggle Filters\">\n <span class=\"fa-solid fa-filter\"></span>\n Filters\n </button>\n </div>\n </div>\n \n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n }\n \n @if (error) {\n <div class=\"error-container\">\n <p class=\"error-message\">{{ error }}</p>\n </div>\n }\n \n @if (!isLoading && !error) {\n <div class=\"dashboard-content\">\n <mj-erd-composite \n #erdComposite\n [isRefreshingERD]=\"isRefreshingERD\"\n (stateChange)=\"onStateChange($event)\"\n (userStateChange)=\"onUserStateChange($event)\"\n (entityOpened)=\"onEntityOpened($event)\"\n (openRecord)=\"onOpenRecord($event)\"\n >\n </mj-erd-composite>\n </div>\n }\n</div>"]}
@@ -1,4 +1,5 @@
1
1
  import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
2
3
  import * as i0 from "@angular/core";
3
4
  /**
4
5
  * One row in the param configuration table — either a preset-value or a runtime-prompted param.
@@ -26,7 +27,7 @@ export interface ActionPinConfigResult {
26
27
  RuntimeParamNames: string[];
27
28
  };
28
29
  }
29
- export declare class ActionPinConfigDialogComponent implements OnChanges {
30
+ export declare class ActionPinConfigDialogComponent extends BaseAngularComponent implements OnChanges {
30
31
  private cdr;
31
32
  Visible: boolean;
32
33
  ActionID: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"action-pin-config-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;;AAIvI;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,EAAE;QACF,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;CACL;AA0BD,qBAOa,8BAA+B,YAAW,SAAS;IAmBhD,OAAO,CAAC,GAAG;IAlBd,OAAO,UAAS;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,MAAM,sCAA6C;IAE7D,SAAgB,YAAY;;;QAAiB;IAC7C,SAAgB,aAAa,WAAmB;IAEzC,WAAW,SAAM;IACjB,WAAW,EAAE,MAAM,CAA0B;IAC7C,MAAM,SAAsB;IAE5B,MAAM,EAAE,oBAAoB,EAAE,CAAM;IAEpC,eAAe,UAAS;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOzC,OAAO,CAAC,UAAU;YASJ,UAAU;IAgCxB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,YAAY,CAAC,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI;IAK3E,OAAO,IAAI,OAAO;IAQlB,IAAI,IAAI,IAAI;IAyBZ,MAAM,IAAI,IAAI;yCArHL,8BAA8B;2CAA9B,8BAA8B;CAwH1C"}
1
+ {"version":3,"file":"action-pin-config-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;AAGvI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,EAAE;QACF,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;CACL;AA0BD,qBAOa,8BAA+B,SAAQ,oBAAqB,YAAW,SAAS;IAmB7E,OAAO,CAAC,GAAG;IAlBd,OAAO,UAAS;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,MAAM,sCAA6C;IAE7D,SAAgB,YAAY;;;QAAiB;IAC7C,SAAgB,aAAa,WAAmB;IAEzC,WAAW,SAAM;IACjB,WAAW,EAAE,MAAM,CAA0B;IAC7C,MAAM,SAAsB;IAE5B,MAAM,EAAE,oBAAoB,EAAE,CAAM;IAEpC,eAAe,UAAS;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOzC,OAAO,CAAC,UAAU;YASJ,UAAU;IAgCxB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhC,YAAY,CAAC,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI;IAK3E,OAAO,IAAI,OAAO;IAQlB,IAAI,IAAI,IAAI;IAyBZ,MAAM,IAAI,IAAI;yCArHL,8BAA8B;2CAA9B,8BAA8B;CAwH1C"}
@@ -1,5 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';
2
2
  import { RunView } from '@memberjunction/core';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/forms";
5
6
  const _forTrack0 = ($index, $item) => $item.value;
@@ -254,7 +255,7 @@ const FA_ICON_PALETTE = [
254
255
  'fa-solid fa-brain', 'fa-solid fa-microchip', 'fa-solid fa-server',
255
256
  'fa-solid fa-cloud', 'fa-solid fa-cube', 'fa-solid fa-thumbtack'
256
257
  ];
257
- export class ActionPinConfigDialogComponent {
258
+ export class ActionPinConfigDialogComponent extends BaseAngularComponent {
258
259
  cdr;
259
260
  Visible = false;
260
261
  ActionID = null;
@@ -270,6 +271,7 @@ export class ActionPinConfigDialogComponent {
270
271
  IsLoadingParams = false;
271
272
  ErrorMessage = null;
272
273
  constructor(cdr) {
274
+ super();
273
275
  this.cdr = cdr;
274
276
  }
275
277
  ngOnChanges(changes) {
@@ -292,7 +294,7 @@ export class ActionPinConfigDialogComponent {
292
294
  this.IsLoadingParams = true;
293
295
  this.cdr.markForCheck();
294
296
  try {
295
- const rv = new RunView();
297
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
296
298
  const result = await rv.RunView({
297
299
  EntityName: 'MJ: Action Params',
298
300
  ExtraFilter: `ActionID='${this.ActionID}' AND (Type='Input' OR Type='Both')`,
@@ -372,7 +374,7 @@ export class ActionPinConfigDialogComponent {
372
374
  this.Result.emit({ Action: 'cancel' });
373
375
  }
374
376
  static ɵfac = function ActionPinConfigDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionPinConfigDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
375
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinConfigDialogComponent, selectors: [["mj-action-pin-config-dialog"]], inputs: { Visible: "Visible", ActionID: "ActionID", ActionName: "ActionName", ActionDescription: "ActionDescription" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apc-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", "aria-labelledby", "apc-title", 1, "apc-dialog"], [1, "apc-header"], ["id", "apc-title"], [1, "fa-solid", "fa-thumbtack"], ["aria-label", "Close", 1, "apc-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "apc-body"], [1, "apc-action-chip"], [1, "fa-solid", "fa-bolt"], [1, "apc-preview"], [1, "apc-preview-card"], [1, "apc-preview-icon"], [1, "apc-preview-title"], [1, "apc-preview-hint"], [1, "apc-field"], ["for", "apc-name"], ["id", "apc-name", "type", "text", "placeholder", "e.g. Run Weekly Sales Report", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "apc-color-grid"], ["type", "button", 1, "apc-color-swatch", 3, "selected", "background"], [1, "apc-icon-grid"], ["type", "button", 1, "apc-icon-swatch", 3, "selected"], [1, "apc-params-loading"], [1, "apc-params-empty"], [1, "apc-error"], [1, "apc-footer"], ["type", "button", 1, "apc-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apc-btn", 3, "click"], ["type", "button", 1, "apc-color-swatch", 3, "click"], [1, "fa-solid", "fa-check"], ["type", "button", 1, "apc-icon-swatch", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "apc-params-help"], [1, "apc-params-table"], [1, "apc-param-row"], [1, "apc-param-info"], [1, "apc-param-name"], [1, "apc-param-req"], [1, "apc-param-desc"], [1, "apc-param-mode"], [1, "apc-mode-option"], ["type", "radio", 3, "change", "name", "checked"], [1, "apc-param-value"], ["type", "text", 1, "mj-input", 3, "ngModel", "placeholder"], [1, "apc-runtime-hint"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder"], [1, "fa-solid", "fa-keyboard"], [1, "fa-solid", "fa-triangle-exclamation"]], template: function ActionPinConfigDialogComponent_Template(rf, ctx) { if (rf & 1) {
377
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinConfigDialogComponent, selectors: [["mj-action-pin-config-dialog"]], inputs: { Visible: "Visible", ActionID: "ActionID", ActionName: "ActionName", ActionDescription: "ActionDescription" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apc-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", "aria-labelledby", "apc-title", 1, "apc-dialog"], [1, "apc-header"], ["id", "apc-title"], [1, "fa-solid", "fa-thumbtack"], ["aria-label", "Close", 1, "apc-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "apc-body"], [1, "apc-action-chip"], [1, "fa-solid", "fa-bolt"], [1, "apc-preview"], [1, "apc-preview-card"], [1, "apc-preview-icon"], [1, "apc-preview-title"], [1, "apc-preview-hint"], [1, "apc-field"], ["for", "apc-name"], ["id", "apc-name", "type", "text", "placeholder", "e.g. Run Weekly Sales Report", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "apc-color-grid"], ["type", "button", 1, "apc-color-swatch", 3, "selected", "background"], [1, "apc-icon-grid"], ["type", "button", 1, "apc-icon-swatch", 3, "selected"], [1, "apc-params-loading"], [1, "apc-params-empty"], [1, "apc-error"], [1, "apc-footer"], ["type", "button", 1, "apc-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apc-btn", 3, "click"], ["type", "button", 1, "apc-color-swatch", 3, "click"], [1, "fa-solid", "fa-check"], ["type", "button", 1, "apc-icon-swatch", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "apc-params-help"], [1, "apc-params-table"], [1, "apc-param-row"], [1, "apc-param-info"], [1, "apc-param-name"], [1, "apc-param-req"], [1, "apc-param-desc"], [1, "apc-param-mode"], [1, "apc-mode-option"], ["type", "radio", 3, "change", "name", "checked"], [1, "apc-param-value"], ["type", "text", 1, "mj-input", 3, "ngModel", "placeholder"], [1, "apc-runtime-hint"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder"], [1, "fa-solid", "fa-keyboard"], [1, "fa-solid", "fa-triangle-exclamation"]], template: function ActionPinConfigDialogComponent_Template(rf, ctx) { if (rf & 1) {
376
378
  i0.ɵɵconditionalCreate(0, ActionPinConfigDialogComponent_Conditional_0_Template, 50, 10);
377
379
  } if (rf & 2) {
378
380
  i0.ɵɵconditional(ctx.Visible ? 0 : -1);
@@ -392,5 +394,5 @@ export class ActionPinConfigDialogComponent {
392
394
  }], Result: [{
393
395
  type: Output
394
396
  }] }); })();
395
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionPinConfigDialogComponent, { className: "ActionPinConfigDialogComponent", filePath: "src/Home/action-pin-config-dialog.component.ts", lineNumber: 64 }); })();
397
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionPinConfigDialogComponent, { className: "ActionPinConfigDialogComponent", filePath: "src/Home/action-pin-config-dialog.component.ts", lineNumber: 65 }); })();
396
398
  //# sourceMappingURL=action-pin-config-dialog.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-pin-config-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts","../../src/Home/action-pin-config-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { RunView } from '@memberjunction/core';\nimport { MJActionParamEntity } from '@memberjunction/core-entities';\n\n/**\n * One row in the param configuration table — either a preset-value or a runtime-prompted param.\n */\nexport interface ActionPinParamConfig {\n Name: string;\n Description: string;\n IsRequired: boolean;\n DefaultValue: string;\n Mode: 'preset' | 'runtime';\n PresetValue: string;\n}\n\n/**\n * Payload returned when the user saves the dialog.\n */\nexport interface ActionPinConfigResult {\n Action: 'save' | 'cancel';\n Pin?: {\n DisplayName: string;\n ActionID: string;\n ActionName: string;\n AccentColor: string;\n FaIcon: string;\n PresetParams: Record<string, string>;\n RuntimeParamNames: string[];\n };\n}\n\nconst COLOR_PALETTE = [\n { name: 'Indigo', value: '#4F46E5' },\n { name: 'Emerald', value: '#10B981' },\n { name: 'Rose', value: '#F43F5E' },\n { name: 'Amber', value: '#F59E0B' },\n { name: 'Sky', value: '#0EA5E9' },\n { name: 'Violet', value: '#8B5CF6' },\n { name: 'Teal', value: '#14B8A6' },\n { name: 'Slate', value: '#475569' }\n];\n\nconst FA_ICON_PALETTE = [\n 'fa-solid fa-bolt', 'fa-solid fa-rocket', 'fa-solid fa-wand-magic-sparkles',\n 'fa-solid fa-robot', 'fa-solid fa-gears', 'fa-solid fa-play',\n 'fa-solid fa-bullhorn', 'fa-solid fa-envelope', 'fa-solid fa-chart-line',\n 'fa-solid fa-file-export', 'fa-solid fa-file-import', 'fa-solid fa-database',\n 'fa-solid fa-code', 'fa-solid fa-terminal', 'fa-solid fa-paper-plane',\n 'fa-solid fa-camera', 'fa-solid fa-image', 'fa-solid fa-bell',\n 'fa-solid fa-flag', 'fa-solid fa-star', 'fa-solid fa-heart',\n 'fa-solid fa-bookmark', 'fa-solid fa-tag', 'fa-solid fa-lightbulb',\n 'fa-solid fa-brain', 'fa-solid fa-microchip', 'fa-solid fa-server',\n 'fa-solid fa-cloud', 'fa-solid fa-cube', 'fa-solid fa-thumbtack'\n];\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-config-dialog',\n templateUrl: './action-pin-config-dialog.component.html',\n styleUrls: ['./action-pin-config-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinConfigDialogComponent implements OnChanges {\n @Input() Visible = false;\n @Input() ActionID: string | null = null;\n @Input() ActionName: string | null = null;\n @Input() ActionDescription: string | null = null;\n @Output() Result = new EventEmitter<ActionPinConfigResult>();\n\n public readonly ColorPalette = COLOR_PALETTE;\n public readonly FaIconPalette = FA_ICON_PALETTE;\n\n public DisplayName = '';\n public AccentColor: string = COLOR_PALETTE[0].value;\n public FaIcon = FA_ICON_PALETTE[0];\n\n public Params: ActionPinParamConfig[] = [];\n\n public IsLoadingParams = false;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.ActionID) {\n this.resetState();\n this.loadParams();\n }\n }\n\n private resetState(): void {\n this.DisplayName = this.ActionName ?? '';\n this.AccentColor = COLOR_PALETTE[0].value;\n this.FaIcon = FA_ICON_PALETTE[0];\n this.Params = [];\n this.ErrorMessage = null;\n this.IsLoadingParams = false;\n }\n\n private async loadParams(): Promise<void> {\n if (!this.ActionID) return;\n this.IsLoadingParams = true;\n this.cdr.markForCheck();\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.ActionID}' AND (Type='Input' OR Type='Both')`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (!result.Success) {\n this.ErrorMessage = `Could not load parameters: ${result.ErrorMessage}`;\n return;\n }\n this.Params = (result.Results ?? []).map(p => ({\n Name: p.Name,\n Description: p.Description ?? '',\n IsRequired: p.IsRequired,\n DefaultValue: p.DefaultValue ?? '',\n Mode: p.IsRequired ? 'preset' : 'runtime',\n PresetValue: p.DefaultValue ?? ''\n }));\n } catch (err) {\n this.ErrorMessage = `Failed to load action parameters: ${(err as Error).message}`;\n } finally {\n this.IsLoadingParams = false;\n this.cdr.markForCheck();\n }\n }\n\n SelectColor(hex: string): void {\n this.AccentColor = hex;\n this.cdr.markForCheck();\n }\n\n SelectFaIcon(icon: string): void {\n this.FaIcon = icon;\n this.cdr.markForCheck();\n }\n\n SetParamMode(param: ActionPinParamConfig, mode: 'preset' | 'runtime'): void {\n param.Mode = mode;\n this.cdr.markForCheck();\n }\n\n CanSave(): boolean {\n if (!this.DisplayName.trim()) return false;\n for (const p of this.Params) {\n if (p.Mode === 'preset' && p.IsRequired && !p.PresetValue.trim()) return false;\n }\n return true;\n }\n\n Save(): void {\n if (!this.CanSave() || !this.ActionID || !this.ActionName) return;\n const presetParams: Record<string, string> = {};\n const runtimeParamNames: string[] = [];\n for (const p of this.Params) {\n if (p.Mode === 'preset') {\n if (p.PresetValue.trim() !== '') presetParams[p.Name] = p.PresetValue;\n } else {\n runtimeParamNames.push(p.Name);\n }\n }\n this.Result.emit({\n Action: 'save',\n Pin: {\n DisplayName: this.DisplayName.trim(),\n ActionID: this.ActionID,\n ActionName: this.ActionName,\n AccentColor: this.AccentColor,\n FaIcon: this.FaIcon,\n PresetParams: presetParams,\n RuntimeParamNames: runtimeParamNames\n }\n });\n }\n\n Cancel(): void {\n this.Result.emit({ Action: 'cancel' });\n }\n}\n","@if (Visible) {\n <div class=\"apc-backdrop\" (click)=\"Cancel()\"></div>\n <div class=\"apc-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"apc-title\">\n <div class=\"apc-header\">\n <h3 id=\"apc-title\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n Pin Action\n </h3>\n <button class=\"apc-close\" (click)=\"Cancel()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apc-body\">\n <div class=\"apc-action-chip\">\n <i class=\"fa-solid fa-bolt\"></i>\n <span>{{ ActionName }}</span>\n </div>\n\n <div class=\"apc-preview\">\n <div class=\"apc-preview-card\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apc-preview-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apc-preview-title\">{{ DisplayName || 'Untitled pin' }}</div>\n </div>\n <div class=\"apc-preview-hint\">Live preview of how your pin will look on Home</div>\n </div>\n\n <div class=\"apc-field\">\n <label for=\"apc-name\">Pin title</label>\n <input id=\"apc-name\" type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"DisplayName\"\n placeholder=\"e.g. Run Weekly Sales Report\" />\n </div>\n\n <div class=\"apc-field\">\n <label>Accent color</label>\n <div class=\"apc-color-grid\">\n @for (c of ColorPalette; track c.value) {\n <button type=\"button\"\n class=\"apc-color-swatch\"\n [class.selected]=\"AccentColor === c.value\"\n [style.background]=\"c.value\"\n [attr.aria-label]=\"c.name\"\n (click)=\"SelectColor(c.value)\">\n @if (AccentColor === c.value) {\n <i class=\"fa-solid fa-check\"></i>\n }\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Icon</label>\n <div class=\"apc-icon-grid\">\n @for (icon of FaIconPalette; track icon) {\n <button type=\"button\"\n class=\"apc-icon-swatch\"\n [class.selected]=\"FaIcon === icon\"\n (click)=\"SelectFaIcon(icon)\">\n <i [class]=\"icon\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Parameters</label>\n @if (IsLoadingParams) {\n <div class=\"apc-params-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading parameters…\n </div>\n } @else if (Params.length === 0) {\n <div class=\"apc-params-empty\">This action takes no input parameters.</div>\n } @else {\n <div class=\"apc-params-help\">\n Choose which parameters are <strong>preset</strong> (baked into the pin) vs.\n <strong>prompted at runtime</strong> each time the pin is clicked.\n </div>\n <div class=\"apc-params-table\">\n @for (p of Params; track p.Name) {\n <div class=\"apc-param-row\">\n <div class=\"apc-param-info\">\n <div class=\"apc-param-name\">\n {{ p.Name }}\n @if (p.IsRequired) { <span class=\"apc-param-req\">required</span> }\n </div>\n @if (p.Description) {\n <div class=\"apc-param-desc\">{{ p.Description }}</div>\n }\n </div>\n <div class=\"apc-param-mode\">\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'preset'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'preset'\"\n (change)=\"SetParamMode(p, 'preset')\" />\n <span>Preset</span>\n </label>\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'runtime'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'runtime'\"\n (change)=\"SetParamMode(p, 'runtime')\" />\n <span>Prompt</span>\n </label>\n </div>\n <div class=\"apc-param-value\">\n @if (p.Mode === 'preset') {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"p.PresetValue\"\n [placeholder]=\"p.DefaultValue || 'Preset value'\" />\n } @else {\n <span class=\"apc-runtime-hint\">\n <i class=\"fa-solid fa-keyboard\"></i> Asked at click time\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n @if (ErrorMessage) {\n <div class=\"apc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apc-footer\">\n <button type=\"button\" class=\"apc-btn primary\"\n [disabled]=\"!CanSave()\"\n (click)=\"Save()\">\n <i class=\"fa-solid fa-thumbtack\"></i> Pin to Home\n </button>\n <button type=\"button\" class=\"apc-btn\" (click)=\"Cancel()\">\n Cancel\n </button>\n </div>\n </div>\n}\n"]}
1
+ {"version":3,"file":"action-pin-config-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-config-dialog.component.ts","../../src/Home/action-pin-config-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { RunView } from '@memberjunction/core';\nimport { MJActionParamEntity } from '@memberjunction/core-entities';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/**\n * One row in the param configuration table — either a preset-value or a runtime-prompted param.\n */\nexport interface ActionPinParamConfig {\n Name: string;\n Description: string;\n IsRequired: boolean;\n DefaultValue: string;\n Mode: 'preset' | 'runtime';\n PresetValue: string;\n}\n\n/**\n * Payload returned when the user saves the dialog.\n */\nexport interface ActionPinConfigResult {\n Action: 'save' | 'cancel';\n Pin?: {\n DisplayName: string;\n ActionID: string;\n ActionName: string;\n AccentColor: string;\n FaIcon: string;\n PresetParams: Record<string, string>;\n RuntimeParamNames: string[];\n };\n}\n\nconst COLOR_PALETTE = [\n { name: 'Indigo', value: '#4F46E5' },\n { name: 'Emerald', value: '#10B981' },\n { name: 'Rose', value: '#F43F5E' },\n { name: 'Amber', value: '#F59E0B' },\n { name: 'Sky', value: '#0EA5E9' },\n { name: 'Violet', value: '#8B5CF6' },\n { name: 'Teal', value: '#14B8A6' },\n { name: 'Slate', value: '#475569' }\n];\n\nconst FA_ICON_PALETTE = [\n 'fa-solid fa-bolt', 'fa-solid fa-rocket', 'fa-solid fa-wand-magic-sparkles',\n 'fa-solid fa-robot', 'fa-solid fa-gears', 'fa-solid fa-play',\n 'fa-solid fa-bullhorn', 'fa-solid fa-envelope', 'fa-solid fa-chart-line',\n 'fa-solid fa-file-export', 'fa-solid fa-file-import', 'fa-solid fa-database',\n 'fa-solid fa-code', 'fa-solid fa-terminal', 'fa-solid fa-paper-plane',\n 'fa-solid fa-camera', 'fa-solid fa-image', 'fa-solid fa-bell',\n 'fa-solid fa-flag', 'fa-solid fa-star', 'fa-solid fa-heart',\n 'fa-solid fa-bookmark', 'fa-solid fa-tag', 'fa-solid fa-lightbulb',\n 'fa-solid fa-brain', 'fa-solid fa-microchip', 'fa-solid fa-server',\n 'fa-solid fa-cloud', 'fa-solid fa-cube', 'fa-solid fa-thumbtack'\n];\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-config-dialog',\n templateUrl: './action-pin-config-dialog.component.html',\n styleUrls: ['./action-pin-config-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinConfigDialogComponent extends BaseAngularComponent implements OnChanges {\n @Input() Visible = false;\n @Input() ActionID: string | null = null;\n @Input() ActionName: string | null = null;\n @Input() ActionDescription: string | null = null;\n @Output() Result = new EventEmitter<ActionPinConfigResult>();\n\n public readonly ColorPalette = COLOR_PALETTE;\n public readonly FaIconPalette = FA_ICON_PALETTE;\n\n public DisplayName = '';\n public AccentColor: string = COLOR_PALETTE[0].value;\n public FaIcon = FA_ICON_PALETTE[0];\n\n public Params: ActionPinParamConfig[] = [];\n\n public IsLoadingParams = false;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.ActionID) {\n this.resetState();\n this.loadParams();\n }\n }\n\n private resetState(): void {\n this.DisplayName = this.ActionName ?? '';\n this.AccentColor = COLOR_PALETTE[0].value;\n this.FaIcon = FA_ICON_PALETTE[0];\n this.Params = [];\n this.ErrorMessage = null;\n this.IsLoadingParams = false;\n }\n\n private async loadParams(): Promise<void> {\n if (!this.ActionID) return;\n this.IsLoadingParams = true;\n this.cdr.markForCheck();\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.ActionID}' AND (Type='Input' OR Type='Both')`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (!result.Success) {\n this.ErrorMessage = `Could not load parameters: ${result.ErrorMessage}`;\n return;\n }\n this.Params = (result.Results ?? []).map(p => ({\n Name: p.Name,\n Description: p.Description ?? '',\n IsRequired: p.IsRequired,\n DefaultValue: p.DefaultValue ?? '',\n Mode: p.IsRequired ? 'preset' : 'runtime',\n PresetValue: p.DefaultValue ?? ''\n }));\n } catch (err) {\n this.ErrorMessage = `Failed to load action parameters: ${(err as Error).message}`;\n } finally {\n this.IsLoadingParams = false;\n this.cdr.markForCheck();\n }\n }\n\n SelectColor(hex: string): void {\n this.AccentColor = hex;\n this.cdr.markForCheck();\n }\n\n SelectFaIcon(icon: string): void {\n this.FaIcon = icon;\n this.cdr.markForCheck();\n }\n\n SetParamMode(param: ActionPinParamConfig, mode: 'preset' | 'runtime'): void {\n param.Mode = mode;\n this.cdr.markForCheck();\n }\n\n CanSave(): boolean {\n if (!this.DisplayName.trim()) return false;\n for (const p of this.Params) {\n if (p.Mode === 'preset' && p.IsRequired && !p.PresetValue.trim()) return false;\n }\n return true;\n }\n\n Save(): void {\n if (!this.CanSave() || !this.ActionID || !this.ActionName) return;\n const presetParams: Record<string, string> = {};\n const runtimeParamNames: string[] = [];\n for (const p of this.Params) {\n if (p.Mode === 'preset') {\n if (p.PresetValue.trim() !== '') presetParams[p.Name] = p.PresetValue;\n } else {\n runtimeParamNames.push(p.Name);\n }\n }\n this.Result.emit({\n Action: 'save',\n Pin: {\n DisplayName: this.DisplayName.trim(),\n ActionID: this.ActionID,\n ActionName: this.ActionName,\n AccentColor: this.AccentColor,\n FaIcon: this.FaIcon,\n PresetParams: presetParams,\n RuntimeParamNames: runtimeParamNames\n }\n });\n }\n\n Cancel(): void {\n this.Result.emit({ Action: 'cancel' });\n }\n}\n","@if (Visible) {\n <div class=\"apc-backdrop\" (click)=\"Cancel()\"></div>\n <div class=\"apc-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"apc-title\">\n <div class=\"apc-header\">\n <h3 id=\"apc-title\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n Pin Action\n </h3>\n <button class=\"apc-close\" (click)=\"Cancel()\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apc-body\">\n <div class=\"apc-action-chip\">\n <i class=\"fa-solid fa-bolt\"></i>\n <span>{{ ActionName }}</span>\n </div>\n\n <div class=\"apc-preview\">\n <div class=\"apc-preview-card\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apc-preview-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apc-preview-title\">{{ DisplayName || 'Untitled pin' }}</div>\n </div>\n <div class=\"apc-preview-hint\">Live preview of how your pin will look on Home</div>\n </div>\n\n <div class=\"apc-field\">\n <label for=\"apc-name\">Pin title</label>\n <input id=\"apc-name\" type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"DisplayName\"\n placeholder=\"e.g. Run Weekly Sales Report\" />\n </div>\n\n <div class=\"apc-field\">\n <label>Accent color</label>\n <div class=\"apc-color-grid\">\n @for (c of ColorPalette; track c.value) {\n <button type=\"button\"\n class=\"apc-color-swatch\"\n [class.selected]=\"AccentColor === c.value\"\n [style.background]=\"c.value\"\n [attr.aria-label]=\"c.name\"\n (click)=\"SelectColor(c.value)\">\n @if (AccentColor === c.value) {\n <i class=\"fa-solid fa-check\"></i>\n }\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Icon</label>\n <div class=\"apc-icon-grid\">\n @for (icon of FaIconPalette; track icon) {\n <button type=\"button\"\n class=\"apc-icon-swatch\"\n [class.selected]=\"FaIcon === icon\"\n (click)=\"SelectFaIcon(icon)\">\n <i [class]=\"icon\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"apc-field\">\n <label>Parameters</label>\n @if (IsLoadingParams) {\n <div class=\"apc-params-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading parameters…\n </div>\n } @else if (Params.length === 0) {\n <div class=\"apc-params-empty\">This action takes no input parameters.</div>\n } @else {\n <div class=\"apc-params-help\">\n Choose which parameters are <strong>preset</strong> (baked into the pin) vs.\n <strong>prompted at runtime</strong> each time the pin is clicked.\n </div>\n <div class=\"apc-params-table\">\n @for (p of Params; track p.Name) {\n <div class=\"apc-param-row\">\n <div class=\"apc-param-info\">\n <div class=\"apc-param-name\">\n {{ p.Name }}\n @if (p.IsRequired) { <span class=\"apc-param-req\">required</span> }\n </div>\n @if (p.Description) {\n <div class=\"apc-param-desc\">{{ p.Description }}</div>\n }\n </div>\n <div class=\"apc-param-mode\">\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'preset'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'preset'\"\n (change)=\"SetParamMode(p, 'preset')\" />\n <span>Preset</span>\n </label>\n <label class=\"apc-mode-option\" [class.selected]=\"p.Mode === 'runtime'\">\n <input type=\"radio\"\n [name]=\"'mode-' + p.Name\"\n [checked]=\"p.Mode === 'runtime'\"\n (change)=\"SetParamMode(p, 'runtime')\" />\n <span>Prompt</span>\n </label>\n </div>\n <div class=\"apc-param-value\">\n @if (p.Mode === 'preset') {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"p.PresetValue\"\n [placeholder]=\"p.DefaultValue || 'Preset value'\" />\n } @else {\n <span class=\"apc-runtime-hint\">\n <i class=\"fa-solid fa-keyboard\"></i> Asked at click time\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n @if (ErrorMessage) {\n <div class=\"apc-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apc-footer\">\n <button type=\"button\" class=\"apc-btn primary\"\n [disabled]=\"!CanSave()\"\n (click)=\"Save()\">\n <i class=\"fa-solid fa-thumbtack\"></i> Pin to Home\n </button>\n <button type=\"button\" class=\"apc-btn\" (click)=\"Cancel()\">\n Cancel\n </button>\n </div>\n </div>\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
2
3
  import { HomeAppPinnedItem } from '@memberjunction/ng-shared';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
@@ -11,7 +12,7 @@ interface RuntimeField {
11
12
  Name: string;
12
13
  Value: string;
13
14
  }
14
- export declare class ActionPinRunnerDialogComponent implements OnChanges {
15
+ export declare class ActionPinRunnerDialogComponent extends BaseAngularComponent implements OnChanges {
15
16
  private cdr;
16
17
  Visible: boolean;
17
18
  Pin: HomeAppPinnedItem | null;
@@ -1 +1 @@
1
- {"version":3,"file":"action-pin-runner-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;AAIvI,OAAO,EAAE,iBAAiB,EAA0B,MAAM,2BAA2B,CAAC;;AAEtF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,IAAI,CAAC;CAChB;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAOa,8BAA+B,YAAW,SAAS;IAWhD,OAAO,CAAC,GAAG;IAVd,OAAO,UAAS;IAChB,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IACpC,MAAM,mCAA0C;IAEnD,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAQ;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMzC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,WAAW;IAUnB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,MAAM,IAAI,OAAO;IAOX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B1B,OAAO,CAAC,iBAAiB;IAazB,KAAK,IAAI,IAAI;yCAhGJ,8BAA8B;2CAA9B,8BAA8B;CAoG1C"}
1
+ {"version":3,"file":"action-pin-runner-dialog.component.d.ts","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;AAEvI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAA0B,MAAM,2BAA2B,CAAC;;AAEtF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,IAAI,CAAC;CAChB;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAOa,8BAA+B,SAAQ,oBAAqB,YAAW,SAAS;IAW7E,OAAO,CAAC,GAAG;IAVd,OAAO,UAAS;IAChB,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IACpC,MAAM,mCAA0C;IAEnD,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAQ;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMzC,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,WAAW;IAUnB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,MAAM,IAAI,OAAO;IAOX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B1B,OAAO,CAAC,iBAAiB;IAazB,KAAK,IAAI,IAAI;yCAhGJ,8BAA8B;2CAA9B,8BAA8B;CAoG1C"}
@@ -1,6 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';
2
- import { Metadata } from '@memberjunction/core';
3
2
  import { GraphQLActionClient } from '@memberjunction/graphql-dataprovider';
3
+ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/forms";
6
6
  const _forTrack0 = ($index, $item) => $item.Name;
@@ -170,7 +170,7 @@ function ActionPinRunnerDialogComponent_Conditional_0_Template(rf, ctx) { if (rf
170
170
  i0.ɵɵadvance(2);
171
171
  i0.ɵɵconditional(ctx_r1.RunSucceeded === null ? 17 : 18);
172
172
  } }
173
- export class ActionPinRunnerDialogComponent {
173
+ export class ActionPinRunnerDialogComponent extends BaseAngularComponent {
174
174
  cdr;
175
175
  Visible = false;
176
176
  Pin = null;
@@ -181,6 +181,7 @@ export class ActionPinRunnerDialogComponent {
181
181
  ResultMessage = null;
182
182
  ErrorMessage = null;
183
183
  constructor(cdr) {
184
+ super();
184
185
  this.cdr = cdr;
185
186
  }
186
187
  ngOnChanges(changes) {
@@ -232,7 +233,7 @@ export class ActionPinRunnerDialogComponent {
232
233
  this.cdr.markForCheck();
233
234
  try {
234
235
  const params = this.buildActionParams(cfg);
235
- const provider = Metadata.Provider;
236
+ const provider = this.ProviderToUse;
236
237
  const actionClient = new GraphQLActionClient(provider);
237
238
  const result = await actionClient.RunAction(cfg.actionId, params);
238
239
  this.RunSucceeded = result.Success;
@@ -265,7 +266,7 @@ export class ActionPinRunnerDialogComponent {
265
266
  this.Result.emit({ Closed: true });
266
267
  }
267
268
  static ɵfac = function ActionPinRunnerDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionPinRunnerDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
268
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinRunnerDialogComponent, selectors: [["mj-action-pin-runner-dialog"]], inputs: { Visible: "Visible", Pin: "Pin" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apr-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", 1, "apr-dialog"], [1, "apr-hero"], [1, "apr-hero-icon"], [1, "apr-hero-info"], [1, "apr-hero-title"], [1, "apr-hero-sub"], ["aria-label", "Close", 1, "apr-close", 3, "click", "disabled"], [1, "fa-solid", "fa-xmark"], [1, "apr-body"], [1, "apr-result", 3, "success", "failure"], [1, "apr-error"], [1, "apr-footer"], ["type", "button", 1, "apr-btn", "primary"], [1, "apr-no-fields"], [1, "fa-solid", "fa-circle-info"], [1, "apr-help"], [1, "apr-fields"], [1, "apr-field"], [3, "for"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "id", "ngModel", "disabled", "placeholder"], [1, "apr-result"], [1, "apr-result-icon"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "apr-result-text"], [1, "apr-result-title"], [1, "apr-result-msg"], [1, "fa-solid", "fa-triangle-exclamation"], ["type", "button", 1, "apr-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apr-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], ["type", "button", 1, "apr-btn", "primary", 3, "click"]], template: function ActionPinRunnerDialogComponent_Template(rf, ctx) { if (rf & 1) {
269
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionPinRunnerDialogComponent, selectors: [["mj-action-pin-runner-dialog"]], inputs: { Visible: "Visible", Pin: "Pin" }, outputs: { Result: "Result" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "apr-backdrop", 3, "click"], ["role", "dialog", "aria-modal", "true", 1, "apr-dialog"], [1, "apr-hero"], [1, "apr-hero-icon"], [1, "apr-hero-info"], [1, "apr-hero-title"], [1, "apr-hero-sub"], ["aria-label", "Close", 1, "apr-close", 3, "click", "disabled"], [1, "fa-solid", "fa-xmark"], [1, "apr-body"], [1, "apr-result", 3, "success", "failure"], [1, "apr-error"], [1, "apr-footer"], ["type", "button", 1, "apr-btn", "primary"], [1, "apr-no-fields"], [1, "fa-solid", "fa-circle-info"], [1, "apr-help"], [1, "apr-fields"], [1, "apr-field"], [3, "for"], ["type", "text", 1, "mj-input", 3, "ngModelChange", "id", "ngModel", "disabled", "placeholder"], [1, "apr-result"], [1, "apr-result-icon"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "apr-result-text"], [1, "apr-result-title"], [1, "apr-result-msg"], [1, "fa-solid", "fa-triangle-exclamation"], ["type", "button", 1, "apr-btn", "primary", 3, "click", "disabled"], ["type", "button", 1, "apr-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], ["type", "button", 1, "apr-btn", "primary", 3, "click"]], template: function ActionPinRunnerDialogComponent_Template(rf, ctx) { if (rf & 1) {
269
270
  i0.ɵɵconditionalCreate(0, ActionPinRunnerDialogComponent_Conditional_0_Template, 19, 10);
270
271
  } if (rf & 2) {
271
272
  i0.ɵɵconditional(ctx.Visible && ctx.Pin ? 0 : -1);
@@ -1 +1 @@
1
- {"version":3,"file":"action-pin-runner-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts","../../src/Home/action-pin-runner-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { Metadata } from '@memberjunction/core';\nimport { GraphQLActionClient, GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { ActionParam } from '@memberjunction/actions-base';\nimport { HomeAppPinnedItem, ActionPinConfiguration } from '@memberjunction/ng-shared';\n\n/**\n * Result emitted after the action finishes (or the dialog is cancelled).\n */\nexport interface ActionPinRunResult {\n Closed: true;\n}\n\ninterface RuntimeField {\n Name: string;\n Value: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-runner-dialog',\n templateUrl: './action-pin-runner-dialog.component.html',\n styleUrls: ['./action-pin-runner-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinRunnerDialogComponent implements OnChanges {\n @Input() Visible = false;\n @Input() Pin: HomeAppPinnedItem | null = null;\n @Output() Result = new EventEmitter<ActionPinRunResult>();\n\n public RuntimeFields: RuntimeField[] = [];\n public IsRunning = false;\n public RunSucceeded: boolean | null = null;\n public ResultMessage: string | null = null;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.Pin) {\n this.initFromPin();\n }\n }\n\n private getConfig(): ActionPinConfiguration | null {\n if (!this.Pin) return null;\n return this.Pin.Configuration as unknown as ActionPinConfiguration;\n }\n\n private initFromPin(): void {\n const cfg = this.getConfig();\n this.RuntimeFields = (cfg?.runtimeParamNames ?? []).map(name => ({ Name: name, Value: '' }));\n this.IsRunning = false;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n }\n\n get AccentColor(): string {\n return this.getConfig()?.accentColor ?? 'var(--mj-brand-primary)';\n }\n\n get FaIcon(): string {\n return this.Pin?.Icon ?? 'fa-solid fa-bolt';\n }\n\n get ActionName(): string {\n return this.getConfig()?.actionName ?? 'Action';\n }\n\n CanRun(): boolean {\n if (this.IsRunning) return false;\n // Runtime fields without values are allowed (action may handle missing params).\n // The action itself reports required-param errors via its result.\n return true;\n }\n\n async Run(): Promise<void> {\n const cfg = this.getConfig();\n if (!cfg || !cfg.actionId) {\n this.ErrorMessage = 'Pin is missing an actionId — cannot execute.';\n this.cdr.markForCheck();\n return;\n }\n\n this.IsRunning = true;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n\n try {\n const params = this.buildActionParams(cfg);\n const provider = Metadata.Provider as GraphQLDataProvider;\n const actionClient = new GraphQLActionClient(provider);\n const result = await actionClient.RunAction(cfg.actionId, params);\n this.RunSucceeded = result.Success;\n this.ResultMessage = result.Message ?? (result.Success ? 'Action completed.' : 'Action reported a failure.');\n } catch (err) {\n this.RunSucceeded = false;\n this.ErrorMessage = `Execution failed: ${(err as Error).message}`;\n } finally {\n this.IsRunning = false;\n this.cdr.markForCheck();\n }\n }\n\n private buildActionParams(cfg: ActionPinConfiguration): ActionParam[] {\n const params: ActionParam[] = [];\n for (const [name, value] of Object.entries(cfg.presetParams ?? {})) {\n params.push({ Name: name, Value: value, Type: 'Input' });\n }\n for (const f of this.RuntimeFields) {\n if (f.Value !== '') {\n params.push({ Name: f.Name, Value: f.Value, Type: 'Input' });\n }\n }\n return params;\n }\n\n Close(): void {\n if (this.IsRunning) return;\n this.Result.emit({ Closed: true });\n }\n}\n","@if (Visible && Pin) {\n <div class=\"apr-backdrop\" (click)=\"Close()\"></div>\n <div class=\"apr-dialog\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"apr-hero\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apr-hero-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apr-hero-info\">\n <div class=\"apr-hero-title\">{{ Pin.DisplayName }}</div>\n <div class=\"apr-hero-sub\">{{ ActionName }}</div>\n </div>\n <button class=\"apr-close\" (click)=\"Close()\" [disabled]=\"IsRunning\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apr-body\">\n @if (RunSucceeded === null) {\n @if (RuntimeFields.length === 0) {\n <div class=\"apr-no-fields\">\n <i class=\"fa-solid fa-circle-info\"></i>\n This action runs with all parameters preset — no input needed.\n </div>\n } @else {\n <div class=\"apr-help\">Provide values for the parameters below:</div>\n <div class=\"apr-fields\">\n @for (f of RuntimeFields; track f.Name) {\n <div class=\"apr-field\">\n <label [for]=\"'rf-' + f.Name\">{{ f.Name }}</label>\n <input [id]=\"'rf-' + f.Name\"\n type=\"text\"\n class=\"mj-input\"\n [(ngModel)]=\"f.Value\"\n [disabled]=\"IsRunning\"\n [placeholder]=\"'Enter ' + f.Name\" />\n </div>\n }\n </div>\n }\n } @else {\n <div class=\"apr-result\" [class.success]=\"RunSucceeded\" [class.failure]=\"!RunSucceeded\">\n <div class=\"apr-result-icon\">\n @if (RunSucceeded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"apr-result-text\">\n <div class=\"apr-result-title\">{{ RunSucceeded ? 'Action completed' : 'Action failed' }}</div>\n @if (ResultMessage) {\n <div class=\"apr-result-msg\">{{ ResultMessage }}</div>\n }\n </div>\n </div>\n }\n\n @if (ErrorMessage) {\n <div class=\"apr-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apr-footer\">\n @if (RunSucceeded === null) {\n <button type=\"button\" class=\"apr-btn primary\"\n [disabled]=\"!CanRun()\"\n [style.background]=\"AccentColor\"\n [style.border-color]=\"AccentColor\"\n (click)=\"Run()\">\n @if (IsRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run action\n }\n </button>\n <button type=\"button\" class=\"apr-btn\" [disabled]=\"IsRunning\" (click)=\"Close()\">\n Cancel\n </button>\n } @else {\n <button type=\"button\" class=\"apr-btn primary\" (click)=\"Close()\">\n Done\n </button>\n }\n </div>\n </div>\n}\n"]}
1
+ {"version":3,"file":"action-pin-runner-dialog.component.js","sourceRoot":"","sources":["../../src/Home/action-pin-runner-dialog.component.ts","../../src/Home/action-pin-runner-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\nimport { GraphQLActionClient, GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ActionParam } from '@memberjunction/actions-base';\nimport { HomeAppPinnedItem, ActionPinConfiguration } from '@memberjunction/ng-shared';\n\n/**\n * Result emitted after the action finishes (or the dialog is cancelled).\n */\nexport interface ActionPinRunResult {\n Closed: true;\n}\n\ninterface RuntimeField {\n Name: string;\n Value: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-pin-runner-dialog',\n templateUrl: './action-pin-runner-dialog.component.html',\n styleUrls: ['./action-pin-runner-dialog.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ActionPinRunnerDialogComponent extends BaseAngularComponent implements OnChanges {\n @Input() Visible = false;\n @Input() Pin: HomeAppPinnedItem | null = null;\n @Output() Result = new EventEmitter<ActionPinRunResult>();\n\n public RuntimeFields: RuntimeField[] = [];\n public IsRunning = false;\n public RunSucceeded: boolean | null = null;\n public ResultMessage: string | null = null;\n public ErrorMessage: string | null = null;\n\n constructor(private cdr: ChangeDetectorRef) { super(); }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Visible'] && this.Visible && this.Pin) {\n this.initFromPin();\n }\n }\n\n private getConfig(): ActionPinConfiguration | null {\n if (!this.Pin) return null;\n return this.Pin.Configuration as unknown as ActionPinConfiguration;\n }\n\n private initFromPin(): void {\n const cfg = this.getConfig();\n this.RuntimeFields = (cfg?.runtimeParamNames ?? []).map(name => ({ Name: name, Value: '' }));\n this.IsRunning = false;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n }\n\n get AccentColor(): string {\n return this.getConfig()?.accentColor ?? 'var(--mj-brand-primary)';\n }\n\n get FaIcon(): string {\n return this.Pin?.Icon ?? 'fa-solid fa-bolt';\n }\n\n get ActionName(): string {\n return this.getConfig()?.actionName ?? 'Action';\n }\n\n CanRun(): boolean {\n if (this.IsRunning) return false;\n // Runtime fields without values are allowed (action may handle missing params).\n // The action itself reports required-param errors via its result.\n return true;\n }\n\n async Run(): Promise<void> {\n const cfg = this.getConfig();\n if (!cfg || !cfg.actionId) {\n this.ErrorMessage = 'Pin is missing an actionId — cannot execute.';\n this.cdr.markForCheck();\n return;\n }\n\n this.IsRunning = true;\n this.RunSucceeded = null;\n this.ResultMessage = null;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n\n try {\n const params = this.buildActionParams(cfg);\n const provider = this.ProviderToUse as GraphQLDataProvider;\n const actionClient = new GraphQLActionClient(provider);\n const result = await actionClient.RunAction(cfg.actionId, params);\n this.RunSucceeded = result.Success;\n this.ResultMessage = result.Message ?? (result.Success ? 'Action completed.' : 'Action reported a failure.');\n } catch (err) {\n this.RunSucceeded = false;\n this.ErrorMessage = `Execution failed: ${(err as Error).message}`;\n } finally {\n this.IsRunning = false;\n this.cdr.markForCheck();\n }\n }\n\n private buildActionParams(cfg: ActionPinConfiguration): ActionParam[] {\n const params: ActionParam[] = [];\n for (const [name, value] of Object.entries(cfg.presetParams ?? {})) {\n params.push({ Name: name, Value: value, Type: 'Input' });\n }\n for (const f of this.RuntimeFields) {\n if (f.Value !== '') {\n params.push({ Name: f.Name, Value: f.Value, Type: 'Input' });\n }\n }\n return params;\n }\n\n Close(): void {\n if (this.IsRunning) return;\n this.Result.emit({ Closed: true });\n }\n}\n","@if (Visible && Pin) {\n <div class=\"apr-backdrop\" (click)=\"Close()\"></div>\n <div class=\"apr-dialog\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"apr-hero\" [style.background]=\"'linear-gradient(135deg, ' + AccentColor + ' 0%, ' + AccentColor + 'cc 100%)'\">\n <div class=\"apr-hero-icon\">\n <i [class]=\"FaIcon\"></i>\n </div>\n <div class=\"apr-hero-info\">\n <div class=\"apr-hero-title\">{{ Pin.DisplayName }}</div>\n <div class=\"apr-hero-sub\">{{ ActionName }}</div>\n </div>\n <button class=\"apr-close\" (click)=\"Close()\" [disabled]=\"IsRunning\" aria-label=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"apr-body\">\n @if (RunSucceeded === null) {\n @if (RuntimeFields.length === 0) {\n <div class=\"apr-no-fields\">\n <i class=\"fa-solid fa-circle-info\"></i>\n This action runs with all parameters preset — no input needed.\n </div>\n } @else {\n <div class=\"apr-help\">Provide values for the parameters below:</div>\n <div class=\"apr-fields\">\n @for (f of RuntimeFields; track f.Name) {\n <div class=\"apr-field\">\n <label [for]=\"'rf-' + f.Name\">{{ f.Name }}</label>\n <input [id]=\"'rf-' + f.Name\"\n type=\"text\"\n class=\"mj-input\"\n [(ngModel)]=\"f.Value\"\n [disabled]=\"IsRunning\"\n [placeholder]=\"'Enter ' + f.Name\" />\n </div>\n }\n </div>\n }\n } @else {\n <div class=\"apr-result\" [class.success]=\"RunSucceeded\" [class.failure]=\"!RunSucceeded\">\n <div class=\"apr-result-icon\">\n @if (RunSucceeded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"apr-result-text\">\n <div class=\"apr-result-title\">{{ RunSucceeded ? 'Action completed' : 'Action failed' }}</div>\n @if (ResultMessage) {\n <div class=\"apr-result-msg\">{{ ResultMessage }}</div>\n }\n </div>\n </div>\n }\n\n @if (ErrorMessage) {\n <div class=\"apr-error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ ErrorMessage }}\n </div>\n }\n </div>\n\n <div class=\"apr-footer\">\n @if (RunSucceeded === null) {\n <button type=\"button\" class=\"apr-btn primary\"\n [disabled]=\"!CanRun()\"\n [style.background]=\"AccentColor\"\n [style.border-color]=\"AccentColor\"\n (click)=\"Run()\">\n @if (IsRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running…\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run action\n }\n </button>\n <button type=\"button\" class=\"apr-btn\" [disabled]=\"IsRunning\" (click)=\"Close()\">\n Cancel\n </button>\n } @else {\n <button type=\"button\" class=\"apr-btn primary\" (click)=\"Close()\">\n Done\n </button>\n }\n </div>\n </div>\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"home-application.d.ts","sourceRoot":"","sources":["../../src/Home/home-application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAAgB,MAAM,qCAAqC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiC1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAE7C,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,mBAAmB,CAA8B;IAEzD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB,CAAuB;IAEtD;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAOhE;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD;;;;OAIG;IACY,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhD;;;;OAIG;IACI,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiBhD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;;;OAMG;YACW,iBAAiB;IAkD/B;;;;OAIG;YACW,sBAAsB;IAgCpC;;OAEG;YACW,oBAAoB;IAoBlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;OAUG;YACW,kBAAkB;IAwBhC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;;OAGG;YACW,oBAAoB;CA0BnC"}
1
+ {"version":3,"file":"home-application.d.ts","sourceRoot":"","sources":["../../src/Home/home-application.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAAgB,MAAM,qCAAqC,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAiC1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAE7C,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,mBAAmB,CAA8B;IAEzD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB,CAAuB;IAEtD;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAOhE;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD;;;;OAIG;IACY,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhD;;;;OAIG;IACI,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiBhD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;;;OAMG;YACW,iBAAiB;IAkD/B;;;;OAIG;YACW,sBAAsB;IAgCpC;;OAEG;YACW,oBAAoB;IAoBlC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;OAUG;YACW,kBAAkB;IAwBhC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;;OAGG;YACW,oBAAoB;CAsBnC"}
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var HomeApplication_1;
8
8
  import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
9
9
  import { BaseApplication } from '@memberjunction/ng-base-application';
10
- import { Metadata, CompositeKey, FieldValueCollection } from '@memberjunction/core';
10
+ import { CompositeKey, FieldValueCollection } from '@memberjunction/core';
11
11
  /** Storage key and category for persisting the recent orphan stack */
12
12
  const STORAGE_KEY = 'HomeApp_RecentOrphanStack';
13
13
  const STORAGE_CATEGORY = 'HomeApplication';
@@ -142,7 +142,7 @@ let HomeApplication = class HomeApplication extends BaseApplication {
142
142
  */
143
143
  resolveIcon(entityName, resourceTypeName) {
144
144
  if (entityName) {
145
- const md = new Metadata();
145
+ const md = this.Provider;
146
146
  const entityIcon = md.EntityByName(entityName)?.Icon;
147
147
  if (entityIcon) {
148
148
  return entityIcon;
@@ -311,7 +311,7 @@ let HomeApplication = class HomeApplication extends BaseApplication {
311
311
  const compositeKey = new CompositeKey(fvCollection.KeyValuePairs);
312
312
  // Check the cache first
313
313
  try {
314
- const cachedName = await Metadata.Provider.GetCachedRecordName(entityName, compositeKey, true);
314
+ const cachedName = await this.Provider.GetCachedRecordName(entityName, compositeKey, true);
315
315
  if (cachedName) {
316
316
  return cachedName;
317
317
  }
@@ -365,7 +365,7 @@ let HomeApplication = class HomeApplication extends BaseApplication {
365
365
  */
366
366
  saveStackToStorage() {
367
367
  try {
368
- const provider = Metadata.Provider.LocalStorageProvider;
368
+ const provider = this.Provider.LocalStorageProvider;
369
369
  if (!provider) {
370
370
  return;
371
371
  }
@@ -380,7 +380,8 @@ let HomeApplication = class HomeApplication extends BaseApplication {
380
380
  tabId: s.tabId,
381
381
  timestamp: s.timestamp
382
382
  }));
383
- provider.SetItem(STORAGE_KEY, JSON.stringify(serializable), STORAGE_CATEGORY).catch(err => {
383
+ // Native object storage — provider handles any required serialization internally.
384
+ provider.SetItem(STORAGE_KEY, serializable, STORAGE_CATEGORY).catch(err => {
384
385
  console.warn('Failed to persist recent nav stack:', err);
385
386
  });
386
387
  }
@@ -394,16 +395,13 @@ let HomeApplication = class HomeApplication extends BaseApplication {
394
395
  */
395
396
  async loadStackFromStorage() {
396
397
  try {
397
- const provider = Metadata.Provider.LocalStorageProvider;
398
+ const provider = this.Provider.LocalStorageProvider;
398
399
  if (!provider) {
399
400
  return;
400
401
  }
401
- const raw = await provider.GetItem(STORAGE_KEY, STORAGE_CATEGORY);
402
- if (!raw) {
403
- return;
404
- }
405
- const parsed = JSON.parse(raw);
406
- if (!Array.isArray(parsed)) {
402
+ // Native object read IDB returns the array directly; localStorage / Redis JSON-decode internally.
403
+ const parsed = await provider.GetItem(STORAGE_KEY, STORAGE_CATEGORY);
404
+ if (!parsed || !Array.isArray(parsed)) {
407
405
  return;
408
406
  }
409
407
  // Filter out stale snapshots