@memberjunction/ng-dashboards 6.2.0-edge.2 → 6.2.0-edge.4

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 (229) hide show
  1. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts +4 -3
  2. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.d.ts.map +1 -1
  3. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js +8 -5
  4. package/dist/AI/components/analytics/realtime/realtime-transcripts-data.js.map +1 -1
  5. package/dist/AI/components/duplicates/compare-value.component.d.ts +67 -0
  6. package/dist/AI/components/duplicates/compare-value.component.d.ts.map +1 -0
  7. package/dist/AI/components/duplicates/compare-value.component.js +168 -0
  8. package/dist/AI/components/duplicates/compare-value.component.js.map +1 -0
  9. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +49 -3
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +287 -169
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  13. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +77 -0
  14. package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -0
  15. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +116 -0
  16. package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -0
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
  18. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  19. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +16 -4
  20. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  21. package/dist/AI/components/tags/tags-resource.component.d.ts +2 -0
  22. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  23. package/dist/AI/components/tags/tags-resource.component.js +12 -6
  24. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  25. package/dist/AI/components/vectors/vector-index-auto.d.ts +29 -0
  26. package/dist/AI/components/vectors/vector-index-auto.d.ts.map +1 -0
  27. package/dist/AI/components/vectors/vector-index-auto.js +59 -0
  28. package/dist/AI/components/vectors/vector-index-auto.js.map +1 -0
  29. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +9 -0
  30. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  31. package/dist/AI/components/vectors/vector-management-resource.component.js +65 -20
  32. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  33. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  34. package/dist/Actions/components/actions-overview.component.js +7 -3
  35. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  36. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  37. package/dist/Actions/components/categories-list-view.component.js +3 -2
  38. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  39. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  40. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  41. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  42. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +0 -3
  43. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  44. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +5 -14
  45. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  46. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  47. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -0
  48. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  49. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  50. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +1 -0
  51. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  52. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts +12 -1
  53. package/dist/ComponentStudio/components/form-override-dialog.component.d.ts.map +1 -1
  54. package/dist/ComponentStudio/components/form-override-dialog.component.js +128 -81
  55. package/dist/ComponentStudio/components/form-override-dialog.component.js.map +1 -1
  56. package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -0
  57. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  58. package/dist/Credentials/components/credentials-list-resource.component.js +12 -10
  59. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  60. package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts +14 -43
  61. package/dist/DashboardBrowser/dashboard-browser-agent-context.d.ts.map +1 -1
  62. package/dist/DashboardBrowser/dashboard-browser-agent-context.js +6 -29
  63. package/dist/DashboardBrowser/dashboard-browser-agent-context.js.map +1 -1
  64. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +174 -321
  65. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  66. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +522 -1195
  67. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  68. package/dist/DashboardBrowser/dashboard-library-filter.d.ts +116 -0
  69. package/dist/DashboardBrowser/dashboard-library-filter.d.ts.map +1 -0
  70. package/dist/DashboardBrowser/dashboard-library-filter.js +277 -0
  71. package/dist/DashboardBrowser/dashboard-library-filter.js.map +1 -0
  72. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +1 -1
  73. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  74. package/dist/DashboardBrowser/dashboards-agent-tools.d.ts +26 -0
  75. package/dist/DashboardBrowser/dashboards-agent-tools.d.ts.map +1 -0
  76. package/dist/DashboardBrowser/dashboards-agent-tools.js +32 -0
  77. package/dist/DashboardBrowser/dashboards-agent-tools.js.map +1 -0
  78. package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts +58 -0
  79. package/dist/DashboardBrowser/dashboards-categories-resource.component.d.ts.map +1 -0
  80. package/dist/DashboardBrowser/dashboards-categories-resource.component.js +391 -0
  81. package/dist/DashboardBrowser/dashboards-categories-resource.component.js.map +1 -0
  82. package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts +37 -0
  83. package/dist/DashboardBrowser/dashboards-categories.helpers.d.ts.map +1 -0
  84. package/dist/DashboardBrowser/dashboards-categories.helpers.js +68 -0
  85. package/dist/DashboardBrowser/dashboards-categories.helpers.js.map +1 -0
  86. package/dist/DashboardEditor/dashboard-editor.component.d.ts +295 -0
  87. package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -0
  88. package/dist/DashboardEditor/dashboard-editor.component.js +1022 -0
  89. package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -0
  90. package/dist/DashboardEditor/dashboard-editor.types.d.ts +23 -0
  91. package/dist/DashboardEditor/dashboard-editor.types.d.ts.map +1 -0
  92. package/dist/DashboardEditor/dashboard-editor.types.js +3 -0
  93. package/dist/DashboardEditor/dashboard-editor.types.js.map +1 -0
  94. package/dist/DashboardEditor/dashboard-viewer-factory.d.ts +11 -0
  95. package/dist/DashboardEditor/dashboard-viewer-factory.d.ts.map +1 -0
  96. package/dist/DashboardEditor/dashboard-viewer-factory.js +17 -0
  97. package/dist/DashboardEditor/dashboard-viewer-factory.js.map +1 -0
  98. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +30 -0
  99. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  100. package/dist/DataExplorer/data-explorer-dashboard.component.js +349 -232
  101. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  102. package/dist/DataExplorer/services/explorer-state.service.d.ts +1 -1
  103. package/dist/DataExplorer/services/explorer-state.service.js +2 -5
  104. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  105. package/dist/FormBuilder/form-builder-resource.component.d.ts +0 -14
  106. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  107. package/dist/FormBuilder/form-builder-resource.component.js +7 -29
  108. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  109. package/dist/Home/home-agent-context.d.ts +29 -10
  110. package/dist/Home/home-agent-context.d.ts.map +1 -1
  111. package/dist/Home/home-agent-context.js +50 -24
  112. package/dist/Home/home-agent-context.js.map +1 -1
  113. package/dist/Home/home-dashboard-switcher.component.d.ts +95 -0
  114. package/dist/Home/home-dashboard-switcher.component.d.ts.map +1 -0
  115. package/dist/Home/home-dashboard-switcher.component.js +442 -0
  116. package/dist/Home/home-dashboard-switcher.component.js.map +1 -0
  117. package/dist/Home/home-dashboard.component.d.ts +330 -17
  118. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  119. package/dist/Home/home-dashboard.component.js +1702 -1014
  120. package/dist/Home/home-dashboard.component.js.map +1 -1
  121. package/dist/Home/home-menus.d.ts +38 -0
  122. package/dist/Home/home-menus.d.ts.map +1 -0
  123. package/dist/Home/home-menus.js +53 -0
  124. package/dist/Home/home-menus.js.map +1 -0
  125. package/dist/Home/home-pinned-dashboards.d.ts +33 -0
  126. package/dist/Home/home-pinned-dashboards.d.ts.map +1 -0
  127. package/dist/Home/home-pinned-dashboards.js +76 -0
  128. package/dist/Home/home-pinned-dashboards.js.map +1 -0
  129. package/dist/PredictiveStudio/components/ps-production.component.d.ts +5 -1
  130. package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
  131. package/dist/PredictiveStudio/components/ps-production.component.js +64 -41
  132. package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
  133. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  134. package/dist/QueryBrowser/query-browser-resource.component.js +3 -2
  135. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  136. package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js +2 -2
  137. package/dist/RealtimeRecordings/realtime-recordings-dashboard.component.js.map +1 -1
  138. package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts +107 -0
  139. package/dist/TelephonyOperations/telephony-operations-agent-context.d.ts.map +1 -0
  140. package/dist/TelephonyOperations/telephony-operations-agent-context.js +216 -0
  141. package/dist/TelephonyOperations/telephony-operations-agent-context.js.map +1 -0
  142. package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts +58 -0
  143. package/dist/TelephonyOperations/telephony-operations-dashboard.component.d.ts.map +1 -0
  144. package/dist/TelephonyOperations/telephony-operations-dashboard.component.js +812 -0
  145. package/dist/TelephonyOperations/telephony-operations-dashboard.component.js.map +1 -0
  146. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  147. package/dist/Testing/components/testing-explorer.component.js +7 -7
  148. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  149. package/dist/WorkQueue/components/work-queue-bindings.component.d.ts +37 -0
  150. package/dist/WorkQueue/components/work-queue-bindings.component.d.ts.map +1 -0
  151. package/dist/WorkQueue/components/work-queue-bindings.component.js +210 -0
  152. package/dist/WorkQueue/components/work-queue-bindings.component.js.map +1 -0
  153. package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts +70 -0
  154. package/dist/WorkQueue/components/work-queue-dead-letters.component.d.ts.map +1 -0
  155. package/dist/WorkQueue/components/work-queue-dead-letters.component.js +496 -0
  156. package/dist/WorkQueue/components/work-queue-dead-letters.component.js.map +1 -0
  157. package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts +22 -0
  158. package/dist/WorkQueue/components/work-queue-discard-dialog.component.d.ts.map +1 -0
  159. package/dist/WorkQueue/components/work-queue-discard-dialog.component.js +99 -0
  160. package/dist/WorkQueue/components/work-queue-discard-dialog.component.js.map +1 -0
  161. package/dist/WorkQueue/components/work-queue-overview.component.d.ts +29 -0
  162. package/dist/WorkQueue/components/work-queue-overview.component.d.ts.map +1 -0
  163. package/dist/WorkQueue/components/work-queue-overview.component.js +278 -0
  164. package/dist/WorkQueue/components/work-queue-overview.component.js.map +1 -0
  165. package/dist/WorkQueue/components/work-queue-partitions.component.d.ts +59 -0
  166. package/dist/WorkQueue/components/work-queue-partitions.component.d.ts.map +1 -0
  167. package/dist/WorkQueue/components/work-queue-partitions.component.js +359 -0
  168. package/dist/WorkQueue/components/work-queue-partitions.component.js.map +1 -0
  169. package/dist/WorkQueue/services/work-queue-operator.service.d.ts +22 -0
  170. package/dist/WorkQueue/services/work-queue-operator.service.d.ts.map +1 -0
  171. package/dist/WorkQueue/services/work-queue-operator.service.js +44 -0
  172. package/dist/WorkQueue/services/work-queue-operator.service.js.map +1 -0
  173. package/dist/WorkQueue/work-queue-agent-context.d.ts +67 -0
  174. package/dist/WorkQueue/work-queue-agent-context.d.ts.map +1 -0
  175. package/dist/WorkQueue/work-queue-agent-context.js +119 -0
  176. package/dist/WorkQueue/work-queue-agent-context.js.map +1 -0
  177. package/dist/WorkQueue/work-queue-dashboard.component.d.ts +94 -0
  178. package/dist/WorkQueue/work-queue-dashboard.component.d.ts.map +1 -0
  179. package/dist/WorkQueue/work-queue-dashboard.component.js +545 -0
  180. package/dist/WorkQueue/work-queue-dashboard.component.js.map +1 -0
  181. package/dist/WorkQueue/work-queue-types.d.ts +40 -0
  182. package/dist/WorkQueue/work-queue-types.d.ts.map +1 -0
  183. package/dist/WorkQueue/work-queue-types.js +2 -0
  184. package/dist/WorkQueue/work-queue-types.js.map +1 -0
  185. package/dist/ai-dashboards.module.d.ts +21 -20
  186. package/dist/ai-dashboards.module.d.ts.map +1 -1
  187. package/dist/ai-dashboards.module.js +4 -1
  188. package/dist/ai-dashboards.module.js.map +1 -1
  189. package/dist/core-dashboards.module.d.ts +69 -61
  190. package/dist/core-dashboards.module.d.ts.map +1 -1
  191. package/dist/core-dashboards.module.js +29 -2
  192. package/dist/core-dashboards.module.js.map +1 -1
  193. package/dist/data-explorer-dashboards.module.d.ts +1 -1
  194. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  195. package/dist/data-explorer-dashboards.module.js +3 -1
  196. package/dist/data-explorer-dashboards.module.js.map +1 -1
  197. package/dist/module.d.ts +14 -13
  198. package/dist/module.d.ts.map +1 -1
  199. package/dist/module.js +7 -0
  200. package/dist/module.js.map +1 -1
  201. package/dist/public-api.d.ts +6 -0
  202. package/dist/public-api.d.ts.map +1 -1
  203. package/dist/public-api.js +9 -0
  204. package/dist/public-api.js.map +1 -1
  205. package/dist/shared/dashboard-library-changes.d.ts +23 -0
  206. package/dist/shared/dashboard-library-changes.d.ts.map +1 -0
  207. package/dist/shared/dashboard-library-changes.js +26 -0
  208. package/dist/shared/dashboard-library-changes.js.map +1 -0
  209. package/dist/shared/dashboard-owner-names.d.ts +17 -0
  210. package/dist/shared/dashboard-owner-names.d.ts.map +1 -0
  211. package/dist/shared/dashboard-owner-names.js +65 -0
  212. package/dist/shared/dashboard-owner-names.js.map +1 -0
  213. package/dist/shared/dashboard-recents.d.ts +34 -0
  214. package/dist/shared/dashboard-recents.d.ts.map +1 -0
  215. package/dist/shared/dashboard-recents.js +87 -0
  216. package/dist/shared/dashboard-recents.js.map +1 -0
  217. package/dist/shared/dashboards-app-install.d.ts +59 -0
  218. package/dist/shared/dashboards-app-install.d.ts.map +1 -0
  219. package/dist/shared/dashboards-app-install.js +97 -0
  220. package/dist/shared/dashboards-app-install.js.map +1 -0
  221. package/dist/shared/dashboards-app.helpers.d.ts +42 -0
  222. package/dist/shared/dashboards-app.helpers.d.ts.map +1 -0
  223. package/dist/shared/dashboards-app.helpers.js +143 -0
  224. package/dist/shared/dashboards-app.helpers.js.map +1 -0
  225. package/dist/work-queue-dashboards.module.d.ts +23 -0
  226. package/dist/work-queue-dashboards.module.d.ts.map +1 -0
  227. package/dist/work-queue-dashboards.module.js +92 -0
  228. package/dist/work-queue-dashboards.module.js.map +1 -0
  229. package/package.json +73 -66
@@ -0,0 +1,42 @@
1
+ import type { IMetadataProvider } from '@memberjunction/core';
2
+ import type { MJDashboardEntity } from '@memberjunction/core-entities';
3
+ import type { ApplicationManager, BaseApplication } from '@memberjunction/ng-base-application';
4
+ import type { DashboardNavigationOptions } from '@memberjunction/ng-shared';
5
+ export declare const DASHBOARDS_APP_NAME = "Dashboards";
6
+ /** Label of the Dashboards app's Library nav item. */
7
+ export declare const DASHBOARDS_LIBRARY_NAV_ITEM = "Library";
8
+ /** The Dashboards application, if the user has it enabled. */
9
+ export declare function FindDashboardsApp(appManager: ApplicationManager): BaseApplication | undefined;
10
+ /**
11
+ * The NavigationService.OpenDashboard options for a dashboard opened from a page of the Dashboards
12
+ * app: a tab of the Dashboards app. Like any open, the dashboard replaces the current preview tab,
13
+ * so Back returns to the page, and a Shift-click opens a separate tab. When the user does not have
14
+ * the app, no application is named and the tab opens in NavigationService's default application.
15
+ * `openInEditMode` asks the tab to enter edit mode (a new dashboard, or a card's Edit action).
16
+ * `openInNewTab` forces a separate tab, for a click the dashboard browser reports as one
17
+ * (`DashboardOpenEvent.OpenInNewTab`: Shift, Ctrl or Cmd).
18
+ */
19
+ export declare function DashboardsAppOpenOptions(appManager: ApplicationManager, openInEditMode?: boolean, openInNewTab?: boolean): DashboardNavigationOptions;
20
+ /** The longest name MJ: Dashboards stores: the MaxLength of its Name field, or DASHBOARD_NAME_MAX_LENGTH when the metadata gives none. */
21
+ export declare function DashboardNameMaxLength(md: IMetadataProvider): number;
22
+ /**
23
+ * Creates and saves an empty Config dashboard with the trimmed `name`, owned by the current user, in
24
+ * `categoryId` when one is given. Returns null for a blank name or a failed save.
25
+ */
26
+ export declare function CreateBlankDashboard(md: IMetadataProvider, name: string, categoryId?: string | null): Promise<MJDashboardEntity | null>;
27
+ /**
28
+ * Automatic install path, for Home load. Installs the Dashboards app for a user who has no
29
+ * UserApplication row for it, at most once per user (tracked by a UserInfoEngine setting), so a
30
+ * user who removes the app keeps it removed. Never rejects.
31
+ * @returns true when this call installed the app.
32
+ */
33
+ export declare function AutoInstallDashboardsApp(appManager: ApplicationManager): Promise<boolean>;
34
+ /**
35
+ * Explicit install path, for a user click that goes to the Dashboards app (for example Open
36
+ * Dashboards on the Data Explorer banner). Installs the app when it is missing or removed. Never rejects.
37
+ * @returns the app to pass to `NavigationService.SwitchToApp`, or undefined when no Active
38
+ * Dashboards app exists, the user is not authorized for it, or the install failed or did not
39
+ * finish within DASHBOARDS_APP_INSTALL_STEP_TIMEOUT_MS.
40
+ */
41
+ export declare function EnsureDashboardsApp(appManager: ApplicationManager): Promise<BaseApplication | undefined>;
42
+ //# sourceMappingURL=dashboards-app.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboards-app.helpers.d.ts","sourceRoot":"","sources":["../../src/shared/dashboards-app.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAU5E,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,sDAAsD;AACtD,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,eAAe,GAAG,SAAS,CAE7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,kBAAkB,EAAE,cAAc,UAAQ,EAAE,YAAY,UAAQ,GAAG,0BAA0B,CAOjJ;AAKD,0IAA0I;AAC1I,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM,CAGpE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAwB7I;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ/F;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAgB9G"}
@@ -0,0 +1,143 @@
1
+ import { LogError } from '@memberjunction/core';
2
+ import { UserInfoEngine } from '@memberjunction/core-entities';
3
+ import { CreateDefaultDashboardConfig, DASHBOARD_NAME_MAX_LENGTH } from '@memberjunction/ng-dashboard-viewer';
4
+ import { DASHBOARDS_APP_AUTO_INSTALL_SETTING_KEY, RunDashboardsAppAutoInstall, RunDashboardsAppExplicitInstall, } from './dashboards-app-install';
5
+ export const DASHBOARDS_APP_NAME = 'Dashboards';
6
+ /** Label of the Dashboards app's Library nav item. */
7
+ export const DASHBOARDS_LIBRARY_NAV_ITEM = 'Library';
8
+ /** The Dashboards application, if the user has it enabled. */
9
+ export function FindDashboardsApp(appManager) {
10
+ return appManager.GetAllApps().find((a) => a.Name === DASHBOARDS_APP_NAME);
11
+ }
12
+ /**
13
+ * The NavigationService.OpenDashboard options for a dashboard opened from a page of the Dashboards
14
+ * app: a tab of the Dashboards app. Like any open, the dashboard replaces the current preview tab,
15
+ * so Back returns to the page, and a Shift-click opens a separate tab. When the user does not have
16
+ * the app, no application is named and the tab opens in NavigationService's default application.
17
+ * `openInEditMode` asks the tab to enter edit mode (a new dashboard, or a card's Edit action).
18
+ * `openInNewTab` forces a separate tab, for a click the dashboard browser reports as one
19
+ * (`DashboardOpenEvent.OpenInNewTab`: Shift, Ctrl or Cmd).
20
+ */
21
+ export function DashboardsAppOpenOptions(appManager, openInEditMode = false, openInNewTab = false) {
22
+ const app = FindDashboardsApp(appManager);
23
+ return {
24
+ ...(app ? { applicationId: app.ID } : {}),
25
+ ...(openInEditMode ? { openInEditMode: true } : {}),
26
+ ...(openInNewTab ? { forceNewTab: true } : {}),
27
+ };
28
+ }
29
+ /** The entity of dashboard records. */
30
+ const DASHBOARDS_ENTITY = 'MJ: Dashboards';
31
+ /** The longest name MJ: Dashboards stores: the MaxLength of its Name field, or DASHBOARD_NAME_MAX_LENGTH when the metadata gives none. */
32
+ export function DashboardNameMaxLength(md) {
33
+ const maxLength = md.EntityByName(DASHBOARDS_ENTITY)?.FieldByName('Name')?.MaxLength ?? 0;
34
+ return maxLength > 0 ? maxLength : DASHBOARD_NAME_MAX_LENGTH;
35
+ }
36
+ /**
37
+ * Creates and saves an empty Config dashboard with the trimmed `name`, owned by the current user, in
38
+ * `categoryId` when one is given. Returns null for a blank name or a failed save.
39
+ */
40
+ export async function CreateBlankDashboard(md, name, categoryId) {
41
+ const trimmed = name.trim();
42
+ if (!trimmed) {
43
+ LogError('CreateBlankDashboard: the dashboard needs a name');
44
+ return null;
45
+ }
46
+ try {
47
+ const dashboard = await md.GetEntityObject(DASHBOARDS_ENTITY, md.CurrentUser);
48
+ dashboard.Name = trimmed;
49
+ dashboard.Description = '';
50
+ dashboard.UserID = md.CurrentUser.ID;
51
+ dashboard.UIConfigDetails = JSON.stringify(CreateDefaultDashboardConfig());
52
+ if (categoryId) {
53
+ dashboard.CategoryID = categoryId;
54
+ }
55
+ if (await dashboard.Save()) {
56
+ return dashboard;
57
+ }
58
+ LogError(`CreateBlankDashboard: ${dashboard.LatestResult?.CompleteMessage ?? 'unknown error'}`);
59
+ return null;
60
+ }
61
+ catch (error) {
62
+ LogError(`CreateBlankDashboard: ${errorMessage(error)}`);
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Automatic install path, for Home load. Installs the Dashboards app for a user who has no
68
+ * UserApplication row for it, at most once per user (tracked by a UserInfoEngine setting), so a
69
+ * user who removes the app keeps it removed. Never rejects.
70
+ * @returns true when this call installed the app.
71
+ */
72
+ export async function AutoInstallDashboardsApp(appManager) {
73
+ try {
74
+ await appManager.WhenReady();
75
+ return await RunDashboardsAppAutoInstall(buildInstallOperations(appManager));
76
+ }
77
+ catch (error) {
78
+ LogError(`AutoInstallDashboardsApp: ${errorMessage(error)}`);
79
+ return false;
80
+ }
81
+ }
82
+ /**
83
+ * Explicit install path, for a user click that goes to the Dashboards app (for example Open
84
+ * Dashboards on the Data Explorer banner). Installs the app when it is missing or removed. Never rejects.
85
+ * @returns the app to pass to `NavigationService.SwitchToApp`, or undefined when no Active
86
+ * Dashboards app exists, the user is not authorized for it, or the install failed or did not
87
+ * finish within DASHBOARDS_APP_INSTALL_STEP_TIMEOUT_MS.
88
+ */
89
+ export async function EnsureDashboardsApp(appManager) {
90
+ try {
91
+ await appManager.WhenReady();
92
+ if (!(await RunDashboardsAppExplicitInstall(buildInstallOperations(appManager)))) {
93
+ return undefined;
94
+ }
95
+ const app = FindDashboardsApp(appManager);
96
+ if (app) {
97
+ return app;
98
+ }
99
+ await appManager.ReloadUserApplications();
100
+ return FindDashboardsApp(appManager);
101
+ }
102
+ catch (error) {
103
+ LogError(`EnsureDashboardsApp: ${errorMessage(error)}`);
104
+ return undefined;
105
+ }
106
+ }
107
+ /** Install operations over ApplicationManager and UserInfoEngine.Instance, the engine ApplicationManager reads and installs through. */
108
+ function buildInstallOperations(appManager) {
109
+ const engine = UserInfoEngine.Instance;
110
+ return {
111
+ ReadState: () => readInstallState(appManager, engine),
112
+ Install: () => installForUser(appManager),
113
+ RecordAutoInstall: () => engine.SetSetting(DASHBOARDS_APP_AUTO_INSTALL_SETTING_KEY, 'true'),
114
+ };
115
+ }
116
+ function readInstallState(appManager, engine) {
117
+ if (engine.IsPermissionConstrained) {
118
+ return null;
119
+ }
120
+ const app = findSystemDashboardsApp(appManager);
121
+ return {
122
+ AppExists: app != null,
123
+ Access: app ? engine.CheckUserApplicationAccess(app.ID) : 'not_installed',
124
+ AutoInstallRecorded: engine.GetSetting(DASHBOARDS_APP_AUTO_INSTALL_SETTING_KEY) === 'true',
125
+ };
126
+ }
127
+ /** Installs or re-enables the app, then rebuilds the user's app list so navigation can find it. */
128
+ async function installForUser(appManager) {
129
+ const app = findSystemDashboardsApp(appManager);
130
+ if (!app || !(await appManager.InstallAppForUser(app.ID))) {
131
+ return false;
132
+ }
133
+ await appManager.ReloadUserApplications();
134
+ return true;
135
+ }
136
+ /** The Dashboards app among all Active applications, whether or not the user has it. */
137
+ function findSystemDashboardsApp(appManager) {
138
+ return appManager.GetAllSystemApps().find((a) => a.Name === DASHBOARDS_APP_NAME);
139
+ }
140
+ function errorMessage(error) {
141
+ return error instanceof Error ? error.message : String(error);
142
+ }
143
+ //# sourceMappingURL=dashboards-app.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboards-app.helpers.js","sourceRoot":"","sources":["../../src/shared/dashboards-app.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogError } from '@memberjunction/core';\nimport type { IMetadataProvider } from '@memberjunction/core';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport type { MJDashboardEntity } from '@memberjunction/core-entities';\nimport type { ApplicationManager, BaseApplication } from '@memberjunction/ng-base-application';\nimport type { DashboardNavigationOptions } from '@memberjunction/ng-shared';\nimport { CreateDefaultDashboardConfig, DASHBOARD_NAME_MAX_LENGTH } from '@memberjunction/ng-dashboard-viewer';\nimport {\n DASHBOARDS_APP_AUTO_INSTALL_SETTING_KEY,\n DashboardsAppInstallOperations,\n DashboardsAppInstallState,\n RunDashboardsAppAutoInstall,\n RunDashboardsAppExplicitInstall,\n} from './dashboards-app-install';\n\nexport const DASHBOARDS_APP_NAME = 'Dashboards';\n\n/** Label of the Dashboards app's Library nav item. */\nexport const DASHBOARDS_LIBRARY_NAV_ITEM = 'Library';\n\n/** The Dashboards application, if the user has it enabled. */\nexport function FindDashboardsApp(appManager: ApplicationManager): BaseApplication | undefined {\n return appManager.GetAllApps().find((a) => a.Name === DASHBOARDS_APP_NAME);\n}\n\n/**\n * The NavigationService.OpenDashboard options for a dashboard opened from a page of the Dashboards\n * app: a tab of the Dashboards app. Like any open, the dashboard replaces the current preview tab,\n * so Back returns to the page, and a Shift-click opens a separate tab. When the user does not have\n * the app, no application is named and the tab opens in NavigationService's default application.\n * `openInEditMode` asks the tab to enter edit mode (a new dashboard, or a card's Edit action).\n * `openInNewTab` forces a separate tab, for a click the dashboard browser reports as one\n * (`DashboardOpenEvent.OpenInNewTab`: Shift, Ctrl or Cmd).\n */\nexport function DashboardsAppOpenOptions(appManager: ApplicationManager, openInEditMode = false, openInNewTab = false): DashboardNavigationOptions {\n const app = FindDashboardsApp(appManager);\n return {\n ...(app ? { applicationId: app.ID } : {}),\n ...(openInEditMode ? { openInEditMode: true } : {}),\n ...(openInNewTab ? { forceNewTab: true } : {}),\n };\n}\n\n/** The entity of dashboard records. */\nconst DASHBOARDS_ENTITY = 'MJ: Dashboards';\n\n/** The longest name MJ: Dashboards stores: the MaxLength of its Name field, or DASHBOARD_NAME_MAX_LENGTH when the metadata gives none. */\nexport function DashboardNameMaxLength(md: IMetadataProvider): number {\n const maxLength = md.EntityByName(DASHBOARDS_ENTITY)?.FieldByName('Name')?.MaxLength ?? 0;\n return maxLength > 0 ? maxLength : DASHBOARD_NAME_MAX_LENGTH;\n}\n\n/**\n * Creates and saves an empty Config dashboard with the trimmed `name`, owned by the current user, in\n * `categoryId` when one is given. Returns null for a blank name or a failed save.\n */\nexport async function CreateBlankDashboard(md: IMetadataProvider, name: string, categoryId?: string | null): Promise<MJDashboardEntity | null> {\n const trimmed = name.trim();\n if (!trimmed) {\n LogError('CreateBlankDashboard: the dashboard needs a name');\n return null;\n }\n try {\n const dashboard = await md.GetEntityObject<MJDashboardEntity>(DASHBOARDS_ENTITY, md.CurrentUser);\n dashboard.Name = trimmed;\n dashboard.Description = '';\n dashboard.UserID = md.CurrentUser.ID;\n dashboard.UIConfigDetails = JSON.stringify(CreateDefaultDashboardConfig());\n if (categoryId) {\n dashboard.CategoryID = categoryId;\n }\n if (await dashboard.Save()) {\n return dashboard;\n }\n LogError(`CreateBlankDashboard: ${dashboard.LatestResult?.CompleteMessage ?? 'unknown error'}`);\n return null;\n } catch (error) {\n LogError(`CreateBlankDashboard: ${errorMessage(error)}`);\n return null;\n }\n}\n\n/**\n * Automatic install path, for Home load. Installs the Dashboards app for a user who has no\n * UserApplication row for it, at most once per user (tracked by a UserInfoEngine setting), so a\n * user who removes the app keeps it removed. Never rejects.\n * @returns true when this call installed the app.\n */\nexport async function AutoInstallDashboardsApp(appManager: ApplicationManager): Promise<boolean> {\n try {\n await appManager.WhenReady();\n return await RunDashboardsAppAutoInstall(buildInstallOperations(appManager));\n } catch (error) {\n LogError(`AutoInstallDashboardsApp: ${errorMessage(error)}`);\n return false;\n }\n}\n\n/**\n * Explicit install path, for a user click that goes to the Dashboards app (for example Open\n * Dashboards on the Data Explorer banner). Installs the app when it is missing or removed. Never rejects.\n * @returns the app to pass to `NavigationService.SwitchToApp`, or undefined when no Active\n * Dashboards app exists, the user is not authorized for it, or the install failed or did not\n * finish within DASHBOARDS_APP_INSTALL_STEP_TIMEOUT_MS.\n */\nexport async function EnsureDashboardsApp(appManager: ApplicationManager): Promise<BaseApplication | undefined> {\n try {\n await appManager.WhenReady();\n if (!(await RunDashboardsAppExplicitInstall(buildInstallOperations(appManager)))) {\n return undefined;\n }\n const app = FindDashboardsApp(appManager);\n if (app) {\n return app;\n }\n await appManager.ReloadUserApplications();\n return FindDashboardsApp(appManager);\n } catch (error) {\n LogError(`EnsureDashboardsApp: ${errorMessage(error)}`);\n return undefined;\n }\n}\n\n/** Install operations over ApplicationManager and UserInfoEngine.Instance, the engine ApplicationManager reads and installs through. */\nfunction buildInstallOperations(appManager: ApplicationManager): DashboardsAppInstallOperations {\n const engine = UserInfoEngine.Instance;\n return {\n ReadState: () => readInstallState(appManager, engine),\n Install: () => installForUser(appManager),\n RecordAutoInstall: () => engine.SetSetting(DASHBOARDS_APP_AUTO_INSTALL_SETTING_KEY, 'true'),\n };\n}\n\nfunction readInstallState(appManager: ApplicationManager, engine: UserInfoEngine): DashboardsAppInstallState | null {\n if (engine.IsPermissionConstrained) {\n return null;\n }\n const app = findSystemDashboardsApp(appManager);\n return {\n AppExists: app != null,\n Access: app ? engine.CheckUserApplicationAccess(app.ID) : 'not_installed',\n AutoInstallRecorded: engine.GetSetting(DASHBOARDS_APP_AUTO_INSTALL_SETTING_KEY) === 'true',\n };\n}\n\n/** Installs or re-enables the app, then rebuilds the user's app list so navigation can find it. */\nasync function installForUser(appManager: ApplicationManager): Promise<boolean> {\n const app = findSystemDashboardsApp(appManager);\n if (!app || !(await appManager.InstallAppForUser(app.ID))) {\n return false;\n }\n await appManager.ReloadUserApplications();\n return true;\n}\n\n/** The Dashboards app among all Active applications, whether or not the user has it. */\nfunction findSystemDashboardsApp(appManager: ApplicationManager): BaseApplication | undefined {\n return appManager.GetAllSystemApps().find((a) => a.Name === DASHBOARDS_APP_NAME);\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./WorkQueue/work-queue-dashboard.component";
3
+ import * as i2 from "./WorkQueue/components/work-queue-overview.component";
4
+ import * as i3 from "./WorkQueue/components/work-queue-dead-letters.component";
5
+ import * as i4 from "./WorkQueue/components/work-queue-partitions.component";
6
+ import * as i5 from "./WorkQueue/components/work-queue-bindings.component";
7
+ import * as i6 from "./WorkQueue/components/work-queue-discard-dialog.component";
8
+ import * as i7 from "@angular/common";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "@memberjunction/ng-ui-components";
11
+ import * as i10 from "@memberjunction/ng-shared-generic";
12
+ /**
13
+ * WorkQueueDashboardsModule — the Work Queue operator surface (spec 09b): overview, dead letters, partitions and
14
+ * binding validation over the WorkQueue.* remote operations.
15
+ */
16
+ export declare class WorkQueueDashboardsModule {
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkQueueDashboardsModule, never>;
18
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WorkQueueDashboardsModule, [typeof i1.WorkQueueDashboardComponent, typeof i2.WorkQueueOverviewComponent, typeof i3.WorkQueueDeadLettersComponent, typeof i4.WorkQueuePartitionsComponent, typeof i5.WorkQueueBindingsComponent, typeof i6.WorkQueueDiscardDialogComponent], [typeof i7.CommonModule, typeof i8.FormsModule, typeof i9.MJAlertComponent, typeof i9.MJButtonDirective, typeof i9.MJConfirmDialogComponent, typeof i9.MJDialogComponent, typeof i9.MJEmptyStateComponent, typeof i9.MJFilterChipComponent, typeof i9.MJPageBodyComponent, typeof i9.MJPageHeaderComponent, typeof i9.MJPageLayoutComponent, typeof i9.MJRefreshButtonComponent, typeof i9.MJStatBadgeComponent, typeof i9.MJTabNavComponent, typeof i10.SharedGenericModule], [typeof i1.WorkQueueDashboardComponent]>;
19
+ static ɵinj: i0.ɵɵInjectorDeclaration<WorkQueueDashboardsModule>;
20
+ }
21
+ /** Keeps the @RegisterClass(BaseDashboard, 'WorkQueueDashboard') registration out of tree-shaking. */
22
+ export declare function LoadWorkQueueDashboard(): void;
23
+ //# sourceMappingURL=work-queue-dashboards.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-queue-dashboards.module.d.ts","sourceRoot":"","sources":["../src/work-queue-dashboards.module.ts"],"names":[],"mappings":";;;;;;;;;;;AA0BA;;;GAGG;AACH,qBA6Ba,yBAAyB;yCAAzB,yBAAyB;0CAAzB,yBAAyB;0CAAzB,yBAAyB;CAAG;AAEzC,sGAAsG;AACtG,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1,92 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { MJAlertComponent, MJButtonDirective, MJConfirmDialogComponent, MJDialogComponent, MJEmptyStateComponent, MJFilterChipComponent, MJPageBodyComponent, MJPageHeaderComponent, MJPageLayoutComponent, MJRefreshButtonComponent, MJStatBadgeComponent, MJTabNavComponent, } from '@memberjunction/ng-ui-components';
5
+ import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
6
+ import { WorkQueueDashboardComponent } from './WorkQueue/work-queue-dashboard.component';
7
+ import { WorkQueueOverviewComponent } from './WorkQueue/components/work-queue-overview.component';
8
+ import { WorkQueueDeadLettersComponent } from './WorkQueue/components/work-queue-dead-letters.component';
9
+ import { WorkQueuePartitionsComponent } from './WorkQueue/components/work-queue-partitions.component';
10
+ import { WorkQueueBindingsComponent } from './WorkQueue/components/work-queue-bindings.component';
11
+ import { WorkQueueDiscardDialogComponent } from './WorkQueue/components/work-queue-discard-dialog.component';
12
+ import { WorkQueueOperatorService } from './WorkQueue/services/work-queue-operator.service';
13
+ import * as i0 from "@angular/core";
14
+ /**
15
+ * WorkQueueDashboardsModule — the Work Queue operator surface (spec 09b): overview, dead letters, partitions and
16
+ * binding validation over the WorkQueue.* remote operations.
17
+ */
18
+ export class WorkQueueDashboardsModule {
19
+ static ɵfac = function WorkQueueDashboardsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WorkQueueDashboardsModule)(); };
20
+ static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: WorkQueueDashboardsModule });
21
+ static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [WorkQueueOperatorService], imports: [CommonModule,
22
+ FormsModule,
23
+ MJAlertComponent,
24
+ MJConfirmDialogComponent,
25
+ MJDialogComponent,
26
+ MJEmptyStateComponent,
27
+ MJFilterChipComponent,
28
+ MJPageBodyComponent,
29
+ MJPageHeaderComponent,
30
+ MJPageLayoutComponent,
31
+ MJRefreshButtonComponent,
32
+ MJStatBadgeComponent,
33
+ MJTabNavComponent,
34
+ SharedGenericModule] });
35
+ }
36
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WorkQueueDashboardsModule, [{
37
+ type: NgModule,
38
+ args: [{
39
+ declarations: [
40
+ WorkQueueDashboardComponent,
41
+ WorkQueueOverviewComponent,
42
+ WorkQueueDeadLettersComponent,
43
+ WorkQueuePartitionsComponent,
44
+ WorkQueueBindingsComponent,
45
+ WorkQueueDiscardDialogComponent,
46
+ ],
47
+ imports: [
48
+ CommonModule,
49
+ FormsModule,
50
+ MJAlertComponent,
51
+ MJButtonDirective,
52
+ MJConfirmDialogComponent,
53
+ MJDialogComponent,
54
+ MJEmptyStateComponent,
55
+ MJFilterChipComponent,
56
+ MJPageBodyComponent,
57
+ MJPageHeaderComponent,
58
+ MJPageLayoutComponent,
59
+ MJRefreshButtonComponent,
60
+ MJStatBadgeComponent,
61
+ MJTabNavComponent,
62
+ SharedGenericModule,
63
+ ],
64
+ providers: [WorkQueueOperatorService],
65
+ exports: [WorkQueueDashboardComponent],
66
+ }]
67
+ }], null, null); })();
68
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(WorkQueueDashboardsModule, { declarations: [WorkQueueDashboardComponent,
69
+ WorkQueueOverviewComponent,
70
+ WorkQueueDeadLettersComponent,
71
+ WorkQueuePartitionsComponent,
72
+ WorkQueueBindingsComponent,
73
+ WorkQueueDiscardDialogComponent], imports: [CommonModule,
74
+ FormsModule,
75
+ MJAlertComponent,
76
+ MJButtonDirective,
77
+ MJConfirmDialogComponent,
78
+ MJDialogComponent,
79
+ MJEmptyStateComponent,
80
+ MJFilterChipComponent,
81
+ MJPageBodyComponent,
82
+ MJPageHeaderComponent,
83
+ MJPageLayoutComponent,
84
+ MJRefreshButtonComponent,
85
+ MJStatBadgeComponent,
86
+ MJTabNavComponent,
87
+ SharedGenericModule], exports: [WorkQueueDashboardComponent] }); })();
88
+ /** Keeps the @RegisterClass(BaseDashboard, 'WorkQueueDashboard') registration out of tree-shaking. */
89
+ export function LoadWorkQueueDashboard() {
90
+ // No-op — referencing the class is enough for the bundler.
91
+ }
92
+ //# sourceMappingURL=work-queue-dashboards.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-queue-dashboards.module.js","sourceRoot":"","sources":["../src/work-queue-dashboards.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,6BAA6B,EAAE,MAAM,0DAA0D,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAC7G,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;;AAE5F;;;GAGG;AA8BH,MAAM,OAAO,yBAAyB;mHAAzB,yBAAyB;4DAAzB,yBAAyB;iEAHvB,CAAC,wBAAwB,CAAC,YAhBjC,YAAY;YACZ,WAAW;YACX,gBAAgB;YAEhB,wBAAwB;YACxB,iBAAiB;YACjB,qBAAqB;YACrB,qBAAqB;YACrB,mBAAmB;YACnB,qBAAqB;YACrB,qBAAqB;YACrB,wBAAwB;YACxB,oBAAoB;YACpB,iBAAiB;YACjB,mBAAmB;;iFAKd,yBAAyB;cA7BrC,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,2BAA2B;oBAC3B,0BAA0B;oBAC1B,6BAA6B;oBAC7B,4BAA4B;oBAC5B,0BAA0B;oBAC1B,+BAA+B;iBAClC;gBACD,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;oBACX,gBAAgB;oBAChB,iBAAiB;oBACjB,wBAAwB;oBACxB,iBAAiB;oBACjB,qBAAqB;oBACrB,qBAAqB;oBACrB,mBAAmB;oBACnB,qBAAqB;oBACrB,qBAAqB;oBACrB,wBAAwB;oBACxB,oBAAoB;oBACpB,iBAAiB;oBACjB,mBAAmB;iBACtB;gBACD,SAAS,EAAE,CAAC,wBAAwB,CAAC;gBACrC,OAAO,EAAE,CAAC,2BAA2B,CAAC;aACzC;;wFACY,yBAAyB,mBA3B9B,2BAA2B;QAC3B,0BAA0B;QAC1B,6BAA6B;QAC7B,4BAA4B;QAC5B,0BAA0B;QAC1B,+BAA+B,aAG/B,YAAY;QACZ,WAAW;QACX,gBAAgB;QAChB,iBAAiB;QACjB,wBAAwB;QACxB,iBAAiB;QACjB,qBAAqB;QACrB,qBAAqB;QACrB,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,wBAAwB;QACxB,oBAAoB;QACpB,iBAAiB;QACjB,mBAAmB,aAGb,2BAA2B;AAIzC,sGAAsG;AACtG,MAAM,UAAU,sBAAsB;IAClC,2DAA2D;AAC/D,CAAC","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n MJAlertComponent,\n MJButtonDirective,\n MJConfirmDialogComponent,\n MJDialogComponent,\n MJEmptyStateComponent,\n MJFilterChipComponent,\n MJPageBodyComponent,\n MJPageHeaderComponent,\n MJPageLayoutComponent,\n MJRefreshButtonComponent,\n MJStatBadgeComponent,\n MJTabNavComponent,\n} from '@memberjunction/ng-ui-components';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { WorkQueueDashboardComponent } from './WorkQueue/work-queue-dashboard.component';\nimport { WorkQueueOverviewComponent } from './WorkQueue/components/work-queue-overview.component';\nimport { WorkQueueDeadLettersComponent } from './WorkQueue/components/work-queue-dead-letters.component';\nimport { WorkQueuePartitionsComponent } from './WorkQueue/components/work-queue-partitions.component';\nimport { WorkQueueBindingsComponent } from './WorkQueue/components/work-queue-bindings.component';\nimport { WorkQueueDiscardDialogComponent } from './WorkQueue/components/work-queue-discard-dialog.component';\nimport { WorkQueueOperatorService } from './WorkQueue/services/work-queue-operator.service';\n\n/**\n * WorkQueueDashboardsModule — the Work Queue operator surface (spec 09b): overview, dead letters, partitions and\n * binding validation over the WorkQueue.* remote operations.\n */\n@NgModule({\n declarations: [\n WorkQueueDashboardComponent,\n WorkQueueOverviewComponent,\n WorkQueueDeadLettersComponent,\n WorkQueuePartitionsComponent,\n WorkQueueBindingsComponent,\n WorkQueueDiscardDialogComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n MJAlertComponent,\n MJButtonDirective,\n MJConfirmDialogComponent,\n MJDialogComponent,\n MJEmptyStateComponent,\n MJFilterChipComponent,\n MJPageBodyComponent,\n MJPageHeaderComponent,\n MJPageLayoutComponent,\n MJRefreshButtonComponent,\n MJStatBadgeComponent,\n MJTabNavComponent,\n SharedGenericModule,\n ],\n providers: [WorkQueueOperatorService],\n exports: [WorkQueueDashboardComponent],\n})\nexport class WorkQueueDashboardsModule {}\n\n/** Keeps the @RegisterClass(BaseDashboard, 'WorkQueueDashboard') registration out of tree-shaking. */\nexport function LoadWorkQueueDashboard(): void {\n // No-op — referencing the class is enough for the bundler.\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-dashboards",
3
- "version": "6.2.0-edge.2",
3
+ "version": "6.2.0-edge.4",
4
4
  "description": "MemberJunction Dashboards",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -37,6 +37,10 @@
37
37
  "types": "./dist/archiving-dashboards.module.d.ts",
38
38
  "default": "./dist/archiving-dashboards.module.js"
39
39
  },
40
+ "./work-queue-dashboards.module": {
41
+ "types": "./dist/work-queue-dashboards.module.d.ts",
42
+ "default": "./dist/work-queue-dashboards.module.js"
43
+ },
40
44
  "./communication-dashboards.module": {
41
45
  "types": "./dist/communication-dashboards.module.d.ts",
42
46
  "default": "./dist/communication-dashboards.module.js"
@@ -91,9 +95,10 @@
91
95
  "devDependencies": {
92
96
  "@angular/compiler": "21.2.22",
93
97
  "@angular/compiler-cli": "21.2.22",
98
+ "@fortawesome/fontawesome-free": "6.7.2",
94
99
  "@types/d3": "^7.4.0",
95
100
  "sass": "^1.97.3",
96
- "@memberjunction/ng-test-utils": "6.2.0-edge.2"
101
+ "@memberjunction/ng-test-utils": "6.2.0-edge.4"
97
102
  },
98
103
  "peerDependencies": {
99
104
  "@angular/animations": "^21.2.22",
@@ -110,70 +115,72 @@
110
115
  "@codemirror/merge": "^6.11.2",
111
116
  "@codemirror/state": "^6.5.4",
112
117
  "@codemirror/view": "^6.39.12",
113
- "@memberjunction/actions-base": "6.2.0-edge.2",
114
- "@memberjunction/ai-core-plus": "6.2.0-edge.2",
115
- "@memberjunction/ai-engine-base": "6.2.0-edge.2",
116
- "@memberjunction/api-keys-base": "6.2.0-edge.2",
117
- "@memberjunction/core": "6.2.0-edge.2",
118
- "@memberjunction/core-entities": "6.2.0-edge.2",
119
- "@memberjunction/credentials": "6.2.0-edge.2",
120
- "@memberjunction/export-engine": "6.2.0-edge.2",
121
- "@memberjunction/global": "6.2.0-edge.2",
122
- "@memberjunction/graphql-dataprovider": "6.2.0-edge.2",
123
- "@memberjunction/integration-engine-base": "6.2.0-edge.2",
124
- "@memberjunction/interactive-component-types": "6.2.0-edge.2",
125
- "@memberjunction/lists-base": "6.2.0-edge.2",
126
- "@memberjunction/ng-action-gallery": "6.2.0-edge.2",
127
- "@memberjunction/ng-actions": "6.2.0-edge.2",
128
- "@memberjunction/ng-agent-requests": "6.2.0-edge.2",
129
- "@memberjunction/ng-agents": "6.2.0-edge.2",
130
- "@memberjunction/ng-rubrics": "6.2.0-edge.2",
131
- "@memberjunction/rubrics-base": "6.2.0-edge.2",
132
- "@memberjunction/ng-ai-test-harness": "6.2.0-edge.2",
133
- "@memberjunction/ng-archive-manager": "6.2.0-edge.2",
134
- "@memberjunction/ng-artifacts": "6.2.0-edge.2",
135
- "@memberjunction/ng-base-application": "6.2.0-edge.2",
136
- "@memberjunction/ng-base-forms": "6.2.0-edge.2",
137
- "@memberjunction/ng-base-types": "6.2.0-edge.2",
138
- "@memberjunction/ng-clustering": "6.2.0-edge.2",
139
- "@memberjunction/ng-code-editor": "6.2.0-edge.2",
140
- "@memberjunction/ng-composer": "6.2.0-edge.2",
141
- "@memberjunction/ng-container-directives": "6.2.0-edge.2",
142
- "@memberjunction/ng-conversations": "6.2.0-edge.2",
143
- "@memberjunction/ng-core-entity-forms": "6.2.0-edge.2",
144
- "@memberjunction/ng-credentials": "6.2.0-edge.2",
145
- "@memberjunction/ng-dashboard-viewer": "6.2.0-edge.2",
146
- "@memberjunction/ng-entity-relationship-diagram": "6.2.0-edge.2",
147
- "@memberjunction/ng-entity-viewer": "6.2.0-edge.2",
148
- "@memberjunction/ng-explorer-settings": "6.2.0-edge.2",
149
- "@memberjunction/ng-export-service": "6.2.0-edge.2",
150
- "@memberjunction/ng-filter-builder": "6.2.0-edge.2",
151
- "@memberjunction/ng-list-management": "6.2.0-edge.2",
152
- "@memberjunction/ng-map-view": "6.2.0-edge.2",
153
- "@memberjunction/ng-markdown": "6.2.0-edge.2",
154
- "@memberjunction/ng-media-player": "6.2.0-edge.2",
155
- "@memberjunction/ng-notifications": "6.2.0-edge.2",
156
- "@memberjunction/ng-query-viewer": "6.2.0-edge.2",
157
- "@memberjunction/ng-react": "6.2.0-edge.2",
158
- "@memberjunction/ng-record-process-studio": "6.2.0-edge.2",
159
- "@memberjunction/ng-resource-permissions": "6.2.0-edge.2",
160
- "@memberjunction/ng-scheduling": "6.2.0-edge.2",
161
- "@memberjunction/ng-search": "6.2.0-edge.2",
162
- "@memberjunction/ng-shared": "6.2.0-edge.2",
163
- "@memberjunction/ng-shared-generic": "6.2.0-edge.2",
164
- "@memberjunction/ng-task-graph-editor": "6.2.0-edge.2",
165
- "@memberjunction/ng-tabstrip": "6.2.0-edge.2",
166
- "@memberjunction/ng-testing": "6.2.0-edge.2",
167
- "@memberjunction/ng-trees": "6.2.0-edge.2",
168
- "@memberjunction/ng-ui-components": "6.2.0-edge.2",
169
- "@memberjunction/ng-user-routines": "6.2.0-edge.2",
170
- "@memberjunction/ng-versions": "6.2.0-edge.2",
171
- "@memberjunction/ng-word-cloud": "6.2.0-edge.2",
172
- "@memberjunction/predictive-studio-core": "6.2.0-edge.2",
173
- "@memberjunction/tag-engine-base": "6.2.0-edge.2",
174
- "@memberjunction/templates-base-types": "6.2.0-edge.2",
175
- "@memberjunction/testing-engine-base": "6.2.0-edge.2",
176
- "@memberjunction/theme-engine": "6.2.0-edge.2",
118
+ "@memberjunction/actions-base": "6.2.0-edge.4",
119
+ "@memberjunction/ai-core-plus": "6.2.0-edge.4",
120
+ "@memberjunction/ai-engine-base": "6.2.0-edge.4",
121
+ "@memberjunction/api-keys-base": "6.2.0-edge.4",
122
+ "@memberjunction/core": "6.2.0-edge.4",
123
+ "@memberjunction/core-entities": "6.2.0-edge.4",
124
+ "@memberjunction/credentials": "6.2.0-edge.4",
125
+ "@memberjunction/export-engine": "6.2.0-edge.4",
126
+ "@memberjunction/global": "6.2.0-edge.4",
127
+ "@memberjunction/graphql-dataprovider": "6.2.0-edge.4",
128
+ "@memberjunction/integration-engine-base": "6.2.0-edge.4",
129
+ "@memberjunction/interactive-component-types": "6.2.0-edge.4",
130
+ "@memberjunction/lists-base": "6.2.0-edge.4",
131
+ "@memberjunction/ng-action-gallery": "6.2.0-edge.4",
132
+ "@memberjunction/ng-actions": "6.2.0-edge.4",
133
+ "@memberjunction/ng-agent-requests": "6.2.0-edge.4",
134
+ "@memberjunction/ng-agents": "6.2.0-edge.4",
135
+ "@memberjunction/ng-rubrics": "6.2.0-edge.4",
136
+ "@memberjunction/rubrics-base": "6.2.0-edge.4",
137
+ "@memberjunction/ng-ai-test-harness": "6.2.0-edge.4",
138
+ "@memberjunction/ng-archive-manager": "6.2.0-edge.4",
139
+ "@memberjunction/ng-artifacts": "6.2.0-edge.4",
140
+ "@memberjunction/ng-base-application": "6.2.0-edge.4",
141
+ "@memberjunction/ng-base-forms": "6.2.0-edge.4",
142
+ "@memberjunction/ng-base-types": "6.2.0-edge.4",
143
+ "@memberjunction/ng-clustering": "6.2.0-edge.4",
144
+ "@memberjunction/ng-code-editor": "6.2.0-edge.4",
145
+ "@memberjunction/ng-composer": "6.2.0-edge.4",
146
+ "@memberjunction/ng-container-directives": "6.2.0-edge.4",
147
+ "@memberjunction/ng-conversations": "6.2.0-edge.4",
148
+ "@memberjunction/ng-core-entity-forms": "6.2.0-edge.4",
149
+ "@memberjunction/ng-credentials": "6.2.0-edge.4",
150
+ "@memberjunction/ng-dashboard-viewer": "6.2.0-edge.4",
151
+ "@memberjunction/ng-entity-relationship-diagram": "6.2.0-edge.4",
152
+ "@memberjunction/ng-entity-viewer": "6.2.0-edge.4",
153
+ "@memberjunction/ng-explorer-settings": "6.2.0-edge.4",
154
+ "@memberjunction/ng-export-service": "6.2.0-edge.4",
155
+ "@memberjunction/ng-filter-builder": "6.2.0-edge.4",
156
+ "@memberjunction/ng-list-management": "6.2.0-edge.4",
157
+ "@memberjunction/ng-map-view": "6.2.0-edge.4",
158
+ "@memberjunction/ng-markdown": "6.2.0-edge.4",
159
+ "@memberjunction/ng-media-player": "6.2.0-edge.4",
160
+ "@memberjunction/ng-notifications": "6.2.0-edge.4",
161
+ "@memberjunction/ng-query-viewer": "6.2.0-edge.4",
162
+ "@memberjunction/ng-react": "6.2.0-edge.4",
163
+ "@memberjunction/ng-record-process-studio": "6.2.0-edge.4",
164
+ "@memberjunction/ng-resource-permissions": "6.2.0-edge.4",
165
+ "@memberjunction/ng-scheduling": "6.2.0-edge.4",
166
+ "@memberjunction/ng-search": "6.2.0-edge.4",
167
+ "@memberjunction/ng-shared": "6.2.0-edge.4",
168
+ "@memberjunction/ng-shared-generic": "6.2.0-edge.4",
169
+ "@memberjunction/ng-task-graph-editor": "6.2.0-edge.4",
170
+ "@memberjunction/ng-tabstrip": "6.2.0-edge.4",
171
+ "@memberjunction/ng-testing": "6.2.0-edge.4",
172
+ "@memberjunction/ng-trees": "6.2.0-edge.4",
173
+ "@memberjunction/ng-ui-components": "6.2.0-edge.4",
174
+ "@memberjunction/ng-user-routines": "6.2.0-edge.4",
175
+ "@memberjunction/ng-versions": "6.2.0-edge.4",
176
+ "@memberjunction/ng-word-cloud": "6.2.0-edge.4",
177
+ "@memberjunction/predictive-studio-core": "6.2.0-edge.4",
178
+ "@memberjunction/tag-engine-base": "6.2.0-edge.4",
179
+ "@memberjunction/templates-base-types": "6.2.0-edge.4",
180
+ "@memberjunction/testing-engine-base": "6.2.0-edge.4",
181
+ "@memberjunction/theme-engine": "6.2.0-edge.4",
182
+ "@memberjunction/work-queue-base": "6.2.0-edge.4",
183
+ "@memberjunction/work-queue-core": "6.2.0-edge.4",
177
184
  "ag-grid-angular": "^35.0.1",
178
185
  "ag-grid-community": "^35.0.1",
179
186
  "angular-split": "^20.0.0",