@memberjunction/ng-explorer-core 2.121.0 → 2.122.1

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 (127) hide show
  1. package/README.md +0 -1
  2. package/dist/app-routing.module.d.ts +6 -5
  3. package/dist/app-routing.module.d.ts.map +1 -1
  4. package/dist/app-routing.module.js +266 -132
  5. package/dist/app-routing.module.js.map +1 -1
  6. package/dist/lib/app-view/application-view.component.js +10 -10
  7. package/dist/lib/app-view/application-view.component.js.map +1 -1
  8. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +11 -12
  9. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
  10. package/dist/lib/data-browser-component/data-browser.component.js +8 -8
  11. package/dist/lib/data-browser-component/data-browser.component.js.map +1 -1
  12. package/dist/lib/generic-browse-list/generic-browse-list.component.js +10 -7
  13. package/dist/lib/generic-browse-list/generic-browse-list.component.js.map +1 -1
  14. package/dist/lib/generic-browser-list/generic-browser-list.component.js +14 -11
  15. package/dist/lib/generic-browser-list/generic-browser-list.component.js.map +1 -1
  16. package/dist/lib/list-view/list-view.component.js +24 -21
  17. package/dist/lib/list-view/list-view.component.js.map +1 -1
  18. package/dist/lib/navigation/navigation.component.d.ts +0 -1
  19. package/dist/lib/navigation/navigation.component.d.ts.map +1 -1
  20. package/dist/lib/navigation/navigation.component.js +11 -19
  21. package/dist/lib/navigation/navigation.component.js.map +1 -1
  22. package/dist/lib/resource-browser/resource-browser.component.js +14 -11
  23. package/dist/lib/resource-browser/resource-browser.component.js.map +1 -1
  24. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -0
  25. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -0
  26. package/dist/lib/resource-wrappers/artifact-resource.component.js +92 -0
  27. package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -0
  28. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +119 -0
  29. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -0
  30. package/dist/lib/resource-wrappers/chat-collections-resource.component.js +500 -0
  31. package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -0
  32. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +87 -0
  33. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -0
  34. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +345 -0
  35. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -0
  36. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +67 -0
  37. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -0
  38. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +244 -0
  39. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -0
  40. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +46 -3
  41. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  42. package/dist/lib/resource-wrappers/dashboard-resource.component.js +298 -21
  43. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  44. package/dist/lib/resource-wrappers/list-detail-resource.component.js +1 -1
  45. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
  46. package/dist/lib/resource-wrappers/query-resource.component.js +1 -1
  47. package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
  48. package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
  49. package/dist/lib/resource-wrappers/record-resource.component.js +22 -5
  50. package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
  51. package/dist/lib/resource-wrappers/report-resource.component.js +1 -1
  52. package/dist/lib/resource-wrappers/report-resource.component.js.map +1 -1
  53. package/dist/lib/resource-wrappers/resource-wrappers-loader.d.ts.map +1 -1
  54. package/dist/lib/resource-wrappers/resource-wrappers-loader.js +15 -0
  55. package/dist/lib/resource-wrappers/resource-wrappers-loader.js.map +1 -1
  56. package/dist/lib/resource-wrappers/search-results-resource.component.js +1 -1
  57. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  58. package/dist/lib/resource-wrappers/view-resource.component.js +1 -1
  59. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  60. package/dist/lib/shell/components/header/app-nav.component.d.ts +45 -0
  61. package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -0
  62. package/dist/lib/shell/components/header/app-nav.component.js +127 -0
  63. package/dist/lib/shell/components/header/app-nav.component.js.map +1 -0
  64. package/dist/lib/shell/components/header/app-switcher.component.d.ts +53 -0
  65. package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -0
  66. package/dist/lib/shell/components/header/app-switcher.component.js +190 -0
  67. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -0
  68. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +83 -0
  69. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -0
  70. package/dist/lib/shell/components/tabs/component-cache-manager.js +175 -0
  71. package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -0
  72. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +138 -0
  73. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -0
  74. package/dist/lib/shell/components/tabs/tab-container.component.js +920 -0
  75. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -0
  76. package/dist/lib/shell/services/settings-dialog.service.d.ts +28 -0
  77. package/dist/lib/shell/services/settings-dialog.service.d.ts.map +1 -0
  78. package/dist/lib/shell/services/settings-dialog.service.js +67 -0
  79. package/dist/lib/shell/services/settings-dialog.service.js.map +1 -0
  80. package/dist/lib/shell/shell.component.d.ts +166 -0
  81. package/dist/lib/shell/shell.component.d.ts.map +1 -0
  82. package/dist/lib/shell/shell.component.js +1173 -0
  83. package/dist/lib/shell/shell.component.js.map +1 -0
  84. package/dist/lib/shell/shell.module.d.ts +14 -0
  85. package/dist/lib/shell/shell.module.d.ts.map +1 -0
  86. package/dist/lib/shell/shell.module.js +42 -0
  87. package/dist/lib/shell/shell.module.js.map +1 -0
  88. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +17 -13
  89. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
  90. package/dist/lib/single-dashboard/single-dashboard.component.d.ts +2 -1
  91. package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
  92. package/dist/lib/single-dashboard/single-dashboard.component.js +6 -1
  93. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  94. package/dist/lib/single-entity/single-entity.component.js +21 -17
  95. package/dist/lib/single-entity/single-entity.component.js.map +1 -1
  96. package/dist/lib/single-list-detail/single-list-detail.component.js +36 -30
  97. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  98. package/dist/lib/single-record/single-record.component.d.ts +1 -0
  99. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  100. package/dist/lib/single-record/single-record.component.js +16 -9
  101. package/dist/lib/single-record/single-record.component.js.map +1 -1
  102. package/dist/lib/single-report/single-report.component.d.ts +1 -7
  103. package/dist/lib/single-report/single-report.component.d.ts.map +1 -1
  104. package/dist/lib/single-report/single-report.component.js +16 -37
  105. package/dist/lib/single-report/single-report.component.js.map +1 -1
  106. package/dist/lib/single-view/single-view.component.d.ts +1 -2
  107. package/dist/lib/single-view/single-view.component.d.ts.map +1 -1
  108. package/dist/lib/single-view/single-view.component.js +35 -43
  109. package/dist/lib/single-view/single-view.component.js.map +1 -1
  110. package/dist/lib/style-guide-test/style-guide-test.component.js +20 -13
  111. package/dist/lib/style-guide-test/style-guide-test.component.js.map +1 -1
  112. package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.d.ts +1 -1
  113. package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.d.ts.map +1 -1
  114. package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js +8 -11
  115. package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js.map +1 -1
  116. package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
  117. package/dist/lib/user-notifications/user-notifications.component.js +0 -5
  118. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  119. package/dist/module.d.ts +50 -46
  120. package/dist/module.d.ts.map +1 -1
  121. package/dist/module.js +23 -11
  122. package/dist/module.js.map +1 -1
  123. package/dist/public-api.d.ts +4 -0
  124. package/dist/public-api.d.ts.map +1 -1
  125. package/dist/public-api.js +5 -0
  126. package/dist/public-api.js.map +1 -1
  127. package/package.json +44 -35
@@ -0,0 +1,500 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component, ViewEncapsulation } from '@angular/core';
8
+ import { NavigationEnd } from '@angular/router';
9
+ import { Metadata } from '@memberjunction/core';
10
+ import { RegisterClass } from '@memberjunction/global';
11
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
12
+ import { EnvironmentEntityExtended } from '@memberjunction/core-entities';
13
+ import { Subject, takeUntil, distinctUntilChanged, combineLatest, filter } from 'rxjs';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@memberjunction/ng-conversations";
16
+ import * as i2 from "@memberjunction/ng-shared";
17
+ import * as i3 from "@angular/router";
18
+ import * as i4 from "@angular/common";
19
+ import * as i5 from "@memberjunction/ng-artifacts";
20
+ function ChatCollectionsResource_mj_collections_full_view_2_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelement(0, "mj-collections-full-view", 4);
22
+ } if (rf & 2) {
23
+ const ctx_r0 = i0.ɵɵnextContext();
24
+ i0.ɵɵproperty("environmentId", ctx_r0.environmentId)("currentUser", ctx_r0.currentUser);
25
+ } }
26
+ function ChatCollectionsResource_ng_container_3_div_1_Template(rf, ctx) { if (rf & 1) {
27
+ const _r3 = i0.ɵɵgetCurrentView();
28
+ i0.ɵɵelementStart(0, "div", 8);
29
+ i0.ɵɵlistener("mousedown", function ChatCollectionsResource_ng_container_3_div_1_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onResizeStart($event)); });
30
+ i0.ɵɵelementEnd();
31
+ } }
32
+ function ChatCollectionsResource_ng_container_3_Template(rf, ctx) { if (rf & 1) {
33
+ const _r2 = i0.ɵɵgetCurrentView();
34
+ i0.ɵɵelementContainerStart(0);
35
+ i0.ɵɵtemplate(1, ChatCollectionsResource_ng_container_3_div_1_Template, 1, 0, "div", 5);
36
+ i0.ɵɵelementStart(2, "div", 6)(3, "mj-artifact-viewer-panel", 7);
37
+ i0.ɵɵlistener("closed", function ChatCollectionsResource_ng_container_3_Template_mj_artifact_viewer_panel_closed_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeArtifactPanel()); })("maximizeToggled", function ChatCollectionsResource_ng_container_3_Template_mj_artifact_viewer_panel_maximizeToggled_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleMaximizeArtifactPanel()); })("navigateToLink", function ChatCollectionsResource_ng_container_3_Template_mj_artifact_viewer_panel_navigateToLink_3_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onNavigateToLink($event)); });
38
+ i0.ɵɵelementEnd()();
39
+ i0.ɵɵelementContainerEnd();
40
+ } if (rf & 2) {
41
+ let tmp_7_0;
42
+ let tmp_10_0;
43
+ const ctx_r0 = i0.ɵɵnextContext();
44
+ i0.ɵɵadvance();
45
+ i0.ɵɵproperty("ngIf", !ctx_r0.isArtifactPanelMaximized);
46
+ i0.ɵɵadvance();
47
+ i0.ɵɵstyleProp("width", ctx_r0.artifactPanelWidth, "%");
48
+ i0.ɵɵclassProp("maximized", ctx_r0.isArtifactPanelMaximized);
49
+ i0.ɵɵadvance();
50
+ i0.ɵɵproperty("artifactId", ctx_r0.activeArtifactId)("currentUser", ctx_r0.currentUser)("environmentId", ctx_r0.environmentId)("versionNumber", (tmp_7_0 = ctx_r0.activeVersionNumber) !== null && tmp_7_0 !== undefined ? tmp_7_0 : undefined)("showSaveToCollection", false)("viewContext", "collection")("contextCollectionId", (tmp_10_0 = ctx_r0.collectionState.activeCollectionId) !== null && tmp_10_0 !== undefined ? tmp_10_0 : undefined)("canShare", ctx_r0.canShareActiveArtifact)("canEdit", ctx_r0.canEditActiveArtifact)("isMaximized", ctx_r0.isArtifactPanelMaximized);
51
+ } }
52
+ export function LoadChatCollectionsResource() {
53
+ // Force inclusion in production builds (tree shaking workaround)
54
+ // Using null placeholders since Angular DI provides actual instances
55
+ const test = new ChatCollectionsResource(null, null, null, null, null);
56
+ }
57
+ /**
58
+ * Chat Collections Resource - displays the collections full view for tab-based display
59
+ * Extends BaseResourceComponent to work with the resource type system
60
+ * Shows all collections and their artifacts in a comprehensive view
61
+ * Includes artifact panel support for viewing selected artifacts
62
+ */
63
+ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResourceComponent {
64
+ artifactState;
65
+ artifactPermissionService;
66
+ collectionState;
67
+ navigationService;
68
+ router;
69
+ currentUser = null;
70
+ // Artifact panel state
71
+ isArtifactPanelOpen = false;
72
+ activeArtifactId = null;
73
+ activeVersionNumber = null;
74
+ canShareActiveArtifact = false;
75
+ canEditActiveArtifact = false;
76
+ artifactPanelWidth = 40; // Default 40% width (percentage-based)
77
+ isArtifactPanelMaximized = false;
78
+ artifactPanelWidthBeforeMaximize = 40; // Store width before maximizing
79
+ // Resize state
80
+ isResizing = false;
81
+ resizeStartX = 0;
82
+ resizeStartWidth = 0;
83
+ destroy$ = new Subject();
84
+ skipUrlUpdate = true; // Skip URL updates during initialization
85
+ lastNavigatedUrl = ''; // Track URL to avoid reacting to our own navigation
86
+ constructor(artifactState, artifactPermissionService, collectionState, navigationService, router) {
87
+ super();
88
+ this.artifactState = artifactState;
89
+ this.artifactPermissionService = artifactPermissionService;
90
+ this.collectionState = collectionState;
91
+ this.navigationService = navigationService;
92
+ this.router = router;
93
+ }
94
+ ngOnInit() {
95
+ const md = new Metadata();
96
+ this.currentUser = md.CurrentUser;
97
+ // Subscribe to artifact state changes
98
+ this.subscribeToArtifactState();
99
+ // Setup resize listeners
100
+ this.setupResizeListeners();
101
+ // Parse URL first and apply state
102
+ const urlState = this.parseUrlState();
103
+ if (urlState) {
104
+ this.applyUrlState(urlState);
105
+ }
106
+ else {
107
+ // Check if we have navigation params from config (e.g., from Conversations linking here)
108
+ this.applyNavigationParams();
109
+ }
110
+ // Subscribe to state changes to update URL
111
+ this.subscribeToUrlStateChanges();
112
+ // Subscribe to router NavigationEnd events for back/forward button support
113
+ this.router.events
114
+ .pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this.destroy$))
115
+ .subscribe(event => {
116
+ const currentUrl = event.urlAfterRedirects || event.url;
117
+ if (currentUrl !== this.lastNavigatedUrl) {
118
+ this.onExternalNavigation(currentUrl);
119
+ }
120
+ });
121
+ // Enable URL updates after initialization
122
+ this.skipUrlUpdate = false;
123
+ // Update URL to reflect current state
124
+ this.updateUrl();
125
+ // Notify load complete after user is set
126
+ setTimeout(() => {
127
+ this.NotifyLoadComplete();
128
+ }, 100);
129
+ }
130
+ /**
131
+ * Parse URL query string for collection state.
132
+ * Query params: collectionId, artifactId, versionNumber
133
+ */
134
+ parseUrlState() {
135
+ const url = this.router.url;
136
+ const queryIndex = url.indexOf('?');
137
+ if (queryIndex === -1)
138
+ return null;
139
+ const queryString = url.substring(queryIndex + 1);
140
+ const params = new URLSearchParams(queryString);
141
+ const collectionId = params.get('collectionId');
142
+ const artifactId = params.get('artifactId');
143
+ const versionNumber = params.get('versionNumber');
144
+ if (!collectionId && !artifactId)
145
+ return null;
146
+ return {
147
+ collectionId: collectionId || undefined,
148
+ artifactId: artifactId || undefined,
149
+ versionNumber: versionNumber ? parseInt(versionNumber, 10) : undefined
150
+ };
151
+ }
152
+ /**
153
+ * Apply URL state to collection services.
154
+ */
155
+ applyUrlState(state) {
156
+ // Set active collection if specified
157
+ if (state.collectionId) {
158
+ this.collectionState.setActiveCollection(state.collectionId);
159
+ }
160
+ // Open artifact if specified
161
+ if (state.artifactId) {
162
+ this.artifactState.openArtifact(state.artifactId, state.versionNumber);
163
+ }
164
+ }
165
+ /**
166
+ * Apply navigation parameters from configuration.
167
+ * This handles deep-linking from other resources (e.g., clicking a link in Conversations).
168
+ */
169
+ applyNavigationParams() {
170
+ const config = this.Data?.Configuration;
171
+ if (!config)
172
+ return;
173
+ // Set active collection if specified
174
+ if (config.collectionId) {
175
+ this.collectionState.setActiveCollection(config.collectionId);
176
+ }
177
+ // Open artifact if specified
178
+ if (config.artifactId) {
179
+ const versionNumber = config.versionNumber ? config.versionNumber : undefined;
180
+ this.artifactState.openArtifact(config.artifactId, versionNumber);
181
+ }
182
+ }
183
+ /**
184
+ * Subscribe to state changes for URL updates.
185
+ */
186
+ subscribeToUrlStateChanges() {
187
+ // Combine collection and artifact state changes
188
+ combineLatest([
189
+ this.collectionState.activeCollectionId$.pipe(distinctUntilChanged()),
190
+ this.artifactState.activeArtifactId$.pipe(distinctUntilChanged()),
191
+ this.artifactState.activeVersionNumber$.pipe(distinctUntilChanged())
192
+ ])
193
+ .pipe(takeUntil(this.destroy$))
194
+ .subscribe(() => {
195
+ if (!this.skipUrlUpdate) {
196
+ this.updateUrl();
197
+ }
198
+ });
199
+ }
200
+ /**
201
+ * Update URL query string to reflect current state.
202
+ * Uses Angular Router for proper browser history integration.
203
+ */
204
+ updateUrl() {
205
+ const params = new URLSearchParams();
206
+ // Add collection ID
207
+ const collectionId = this.collectionState.activeCollectionId;
208
+ if (collectionId) {
209
+ params.set('collectionId', collectionId);
210
+ }
211
+ // Add artifact ID if panel is open
212
+ if (this.activeArtifactId) {
213
+ params.set('artifactId', this.activeArtifactId);
214
+ if (this.activeVersionNumber) {
215
+ params.set('versionNumber', this.activeVersionNumber.toString());
216
+ }
217
+ }
218
+ // Get current path without query string
219
+ const currentUrl = this.router.url;
220
+ const currentPath = currentUrl.split('?')[0];
221
+ const queryString = params.toString();
222
+ const newUrl = queryString ? `${currentPath}?${queryString}` : currentPath;
223
+ // Track this URL so we don't react to our own navigation
224
+ this.lastNavigatedUrl = newUrl;
225
+ // Use Angular Router for proper browser history integration
226
+ this.router.navigateByUrl(newUrl, { replaceUrl: false });
227
+ }
228
+ /**
229
+ * Handle external navigation (back/forward buttons).
230
+ * Parses the URL and applies the state without triggering a new navigation.
231
+ */
232
+ onExternalNavigation(url) {
233
+ // Check if this URL is for our component (contains our base path)
234
+ const currentPath = this.router.url.split('?')[0];
235
+ const newPath = url.split('?')[0];
236
+ // Only handle if we're still on the same base path (same component instance)
237
+ if (currentPath !== newPath) {
238
+ return; // Different route entirely, shell will handle it
239
+ }
240
+ // Parse the new URL state
241
+ const urlState = this.parseUrlFromString(url);
242
+ // Apply the state without triggering URL updates
243
+ this.skipUrlUpdate = true;
244
+ if (urlState) {
245
+ this.applyUrlState(urlState);
246
+ }
247
+ else {
248
+ // No params means clear state
249
+ this.collectionState.setActiveCollection(null);
250
+ this.artifactState.closeArtifact();
251
+ }
252
+ this.skipUrlUpdate = false;
253
+ // Update the tracked URL
254
+ this.lastNavigatedUrl = url;
255
+ }
256
+ /**
257
+ * Parse URL state from a URL string (used for external navigation).
258
+ */
259
+ parseUrlFromString(url) {
260
+ const queryIndex = url.indexOf('?');
261
+ if (queryIndex === -1)
262
+ return null;
263
+ const queryString = url.substring(queryIndex + 1);
264
+ const params = new URLSearchParams(queryString);
265
+ const collectionId = params.get('collectionId');
266
+ const artifactId = params.get('artifactId');
267
+ const versionNumber = params.get('versionNumber');
268
+ if (!collectionId && !artifactId)
269
+ return null;
270
+ return {
271
+ collectionId: collectionId || undefined,
272
+ artifactId: artifactId || undefined,
273
+ versionNumber: versionNumber ? parseInt(versionNumber, 10) : undefined
274
+ };
275
+ }
276
+ ngOnDestroy() {
277
+ this.destroy$.next();
278
+ this.destroy$.complete();
279
+ this.removeResizeListeners();
280
+ }
281
+ /**
282
+ * Subscribe to artifact state service for panel open/close
283
+ */
284
+ subscribeToArtifactState() {
285
+ // Subscribe to panel open state
286
+ this.artifactState.isPanelOpen$
287
+ .pipe(takeUntil(this.destroy$))
288
+ .subscribe(isOpen => {
289
+ this.isArtifactPanelOpen = isOpen;
290
+ });
291
+ // Subscribe to active artifact ID
292
+ this.artifactState.activeArtifactId$
293
+ .pipe(takeUntil(this.destroy$))
294
+ .subscribe(async (id) => {
295
+ this.activeArtifactId = id;
296
+ if (id) {
297
+ await this.loadArtifactPermissions(id);
298
+ }
299
+ else {
300
+ this.canShareActiveArtifact = false;
301
+ this.canEditActiveArtifact = false;
302
+ }
303
+ });
304
+ // Subscribe to active version number
305
+ this.artifactState.activeVersionNumber$
306
+ .pipe(takeUntil(this.destroy$))
307
+ .subscribe(versionNumber => {
308
+ this.activeVersionNumber = versionNumber;
309
+ });
310
+ }
311
+ /**
312
+ * Load permissions for the active artifact
313
+ */
314
+ async loadArtifactPermissions(artifactId) {
315
+ if (!artifactId || !this.currentUser) {
316
+ this.canShareActiveArtifact = false;
317
+ this.canEditActiveArtifact = false;
318
+ return;
319
+ }
320
+ try {
321
+ const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);
322
+ this.canShareActiveArtifact = permissions.canShare;
323
+ this.canEditActiveArtifact = permissions.canEdit;
324
+ }
325
+ catch (error) {
326
+ console.error('Failed to load artifact permissions:', error);
327
+ this.canShareActiveArtifact = false;
328
+ this.canEditActiveArtifact = false;
329
+ }
330
+ }
331
+ /**
332
+ * Close the artifact panel
333
+ */
334
+ closeArtifactPanel() {
335
+ this.artifactState.closeArtifact();
336
+ }
337
+ /**
338
+ * Toggle maximize/restore state for artifact panel
339
+ */
340
+ toggleMaximizeArtifactPanel() {
341
+ if (this.isArtifactPanelMaximized) {
342
+ // Restore to previous width
343
+ this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;
344
+ this.isArtifactPanelMaximized = false;
345
+ }
346
+ else {
347
+ // Maximize - store current width and set to 100%
348
+ this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;
349
+ this.artifactPanelWidth = 100;
350
+ this.isArtifactPanelMaximized = true;
351
+ }
352
+ }
353
+ /**
354
+ * Handle navigation request from artifact viewer panel.
355
+ * Converts the link event to a generic navigation request and uses NavigationService.
356
+ */
357
+ onNavigateToLink(event) {
358
+ // Map the link type to the nav item name
359
+ const navItemName = event.type === 'conversation' ? 'Conversations' : 'Collections';
360
+ // Build configuration params to pass to the target resource
361
+ const params = {};
362
+ if (event.type === 'conversation') {
363
+ params['conversationId'] = event.id;
364
+ }
365
+ else {
366
+ params['collectionId'] = event.id;
367
+ }
368
+ // Include artifact info so destination can open it
369
+ if (event.artifactId) {
370
+ params['artifactId'] = event.artifactId;
371
+ if (event.versionNumber) {
372
+ params['versionNumber'] = event.versionNumber;
373
+ }
374
+ }
375
+ // Navigate using the generic nav item method
376
+ this.navigationService.OpenNavItemByName(navItemName, params);
377
+ }
378
+ /**
379
+ * Get the environment ID from configuration or use default
380
+ */
381
+ get environmentId() {
382
+ return this.Data?.Configuration?.environmentId || EnvironmentEntityExtended.DefaultEnvironmentID;
383
+ }
384
+ /**
385
+ * Get the display name for chat collections
386
+ */
387
+ async GetResourceDisplayName(data) {
388
+ return 'Collections';
389
+ }
390
+ /**
391
+ * Get the icon class for chat collections
392
+ */
393
+ async GetResourceIconClass(data) {
394
+ return 'fa-solid fa-folder-open';
395
+ }
396
+ // Resize handling
397
+ setupResizeListeners() {
398
+ this.boundOnResizeMove = this.onResizeMove.bind(this);
399
+ this.boundOnResizeEnd = this.onResizeEnd.bind(this);
400
+ }
401
+ removeResizeListeners() {
402
+ window.removeEventListener('mousemove', this.boundOnResizeMove);
403
+ window.removeEventListener('mouseup', this.boundOnResizeEnd);
404
+ }
405
+ boundOnResizeMove = () => { };
406
+ boundOnResizeEnd = () => { };
407
+ onResizeStart(event) {
408
+ this.isResizing = true;
409
+ this.resizeStartX = event.clientX;
410
+ this.resizeStartWidth = this.artifactPanelWidth;
411
+ window.addEventListener('mousemove', this.boundOnResizeMove);
412
+ window.addEventListener('mouseup', this.boundOnResizeEnd);
413
+ event.preventDefault();
414
+ document.body.style.cursor = 'col-resize';
415
+ document.body.style.userSelect = 'none';
416
+ }
417
+ onResizeMove(event) {
418
+ if (!this.isResizing)
419
+ return;
420
+ const container = document.querySelector('.chat-collections-container');
421
+ if (!container)
422
+ return;
423
+ const containerWidth = container.offsetWidth;
424
+ const deltaX = event.clientX - this.resizeStartX;
425
+ const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right
426
+ let newWidth = this.resizeStartWidth + deltaPercent;
427
+ // Constrain between 20% and 80%
428
+ newWidth = Math.max(20, Math.min(80, newWidth));
429
+ this.artifactPanelWidth = newWidth;
430
+ }
431
+ onResizeEnd(event) {
432
+ this.isResizing = false;
433
+ window.removeEventListener('mousemove', this.boundOnResizeMove);
434
+ window.removeEventListener('mouseup', this.boundOnResizeEnd);
435
+ document.body.style.cursor = '';
436
+ document.body.style.userSelect = '';
437
+ }
438
+ static ɵfac = function ChatCollectionsResource_Factory(t) { return new (t || ChatCollectionsResource)(i0.ɵɵdirectiveInject(i1.ArtifactStateService), i0.ɵɵdirectiveInject(i1.ArtifactPermissionService), i0.ɵɵdirectiveInject(i1.CollectionStateService), i0.ɵɵdirectiveInject(i2.NavigationService), i0.ɵɵdirectiveInject(i3.Router)); };
439
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChatCollectionsResource, selectors: [["mj-chat-collections-resource"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 4, consts: [[1, "chat-collections-container"], [1, "collections-main"], [3, "environmentId", "currentUser", 4, "ngIf"], [4, "ngIf"], [3, "environmentId", "currentUser"], ["class", "artifact-panel-resize-handle", 3, "mousedown", 4, "ngIf"], [1, "artifact-panel"], [3, "closed", "maximizeToggled", "navigateToLink", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ChatCollectionsResource_Template(rf, ctx) { if (rf & 1) {
440
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
441
+ i0.ɵɵtemplate(2, ChatCollectionsResource_mj_collections_full_view_2_Template, 1, 2, "mj-collections-full-view", 2);
442
+ i0.ɵɵelementEnd();
443
+ i0.ɵɵtemplate(3, ChatCollectionsResource_ng_container_3_Template, 4, 15, "ng-container", 3);
444
+ i0.ɵɵelementEnd();
445
+ } if (rf & 2) {
446
+ i0.ɵɵadvance();
447
+ i0.ɵɵclassProp("with-artifact-panel", ctx.isArtifactPanelOpen && ctx.activeArtifactId);
448
+ i0.ɵɵadvance();
449
+ i0.ɵɵproperty("ngIf", ctx.currentUser);
450
+ i0.ɵɵadvance();
451
+ i0.ɵɵproperty("ngIf", ctx.isArtifactPanelOpen && ctx.activeArtifactId);
452
+ } }, dependencies: [i4.NgIf, i1.CollectionsFullViewComponent, i5.ArtifactViewerPanelComponent], styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-collections-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative; /* Required for absolute positioning of maximized panel */\n }\n\n .collections-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .collections-main.with-artifact-panel {\n /* When artifact panel is open, main area shrinks */\n }\n\n .artifact-panel-resize-handle {\n width: 8px;\n cursor: col-resize;\n background: transparent;\n transition: background 150ms ease;\n flex-shrink: 0;\n }\n\n .artifact-panel-resize-handle:hover {\n background: #0076B6;\n }\n\n .artifact-panel-resize-handle:active {\n background: #005a8c;\n }\n\n .artifact-panel {\n flex-shrink: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n border-left: 1px solid #e0e0e0;\n background: white;\n transition: width 0.2s ease;\n }\n\n .artifact-panel.maximized {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n }\n "], encapsulation: 2 });
453
+ };
454
+ ChatCollectionsResource = __decorate([
455
+ RegisterClass(BaseResourceComponent, 'ChatCollectionsResource')
456
+ ], ChatCollectionsResource);
457
+ export { ChatCollectionsResource };
458
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChatCollectionsResource, [{
459
+ type: Component,
460
+ args: [{ selector: 'mj-chat-collections-resource', template: `
461
+ <div class="chat-collections-container">
462
+ <!-- Collections view -->
463
+ <div class="collections-main" [class.with-artifact-panel]="isArtifactPanelOpen && activeArtifactId">
464
+ <mj-collections-full-view
465
+ *ngIf="currentUser"
466
+ [environmentId]="environmentId"
467
+ [currentUser]="currentUser">
468
+ </mj-collections-full-view>
469
+ </div>
470
+
471
+ <!-- Artifact Panel -->
472
+ <ng-container *ngIf="isArtifactPanelOpen && activeArtifactId">
473
+ <div class="artifact-panel-resize-handle"
474
+ *ngIf="!isArtifactPanelMaximized"
475
+ (mousedown)="onResizeStart($event)"></div>
476
+ <div class="artifact-panel"
477
+ [style.width.%]="artifactPanelWidth"
478
+ [class.maximized]="isArtifactPanelMaximized">
479
+ <mj-artifact-viewer-panel
480
+ [artifactId]="activeArtifactId"
481
+ [currentUser]="currentUser"
482
+ [environmentId]="environmentId"
483
+ [versionNumber]="activeVersionNumber ?? undefined"
484
+ [showSaveToCollection]="false"
485
+ [viewContext]="'collection'"
486
+ [contextCollectionId]="collectionState.activeCollectionId ?? undefined"
487
+ [canShare]="canShareActiveArtifact"
488
+ [canEdit]="canEditActiveArtifact"
489
+ [isMaximized]="isArtifactPanelMaximized"
490
+ (closed)="closeArtifactPanel()"
491
+ (maximizeToggled)="toggleMaximizeArtifactPanel()"
492
+ (navigateToLink)="onNavigateToLink($event)">
493
+ </mj-artifact-viewer-panel>
494
+ </div>
495
+ </ng-container>
496
+ </div>
497
+ `, encapsulation: ViewEncapsulation.None, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-collections-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative; /* Required for absolute positioning of maximized panel */\n }\n\n .collections-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .collections-main.with-artifact-panel {\n /* When artifact panel is open, main area shrinks */\n }\n\n .artifact-panel-resize-handle {\n width: 8px;\n cursor: col-resize;\n background: transparent;\n transition: background 150ms ease;\n flex-shrink: 0;\n }\n\n .artifact-panel-resize-handle:hover {\n background: #0076B6;\n }\n\n .artifact-panel-resize-handle:active {\n background: #005a8c;\n }\n\n .artifact-panel {\n flex-shrink: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n border-left: 1px solid #e0e0e0;\n background: white;\n transition: width 0.2s ease;\n }\n\n .artifact-panel.maximized {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n }\n "] }]
498
+ }], () => [{ type: i1.ArtifactStateService }, { type: i1.ArtifactPermissionService }, { type: i1.CollectionStateService }, { type: i2.NavigationService }, { type: i3.Router }], null); })();
499
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatCollectionsResource, { className: "ChatCollectionsResource", filePath: "src/lib/resource-wrappers/chat-collections-resource.component.ts", lineNumber: 129 }); })();
500
+ //# sourceMappingURL=chat-collections-resource.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-collections-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-collections-resource.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';
4
+ import { ResourceData } from '@memberjunction/core-entities';
5
+ import { ConversationStateService, ArtifactStateService } from '@memberjunction/ng-conversations';
6
+ import * as i0 from "@angular/core";
7
+ export declare function LoadChatConversationsResource(): void;
8
+ /**
9
+ * Chat Conversations Resource - wraps the conversation chat area for tab-based display
10
+ * Extends BaseResourceComponent to work with the resource type system
11
+ * Displays conversation list sidebar + active conversation chat interface
12
+ * Designed to work with the tab system for multi-tab conversation management
13
+ */
14
+ export declare class ChatConversationsResource extends BaseResourceComponent implements OnDestroy {
15
+ private navigationService;
16
+ private conversationState;
17
+ private artifactState;
18
+ private router;
19
+ currentUser: any;
20
+ private destroy$;
21
+ private skipUrlUpdate;
22
+ private lastNavigatedUrl;
23
+ constructor(navigationService: NavigationService, conversationState: ConversationStateService, artifactState: ArtifactStateService, router: Router);
24
+ ngOnInit(): void;
25
+ ngOnDestroy(): void;
26
+ /**
27
+ * Parse URL query string for conversation state.
28
+ * Query params: conversationId, artifactId, versionNumber
29
+ */
30
+ private parseUrlState;
31
+ /**
32
+ * Apply URL state to conversation services.
33
+ */
34
+ private applyUrlState;
35
+ /**
36
+ * Apply navigation parameters from configuration.
37
+ * This handles deep-linking from other resources (e.g., clicking a link in Collections).
38
+ */
39
+ private applyNavigationParams;
40
+ /**
41
+ * Subscribe to state changes from services to update URL.
42
+ */
43
+ private subscribeToStateChanges;
44
+ /**
45
+ * Update URL query string to reflect current state.
46
+ * Uses Angular Router for proper browser history integration.
47
+ */
48
+ private updateUrl;
49
+ /**
50
+ * Handle external navigation (back/forward buttons).
51
+ * Parses the URL and applies the state without triggering a new navigation.
52
+ */
53
+ private onExternalNavigation;
54
+ /**
55
+ * Parse URL state from a URL string (used for external navigation).
56
+ */
57
+ private parseUrlFromString;
58
+ /**
59
+ * Get the environment ID from configuration or use default
60
+ */
61
+ get environmentId(): string;
62
+ /**
63
+ * Get the active conversation ID from configuration (if specified)
64
+ */
65
+ get activeConversationId(): string | undefined;
66
+ /**
67
+ * Get the display name for chat conversations
68
+ */
69
+ GetResourceDisplayName(data: ResourceData): Promise<string>;
70
+ /**
71
+ * Get the icon class for chat conversations
72
+ */
73
+ GetResourceIconClass(data: ResourceData): Promise<string>;
74
+ /**
75
+ * Handle navigation request from artifact viewer panel within the chat area.
76
+ * Converts the link event to a generic navigation request and uses NavigationService.
77
+ */
78
+ onArtifactLinkClicked(event: {
79
+ type: 'conversation' | 'collection';
80
+ id: string;
81
+ artifactId?: string;
82
+ versionNumber?: number;
83
+ }): void;
84
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChatConversationsResource, never>;
85
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChatConversationsResource, "mj-chat-conversations-resource", never, {}, {}, never, never, false, never>;
86
+ }
87
+ //# sourceMappingURL=chat-conversations-resource.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-conversations-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-conversations-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,SAAS,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,YAAY,EAA6B,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;;AAGlG,wBAAgB,6BAA6B,SAI5C;AAED;;;;;GAKG;AACH,qBA0Da,yBAA0B,SAAQ,qBAAsB,YAAW,SAAS;IAOrF,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IATT,WAAW,EAAE,GAAG,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,gBAAgB,CAAc;gBAG5B,iBAAiB,EAAE,iBAAiB,EACpC,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,MAAM;IAKxB,QAAQ;IAyCR,WAAW;IAKX;;;OAGG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgCjB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAI,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAE7C;IAED;;OAEG;IACG,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IASjE;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D;;;OAGG;IACH,qBAAqB,CAAC,KAAK,EAAE;QAC3B,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;yCA/QG,yBAAyB;2CAAzB,yBAAyB;CAsSrC"}