@memberjunction/ng-dashboards 3.4.0 → 4.1.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 (458) hide show
  1. package/README.md +102 -339
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
  3. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  4. package/dist/AI/components/agents/agent-configuration.component.js +103 -44
  5. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
  7. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-editor.component.js +149 -211
  9. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  10. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  11. package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
  12. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  13. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  14. package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
  15. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  17. package/dist/AI/components/charts/time-series-chart.component.js +6 -7
  18. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  19. package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
  20. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  21. package/dist/AI/components/execution-monitoring.component.js +33 -37
  22. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  23. package/dist/AI/components/models/model-management.component.d.ts +3 -6
  24. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  25. package/dist/AI/components/models/model-management.component.js +34 -27
  26. package/dist/AI/components/models/model-management.component.js.map +1 -1
  27. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  28. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
  29. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
  32. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  33. package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
  34. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  35. package/dist/AI/components/prompts/prompt-management.component.js +34 -32
  36. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  37. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
  39. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  40. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  41. package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
  42. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  43. package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
  44. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  45. package/dist/AI/components/system/system-configuration.component.js +26 -27
  46. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  47. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  48. package/dist/AI/components/widgets/kpi-card.component.js +52 -42
  49. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  50. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  51. package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
  52. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  53. package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
  54. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  55. package/dist/APIKeys/api-applications-panel.component.js +193 -189
  56. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  57. package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
  58. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  59. package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
  60. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  61. package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
  62. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  63. package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
  64. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  65. package/dist/APIKeys/api-key-list.component.d.ts +0 -2
  66. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  67. package/dist/APIKeys/api-key-list.component.js +113 -114
  68. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  69. package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
  70. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  71. package/dist/APIKeys/api-keys-resource.component.js +294 -302
  72. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  73. package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
  74. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  75. package/dist/APIKeys/api-scopes-panel.component.js +151 -155
  76. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  77. package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
  78. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  79. package/dist/APIKeys/api-usage-panel.component.js +237 -234
  80. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  81. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  82. package/dist/Actions/components/actions-list-view.component.js +15 -14
  83. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  84. package/dist/Actions/components/actions-overview.component.d.ts +3 -6
  85. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  86. package/dist/Actions/components/actions-overview.component.js +17 -19
  87. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  88. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  89. package/dist/Actions/components/categories-list-view.component.js +6 -6
  90. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  91. package/dist/Actions/components/code-management.component.d.ts +0 -4
  92. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  93. package/dist/Actions/components/code-management.component.js +3 -9
  94. package/dist/Actions/components/code-management.component.js.map +1 -1
  95. package/dist/Actions/components/entity-integration.component.d.ts +0 -4
  96. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  97. package/dist/Actions/components/entity-integration.component.js +3 -9
  98. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  99. package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
  100. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  101. package/dist/Actions/components/execution-monitoring.component.js +13 -16
  102. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  103. package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
  104. package/dist/Actions/components/executions-list-view.component.js +3 -3
  105. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  106. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
  107. package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
  108. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
  109. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  110. package/dist/Actions/components/explorer/action-card.component.js +11 -10
  111. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  112. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
  113. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  114. package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
  115. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  116. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
  117. package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
  118. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
  120. package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
  121. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  122. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
  123. package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
  124. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  125. package/dist/Actions/components/explorer/index.d.ts +0 -1
  126. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  127. package/dist/Actions/components/explorer/index.js +0 -4
  128. package/dist/Actions/components/explorer/index.js.map +1 -1
  129. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  130. package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
  131. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  132. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  133. package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
  134. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  135. package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
  136. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  137. package/dist/Actions/components/scheduled-actions.component.js +3 -9
  138. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  139. package/dist/Actions/components/security-permissions.component.d.ts +0 -4
  140. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  141. package/dist/Actions/components/security-permissions.component.js +3 -9
  142. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  143. package/dist/Actions/index.d.ts +0 -7
  144. package/dist/Actions/index.d.ts.map +1 -1
  145. package/dist/Actions/index.js +0 -8
  146. package/dist/Actions/index.js.map +1 -1
  147. package/dist/Communication/communication-dashboard.component.d.ts +0 -1
  148. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  149. package/dist/Communication/communication-dashboard.component.js +38 -51
  150. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  151. package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
  152. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  153. package/dist/Communication/communication-logs-resource.component.js +112 -108
  154. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  155. package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
  156. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  157. package/dist/Communication/communication-monitor-resource.component.js +210 -201
  158. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  159. package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
  160. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  161. package/dist/Communication/communication-providers-resource.component.js +136 -124
  162. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  163. package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
  164. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  165. package/dist/Communication/communication-runs-resource.component.js +91 -88
  166. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
  168. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-templates-resource.component.js +139 -122
  170. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  171. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
  172. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  173. package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
  174. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  175. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  176. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
  177. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  178. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  179. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
  180. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  181. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  182. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
  183. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  184. package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
  185. package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
  186. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  187. package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
  188. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
  189. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  190. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  191. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
  192. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  193. package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
  194. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
  195. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  196. package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
  197. package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
  198. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  199. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
  200. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
  201. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  202. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  203. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
  204. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  205. package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
  206. package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
  207. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  208. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  209. package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
  210. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  211. package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
  212. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
  213. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  214. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
  215. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  216. package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
  217. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  218. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
  219. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  220. package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
  221. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  222. package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
  223. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  224. package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
  225. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  226. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
  227. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  228. package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
  229. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  230. package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
  231. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  232. package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
  233. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  234. package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
  235. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
  236. package/dist/Credentials/credentials-dashboard.component.js +31 -44
  237. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  238. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
  239. package/dist/Credentials/pipes/group-by.pipe.js +2 -1
  240. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
  241. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
  242. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  243. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
  244. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  245. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  246. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
  247. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  248. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
  249. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
  250. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
  251. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  252. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
  253. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  254. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  255. package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
  256. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  257. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +2 -4
  258. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  259. package/dist/DataExplorer/data-explorer-dashboard.component.js +83 -64
  260. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  261. package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
  262. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  263. package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
  264. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  265. package/dist/DataExplorer/index.d.ts +2 -2
  266. package/dist/DataExplorer/index.d.ts.map +1 -1
  267. package/dist/DataExplorer/index.js +2 -2
  268. package/dist/DataExplorer/index.js.map +1 -1
  269. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
  270. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  271. package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
  272. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  273. package/dist/Home/home-application.d.ts +109 -27
  274. package/dist/Home/home-application.d.ts.map +1 -1
  275. package/dist/Home/home-application.js +351 -75
  276. package/dist/Home/home-application.js.map +1 -1
  277. package/dist/Home/home-dashboard.component.d.ts +48 -12
  278. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  279. package/dist/Home/home-dashboard.component.js +267 -187
  280. package/dist/Home/home-dashboard.component.js.map +1 -1
  281. package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
  282. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  283. package/dist/Lists/components/lists-browse-resource.component.js +761 -685
  284. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  285. package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
  286. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  287. package/dist/Lists/components/lists-categories-resource.component.js +340 -316
  288. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  289. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -1
  290. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  291. package/dist/Lists/components/lists-my-lists-resource.component.js +530 -482
  292. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  293. package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
  294. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  295. package/dist/Lists/components/lists-operations-resource.component.js +508 -455
  296. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  297. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  298. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
  299. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  300. package/dist/Lists/index.d.ts +0 -1
  301. package/dist/Lists/index.d.ts.map +1 -1
  302. package/dist/Lists/index.js +0 -11
  303. package/dist/Lists/index.js.map +1 -1
  304. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
  305. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  306. package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
  307. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  308. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
  309. package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
  310. package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
  311. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  312. package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
  313. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  314. package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
  315. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  316. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
  317. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  318. package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
  319. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  320. package/dist/MCP/index.d.ts +5 -5
  321. package/dist/MCP/index.d.ts.map +1 -1
  322. package/dist/MCP/index.js +5 -5
  323. package/dist/MCP/index.js.map +1 -1
  324. package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
  325. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  326. package/dist/MCP/mcp-dashboard.component.js +976 -697
  327. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  328. package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
  329. package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
  330. package/dist/MCP/mcp-filter-panel.component.js +288 -0
  331. package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
  332. package/dist/MCP/mcp-resource.component.d.ts +11 -5
  333. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  334. package/dist/MCP/mcp-resource.component.js +8 -9
  335. package/dist/MCP/mcp-resource.component.js.map +1 -1
  336. package/dist/MCP/mcp.module.d.ts +16 -19
  337. package/dist/MCP/mcp.module.d.ts.map +1 -1
  338. package/dist/MCP/mcp.module.js +17 -26
  339. package/dist/MCP/mcp.module.js.map +1 -1
  340. package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
  341. package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
  342. package/dist/MCP/services/mcp-tools.service.js +5 -6
  343. package/dist/MCP/services/mcp-tools.service.js.map +1 -1
  344. package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
  345. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  346. package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
  347. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  348. package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
  349. package/dist/Scheduling/components/job-slideout.component.js +117 -116
  350. package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
  351. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
  352. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  353. package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
  354. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  355. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  356. package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
  357. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  358. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
  359. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  360. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
  361. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  362. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  363. package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
  364. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  365. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
  366. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  367. package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
  368. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  369. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  370. package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
  371. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  372. package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
  373. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  374. package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
  375. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  376. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
  377. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  378. package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
  379. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  380. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  381. package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
  382. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  383. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  384. package/dist/Testing/components/testing-analytics.component.js +30 -30
  385. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  386. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +3 -3
  388. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  389. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  390. package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
  391. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  392. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  393. package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
  394. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  395. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  396. package/dist/Testing/components/testing-explorer.component.js +42 -35
  397. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  398. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  399. package/dist/Testing/components/testing-review-resource.component.js +3 -3
  400. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  401. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  402. package/dist/Testing/components/testing-review.component.js +16 -16
  403. package/dist/Testing/components/testing-review.component.js.map +1 -1
  404. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  405. package/dist/Testing/components/testing-runs-resource.component.js +3 -3
  406. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  407. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  408. package/dist/Testing/components/testing-runs.component.js +15 -15
  409. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  410. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
  411. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
  412. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  413. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
  414. package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
  415. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  416. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
  417. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
  418. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  419. package/dist/Testing/testing-dashboard.component.d.ts +0 -1
  420. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  421. package/dist/Testing/testing-dashboard.component.js +9 -8
  422. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  423. package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
  424. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
  425. package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
  426. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
  427. package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
  428. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
  429. package/dist/VersionHistory/components/graph-resource.component.js +521 -0
  430. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
  431. package/dist/VersionHistory/components/index.d.ts +5 -0
  432. package/dist/VersionHistory/components/index.d.ts.map +1 -0
  433. package/dist/VersionHistory/components/index.js +5 -0
  434. package/dist/VersionHistory/components/index.js.map +1 -0
  435. package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
  436. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
  437. package/dist/VersionHistory/components/labels-resource.component.js +968 -0
  438. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
  439. package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
  440. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
  441. package/dist/VersionHistory/components/restore-resource.component.js +472 -0
  442. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
  443. package/dist/VersionHistory/index.d.ts +2 -0
  444. package/dist/VersionHistory/index.d.ts.map +1 -0
  445. package/dist/VersionHistory/index.js +2 -0
  446. package/dist/VersionHistory/index.js.map +1 -0
  447. package/dist/module.d.ts +42 -36
  448. package/dist/module.d.ts.map +1 -1
  449. package/dist/module.js +41 -7
  450. package/dist/module.js.map +1 -1
  451. package/dist/public-api.d.ts +20 -19
  452. package/dist/public-api.d.ts.map +1 -1
  453. package/dist/public-api.js +22 -120
  454. package/dist/public-api.js.map +1 -1
  455. package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
  456. package/dist/shared/pipes/highlight-search.pipe.js +2 -1
  457. package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
  458. package/package.json +64 -62
@@ -3,20 +3,38 @@ import { SharedService } from '@memberjunction/ng-shared';
3
3
  /**
4
4
  * Home Application - Provides dynamic navigation items for orphan resources.
5
5
  *
6
- * When a user opens a resource (record, view, dashboard, etc.) from within the Home app,
7
- * this application dynamically creates a nav item to represent that resource.
8
- * The nav item shows the resource name and appropriate icon from ResourceTypes metadata.
6
+ * Maintains a recency-ordered stack of up to 3 recently visited orphan resources.
7
+ * When the user opens a record/view/dashboard from within the Home app, the resource
8
+ * appears as a dynamic nav item. When they navigate away (e.g., click Home), the
9
+ * nav item persists so they can quickly jump back. Older items drop off as new ones
10
+ * are added.
11
+ *
12
+ * The stack is persisted to localStorage (via Metadata.Provider.LocalStorageProvider)
13
+ * so it survives page reloads. Resolved record labels are stored alongside each
14
+ * snapshot to avoid async lookups when restoring from storage.
9
15
  *
10
16
  * @example
11
- * User opens "John Smith" contact record from Home app:
12
- * - Dynamic nav item appears: [person icon] "John Smith"
13
- * - Clicking it re-selects that tab
17
+ * User opens "John Smith" contact, then "Acme Corp" company:
18
+ * - Nav shows: [Home] [Favorites] | [person] "Acme Corp" [building] "John Smith"
19
+ * - Clicking "John Smith" re-opens that record
14
20
  */
15
21
  export declare class HomeApplication extends BaseApplication {
22
+ private static readonly MAX_RECENT_ITEMS;
16
23
  private workspaceManager;
17
24
  private sharedService;
25
+ private recentOrphanStack;
26
+ private _storageLoadPromise;
27
+ /**
28
+ * Fingerprint of the last-processed active tab state (tabId::resourceRecordId).
29
+ * Guards against redundant stack mutations while still detecting content changes.
30
+ * In single-resource mode the tab ID stays constant when navigating between records
31
+ * (OpenTab replaces the temp tab's content but keeps its ID), so we must also
32
+ * include the resourceRecordId to detect when the tab shows a different record.
33
+ */
34
+ private _lastSeenTabFingerprint;
18
35
  /**
19
- * Inject WorkspaceStateManager for accessing current tab state
36
+ * Inject WorkspaceStateManager for accessing current tab state.
37
+ * Also triggers loading the persisted stack from storage on first call.
20
38
  */
21
39
  SetWorkspaceManager(manager: WorkspaceStateManager): void;
22
40
  /**
@@ -24,30 +42,94 @@ export declare class HomeApplication extends BaseApplication {
24
42
  */
25
43
  SetSharedService(service: SharedService): void;
26
44
  /**
27
- * Returns navigation items including any dynamic item for the active orphan resource.
28
- * Static items (Apps, Favorites) come from DefaultNavItems in metadata.
29
- * Dynamic items are generated based on the currently active tab.
45
+ * Returns navigation items including dynamic items for recently visited orphan resources.
46
+ * Static items come from DefaultNavItems in metadata.
47
+ * Dynamic items are generated from the recent orphan stack (up to 3).
48
+ */
49
+ GetNavItems(): Promise<NavItem[]>;
50
+ /**
51
+ * Removes a dynamic nav item from the recent stack by RecordID.
52
+ * Called by AppNavComponent when the user clicks the dismiss X button.
53
+ * If the dismissed item is currently active, navigates back to the app's default tab.
54
+ */
55
+ RemoveDynamicNavItem(item: NavItem): void;
56
+ /**
57
+ * Checks whether the dismissed nav item matches the currently active tab.
58
+ */
59
+ private isDismissedItemActive;
60
+ /**
61
+ * Navigates back to the app's default tab (first static nav item / Home dashboard).
62
+ */
63
+ private navigateToDefault;
64
+ /**
65
+ * Resolves the best icon for a dynamic nav item.
66
+ * Priority: entity-specific icon from metadata → resource type icon → generic fallback.
67
+ */
68
+ private resolveIcon;
69
+ /**
70
+ * Updates the recent orphan stack based on the currently active tab.
71
+ * If the active tab is a new orphan resource (not already in the stack and not
72
+ * matching any static nav item), it gets added to the front. Items already in the
73
+ * stack keep their position to avoid visually jarring reordering when users click
74
+ * between existing dynamic nav items.
75
+ */
76
+ private updateRecentStack;
77
+ /**
78
+ * Creates an OrphanResourceSnapshot from a tab if it qualifies as an orphan resource.
79
+ * Returns null if the tab is a static nav item, has no resource type, or is an
80
+ * app-level custom dashboard (no record ID).
30
81
  */
31
- GetNavItems(): NavItem[];
82
+ private createSnapshotIfOrphan;
32
83
  /**
33
- * Gets the icon for a resource type from the ResourceTypes entity.
34
- * Uses SharedService which caches ResourceTypes on app load.
84
+ * Checks whether a tab matches any static nav item (by label, route, or driver class).
35
85
  */
36
- private getResourceTypeIcon;
86
+ private matchesStaticNavItem;
37
87
  /**
38
- * Creates a dynamic nav item for the currently active orphan resource tab.
39
- * Returns null if:
40
- * - No workspace manager is set
41
- * - No active tab exists
42
- * - Active tab doesn't belong to this app
43
- * - Active tab matches a static nav item
44
- * - Active tab has no resource type (e.g., app default dashboard)
88
+ * Creates DynamicNavItem entries for each item in the recent orphan stack.
89
+ * Uses the pre-resolved label from the snapshot (no async needed).
45
90
  */
46
- private getDynamicResourceNavItem;
91
+ private buildDynamicNavItems;
92
+ /**
93
+ * Creates a single DynamicNavItem from an OrphanResourceSnapshot.
94
+ * Uses the snapshot's resolvedLabel directly — no async lookup needed.
95
+ */
96
+ private createDynamicNavItem;
97
+ /**
98
+ * Resolves the best available display label for an entity record nav item.
99
+ * Priority order:
100
+ * 1. Cached record name (from EntityRecordNameCache, populated by entity Load/Save)
101
+ * 2. Tab title (whatever the workspace assigned when the tab was opened)
102
+ * 3. Generated default (entity name + truncated primary key values)
103
+ *
104
+ * @param entityName - Entity name from tab configuration, may be undefined for non-entity resources
105
+ * @param tabRecordId - URL-encoded composite key segment (e.g. "ID|abc-123" or "Field1|val1||Field2|val2")
106
+ * @param tabTitle - Fallback title assigned by the workspace when the tab was opened
107
+ */
108
+ private resolveRecordLabel;
109
+ /**
110
+ * Generates a fallback label when no cached record name or tab title is available.
111
+ * Format: "EntityName: <truncated key value(s)>"
112
+ *
113
+ * @example
114
+ * // Single key: "Contacts: abc1234..."
115
+ * // Multi key: "Order Details: abc1..., 42"
116
+ * // No key: "Contacts record"
117
+ */
118
+ private createDefaultLabel;
119
+ /**
120
+ * Truncates a primary key value for display, appending "..." if it exceeds maxLength.
121
+ * Returns the value as-is if it's short enough or empty.
122
+ */
123
+ private trimValue;
124
+ /**
125
+ * Persists the current recentOrphanStack to localStorage via Provider.
126
+ * Fire-and-forget — errors are logged but don't affect the UX.
127
+ */
128
+ private saveStackToStorage;
129
+ /**
130
+ * Loads the recent orphan stack from localStorage via Provider.
131
+ * Filters out stale entries (older than MAX_SNAPSHOT_AGE_MS).
132
+ */
133
+ private loadStackFromStorage;
47
134
  }
48
- /**
49
- * Tree-shaking prevention function.
50
- * Call this to ensure the HomeApplication class is not removed during build.
51
- */
52
- export declare function LoadHomeApplication(): void;
53
135
  //# sourceMappingURL=home-application.d.ts.map
@@ -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;AAE1D;;;;;;;;;;;GAWG;AACH,qBACa,eAAgB,SAAQ,eAAe;IAClD,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,aAAa,CAA8B;IAEnD;;OAEG;IACI,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIhE;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIrD;;;;OAIG;IACM,WAAW,IAAI,OAAO,EAAE;IAYjC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;CAwElC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}
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"}
@@ -4,28 +4,57 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var HomeApplication_1;
7
8
  import { RegisterClass } from '@memberjunction/global';
8
9
  import { BaseApplication } from '@memberjunction/ng-base-application';
10
+ import { Metadata, CompositeKey, FieldValueCollection } from '@memberjunction/core';
11
+ /** Storage key and category for persisting the recent orphan stack */
12
+ const STORAGE_KEY = 'HomeApp_RecentOrphanStack';
13
+ const STORAGE_CATEGORY = 'HomeApplication';
14
+ /** Max age for persisted snapshots — 7 days */
15
+ const MAX_SNAPSHOT_AGE_MS = 7 * 24 * 60 * 60 * 1000;
9
16
  /**
10
17
  * Home Application - Provides dynamic navigation items for orphan resources.
11
18
  *
12
- * When a user opens a resource (record, view, dashboard, etc.) from within the Home app,
13
- * this application dynamically creates a nav item to represent that resource.
14
- * The nav item shows the resource name and appropriate icon from ResourceTypes metadata.
19
+ * Maintains a recency-ordered stack of up to 3 recently visited orphan resources.
20
+ * When the user opens a record/view/dashboard from within the Home app, the resource
21
+ * appears as a dynamic nav item. When they navigate away (e.g., click Home), the
22
+ * nav item persists so they can quickly jump back. Older items drop off as new ones
23
+ * are added.
24
+ *
25
+ * The stack is persisted to localStorage (via Metadata.Provider.LocalStorageProvider)
26
+ * so it survives page reloads. Resolved record labels are stored alongside each
27
+ * snapshot to avoid async lookups when restoring from storage.
15
28
  *
16
29
  * @example
17
- * User opens "John Smith" contact record from Home app:
18
- * - Dynamic nav item appears: [person icon] "John Smith"
19
- * - Clicking it re-selects that tab
30
+ * User opens "John Smith" contact, then "Acme Corp" company:
31
+ * - Nav shows: [Home] [Favorites] | [person] "Acme Corp" [building] "John Smith"
32
+ * - Clicking "John Smith" re-opens that record
20
33
  */
21
34
  let HomeApplication = class HomeApplication extends BaseApplication {
35
+ static { HomeApplication_1 = this; }
36
+ static MAX_RECENT_ITEMS = 3;
22
37
  workspaceManager = null;
23
38
  sharedService = null;
39
+ recentOrphanStack = [];
40
+ _storageLoadPromise = null;
41
+ /**
42
+ * Fingerprint of the last-processed active tab state (tabId::resourceRecordId).
43
+ * Guards against redundant stack mutations while still detecting content changes.
44
+ * In single-resource mode the tab ID stays constant when navigating between records
45
+ * (OpenTab replaces the temp tab's content but keeps its ID), so we must also
46
+ * include the resourceRecordId to detect when the tab shows a different record.
47
+ */
48
+ _lastSeenTabFingerprint = null;
24
49
  /**
25
- * Inject WorkspaceStateManager for accessing current tab state
50
+ * Inject WorkspaceStateManager for accessing current tab state.
51
+ * Also triggers loading the persisted stack from storage on first call.
26
52
  */
27
53
  SetWorkspaceManager(manager) {
28
54
  this.workspaceManager = manager;
55
+ if (!this._storageLoadPromise) {
56
+ this._storageLoadPromise = this.loadStackFromStorage();
57
+ }
29
58
  }
30
59
  /**
31
60
  * Inject SharedService for accessing ResourceTypes metadata
@@ -34,115 +63,362 @@ let HomeApplication = class HomeApplication extends BaseApplication {
34
63
  this.sharedService = service;
35
64
  }
36
65
  /**
37
- * Returns navigation items including any dynamic item for the active orphan resource.
38
- * Static items (Apps, Favorites) come from DefaultNavItems in metadata.
39
- * Dynamic items are generated based on the currently active tab.
66
+ * Returns navigation items including dynamic items for recently visited orphan resources.
67
+ * Static items come from DefaultNavItems in metadata.
68
+ * Dynamic items are generated from the recent orphan stack (up to 3).
40
69
  */
41
- GetNavItems() {
42
- const staticItems = super.GetNavItems();
43
- // Get dynamic nav item for currently active orphan resource tab
44
- const dynamicItem = this.getDynamicResourceNavItem();
45
- if (dynamicItem) {
46
- return [...staticItems, dynamicItem];
70
+ async GetNavItems() {
71
+ // Ensure persisted stack is loaded before building nav items.
72
+ // On first call after page load, this awaits the IndexedDB read;
73
+ // on subsequent calls the promise is already resolved (no-op await).
74
+ if (this._storageLoadPromise) {
75
+ await this._storageLoadPromise;
76
+ }
77
+ const staticItems = await super.GetNavItems();
78
+ // Update the recent stack based on current active tab
79
+ // Must await — updateRecentStack is async (calls matchesStaticNavItem → super.GetNavItems())
80
+ // and buildDynamicNavItems reads recentOrphanStack, so the stack must be fully updated first.
81
+ await this.updateRecentStack();
82
+ // Build dynamic nav items from the stack
83
+ const dynamicItems = this.buildDynamicNavItems();
84
+ if (dynamicItems.length > 0) {
85
+ return [...staticItems, ...dynamicItems];
47
86
  }
48
87
  return staticItems;
49
88
  }
50
89
  /**
51
- * Gets the icon for a resource type from the ResourceTypes entity.
52
- * Uses SharedService which caches ResourceTypes on app load.
90
+ * Removes a dynamic nav item from the recent stack by RecordID.
91
+ * Called by AppNavComponent when the user clicks the dismiss X button.
92
+ * If the dismissed item is currently active, navigates back to the app's default tab.
53
93
  */
54
- getResourceTypeIcon(resourceTypeName) {
55
- if (!this.sharedService) {
56
- return 'fa-solid fa-file';
94
+ RemoveDynamicNavItem(item) {
95
+ const index = this.recentOrphanStack.findIndex(s => s.resourceRecordId === item.RecordID);
96
+ if (index < 0) {
97
+ return;
98
+ }
99
+ const wasActive = this.isDismissedItemActive(item);
100
+ this.recentOrphanStack.splice(index, 1);
101
+ this.saveStackToStorage();
102
+ if (wasActive) {
103
+ this.navigateToDefault();
57
104
  }
58
- const resourceType = this.sharedService.ResourceTypeByName(resourceTypeName);
59
- return resourceType?.Icon || 'fa-solid fa-file';
60
105
  }
61
106
  /**
62
- * Creates a dynamic nav item for the currently active orphan resource tab.
63
- * Returns null if:
64
- * - No workspace manager is set
65
- * - No active tab exists
66
- * - Active tab doesn't belong to this app
67
- * - Active tab matches a static nav item
68
- * - Active tab has no resource type (e.g., app default dashboard)
107
+ * Checks whether the dismissed nav item matches the currently active tab.
69
108
  */
70
- getDynamicResourceNavItem() {
109
+ isDismissedItemActive(item) {
71
110
  if (!this.workspaceManager) {
72
- return null;
111
+ return false;
73
112
  }
74
113
  const config = this.workspaceManager.GetConfiguration();
75
114
  if (!config?.activeTabId) {
76
- return null;
115
+ return false;
116
+ }
117
+ const activeTab = config.tabs.find(t => t.id === config.activeTabId);
118
+ if (!activeTab) {
119
+ return false;
120
+ }
121
+ return activeTab.resourceRecordId === item.RecordID;
122
+ }
123
+ /**
124
+ * Navigates back to the app's default tab (first static nav item / Home dashboard).
125
+ */
126
+ navigateToDefault() {
127
+ if (!this.workspaceManager) {
128
+ return;
129
+ }
130
+ this.CreateDefaultTab().then(tabRequest => {
131
+ if (tabRequest && this.workspaceManager) {
132
+ this.workspaceManager.OpenTab(tabRequest, this.GetColor());
133
+ }
134
+ });
135
+ }
136
+ // ========================================
137
+ // Icon Resolution
138
+ // ========================================
139
+ /**
140
+ * Resolves the best icon for a dynamic nav item.
141
+ * Priority: entity-specific icon from metadata → resource type icon → generic fallback.
142
+ */
143
+ resolveIcon(entityName, resourceTypeName) {
144
+ if (entityName) {
145
+ const md = new Metadata();
146
+ const entityIcon = md.EntityByName(entityName)?.Icon;
147
+ if (entityIcon) {
148
+ return entityIcon;
149
+ }
150
+ }
151
+ if (this.sharedService) {
152
+ const resourceType = this.sharedService.ResourceTypeByName(resourceTypeName);
153
+ if (resourceType?.Icon) {
154
+ return resourceType.Icon;
155
+ }
156
+ }
157
+ return 'fa-solid fa-file';
158
+ }
159
+ // ========================================
160
+ // Recent Stack Management
161
+ // ========================================
162
+ /**
163
+ * Updates the recent orphan stack based on the currently active tab.
164
+ * If the active tab is a new orphan resource (not already in the stack and not
165
+ * matching any static nav item), it gets added to the front. Items already in the
166
+ * stack keep their position to avoid visually jarring reordering when users click
167
+ * between existing dynamic nav items.
168
+ */
169
+ async updateRecentStack() {
170
+ if (!this.workspaceManager) {
171
+ return;
172
+ }
173
+ const config = this.workspaceManager.GetConfiguration();
174
+ if (!config?.activeTabId) {
175
+ return;
77
176
  }
78
177
  const activeTab = config.tabs.find(t => t.id === config.activeTabId);
79
178
  if (!activeTab || activeTab.applicationId !== this.ID) {
80
- return null;
179
+ return;
180
+ }
181
+ // Build a fingerprint from tab ID + record content. In single-resource mode,
182
+ // OpenTab replaces the temp tab's content but keeps the same tab ID, so we
183
+ // need the resourceRecordId to detect when a different record is shown.
184
+ const fingerprint = `${activeTab.id}::${activeTab.resourceRecordId ?? ''}`;
185
+ if (fingerprint === this._lastSeenTabFingerprint) {
186
+ return;
187
+ }
188
+ this._lastSeenTabFingerprint = fingerprint;
189
+ // Check if active tab qualifies as an orphan resource
190
+ const snapshot = await this.createSnapshotIfOrphan(activeTab);
191
+ if (!snapshot) {
192
+ // Active tab is a static resource (Home dashboard, etc.) — leave stack as-is
193
+ return;
81
194
  }
82
- // Get resource type from tab configuration
83
- const resourceType = activeTab.configuration?.['resourceType'];
195
+ // If this item is already in the stack, leave the order unchanged.
196
+ // Reordering on every click is visually jarring — items shift around
197
+ // while the user is clicking between existing nav items.
198
+ const alreadyTracked = this.recentOrphanStack.some(s => s.resourceRecordId === snapshot.resourceRecordId);
199
+ if (alreadyTracked) {
200
+ return;
201
+ }
202
+ // New orphan — push to front (most recent first) and trim oldest if needed
203
+ this.recentOrphanStack.unshift(snapshot);
204
+ if (this.recentOrphanStack.length > HomeApplication_1.MAX_RECENT_ITEMS) {
205
+ this.recentOrphanStack.length = HomeApplication_1.MAX_RECENT_ITEMS;
206
+ }
207
+ this.saveStackToStorage();
208
+ }
209
+ /**
210
+ * Creates an OrphanResourceSnapshot from a tab if it qualifies as an orphan resource.
211
+ * Returns null if the tab is a static nav item, has no resource type, or is an
212
+ * app-level custom dashboard (no record ID).
213
+ */
214
+ async createSnapshotIfOrphan(tab) {
215
+ const resourceType = tab.configuration?.['resourceType'];
84
216
  if (!resourceType) {
85
217
  return null;
86
218
  }
87
- // Don't create dynamic nav item for 'custom' resource type without a specific record
88
- // (these are typically app-level dashboards, not orphan resources)
89
- if (resourceType.toLowerCase() === 'custom' && !activeTab.resourceRecordId) {
219
+ // Skip 'custom' resource type without a specific record (app-level dashboards)
220
+ if (resourceType.toLowerCase() === 'custom' && !tab.resourceRecordId) {
90
221
  return null;
91
222
  }
92
- // Don't create dynamic nav item if it matches a static nav item
93
- const staticItems = super.GetNavItems();
94
- const matchesStatic = staticItems.some(item => {
95
- // Match by label
96
- if (item.Label === activeTab.title) {
223
+ // Skip if it matches a static nav item
224
+ if (await this.matchesStaticNavItem(tab)) {
225
+ return null;
226
+ }
227
+ // Resolve the label now so it's stored with the snapshot
228
+ const entityName = tab.configuration?.['Entity'];
229
+ const resolvedLabel = await this.resolveRecordLabel(entityName, tab.resourceRecordId, tab.title);
230
+ return {
231
+ resourceRecordId: tab.resourceRecordId,
232
+ resourceType,
233
+ entityName,
234
+ title: tab.title,
235
+ resolvedLabel,
236
+ configuration: tab.configuration,
237
+ tabId: tab.id,
238
+ timestamp: Date.now()
239
+ };
240
+ }
241
+ /**
242
+ * Checks whether a tab matches any static nav item (by label, route, or driver class).
243
+ */
244
+ async matchesStaticNavItem(tab) {
245
+ const staticItems = await super.GetNavItems();
246
+ return staticItems.some(item => {
247
+ if (item.Label === tab.title) {
97
248
  return true;
98
249
  }
99
- // Match by route
100
- if (item.Route && activeTab.configuration?.['route'] === item.Route) {
250
+ if (item.Route && tab.configuration?.['route'] === item.Route) {
101
251
  return true;
102
252
  }
103
- // Match by driver class (for Custom resources)
104
- if (item.DriverClass && activeTab.configuration?.['driverClass'] === item.DriverClass) {
253
+ if (item.DriverClass && tab.configuration?.['driverClass'] === item.DriverClass) {
105
254
  return true;
106
255
  }
107
256
  return false;
108
257
  });
109
- if (matchesStatic) {
110
- return null;
111
- }
112
- // Create the dynamic nav item representing this orphan resource
113
- // Icon comes from ResourceTypes entity (metadata-driven, not hardcoded)
114
- const tabId = activeTab.id;
115
- const tabRecordId = activeTab.resourceRecordId;
258
+ }
259
+ // ========================================
260
+ // Dynamic NavItem Building
261
+ // ========================================
262
+ /**
263
+ * Creates DynamicNavItem entries for each item in the recent orphan stack.
264
+ * Uses the pre-resolved label from the snapshot (no async needed).
265
+ */
266
+ buildDynamicNavItems() {
267
+ return this.recentOrphanStack.map(snapshot => this.createDynamicNavItem(snapshot));
268
+ }
269
+ /**
270
+ * Creates a single DynamicNavItem from an OrphanResourceSnapshot.
271
+ * Uses the snapshot's resolvedLabel directly — no async lookup needed.
272
+ */
273
+ createDynamicNavItem(snapshot) {
116
274
  return {
117
- Label: activeTab.title,
118
- Icon: this.getResourceTypeIcon(resourceType),
119
- ResourceType: resourceType,
120
- RecordID: tabRecordId,
121
- Configuration: activeTab.configuration,
275
+ Label: snapshot.resolvedLabel,
276
+ Icon: this.resolveIcon(snapshot.entityName, snapshot.resourceType),
277
+ ResourceType: snapshot.resourceType,
278
+ RecordID: snapshot.resourceRecordId,
279
+ Configuration: snapshot.configuration,
122
280
  isDynamic: true,
123
- // Custom matching function - matches if tab has same resource record ID
124
281
  isActiveMatch: (tab) => {
125
282
  const wsTab = tab;
126
- if (tabRecordId) {
127
- return wsTab.resourceRecordId === tabRecordId;
283
+ if (snapshot.resourceRecordId) {
284
+ return wsTab.resourceRecordId === snapshot.resourceRecordId;
128
285
  }
129
- // Fall back to tab ID matching if no record ID
130
- return wsTab.id === tabId;
286
+ return wsTab.id === snapshot.tabId;
131
287
  }
132
288
  };
133
289
  }
290
+ // ========================================
291
+ // Label Resolution
292
+ // ========================================
293
+ /**
294
+ * Resolves the best available display label for an entity record nav item.
295
+ * Priority order:
296
+ * 1. Cached record name (from EntityRecordNameCache, populated by entity Load/Save)
297
+ * 2. Tab title (whatever the workspace assigned when the tab was opened)
298
+ * 3. Generated default (entity name + truncated primary key values)
299
+ *
300
+ * @param entityName - Entity name from tab configuration, may be undefined for non-entity resources
301
+ * @param tabRecordId - URL-encoded composite key segment (e.g. "ID|abc-123" or "Field1|val1||Field2|val2")
302
+ * @param tabTitle - Fallback title assigned by the workspace when the tab was opened
303
+ */
304
+ async resolveRecordLabel(entityName, tabRecordId, tabTitle) {
305
+ if (!entityName || !tabRecordId) {
306
+ return tabTitle || '';
307
+ }
308
+ // Parse the URL segment into a CompositeKey
309
+ const fvCollection = new FieldValueCollection();
310
+ fvCollection.SimpleLoadFromURLSegment(tabRecordId);
311
+ const compositeKey = new CompositeKey(fvCollection.KeyValuePairs);
312
+ // Check the cache first
313
+ try {
314
+ const cachedName = await Metadata.Provider.GetCachedRecordName(entityName, compositeKey, true);
315
+ if (cachedName) {
316
+ return cachedName;
317
+ }
318
+ }
319
+ catch (error) {
320
+ console.warn('Failed to look up cached record name:', error);
321
+ }
322
+ // Fall back generated default from the key values, then tabTitle if we have no default label(unlikely)
323
+ return this.createDefaultLabel(entityName, compositeKey) || tabTitle;
324
+ }
325
+ /**
326
+ * Generates a fallback label when no cached record name or tab title is available.
327
+ * Format: "EntityName: <truncated key value(s)>"
328
+ *
329
+ * @example
330
+ * // Single key: "Contacts: abc1234..."
331
+ * // Multi key: "Order Details: abc1..., 42"
332
+ * // No key: "Contacts record"
333
+ */
334
+ createDefaultLabel(entityName, key) {
335
+ if (!key || key.KeyValuePairs.length === 0) {
336
+ return `${entityName} record`;
337
+ }
338
+ if (key.KeyValuePairs.length === 1) {
339
+ return `${entityName}: ${this.trimValue(key.KeyValuePairs[0].Value)}`;
340
+ }
341
+ // Multiple keys - show each value trimmed, comma-separated
342
+ const values = key.KeyValuePairs.map(kv => this.trimValue(kv.Value)).join(', ');
343
+ return `${entityName}: ${values}`;
344
+ }
345
+ /**
346
+ * Truncates a primary key value for display, appending "..." if it exceeds maxLength.
347
+ * Returns the value as-is if it's short enough or empty.
348
+ */
349
+ trimValue(value, maxLength = 8) {
350
+ if (!value || value.trim().length === 0) {
351
+ return value;
352
+ }
353
+ const trimmed = value.trim();
354
+ if (trimmed.length <= maxLength) {
355
+ return trimmed;
356
+ }
357
+ return trimmed.substring(0, maxLength) + '...';
358
+ }
359
+ // ========================================
360
+ // Storage Persistence
361
+ // ========================================
362
+ /**
363
+ * Persists the current recentOrphanStack to localStorage via Provider.
364
+ * Fire-and-forget — errors are logged but don't affect the UX.
365
+ */
366
+ saveStackToStorage() {
367
+ try {
368
+ const provider = Metadata.Provider.LocalStorageProvider;
369
+ if (!provider) {
370
+ return;
371
+ }
372
+ // Strip non-serializable fields (isActiveMatch closures are rebuilt on load)
373
+ const serializable = this.recentOrphanStack.map(s => ({
374
+ resourceRecordId: s.resourceRecordId,
375
+ resourceType: s.resourceType,
376
+ entityName: s.entityName,
377
+ title: s.title,
378
+ resolvedLabel: s.resolvedLabel,
379
+ configuration: s.configuration,
380
+ tabId: s.tabId,
381
+ timestamp: s.timestamp
382
+ }));
383
+ provider.SetItem(STORAGE_KEY, JSON.stringify(serializable), STORAGE_CATEGORY).catch(err => {
384
+ console.warn('Failed to persist recent nav stack:', err);
385
+ });
386
+ }
387
+ catch (err) {
388
+ console.warn('Failed to persist recent nav stack:', err);
389
+ }
390
+ }
391
+ /**
392
+ * Loads the recent orphan stack from localStorage via Provider.
393
+ * Filters out stale entries (older than MAX_SNAPSHOT_AGE_MS).
394
+ */
395
+ async loadStackFromStorage() {
396
+ try {
397
+ const provider = Metadata.Provider.LocalStorageProvider;
398
+ if (!provider) {
399
+ return;
400
+ }
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)) {
407
+ return;
408
+ }
409
+ // Filter out stale snapshots
410
+ const now = Date.now();
411
+ this.recentOrphanStack = parsed
412
+ .filter(s => s.resourceRecordId && s.timestamp && (now - s.timestamp) < MAX_SNAPSHOT_AGE_MS)
413
+ .slice(0, HomeApplication_1.MAX_RECENT_ITEMS);
414
+ }
415
+ catch (err) {
416
+ console.warn('Failed to load recent nav stack from storage:', err);
417
+ }
418
+ }
134
419
  };
135
- HomeApplication = __decorate([
420
+ HomeApplication = HomeApplication_1 = __decorate([
136
421
  RegisterClass(BaseApplication, 'HomeApplication')
137
422
  ], HomeApplication);
138
423
  export { HomeApplication };
139
- /**
140
- * Tree-shaking prevention function.
141
- * Call this to ensure the HomeApplication class is not removed during build.
142
- */
143
- export function LoadHomeApplication() {
144
- // This function exists solely to prevent tree-shaking
145
- // The @RegisterClass decorator handles actual registration
146
- const x = 1;
147
- }
148
424
  //# sourceMappingURL=home-application.js.map