@memberjunction/ng-explorer-core 5.24.0 → 5.25.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.
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +14 -19
- package/dist/app-routing.module.js.map +1 -1
- package/dist/generated/lazy-feature-config.js +3 -3
- package/dist/generated/lazy-feature-config.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +1 -0
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +16 -17
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +56 -62
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +2 -4
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +9 -13
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +2 -15
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +18 -52
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +2 -3
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +7 -9
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js +1 -0
- package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/notifications-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/notifications-resource.component.js +1 -0
- package/dist/lib/resource-wrappers/notifications-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js +1 -0
- package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +74 -4
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +786 -25
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +7 -4
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +30 -14
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +10 -3
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +28 -8
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +416 -218
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/shell/shell.module.d.ts +2 -1
- package/dist/lib/shell/shell.module.d.ts.map +1 -1
- package/dist/lib/shell/shell.module.js +7 -3
- package/dist/lib/shell/shell.module.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +6 -0
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +63 -38
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +1 -0
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/user-menu/base-user-menu.d.ts +7 -7
- package/dist/lib/user-menu/base-user-menu.d.ts.map +1 -1
- package/dist/lib/user-menu/base-user-menu.js +8 -1
- package/dist/lib/user-menu/base-user-menu.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +15 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts +6 -3
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +46 -19
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/module.d.ts +3 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +8 -0
- package/dist/module.js.map +1 -1
- package/package.json +40 -38
|
@@ -4,16 +4,16 @@ 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
|
-
import { Component, ViewEncapsulation } from '@angular/core';
|
|
7
|
+
import { Component, ViewEncapsulation, ChangeDetectorRef, inject } from '@angular/core';
|
|
8
8
|
import { Metadata, RunView } from '@memberjunction/core';
|
|
9
9
|
import { RegisterClass } from '@memberjunction/global';
|
|
10
10
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
11
11
|
import { MJEnvironmentEntityExtended } from '@memberjunction/core-entities';
|
|
12
|
-
import {
|
|
12
|
+
import { ArtifactStateService, ArtifactPermissionService, CollectionStateService } from '@memberjunction/ng-conversations';
|
|
13
|
+
import { takeUntil, distinctUntilChanged, combineLatest } from 'rxjs';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "@memberjunction/ng-conversations";
|
|
15
|
-
import * as i2 from "@memberjunction/ng-
|
|
16
|
-
import * as i3 from "@memberjunction/ng-artifacts";
|
|
16
|
+
import * as i2 from "@memberjunction/ng-artifacts";
|
|
17
17
|
function ChatCollectionsResource_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
18
18
|
i0.ɵɵelement(0, "mj-collections-full-view", 2);
|
|
19
19
|
} if (rf & 2) {
|
|
@@ -48,11 +48,6 @@ function ChatCollectionsResource_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
48
48
|
* Includes artifact panel support for viewing selected artifacts
|
|
49
49
|
*/
|
|
50
50
|
let ChatCollectionsResource = class ChatCollectionsResource extends BaseResourceComponent {
|
|
51
|
-
artifactState;
|
|
52
|
-
artifactPermissionService;
|
|
53
|
-
collectionState;
|
|
54
|
-
navigationService;
|
|
55
|
-
cdr;
|
|
56
51
|
currentUser = null;
|
|
57
52
|
// Artifact panel state
|
|
58
53
|
isArtifactPanelOpen = false;
|
|
@@ -68,26 +63,22 @@ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResource
|
|
|
68
63
|
isResizing = false;
|
|
69
64
|
resizeStartX = 0;
|
|
70
65
|
resizeStartWidth = 0;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.artifactPermissionService = artifactPermissionService;
|
|
77
|
-
this.collectionState = collectionState;
|
|
78
|
-
this.navigationService = navigationService;
|
|
79
|
-
this.cdr = cdr;
|
|
80
|
-
}
|
|
66
|
+
initializing = true; // Prevents URL updates during initialization
|
|
67
|
+
artifactState = inject(ArtifactStateService);
|
|
68
|
+
artifactPermissionService = inject(ArtifactPermissionService);
|
|
69
|
+
collectionState = inject(CollectionStateService);
|
|
70
|
+
cdr = inject(ChangeDetectorRef);
|
|
81
71
|
ngOnInit() {
|
|
72
|
+
super.ngOnInit();
|
|
82
73
|
const md = new Metadata();
|
|
83
74
|
this.currentUser = md.CurrentUser;
|
|
84
75
|
// Subscribe to artifact state changes
|
|
85
76
|
this.subscribeToArtifactState();
|
|
86
77
|
// Setup resize listeners
|
|
87
78
|
this.setupResizeListeners();
|
|
88
|
-
// Apply initial state from
|
|
89
|
-
this.
|
|
90
|
-
// Subscribe to state changes to
|
|
79
|
+
// Apply initial state from query params or tab config
|
|
80
|
+
this.applyInitialParams();
|
|
81
|
+
// Subscribe to state changes to push URL updates
|
|
91
82
|
this.subscribeToUrlStateChanges();
|
|
92
83
|
// Subscribe to collection and artifact changes to update tab title
|
|
93
84
|
this.collectionState.activeCollectionId$
|
|
@@ -112,40 +103,55 @@ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResource
|
|
|
112
103
|
}
|
|
113
104
|
});
|
|
114
105
|
// Enable URL updates after initialization
|
|
115
|
-
this.
|
|
116
|
-
//
|
|
117
|
-
this.
|
|
106
|
+
this.initializing = false;
|
|
107
|
+
// Push initial state to URL
|
|
108
|
+
this.pushStateToUrl();
|
|
118
109
|
// Notify load complete after user is set
|
|
119
110
|
setTimeout(() => {
|
|
120
111
|
this.NotifyLoadComplete();
|
|
121
112
|
}, 100);
|
|
122
113
|
}
|
|
123
114
|
/**
|
|
124
|
-
* Apply initial state from tab configuration.
|
|
125
|
-
* The shell populates queryParams from the URL, and nav params come from cross-resource linking.
|
|
115
|
+
* Apply initial state from query params or tab configuration.
|
|
126
116
|
*/
|
|
127
|
-
|
|
117
|
+
applyInitialParams() {
|
|
118
|
+
const params = this.GetQueryParams();
|
|
128
119
|
const config = this.Data?.Configuration;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
120
|
+
const collectionId = params['collectionId'] || config?.collectionId;
|
|
121
|
+
const artifactId = params['artifactId'] || config?.artifactId;
|
|
122
|
+
const versionNumber = params['versionNumber'] ? parseInt(params['versionNumber'], 10)
|
|
123
|
+
: config?.versionNumber ? config.versionNumber : undefined;
|
|
124
|
+
if (collectionId) {
|
|
125
|
+
this.collectionState.setActiveCollection(collectionId);
|
|
126
|
+
}
|
|
127
|
+
if (artifactId) {
|
|
128
|
+
this.artifactState.openArtifact(artifactId, versionNumber);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* React to browser back/forward query param changes.
|
|
133
|
+
*/
|
|
134
|
+
OnQueryParamsChanged(params, source) {
|
|
135
|
+
const collectionId = params['collectionId'];
|
|
136
|
+
const artifactId = params['artifactId'];
|
|
137
|
+
const versionNumber = params['versionNumber'] ? parseInt(params['versionNumber'], 10) : undefined;
|
|
137
138
|
if (collectionId) {
|
|
138
139
|
this.collectionState.setActiveCollection(collectionId);
|
|
139
140
|
}
|
|
141
|
+
else {
|
|
142
|
+
this.collectionState.setActiveCollection(null);
|
|
143
|
+
}
|
|
140
144
|
if (artifactId) {
|
|
141
145
|
this.artifactState.openArtifact(artifactId, versionNumber);
|
|
142
146
|
}
|
|
147
|
+
else {
|
|
148
|
+
this.artifactState.closeArtifact();
|
|
149
|
+
}
|
|
143
150
|
}
|
|
144
151
|
/**
|
|
145
152
|
* Subscribe to state changes for URL updates.
|
|
146
153
|
*/
|
|
147
154
|
subscribeToUrlStateChanges() {
|
|
148
|
-
// Combine collection and artifact state changes
|
|
149
155
|
combineLatest([
|
|
150
156
|
this.collectionState.activeCollectionId$.pipe(distinctUntilChanged()),
|
|
151
157
|
this.artifactState.activeArtifactId$.pipe(distinctUntilChanged()),
|
|
@@ -153,38 +159,27 @@ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResource
|
|
|
153
159
|
])
|
|
154
160
|
.pipe(takeUntil(this.destroy$))
|
|
155
161
|
.subscribe(() => {
|
|
156
|
-
if (!this.
|
|
157
|
-
this.
|
|
162
|
+
if (!this.initializing) {
|
|
163
|
+
this.pushStateToUrl();
|
|
158
164
|
}
|
|
159
165
|
});
|
|
160
166
|
}
|
|
161
167
|
/**
|
|
162
|
-
*
|
|
163
|
-
* Uses NavigationService for proper URL management that respects app-scoped routes.
|
|
168
|
+
* Push current state to URL via framework query params.
|
|
164
169
|
*/
|
|
165
|
-
|
|
170
|
+
pushStateToUrl() {
|
|
166
171
|
const queryParams = {};
|
|
167
|
-
// Add collection ID
|
|
168
172
|
const collectionId = this.collectionState.activeCollectionId;
|
|
169
|
-
|
|
170
|
-
queryParams['collectionId'] = collectionId;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
queryParams['collectionId'] = null;
|
|
174
|
-
}
|
|
175
|
-
// Add artifact ID if panel is open
|
|
173
|
+
queryParams['collectionId'] = collectionId || null;
|
|
176
174
|
if (this.activeArtifactId) {
|
|
177
175
|
queryParams['artifactId'] = this.activeArtifactId;
|
|
178
|
-
|
|
179
|
-
queryParams['versionNumber'] = this.activeVersionNumber.toString();
|
|
180
|
-
}
|
|
176
|
+
queryParams['versionNumber'] = this.activeVersionNumber ? this.activeVersionNumber.toString() : null;
|
|
181
177
|
}
|
|
182
178
|
else {
|
|
183
179
|
queryParams['artifactId'] = null;
|
|
184
180
|
queryParams['versionNumber'] = null;
|
|
185
181
|
}
|
|
186
|
-
|
|
187
|
-
this.navigationService.UpdateActiveTabQueryParams(queryParams);
|
|
182
|
+
this.UpdateQueryParams(queryParams);
|
|
188
183
|
}
|
|
189
184
|
/**
|
|
190
185
|
* Update the tab/browser title based on the active collection.
|
|
@@ -212,8 +207,7 @@ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResource
|
|
|
212
207
|
}
|
|
213
208
|
}
|
|
214
209
|
ngOnDestroy() {
|
|
215
|
-
|
|
216
|
-
this.destroy$.complete();
|
|
210
|
+
super.ngOnDestroy();
|
|
217
211
|
this.removeResizeListeners();
|
|
218
212
|
}
|
|
219
213
|
/**
|
|
@@ -382,7 +376,7 @@ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResource
|
|
|
382
376
|
document.body.style.cursor = '';
|
|
383
377
|
document.body.style.userSelect = '';
|
|
384
378
|
}
|
|
385
|
-
static ɵfac = function ChatCollectionsResource_Factory(__ngFactoryType__) { return
|
|
379
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵChatCollectionsResource_BaseFactory; return function ChatCollectionsResource_Factory(__ngFactoryType__) { return (ɵChatCollectionsResource_BaseFactory || (ɵChatCollectionsResource_BaseFactory = i0.ɵɵgetInheritedFactory(ChatCollectionsResource)))(__ngFactoryType__ || ChatCollectionsResource); }; })();
|
|
386
380
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChatCollectionsResource, selectors: [["mj-chat-collections-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 4, consts: [[1, "chat-collections-container"], [1, "collections-main"], [3, "environmentId", "currentUser"], [1, "artifact-panel-resize-handle"], [1, "artifact-panel"], [3, "closed", "maximizeToggled", "navigateToLink", "openEntityRecord", "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) {
|
|
387
381
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
388
382
|
i0.ɵɵconditionalCreate(2, ChatCollectionsResource_Conditional_2_Template, 1, 2, "mj-collections-full-view", 2);
|
|
@@ -396,7 +390,7 @@ let ChatCollectionsResource = class ChatCollectionsResource extends BaseResource
|
|
|
396
390
|
i0.ɵɵconditional(ctx.currentUser ? 2 : -1);
|
|
397
391
|
i0.ɵɵadvance();
|
|
398
392
|
i0.ɵɵconditional(ctx.isArtifactPanelOpen && ctx.activeArtifactId ? 3 : -1);
|
|
399
|
-
} }, dependencies: [i1.CollectionsFullViewComponent,
|
|
393
|
+
} }, dependencies: [i1.CollectionsFullViewComponent, i2.ArtifactViewerPanelComponent], styles: ["\n /* :host doesn't work with ViewEncapsulation.None \u2014 use the element selector */\n mj-chat-collections-resource {\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: var(--mj-brand-primary);\n }\n\n .artifact-panel-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .artifact-panel {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\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 });
|
|
400
394
|
};
|
|
401
395
|
ChatCollectionsResource = __decorate([
|
|
402
396
|
RegisterClass(BaseResourceComponent, 'ChatCollectionsResource')
|
|
@@ -444,7 +438,7 @@ export { ChatCollectionsResource };
|
|
|
444
438
|
</div>
|
|
445
439
|
}
|
|
446
440
|
</div>
|
|
447
|
-
`, 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: var(--mj-brand-primary);\n }\n\n .artifact-panel-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .artifact-panel {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\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 "] }]
|
|
448
|
-
}],
|
|
449
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatCollectionsResource, { className: "ChatCollectionsResource", filePath: "src/lib/resource-wrappers/chat-collections-resource.component.ts", lineNumber:
|
|
441
|
+
`, encapsulation: ViewEncapsulation.None, styles: ["\n /* :host doesn't work with ViewEncapsulation.None \u2014 use the element selector */\n mj-chat-collections-resource {\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: var(--mj-brand-primary);\n }\n\n .artifact-panel-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .artifact-panel {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\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 "] }]
|
|
442
|
+
}], null, null); })();
|
|
443
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatCollectionsResource, { className: "ChatCollectionsResource", filePath: "src/lib/resource-wrappers/chat-collections-resource.component.ts", lineNumber: 122 }); })();
|
|
450
444
|
//# sourceMappingURL=chat-collections-resource.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-collections-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-collections-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAwC,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAgB,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAgB,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE1F,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;;;;;;IAgBrE,8CAG2B;;;IADzB,AADA,oDAA+B,mCACJ;;;;IAQ7B,8BACoC;IAApC,qNAAa,4BAAqB,KAAC;IAAC,iBAAM;;;;IAF5C,uGAAiC;IAO/B,AAHF,8BAE+C,kCAeK;IAAhD,AADA,AADA,AADA,+MAAU,2BAAoB,KAAC,oNACZ,oCAA6B,KAAC,wNAC/B,+BAAwB,KAAC,4NACvB,iCAA0B,KAAC;IAEnD,AADE,iBAA2B,EACvB;;;IAvBN,2DAGC;IAEC,cAAoC;IAApC,uDAAoC;IACpC,4DAA4C;IAE1C,cAA+B;IAS/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,uCACI,0DACmB,+BACpB,6BACF,+DAC2B,2CACpB,yCACF,gDACO;;AAzCpD;;;;;GAKG;AA4GI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,qBAAqB;IAuBtD;IACA;IACD;IACC;IACA;IA1BH,WAAW,GAAQ,IAAI,CAAC;IAE/B,uBAAuB;IAChB,mBAAmB,GAAY,KAAK,CAAC;IACrC,kBAAkB,GAAkB,IAAI,CAAC;IACzC,gBAAgB,GAAkB,IAAI,CAAC;IACvC,mBAAmB,GAAkB,IAAI,CAAC;IAC1C,sBAAsB,GAAY,KAAK,CAAC;IACxC,qBAAqB,GAAY,KAAK,CAAC;IACvC,kBAAkB,GAAW,EAAE,CAAC,CAAC,uCAAuC;IACxE,wBAAwB,GAAY,KAAK,CAAC;IACzC,gCAAgC,GAAW,EAAE,CAAC,CAAC,gCAAgC;IAEvF,eAAe;IACP,UAAU,GAAY,KAAK,CAAC;IAC5B,YAAY,GAAW,CAAC,CAAC;IACzB,gBAAgB,GAAW,CAAC,CAAC;IAE7B,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,aAAa,GAAG,IAAI,CAAC,CAAC,yCAAyC;IAEvE,YACU,aAAmC,EACnC,yBAAoD,EACrD,eAAuC,EACtC,iBAAoC,EACpC,GAAsB;QAE9B,KAAK,EAAE,CAAC;QANA,kBAAa,GAAb,aAAa,CAAsB;QACnC,8BAAyB,GAAzB,yBAAyB,CAA2B;QACrD,oBAAe,GAAf,eAAe,CAAwB;QACtC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,QAAG,GAAH,GAAG,CAAmB;IAGhC,CAAC;IAED,QAAQ;QACN,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;QAElC,sCAAsC;QACtC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,yBAAyB;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,yFAAyF;QACzF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,2CAA2C;QAC3C,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAElC,mEAAmE;QACnE,IAAI,CAAC,eAAe,CAAC,mBAAmB;aACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;aACtD,SAAS,CAAC,YAAY,CAAC,EAAE;YACxB,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC;YACvC,qEAAqE;YACrE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,aAAa,CAAC,eAAe;aAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;aACtD,SAAS,CAAC,QAAQ,CAAC,EAAE;YACpB,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,0CAA0C;QAC1C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,sCAAsC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,yCAAyC;QACzC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAGD;;;OAGG;IACK,qBAAqB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,gFAAgF;QAChF,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAuC,CAAC;QACvE,MAAM,YAAY,GAAI,EAAE,EAAE,CAAC,cAAc,CAAY,IAAK,MAAM,CAAC,YAAuB,CAAC;QACzF,MAAM,UAAU,GAAI,EAAE,EAAE,CAAC,YAAY,CAAY,IAAK,MAAM,CAAC,UAAqB,CAAC;QACnF,MAAM,aAAa,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YAC7E,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAE,MAAM,CAAC,aAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,gDAAgD;QAChD,aAAa,CAAC;YACZ,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjE,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACrE,CAAC;aACC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACK,SAAS;QACf,MAAM,WAAW,GAAkC,EAAE,CAAC;QAEtD,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;QAC7D,IAAI,YAAY,EAAE,CAAC;YACjB,WAAW,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,WAAW,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAClD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,WAAW,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;YACjC,WAAW,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IAGD;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,YAA2B;QAChE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAmB;gBAChD,UAAU,EAAE,iBAAiB;gBAC7B,MAAM,EAAE,CAAC,MAAM,CAAC;gBAChB,WAAW,EAAE,OAAO,YAAY,GAAG;gBACnC,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,gCAAgC;QAChC,IAAI,CAAC,aAAa,CAAC,YAAY;aAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAM,CAAC,EAAE;YAClB,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEL,kCAAkC;QAClC,IAAI,CAAC,aAAa,CAAC,iBAAiB;aACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACrC,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEL,qCAAqC;QACrC,IAAI,CAAC,aAAa,CAAC,oBAAoB;aACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,aAAa,CAAC,EAAE;YACzB,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QACtD,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1G,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,QAAQ,CAAC;YACnD,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,OAAO,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,2BAA2B;QACzB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,4BAA4B;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC;YAChE,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAChE,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;YAC9B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,KAMhB;QACC,yCAAyC;QACzC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC;QAEpF,4DAA4D;QAC5D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;QACpC,CAAC;QAED,mDAAmD;QACnD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;YACxC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;YAChD,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,KAAuD;QACxE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,IAAI,2BAA2B,CAAC,oBAAoB,CAAC;IACrG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC7C,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QAC3C,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,kBAAkB;IACV,oBAAoB;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEO,qBAAqB;QAC3B,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAEO,iBAAiB,GAA4B,GAAG,EAAE,GAAE,CAAC,CAAC;IACtD,gBAAgB,GAA4B,GAAG,EAAE,GAAE,CAAC,CAAC;IAE7D,aAAa,CAAC,KAAiB;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1C,CAAC;IAEO,YAAY,CAAC,KAAiB;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,6BAA6B,CAAgB,CAAC;QACvF,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,gDAAgD;QACvG,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;QAEpD,gCAAgC;QAChC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IACrC,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;IACtC,CAAC;iHAxXU,uBAAuB;6DAAvB,uBAAuB;YApG9B,AAFF,8BAAwC,aAE8D;YAClG,8GAAmB;YAMrB,iBAAM;YAGN,gFAA+C;YA0BjD,iBAAM;;YApC0B,cAAqE;YAArE,sFAAqE;YACjG,cAKC;YALD,0CAKC;YAIH,cAyBC;YAzBD,0EAyBC;;;AAiEM,uBAAuB;IA3GnC,aAAa,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;GA2GnD,uBAAuB,CAyXnC;;iFAzXY,uBAAuB;cA1GnC,SAAS;6BACI,KAAK,YACP,8BAA8B,YAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwCP,iBA6DY,iBAAiB,CAAC,IAAI;;kFAE1B,uBAAuB","sourcesContent":["import { Component, ViewEncapsulation, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Metadata, CompositeKey, RunView } from '@memberjunction/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { ResourceData, MJEnvironmentEntityExtended } from '@memberjunction/core-entities';\nimport { ArtifactStateService, ArtifactPermissionService, CollectionStateService } from '@memberjunction/ng-conversations';\nimport { Subject, takeUntil, distinctUntilChanged, combineLatest } from 'rxjs';\n/**\n * Chat Collections Resource - displays the collections full view for tab-based display\n * Extends BaseResourceComponent to work with the resource type system\n * Shows all collections and their artifacts in a comprehensive view\n * Includes artifact panel support for viewing selected artifacts\n */\n@RegisterClass(BaseResourceComponent, 'ChatCollectionsResource')\n@Component({\n standalone: false,\n selector: 'mj-chat-collections-resource',\n template: `\n <div class=\"chat-collections-container\">\n <!-- Collections view -->\n <div class=\"collections-main\" [class.with-artifact-panel]=\"isArtifactPanelOpen && activeArtifactId\">\n @if (currentUser) {\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\">\n </mj-collections-full-view>\n }\n </div>\n \n <!-- Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\"\n (mousedown)=\"onResizeStart($event)\"></div>\n }\n <div class=\"artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"false\"\n [viewContext]=\"'collection'\"\n [contextCollectionId]=\"activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (navigateToLink)=\"onNavigateToLink($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n `,\n 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: var(--mj-brand-primary);\n }\n\n .artifact-panel-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .artifact-panel {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\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 `],\n encapsulation: ViewEncapsulation.None\n})\nexport class ChatCollectionsResource extends BaseResourceComponent implements OnInit, OnDestroy {\n public currentUser: any = null;\n\n // Artifact panel state\n public isArtifactPanelOpen: boolean = false;\n public activeCollectionId: string | null = null;\n public activeArtifactId: string | null = null;\n public activeVersionNumber: number | null = null;\n public canShareActiveArtifact: boolean = false;\n public canEditActiveArtifact: boolean = false;\n public artifactPanelWidth: number = 40; // Default 40% width (percentage-based)\n public isArtifactPanelMaximized: boolean = false;\n private artifactPanelWidthBeforeMaximize: number = 40; // Store width before maximizing\n\n // Resize state\n private isResizing: boolean = false;\n private resizeStartX: number = 0;\n private resizeStartWidth: number = 0;\n\n private destroy$ = new Subject<void>();\n private skipUrlUpdate = true; // Skip URL updates during initialization\n\n constructor(\n private artifactState: ArtifactStateService,\n private artifactPermissionService: ArtifactPermissionService,\n public collectionState: CollectionStateService,\n private navigationService: NavigationService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit() {\n const md = new Metadata();\n this.currentUser = md.CurrentUser;\n\n // Subscribe to artifact state changes\n this.subscribeToArtifactState();\n\n // Setup resize listeners\n this.setupResizeListeners();\n\n // Apply initial state from tab configuration (populated by shell from URL or nav params)\n this.applyNavigationParams();\n\n // Subscribe to state changes to update URL\n this.subscribeToUrlStateChanges();\n\n // Subscribe to collection and artifact changes to update tab title\n this.collectionState.activeCollectionId$\n .pipe(takeUntil(this.destroy$), distinctUntilChanged())\n .subscribe(collectionId => {\n this.activeCollectionId = collectionId;\n // Only update if no artifact is open (artifact title takes priority)\n if (!this.activeArtifactId) {\n this.updateCollectionTabTitle(collectionId);\n }\n this.cdr.detectChanges();\n });\n\n this.artifactState.activeArtifact$\n .pipe(takeUntil(this.destroy$), distinctUntilChanged())\n .subscribe(artifact => {\n if (artifact && artifact.Name) {\n this.NotifyDisplayNameChanged(artifact.Name);\n } else {\n // Artifact closed — fall back to collection name\n this.updateCollectionTabTitle(this.collectionState.activeCollectionId);\n }\n });\n\n // Enable URL updates after initialization\n this.skipUrlUpdate = false;\n\n // Update URL to reflect current state\n this.updateUrl();\n\n // Notify load complete after user is set\n setTimeout(() => {\n this.NotifyLoadComplete();\n }, 100);\n }\n\n\n /**\n * Apply initial state from tab configuration.\n * The shell populates queryParams from the URL, and nav params come from cross-resource linking.\n */\n private applyNavigationParams(): void {\n const config = this.Data?.Configuration;\n if (!config) return;\n\n // Check queryParams first (shell populates these from the URL for deep-linking)\n const qp = config['queryParams'] as Record<string, string> | undefined;\n const collectionId = (qp?.['collectionId'] as string) || (config.collectionId as string);\n const artifactId = (qp?.['artifactId'] as string) || (config.artifactId as string);\n const versionNumber = qp?.['versionNumber'] ? parseInt(qp['versionNumber'], 10)\n : config.versionNumber ? (config.versionNumber as number) : undefined;\n\n if (collectionId) {\n this.collectionState.setActiveCollection(collectionId);\n }\n\n if (artifactId) {\n this.artifactState.openArtifact(artifactId, versionNumber);\n }\n }\n\n /**\n * Subscribe to state changes for URL updates.\n */\n private subscribeToUrlStateChanges(): void {\n // Combine collection and artifact state changes\n combineLatest([\n this.collectionState.activeCollectionId$.pipe(distinctUntilChanged()),\n this.artifactState.activeArtifactId$.pipe(distinctUntilChanged()),\n this.artifactState.activeVersionNumber$.pipe(distinctUntilChanged())\n ])\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (!this.skipUrlUpdate) {\n this.updateUrl();\n }\n });\n }\n\n /**\n * Update URL query string to reflect current state.\n * Uses NavigationService for proper URL management that respects app-scoped routes.\n */\n private updateUrl(): void {\n const queryParams: Record<string, string | null> = {};\n\n // Add collection ID\n const collectionId = this.collectionState.activeCollectionId;\n if (collectionId) {\n queryParams['collectionId'] = collectionId;\n } else {\n queryParams['collectionId'] = null;\n }\n\n // Add artifact ID if panel is open\n if (this.activeArtifactId) {\n queryParams['artifactId'] = this.activeArtifactId;\n if (this.activeVersionNumber) {\n queryParams['versionNumber'] = this.activeVersionNumber.toString();\n }\n } else {\n queryParams['artifactId'] = null;\n queryParams['versionNumber'] = null;\n }\n\n // Use NavigationService to update query params properly\n this.navigationService.UpdateActiveTabQueryParams(queryParams);\n }\n\n\n /**\n * Update the tab/browser title based on the active collection.\n */\n private async updateCollectionTabTitle(collectionId: string | null): Promise<void> {\n if (!collectionId) {\n this.NotifyDisplayNameChanged('Collections');\n return;\n }\n try {\n const rv = new RunView();\n const result = await rv.RunView<{ Name: string }>({\n EntityName: 'MJ: Collections',\n Fields: ['Name'],\n ExtraFilter: `ID='${collectionId}'`,\n ResultType: 'simple'\n });\n if (result.Results?.length > 0 && result.Results[0].Name) {\n this.NotifyDisplayNameChanged(result.Results[0].Name);\n }\n } catch {\n // Fall back to generic title\n this.NotifyDisplayNameChanged('Collections');\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.removeResizeListeners();\n }\n\n /**\n * Subscribe to artifact state service for panel open/close\n */\n private subscribeToArtifactState(): void {\n // Subscribe to panel open state\n this.artifactState.isPanelOpen$\n .pipe(takeUntil(this.destroy$))\n .subscribe(isOpen => {\n this.isArtifactPanelOpen = isOpen;\n this.cdr.detectChanges();\n });\n\n // Subscribe to active artifact ID\n this.artifactState.activeArtifactId$\n .pipe(takeUntil(this.destroy$))\n .subscribe(async id => {\n this.activeArtifactId = id;\n if (id) {\n await this.loadArtifactPermissions(id);\n } else {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n this.cdr.detectChanges();\n });\n\n // Subscribe to active version number\n this.artifactState.activeVersionNumber$\n .pipe(takeUntil(this.destroy$))\n .subscribe(versionNumber => {\n this.activeVersionNumber = versionNumber;\n });\n }\n\n /**\n * Load permissions for the active artifact\n */\n private async loadArtifactPermissions(artifactId: string): Promise<void> {\n if (!artifactId || !this.currentUser) {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n return;\n }\n\n try {\n const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);\n this.canShareActiveArtifact = permissions.canShare;\n this.canEditActiveArtifact = permissions.canEdit;\n } catch (error) {\n console.error('Failed to load artifact permissions:', error);\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n }\n\n /**\n * Close the artifact panel\n */\n closeArtifactPanel(): void {\n this.artifactState.closeArtifact();\n }\n\n /**\n * Toggle maximize/restore state for artifact panel\n */\n toggleMaximizeArtifactPanel(): void {\n if (this.isArtifactPanelMaximized) {\n // Restore to previous width\n this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;\n this.isArtifactPanelMaximized = false;\n } else {\n // Maximize - store current width and set to 100%\n this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;\n this.artifactPanelWidth = 100;\n this.isArtifactPanelMaximized = true;\n }\n }\n\n /**\n * Handle navigation request from artifact viewer panel.\n * Converts the link event to a generic navigation request and uses NavigationService.\n */\n onNavigateToLink(event: {\n type: 'conversation' | 'collection';\n id: string;\n artifactId?: string;\n versionNumber?: number;\n versionId?: string;\n }): void {\n // Map the link type to the nav item name\n const navItemName = event.type === 'conversation' ? 'Conversations' : 'Collections';\n\n // Build configuration params to pass to the target resource\n const params: Record<string, unknown> = {};\n if (event.type === 'conversation') {\n params['conversationId'] = event.id;\n } else {\n params['collectionId'] = event.id;\n }\n\n // Include artifact info so destination can open it\n if (event.artifactId) {\n params['artifactId'] = event.artifactId;\n if (event.versionNumber) {\n params['versionNumber'] = event.versionNumber;\n }\n }\n\n // Navigate using the generic nav item method\n this.navigationService.OpenNavItemByName(navItemName, params);\n }\n\n /**\n * Handle entity record open request from artifact viewer (from React component grids).\n * Uses NavigationService to open the record in a new tab.\n */\n onOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n this.navigationService.OpenEntityRecord(event.entityName, event.compositeKey);\n }\n\n /**\n * Get the environment ID from configuration or use default\n */\n get environmentId(): string {\n return this.Data?.Configuration?.environmentId || MJEnvironmentEntityExtended.DefaultEnvironmentID;\n }\n\n /**\n * Get the display name for chat collections\n */\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Collections';\n }\n\n /**\n * Get the icon class for chat collections\n */\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-folder-open';\n }\n\n // Resize handling\n private setupResizeListeners(): void {\n this.boundOnResizeMove = this.onResizeMove.bind(this);\n this.boundOnResizeEnd = this.onResizeEnd.bind(this);\n }\n\n private removeResizeListeners(): void {\n window.removeEventListener('mousemove', this.boundOnResizeMove);\n window.removeEventListener('mouseup', this.boundOnResizeEnd);\n }\n\n private boundOnResizeMove: (e: MouseEvent) => void = () => {};\n private boundOnResizeEnd: (e: MouseEvent) => void = () => {};\n\n onResizeStart(event: MouseEvent): void {\n this.isResizing = true;\n this.resizeStartX = event.clientX;\n this.resizeStartWidth = this.artifactPanelWidth;\n window.addEventListener('mousemove', this.boundOnResizeMove);\n window.addEventListener('mouseup', this.boundOnResizeEnd);\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove(event: MouseEvent): void {\n if (!this.isResizing) return;\n\n const container = document.querySelector('.chat-collections-container') as HTMLElement;\n if (!container) return;\n\n const containerWidth = container.offsetWidth;\n const deltaX = event.clientX - this.resizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right\n let newWidth = this.resizeStartWidth + deltaPercent;\n\n // Constrain between 20% and 80%\n newWidth = Math.max(20, Math.min(80, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n\n private onResizeEnd(event: MouseEvent): void {\n this.isResizing = false;\n window.removeEventListener('mousemove', this.boundOnResizeMove);\n window.removeEventListener('mouseup', this.boundOnResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n}\n"]}
|
|
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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","sourcesContent":["import { Component, ViewEncapsulation, OnInit, OnDestroy, ChangeDetectorRef, inject } from '@angular/core';\nimport { Metadata, CompositeKey, RunView } from '@memberjunction/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJEnvironmentEntityExtended } from '@memberjunction/core-entities';\nimport { ArtifactStateService, ArtifactPermissionService, CollectionStateService } from '@memberjunction/ng-conversations';\nimport { Subject, takeUntil, distinctUntilChanged, combineLatest } from 'rxjs';\n/**\n * Chat Collections Resource - displays the collections full view for tab-based display\n * Extends BaseResourceComponent to work with the resource type system\n * Shows all collections and their artifacts in a comprehensive view\n * Includes artifact panel support for viewing selected artifacts\n */\n@RegisterClass(BaseResourceComponent, 'ChatCollectionsResource')\n@Component({\n standalone: false,\n selector: 'mj-chat-collections-resource',\n template: `\n <div class=\"chat-collections-container\">\n <!-- Collections view -->\n <div class=\"collections-main\" [class.with-artifact-panel]=\"isArtifactPanelOpen && activeArtifactId\">\n @if (currentUser) {\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\">\n </mj-collections-full-view>\n }\n </div>\n \n <!-- Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\"\n (mousedown)=\"onResizeStart($event)\"></div>\n }\n <div class=\"artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"false\"\n [viewContext]=\"'collection'\"\n [contextCollectionId]=\"activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (navigateToLink)=\"onNavigateToLink($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n `,\n styles: [`\n /* :host doesn't work with ViewEncapsulation.None — use the element selector */\n mj-chat-collections-resource {\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: var(--mj-brand-primary);\n }\n\n .artifact-panel-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .artifact-panel {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\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 `],\n encapsulation: ViewEncapsulation.None\n})\nexport class ChatCollectionsResource extends BaseResourceComponent implements OnInit, OnDestroy {\n public currentUser: any = null;\n\n // Artifact panel state\n public isArtifactPanelOpen: boolean = false;\n public activeCollectionId: string | null = null;\n public activeArtifactId: string | null = null;\n public activeVersionNumber: number | null = null;\n public canShareActiveArtifact: boolean = false;\n public canEditActiveArtifact: boolean = false;\n public artifactPanelWidth: number = 40; // Default 40% width (percentage-based)\n public isArtifactPanelMaximized: boolean = false;\n private artifactPanelWidthBeforeMaximize: number = 40; // Store width before maximizing\n\n // Resize state\n private isResizing: boolean = false;\n private resizeStartX: number = 0;\n private resizeStartWidth: number = 0;\n\n private initializing = true; // Prevents URL updates during initialization\n\n private artifactState = inject(ArtifactStateService);\n private artifactPermissionService = inject(ArtifactPermissionService);\n public collectionState = inject(CollectionStateService);\n private cdr = inject(ChangeDetectorRef);\n\n ngOnInit() {\n super.ngOnInit();\n const md = new Metadata();\n this.currentUser = md.CurrentUser;\n\n // Subscribe to artifact state changes\n this.subscribeToArtifactState();\n\n // Setup resize listeners\n this.setupResizeListeners();\n\n // Apply initial state from query params or tab config\n this.applyInitialParams();\n\n // Subscribe to state changes to push URL updates\n this.subscribeToUrlStateChanges();\n\n // Subscribe to collection and artifact changes to update tab title\n this.collectionState.activeCollectionId$\n .pipe(takeUntil(this.destroy$), distinctUntilChanged())\n .subscribe(collectionId => {\n this.activeCollectionId = collectionId;\n // Only update if no artifact is open (artifact title takes priority)\n if (!this.activeArtifactId) {\n this.updateCollectionTabTitle(collectionId);\n }\n this.cdr.detectChanges();\n });\n\n this.artifactState.activeArtifact$\n .pipe(takeUntil(this.destroy$), distinctUntilChanged())\n .subscribe(artifact => {\n if (artifact && artifact.Name) {\n this.NotifyDisplayNameChanged(artifact.Name);\n } else {\n // Artifact closed — fall back to collection name\n this.updateCollectionTabTitle(this.collectionState.activeCollectionId);\n }\n });\n\n // Enable URL updates after initialization\n this.initializing = false;\n\n // Push initial state to URL\n this.pushStateToUrl();\n\n // Notify load complete after user is set\n setTimeout(() => {\n this.NotifyLoadComplete();\n }, 100);\n }\n\n\n /**\n * Apply initial state from query params or tab configuration.\n */\n private applyInitialParams(): void {\n const params = this.GetQueryParams();\n const config = this.Data?.Configuration;\n\n const collectionId = params['collectionId'] || (config?.collectionId as string);\n const artifactId = params['artifactId'] || (config?.artifactId as string);\n const versionNumber = params['versionNumber'] ? parseInt(params['versionNumber'], 10)\n : config?.versionNumber ? (config.versionNumber as number) : undefined;\n\n if (collectionId) {\n this.collectionState.setActiveCollection(collectionId);\n }\n if (artifactId) {\n this.artifactState.openArtifact(artifactId, versionNumber);\n }\n }\n\n /**\n * React to browser back/forward query param changes.\n */\n protected override OnQueryParamsChanged(params: Record<string, string>, source: 'popstate' | 'deeplink'): void {\n const collectionId = params['collectionId'];\n const artifactId = params['artifactId'];\n const versionNumber = params['versionNumber'] ? parseInt(params['versionNumber'], 10) : undefined;\n\n if (collectionId) {\n this.collectionState.setActiveCollection(collectionId);\n } else {\n this.collectionState.setActiveCollection(null);\n }\n\n if (artifactId) {\n this.artifactState.openArtifact(artifactId, versionNumber);\n } else {\n this.artifactState.closeArtifact();\n }\n }\n\n /**\n * Subscribe to state changes for URL updates.\n */\n private subscribeToUrlStateChanges(): void {\n combineLatest([\n this.collectionState.activeCollectionId$.pipe(distinctUntilChanged()),\n this.artifactState.activeArtifactId$.pipe(distinctUntilChanged()),\n this.artifactState.activeVersionNumber$.pipe(distinctUntilChanged())\n ])\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (!this.initializing) {\n this.pushStateToUrl();\n }\n });\n }\n\n /**\n * Push current state to URL via framework query params.\n */\n private pushStateToUrl(): void {\n const queryParams: Record<string, string | null> = {};\n\n const collectionId = this.collectionState.activeCollectionId;\n queryParams['collectionId'] = collectionId || null;\n\n if (this.activeArtifactId) {\n queryParams['artifactId'] = this.activeArtifactId;\n queryParams['versionNumber'] = this.activeVersionNumber ? this.activeVersionNumber.toString() : null;\n } else {\n queryParams['artifactId'] = null;\n queryParams['versionNumber'] = null;\n }\n\n this.UpdateQueryParams(queryParams);\n }\n\n\n /**\n * Update the tab/browser title based on the active collection.\n */\n private async updateCollectionTabTitle(collectionId: string | null): Promise<void> {\n if (!collectionId) {\n this.NotifyDisplayNameChanged('Collections');\n return;\n }\n try {\n const rv = new RunView();\n const result = await rv.RunView<{ Name: string }>({\n EntityName: 'MJ: Collections',\n Fields: ['Name'],\n ExtraFilter: `ID='${collectionId}'`,\n ResultType: 'simple'\n });\n if (result.Results?.length > 0 && result.Results[0].Name) {\n this.NotifyDisplayNameChanged(result.Results[0].Name);\n }\n } catch {\n // Fall back to generic title\n this.NotifyDisplayNameChanged('Collections');\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.removeResizeListeners();\n }\n\n /**\n * Subscribe to artifact state service for panel open/close\n */\n private subscribeToArtifactState(): void {\n // Subscribe to panel open state\n this.artifactState.isPanelOpen$\n .pipe(takeUntil(this.destroy$))\n .subscribe(isOpen => {\n this.isArtifactPanelOpen = isOpen;\n this.cdr.detectChanges();\n });\n\n // Subscribe to active artifact ID\n this.artifactState.activeArtifactId$\n .pipe(takeUntil(this.destroy$))\n .subscribe(async id => {\n this.activeArtifactId = id;\n if (id) {\n await this.loadArtifactPermissions(id);\n } else {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n this.cdr.detectChanges();\n });\n\n // Subscribe to active version number\n this.artifactState.activeVersionNumber$\n .pipe(takeUntil(this.destroy$))\n .subscribe(versionNumber => {\n this.activeVersionNumber = versionNumber;\n });\n }\n\n /**\n * Load permissions for the active artifact\n */\n private async loadArtifactPermissions(artifactId: string): Promise<void> {\n if (!artifactId || !this.currentUser) {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n return;\n }\n\n try {\n const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);\n this.canShareActiveArtifact = permissions.canShare;\n this.canEditActiveArtifact = permissions.canEdit;\n } catch (error) {\n console.error('Failed to load artifact permissions:', error);\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n }\n\n /**\n * Close the artifact panel\n */\n closeArtifactPanel(): void {\n this.artifactState.closeArtifact();\n }\n\n /**\n * Toggle maximize/restore state for artifact panel\n */\n toggleMaximizeArtifactPanel(): void {\n if (this.isArtifactPanelMaximized) {\n // Restore to previous width\n this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;\n this.isArtifactPanelMaximized = false;\n } else {\n // Maximize - store current width and set to 100%\n this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;\n this.artifactPanelWidth = 100;\n this.isArtifactPanelMaximized = true;\n }\n }\n\n /**\n * Handle navigation request from artifact viewer panel.\n * Converts the link event to a generic navigation request and uses NavigationService.\n */\n onNavigateToLink(event: {\n type: 'conversation' | 'collection';\n id: string;\n artifactId?: string;\n versionNumber?: number;\n versionId?: string;\n }): void {\n // Map the link type to the nav item name\n const navItemName = event.type === 'conversation' ? 'Conversations' : 'Collections';\n\n // Build configuration params to pass to the target resource\n const params: Record<string, unknown> = {};\n if (event.type === 'conversation') {\n params['conversationId'] = event.id;\n } else {\n params['collectionId'] = event.id;\n }\n\n // Include artifact info so destination can open it\n if (event.artifactId) {\n params['artifactId'] = event.artifactId;\n if (event.versionNumber) {\n params['versionNumber'] = event.versionNumber;\n }\n }\n\n // Navigate using the generic nav item method\n this.navigationService.OpenNavItemByName(navItemName, params);\n }\n\n /**\n * Handle entity record open request from artifact viewer (from React component grids).\n * Uses NavigationService to open the record in a new tab.\n */\n onOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n this.navigationService.OpenEntityRecord(event.entityName, event.compositeKey);\n }\n\n /**\n * Get the environment ID from configuration or use default\n */\n get environmentId(): string {\n return this.Data?.Configuration?.environmentId || MJEnvironmentEntityExtended.DefaultEnvironmentID;\n }\n\n /**\n * Get the display name for chat collections\n */\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Collections';\n }\n\n /**\n * Get the icon class for chat collections\n */\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-folder-open';\n }\n\n // Resize handling\n private setupResizeListeners(): void {\n this.boundOnResizeMove = this.onResizeMove.bind(this);\n this.boundOnResizeEnd = this.onResizeEnd.bind(this);\n }\n\n private removeResizeListeners(): void {\n window.removeEventListener('mousemove', this.boundOnResizeMove);\n window.removeEventListener('mouseup', this.boundOnResizeEnd);\n }\n\n private boundOnResizeMove: (e: MouseEvent) => void = () => {};\n private boundOnResizeEnd: (e: MouseEvent) => void = () => {};\n\n onResizeStart(event: MouseEvent): void {\n this.isResizing = true;\n this.resizeStartX = event.clientX;\n this.resizeStartWidth = this.artifactPanelWidth;\n window.addEventListener('mousemove', this.boundOnResizeMove);\n window.addEventListener('mouseup', this.boundOnResizeEnd);\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove(event: MouseEvent): void {\n if (!this.isResizing) return;\n\n const container = document.querySelector('.chat-collections-container') as HTMLElement;\n if (!container) return;\n\n const containerWidth = container.offsetWidth;\n const deltaX = event.clientX - this.resizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right\n let newWidth = this.resizeStartWidth + deltaPercent;\n\n // Constrain between 20% and 80%\n newWidth = Math.max(20, Math.min(80, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n\n private onResizeEnd(event: MouseEvent): void {\n this.isResizing = false;\n window.removeEventListener('mousemove', this.boundOnResizeMove);\n window.removeEventListener('mouseup', this.boundOnResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { CompositeKey } from '@memberjunction/core';
|
|
3
|
-
import { BaseResourceComponent
|
|
3
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
4
4
|
import { ResourceData, MJConversationEntity } from '@memberjunction/core-entities';
|
|
5
5
|
import { ConversationChatAreaComponent, ConversationListComponent, MentionAutocompleteService, ConversationStreamingService, ActiveTasksService, PendingAttachment, UICommandHandlerService, ConversationBridgeService } from '@memberjunction/ng-conversations';
|
|
6
6
|
import { NavigationRequest } from '@memberjunction/ng-artifacts';
|
|
@@ -17,7 +17,6 @@ import * as i0 from "@angular/core";
|
|
|
17
17
|
* - State flows down to children via @Input, events flow up via @Output
|
|
18
18
|
*/
|
|
19
19
|
export declare class ChatConversationsResource extends BaseResourceComponent implements OnDestroy {
|
|
20
|
-
private navigationService;
|
|
21
20
|
private mentionAutocompleteService;
|
|
22
21
|
private cdr;
|
|
23
22
|
private streamingService;
|
|
@@ -27,7 +26,6 @@ export declare class ChatConversationsResource extends BaseResourceComponent imp
|
|
|
27
26
|
conversationList?: ConversationListComponent;
|
|
28
27
|
chatArea?: ConversationChatAreaComponent;
|
|
29
28
|
currentUser: any;
|
|
30
|
-
private destroy$;
|
|
31
29
|
private skipUrlUpdate;
|
|
32
30
|
isReady: boolean;
|
|
33
31
|
selectedConversationId: string | null;
|
|
@@ -53,7 +51,7 @@ export declare class ChatConversationsResource extends BaseResourceComponent imp
|
|
|
53
51
|
private readonly USER_SETTING_SIDEBAR_KEY;
|
|
54
52
|
private saveSettingsTimeout;
|
|
55
53
|
private engine;
|
|
56
|
-
constructor(
|
|
54
|
+
constructor(mentionAutocompleteService: MentionAutocompleteService, cdr: ChangeDetectorRef, streamingService: ConversationStreamingService, activeTasksService: ActiveTasksService, uiCommandHandler: UICommandHandlerService, bridge: ConversationBridgeService);
|
|
57
55
|
ngOnInit(): Promise<void>;
|
|
58
56
|
ngOnDestroy(): void;
|
|
59
57
|
/**
|
|
@@ -1 +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,EAAa,iBAAiB,EAAgB,MAAM,eAAe,CAAC;AACpH,OAAO,EAAY,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"chat-conversations-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-conversations-resource.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,10 @@ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
|
10
10
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
11
11
|
import { MJEnvironmentEntityExtended, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';
|
|
12
12
|
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
13
|
-
import {
|
|
13
|
+
import { takeUntil } from 'rxjs';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@memberjunction/ng-
|
|
16
|
-
import * as i2 from "@memberjunction/ng-
|
|
17
|
-
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
15
|
+
import * as i1 from "@memberjunction/ng-conversations";
|
|
16
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
18
17
|
const _c0 = ["conversationList"];
|
|
19
18
|
const _c1 = ["chatArea"];
|
|
20
19
|
function ChatConversationsResource_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -85,7 +84,6 @@ function ChatConversationsResource_Conditional_1_Template(rf, ctx) { if (rf & 1)
|
|
|
85
84
|
* - State flows down to children via @Input, events flow up via @Output
|
|
86
85
|
*/
|
|
87
86
|
let ChatConversationsResource = class ChatConversationsResource extends BaseResourceComponent {
|
|
88
|
-
navigationService;
|
|
89
87
|
mentionAutocompleteService;
|
|
90
88
|
cdr;
|
|
91
89
|
streamingService;
|
|
@@ -95,7 +93,6 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
95
93
|
conversationList;
|
|
96
94
|
chatArea;
|
|
97
95
|
currentUser = null;
|
|
98
|
-
destroy$ = new Subject();
|
|
99
96
|
skipUrlUpdate = true; // Skip URL updates during initialization
|
|
100
97
|
// Ready flag - blocks child rendering until AIEngine is initialized
|
|
101
98
|
isReady = false;
|
|
@@ -126,9 +123,8 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
126
123
|
USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';
|
|
127
124
|
saveSettingsTimeout = null;
|
|
128
125
|
engine = ConversationEngine.Instance;
|
|
129
|
-
constructor(
|
|
126
|
+
constructor(mentionAutocompleteService, cdr, streamingService, activeTasksService, uiCommandHandler, bridge) {
|
|
130
127
|
super();
|
|
131
|
-
this.navigationService = navigationService;
|
|
132
128
|
this.mentionAutocompleteService = mentionAutocompleteService;
|
|
133
129
|
this.cdr = cdr;
|
|
134
130
|
this.streamingService = streamingService;
|
|
@@ -137,6 +133,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
137
133
|
this.bridge = bridge;
|
|
138
134
|
}
|
|
139
135
|
async ngOnInit() {
|
|
136
|
+
super.ngOnInit();
|
|
140
137
|
const md = new Metadata();
|
|
141
138
|
this.currentUser = md.CurrentUser;
|
|
142
139
|
// Check initial mobile state and set default collapsed
|
|
@@ -194,9 +191,8 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
194
191
|
}, 100);
|
|
195
192
|
}
|
|
196
193
|
ngOnDestroy() {
|
|
194
|
+
super.ngOnDestroy();
|
|
197
195
|
this.bridge.NotifyWorkspaceActive(false);
|
|
198
|
-
this.destroy$.next();
|
|
199
|
-
this.destroy$.complete();
|
|
200
196
|
// Clear any pending save timeout
|
|
201
197
|
if (this.saveSettingsTimeout) {
|
|
202
198
|
clearTimeout(this.saveSettingsTimeout);
|
|
@@ -774,7 +770,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
774
770
|
console.warn('No artifacts found in conversation to open for Report/Dashboard command');
|
|
775
771
|
}
|
|
776
772
|
}
|
|
777
|
-
static ɵfac = function ChatConversationsResource_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ChatConversationsResource)(i0.ɵɵdirectiveInject(i1.
|
|
773
|
+
static ɵfac = function ChatConversationsResource_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ChatConversationsResource)(i0.ɵɵdirectiveInject(i1.MentionAutocompleteService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ConversationStreamingService), i0.ɵɵdirectiveInject(i1.ActiveTasksService), i0.ɵɵdirectiveInject(i1.UICommandHandlerService), i0.ɵɵdirectiveInject(i1.ConversationBridgeService)); };
|
|
778
774
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChatConversationsResource, selectors: [["mj-chat-conversations-resource"]], viewQuery: function ChatConversationsResource_Query(rf, ctx) { if (rf & 1) {
|
|
779
775
|
i0.ɵɵviewQuery(_c0, 5)(_c1, 5);
|
|
780
776
|
} if (rf & 2) {
|
|
@@ -788,7 +784,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
788
784
|
i0.ɵɵelement(2, "mj-toast");
|
|
789
785
|
} if (rf & 2) {
|
|
790
786
|
i0.ɵɵconditional(ctx.isReady ? 0 : 1);
|
|
791
|
-
} }, dependencies: [
|
|
787
|
+
} }, dependencies: [i1.ConversationListComponent, i1.ConversationChatAreaComponent, i1.ToastComponent, i2.LoadingComponent], styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-conversations-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n .conversation-sidebar {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n background: var(--mj-bg-surface-sunken);\n transition: width 0.3s ease;\n }\n\n /* Disable transitions during initial load to prevent jarring animation */\n .conversation-sidebar.no-transition {\n transition: none !important;\n }\n\n .conversation-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n }\n\n /* Resize handle for sidebar */\n .sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n }\n\n .sidebar-resize-handle:hover {\n background: var(--mj-brand-primary);\n }\n\n .sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n }\n\n .conversation-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .initializing-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n flex: 1;\n }\n "], encapsulation: 2 });
|
|
792
788
|
};
|
|
793
789
|
ChatConversationsResource = __decorate([
|
|
794
790
|
RegisterClass(BaseResourceComponent, 'ChatConversationsResource')
|
|
@@ -869,7 +865,7 @@ export { ChatConversationsResource };
|
|
|
869
865
|
<!-- Toast notifications container -->
|
|
870
866
|
<mj-toast></mj-toast>
|
|
871
867
|
`, encapsulation: ViewEncapsulation.None, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-conversations-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n .conversation-sidebar {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n background: var(--mj-bg-surface-sunken);\n transition: width 0.3s ease;\n }\n\n /* Disable transitions during initial load to prevent jarring animation */\n .conversation-sidebar.no-transition {\n transition: none !important;\n }\n\n .conversation-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n }\n\n /* Resize handle for sidebar */\n .sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n }\n\n .sidebar-resize-handle:hover {\n background: var(--mj-brand-primary);\n }\n\n .sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n }\n\n .conversation-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .initializing-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n flex: 1;\n }\n "] }]
|
|
872
|
-
}], () => [{ type: i1.
|
|
868
|
+
}], () => [{ type: i1.MentionAutocompleteService }, { type: i0.ChangeDetectorRef }, { type: i1.ConversationStreamingService }, { type: i1.ActiveTasksService }, { type: i1.UICommandHandlerService }, { type: i1.ConversationBridgeService }], { conversationList: [{
|
|
873
869
|
type: ViewChild,
|
|
874
870
|
args: ['conversationList']
|
|
875
871
|
}], chatArea: [{
|