@memberjunction/ng-conversations 2.114.0 → 2.116.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/lib/components/conversation/conversation-chat-area.component.d.ts +12 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +149 -11
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -3
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +398 -197
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +31 -23
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +117 -0
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -0
- package/dist/lib/components/mention/mention-editor.component.js +550 -0
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -0
- package/dist/lib/components/message/message-input-box.component.d.ts +22 -33
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +71 -172
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +18 -15
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +108 -93
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +1 -0
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +49 -7
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +2 -2
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +6 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +115 -73
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +55 -54
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +4 -0
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/services/conversation-state.service.d.ts +14 -0
- package/dist/lib/services/conversation-state.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-state.service.js +32 -0
- package/dist/lib/services/conversation-state.service.js.map +1 -1
- package/dist/lib/services/conversation-streaming.service.d.ts +101 -0
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-streaming.service.js +319 -0
- package/dist/lib/services/conversation-streaming.service.js.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts +8 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +34 -3
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +14 -14
|
@@ -54,7 +54,7 @@ export class ConversationNavigationComponent {
|
|
|
54
54
|
i0.ɵɵclassProp("active", ctx.activeTab === "tasks");
|
|
55
55
|
i0.ɵɵadvance(5);
|
|
56
56
|
i0.ɵɵproperty("currentUser", ctx.currentUser);
|
|
57
|
-
} }, dependencies: [i1.TasksDropdownComponent], styles: [".conversation-navigation[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 20px;\n gap: 24px;\n color: white;\n }\n .nav-left[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 12px; }\n .nav-title[_ngcontent-%COMP%] { margin: 0; font-size: 18px; font-weight: 600; }\n .nav-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex: 1;\n height: 100%;\n }\n .nav-tab[_ngcontent-%COMP%] {\n padding: 0 20px;\n height: 100%;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s;\n border-bottom: 3px solid transparent;\n }\n .nav-tab[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.05);\n color: white;\n }\n .nav-tab.active[_ngcontent-%COMP%] {\n color: white;\n background: rgba(255,255,255,0.1);\n border-bottom-color: #AAE7FD;\n }\n .nav-right[_ngcontent-%COMP%] { display: flex; gap: 8px; }\n .nav-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n }\n .nav-btn[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n .sidebar-toggle[_ngcontent-%COMP%] {\n display:
|
|
57
|
+
} }, dependencies: [i1.TasksDropdownComponent], styles: [".conversation-navigation[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 20px;\n gap: 24px;\n color: white;\n }\n .nav-left[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 12px; }\n .nav-title[_ngcontent-%COMP%] { margin: 0; font-size: 18px; font-weight: 600; }\n .nav-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex: 1;\n height: 100%;\n }\n .nav-tab[_ngcontent-%COMP%] {\n padding: 0 20px;\n height: 100%;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s;\n border-bottom: 3px solid transparent;\n }\n .nav-tab[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.05);\n color: white;\n }\n .nav-tab.active[_ngcontent-%COMP%] {\n color: white;\n background: rgba(255,255,255,0.1);\n border-bottom-color: #AAE7FD;\n }\n .nav-right[_ngcontent-%COMP%] { display: flex; gap: 8px; }\n .nav-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n }\n .nav-btn[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n .sidebar-toggle[_ngcontent-%COMP%] {\n display: flex;\n }\n\n \n\n @media (max-width: 768px) {\n .conversation-navigation[_ngcontent-%COMP%] {\n padding: 0 12px;\n gap: 12px;\n }\n .sidebar-toggle[_ngcontent-%COMP%] {\n display: flex;\n }\n .nav-tab[_ngcontent-%COMP%] {\n padding: 0 12px;\n font-size: 13px;\n gap: 6px;\n }\n .nav-tab[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n .nav-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n .nav-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n }\n .nav-right[_ngcontent-%COMP%] {\n gap: 4px;\n }\n }\n\n \n\n @media (max-width: 480px) {\n .conversation-navigation[_ngcontent-%COMP%] {\n padding: 0 8px;\n gap: 8px;\n }\n .nav-tab[_ngcontent-%COMP%] {\n padding: 0 8px;\n font-size: 12px;\n }\n .nav-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n .nav-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n .nav-right[_ngcontent-%COMP%] .nav-btn[_ngcontent-%COMP%]:last-child {\n display: none;\n }\n }"] });
|
|
58
58
|
}
|
|
59
59
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationNavigationComponent, [{
|
|
60
60
|
type: Component,
|
|
@@ -101,7 +101,7 @@ export class ConversationNavigationComponent {
|
|
|
101
101
|
</button>
|
|
102
102
|
</div>
|
|
103
103
|
</div>
|
|
104
|
-
`, styles: ["\n .conversation-navigation {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 20px;\n gap: 24px;\n color: white;\n }\n .nav-left { display: flex; align-items: center; gap: 12px; }\n .nav-title { margin: 0; font-size: 18px; font-weight: 600; }\n .nav-tabs {\n display: flex;\n gap: 4px;\n flex: 1;\n height: 100%;\n }\n .nav-tab {\n padding: 0 20px;\n height: 100%;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s;\n border-bottom: 3px solid transparent;\n }\n .nav-tab:hover {\n background: rgba(255,255,255,0.05);\n color: white;\n }\n .nav-tab.active {\n color: white;\n background: rgba(255,255,255,0.1);\n border-bottom-color: #AAE7FD;\n }\n .nav-right { display: flex; gap: 8px; }\n .nav-btn {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n }\n .nav-btn:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n .sidebar-toggle {\n display:
|
|
104
|
+
`, styles: ["\n .conversation-navigation {\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 20px;\n gap: 24px;\n color: white;\n }\n .nav-left { display: flex; align-items: center; gap: 12px; }\n .nav-title { margin: 0; font-size: 18px; font-weight: 600; }\n .nav-tabs {\n display: flex;\n gap: 4px;\n flex: 1;\n height: 100%;\n }\n .nav-tab {\n padding: 0 20px;\n height: 100%;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s;\n border-bottom: 3px solid transparent;\n }\n .nav-tab:hover {\n background: rgba(255,255,255,0.05);\n color: white;\n }\n .nav-tab.active {\n color: white;\n background: rgba(255,255,255,0.1);\n border-bottom-color: #AAE7FD;\n }\n .nav-right { display: flex; gap: 8px; }\n .nav-btn {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n }\n .nav-btn:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n .sidebar-toggle {\n display: flex;\n }\n\n /* Mobile adjustments: 481px - 768px */\n @media (max-width: 768px) {\n .conversation-navigation {\n padding: 0 12px;\n gap: 12px;\n }\n .sidebar-toggle {\n display: flex;\n }\n .nav-tab {\n padding: 0 12px;\n font-size: 13px;\n gap: 6px;\n }\n .nav-tab span {\n display: none;\n }\n .nav-tab i {\n font-size: 16px;\n }\n .nav-btn {\n width: 32px;\n height: 32px;\n }\n .nav-right {\n gap: 4px;\n }\n }\n\n /* Small Phone adjustments: <= 480px */\n @media (max-width: 480px) {\n .conversation-navigation {\n padding: 0 8px;\n gap: 8px;\n }\n .nav-tab {\n padding: 0 8px;\n font-size: 12px;\n }\n .nav-btn {\n width: 28px;\n height: 28px;\n }\n .nav-btn i {\n font-size: 14px;\n }\n .nav-right .nav-btn:last-child {\n display: none;\n }\n }\n "] }]
|
|
105
105
|
}], null, { activeTab: [{
|
|
106
106
|
type: Input
|
|
107
107
|
}], environmentId: [{
|
|
@@ -6,6 +6,8 @@ import { ConversationStateService } from '../../services/conversation-state.serv
|
|
|
6
6
|
import { ArtifactStateService } from '../../services/artifact-state.service';
|
|
7
7
|
import { CollectionStateService } from '../../services/collection-state.service';
|
|
8
8
|
import { ArtifactPermissionService } from '../../services/artifact-permission.service';
|
|
9
|
+
import { MentionAutocompleteService } from '../../services/mention-autocomplete.service';
|
|
10
|
+
import { ConversationStreamingService } from '../../services/conversation-streaming.service';
|
|
9
11
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
10
12
|
import { NavigationTab, WorkspaceLayout } from '../../models/conversation-state.model';
|
|
11
13
|
import { SearchResult } from '../../services/search.service';
|
|
@@ -20,7 +22,9 @@ export declare class ConversationWorkspaceComponent extends BaseAngularComponent
|
|
|
20
22
|
artifactState: ArtifactStateService;
|
|
21
23
|
collectionState: CollectionStateService;
|
|
22
24
|
private artifactPermissionService;
|
|
25
|
+
private mentionAutocompleteService;
|
|
23
26
|
private notificationService;
|
|
27
|
+
private streamingService;
|
|
24
28
|
private cdr;
|
|
25
29
|
environmentId: string;
|
|
26
30
|
initialConversationId?: string;
|
|
@@ -53,6 +57,7 @@ export declare class ConversationWorkspaceComponent extends BaseAngularComponent
|
|
|
53
57
|
isSidebarVisible: boolean;
|
|
54
58
|
isArtifactPanelOpen: boolean;
|
|
55
59
|
isSearchPanelOpen: boolean;
|
|
60
|
+
isWorkspaceReady: boolean;
|
|
56
61
|
renamedConversationId: string | null;
|
|
57
62
|
activeArtifactId: string | null;
|
|
58
63
|
activeVersionNumber: number | null;
|
|
@@ -78,7 +83,7 @@ export declare class ConversationWorkspaceComponent extends BaseAngularComponent
|
|
|
78
83
|
private readonly SIDEBAR_WIDTH_KEY;
|
|
79
84
|
private readonly ARTIFACT_PANEL_WIDTH_KEY;
|
|
80
85
|
tasksFilter: string;
|
|
81
|
-
constructor(conversationState: ConversationStateService, artifactState: ArtifactStateService, collectionState: CollectionStateService, artifactPermissionService: ArtifactPermissionService, notificationService: MJNotificationService, cdr: ChangeDetectorRef);
|
|
86
|
+
constructor(conversationState: ConversationStateService, artifactState: ArtifactStateService, collectionState: CollectionStateService, artifactPermissionService: ArtifactPermissionService, mentionAutocompleteService: MentionAutocompleteService, notificationService: MJNotificationService, streamingService: ConversationStreamingService, cdr: ChangeDetectorRef);
|
|
82
87
|
ngOnInit(): Promise<void>;
|
|
83
88
|
/**
|
|
84
89
|
* Builds the SQL filter for tasks in conversations the user has access to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,OAAO,EACP,iBAAiB,EAElB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,YAAY,EAA0B,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAI7D;;;;GAIG;AACH,qBAKa,8BAA+B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"conversation-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,88 +8,119 @@ import * as i1 from "../../services/conversation-state.service";
|
|
|
8
8
|
import * as i2 from "../../services/artifact-state.service";
|
|
9
9
|
import * as i3 from "../../services/collection-state.service";
|
|
10
10
|
import * as i4 from "../../services/artifact-permission.service";
|
|
11
|
-
import * as i5 from "
|
|
12
|
-
import * as i6 from "@
|
|
13
|
-
import * as i7 from "
|
|
14
|
-
import * as i8 from "@
|
|
15
|
-
import * as i9 from "
|
|
16
|
-
import * as i10 from "
|
|
17
|
-
import * as i11 from "../
|
|
18
|
-
import * as i12 from "../
|
|
19
|
-
import * as i13 from "../
|
|
20
|
-
import * as i14 from "../
|
|
21
|
-
import * as i15 from "../
|
|
22
|
-
import * as i16 from "../
|
|
23
|
-
import * as i17 from "
|
|
24
|
-
|
|
11
|
+
import * as i5 from "../../services/mention-autocomplete.service";
|
|
12
|
+
import * as i6 from "@memberjunction/ng-notifications";
|
|
13
|
+
import * as i7 from "../../services/conversation-streaming.service";
|
|
14
|
+
import * as i8 from "@angular/common";
|
|
15
|
+
import * as i9 from "@progress/kendo-angular-dialog";
|
|
16
|
+
import * as i10 from "@memberjunction/ng-artifacts";
|
|
17
|
+
import * as i11 from "../task/tasks-full-view.component";
|
|
18
|
+
import * as i12 from "../artifact/artifact-share-modal.component";
|
|
19
|
+
import * as i13 from "../navigation/conversation-navigation.component";
|
|
20
|
+
import * as i14 from "../sidebar/conversation-sidebar.component";
|
|
21
|
+
import * as i15 from "../conversation/conversation-chat-area.component";
|
|
22
|
+
import * as i16 from "../collection/collections-full-view.component";
|
|
23
|
+
import * as i17 from "../search/search-panel.component";
|
|
24
|
+
import * as i18 from "../toast/toast.component";
|
|
25
|
+
import * as i19 from "../../directives/search-shortcut.directive";
|
|
26
|
+
function ConversationWorkspaceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "div", 7);
|
|
28
|
+
i0.ɵɵelement(2, "i", 8);
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
i0.ɵɵelementStart(3, "p");
|
|
31
|
+
i0.ɵɵtext(4, "Loading agents...");
|
|
32
|
+
i0.ɵɵelementEnd()();
|
|
33
|
+
} }
|
|
34
|
+
function ConversationWorkspaceComponent_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
25
35
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵelementStart(0, "div",
|
|
27
|
-
i0.ɵɵlistener("click", function
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 13);
|
|
37
|
+
i0.ɵɵlistener("click", function ConversationWorkspaceComponent_Conditional_4_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeSidebar()); });
|
|
28
38
|
i0.ɵɵelementEnd();
|
|
29
39
|
} }
|
|
30
|
-
function
|
|
31
|
-
i0.ɵɵelementStart(0, "div",
|
|
32
|
-
i0.ɵɵelement(1, "mj-conversation-sidebar",
|
|
40
|
+
function ConversationWorkspaceComponent_Conditional_4_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
42
|
+
i0.ɵɵelement(1, "mj-conversation-sidebar", 15);
|
|
33
43
|
i0.ɵɵelementEnd();
|
|
34
44
|
} if (rf & 2) {
|
|
35
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
45
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
36
46
|
i0.ɵɵstyleProp("width", ctx_r1.sidebarWidth, "px");
|
|
37
47
|
i0.ɵɵclassProp("open", ctx_r1.isSidebarVisible);
|
|
38
48
|
i0.ɵɵadvance();
|
|
39
49
|
i0.ɵɵproperty("activeTab", ctx_r1.activeTab)("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("renamedConversationId", ctx_r1.renamedConversationId);
|
|
40
50
|
} }
|
|
41
|
-
function
|
|
51
|
+
function ConversationWorkspaceComponent_Conditional_4_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
42
52
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
43
|
-
i0.ɵɵelementStart(0, "div",
|
|
44
|
-
i0.ɵɵlistener("mousedown", function
|
|
53
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
54
|
+
i0.ɵɵlistener("mousedown", function ConversationWorkspaceComponent_Conditional_4_div_3_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSidebarResizeStart($event)); });
|
|
45
55
|
i0.ɵɵelementEnd();
|
|
46
56
|
} }
|
|
47
|
-
function
|
|
57
|
+
function ConversationWorkspaceComponent_Conditional_4_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
48
58
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
49
|
-
i0.ɵɵelementStart(0, "div",
|
|
50
|
-
i0.ɵɵlistener("collectionNavigated", function
|
|
59
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "mj-collections-full-view", 18);
|
|
60
|
+
i0.ɵɵlistener("collectionNavigated", function ConversationWorkspaceComponent_Conditional_4_div_4_Template_mj_collections_full_view_collectionNavigated_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onCollectionNavigated($event)); });
|
|
51
61
|
i0.ɵɵelementEnd()();
|
|
52
62
|
} if (rf & 2) {
|
|
53
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
63
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
54
64
|
i0.ɵɵadvance();
|
|
55
65
|
i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser);
|
|
56
66
|
} }
|
|
57
|
-
function
|
|
67
|
+
function ConversationWorkspaceComponent_Conditional_4_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
58
68
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
59
|
-
i0.ɵɵelementStart(0, "div",
|
|
60
|
-
i0.ɵɵlistener("openEntityRecord", function
|
|
69
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "mj-tasks-full-view", 19);
|
|
70
|
+
i0.ɵɵlistener("openEntityRecord", function ConversationWorkspaceComponent_Conditional_4_div_5_Template_mj_tasks_full_view_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecordFromTasks($event)); });
|
|
61
71
|
i0.ɵɵelementEnd()();
|
|
62
72
|
} if (rf & 2) {
|
|
63
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
73
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
64
74
|
i0.ɵɵadvance();
|
|
65
75
|
i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("baseFilter", ctx_r1.tasksFilter)("activeTaskId", ctx_r1.activeTaskId);
|
|
66
76
|
} }
|
|
67
|
-
function
|
|
77
|
+
function ConversationWorkspaceComponent_Conditional_4_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
68
78
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
69
|
-
i0.ɵɵelementStart(0, "div",
|
|
70
|
-
i0.ɵɵlistener("conversationRenamed", function
|
|
79
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "mj-conversation-chat-area", 20);
|
|
80
|
+
i0.ɵɵlistener("conversationRenamed", function ConversationWorkspaceComponent_Conditional_4_div_6_Template_mj_conversation_chat_area_conversationRenamed_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("openEntityRecord", function ConversationWorkspaceComponent_Conditional_4_div_6_Template_mj_conversation_chat_area_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("taskClicked", function ConversationWorkspaceComponent_Conditional_4_div_6_Template_mj_conversation_chat_area_taskClicked_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTaskClicked($event)); })("artifactLinkClicked", function ConversationWorkspaceComponent_Conditional_4_div_6_Template_mj_conversation_chat_area_artifactLinkClicked_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); });
|
|
71
81
|
i0.ɵɵelementEnd()();
|
|
72
82
|
} if (rf & 2) {
|
|
73
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
83
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
74
84
|
i0.ɵɵadvance();
|
|
75
85
|
i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser);
|
|
76
86
|
} }
|
|
77
|
-
function
|
|
87
|
+
function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
78
88
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
79
|
-
i0.ɵɵelementStart(0, "div",
|
|
80
|
-
i0.ɵɵlistener("mousedown", function
|
|
89
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
90
|
+
i0.ɵɵlistener("mousedown", function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactPanelResizeStart($event)); });
|
|
81
91
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(1, "div",
|
|
83
|
-
i0.ɵɵlistener("closed", function
|
|
92
|
+
i0.ɵɵelementStart(1, "div", 22)(2, "mj-artifact-viewer-panel", 23);
|
|
93
|
+
i0.ɵɵlistener("closed", function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeArtifactPanel()); })("navigateToLink", function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactShareRequested($event)); });
|
|
84
94
|
i0.ɵɵelementEnd()();
|
|
85
95
|
} if (rf & 2) {
|
|
86
|
-
let
|
|
87
|
-
let
|
|
88
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
96
|
+
let tmp_6_0;
|
|
97
|
+
let tmp_9_0;
|
|
98
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
89
99
|
i0.ɵɵadvance();
|
|
90
100
|
i0.ɵɵstyleProp("width", ctx_r1.artifactPanelWidth, "%");
|
|
91
101
|
i0.ɵɵadvance();
|
|
92
|
-
i0.ɵɵproperty("artifactId", ctx_r1.activeArtifactId)("currentUser", ctx_r1.currentUser)("environmentId", ctx_r1.environmentId)("versionNumber", (
|
|
102
|
+
i0.ɵɵproperty("artifactId", ctx_r1.activeArtifactId)("currentUser", ctx_r1.currentUser)("environmentId", ctx_r1.environmentId)("versionNumber", (tmp_6_0 = ctx_r1.activeVersionNumber) !== null && tmp_6_0 !== undefined ? tmp_6_0 : undefined)("showSaveToCollection", ctx_r1.activeTab !== "collections")("viewContext", ctx_r1.activeTab === "collections" ? "collection" : "conversation")("contextCollectionId", (tmp_9_0 = ctx_r1.collectionState.activeCollectionId) !== null && tmp_9_0 !== undefined ? tmp_9_0 : undefined)("canShare", ctx_r1.canShareActiveArtifact)("canEdit", ctx_r1.canEditActiveArtifact);
|
|
103
|
+
} }
|
|
104
|
+
function ConversationWorkspaceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
106
|
+
i0.ɵɵtemplate(1, ConversationWorkspaceComponent_Conditional_4_Conditional_1_Template, 1, 0, "div", 9)(2, ConversationWorkspaceComponent_Conditional_4_div_2_Template, 2, 8, "div", 10)(3, ConversationWorkspaceComponent_Conditional_4_div_3_Template, 1, 0, "div", 11)(4, ConversationWorkspaceComponent_Conditional_4_div_4_Template, 2, 2, "div", 12)(5, ConversationWorkspaceComponent_Conditional_4_div_5_Template, 2, 4, "div", 12)(6, ConversationWorkspaceComponent_Conditional_4_div_6_Template, 2, 2, "div", 12)(7, ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template, 3, 11);
|
|
107
|
+
i0.ɵɵelementEnd();
|
|
108
|
+
} if (rf & 2) {
|
|
109
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
110
|
+
i0.ɵɵadvance();
|
|
111
|
+
i0.ɵɵconditional(ctx_r1.isMobileView && ctx_r1.isSidebarVisible && ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks" ? 1 : -1);
|
|
112
|
+
i0.ɵɵadvance();
|
|
113
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks");
|
|
114
|
+
i0.ɵɵadvance();
|
|
115
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isSidebarVisible && ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks");
|
|
116
|
+
i0.ɵɵadvance();
|
|
117
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeTab === "collections");
|
|
118
|
+
i0.ɵɵadvance();
|
|
119
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeTab === "tasks");
|
|
120
|
+
i0.ɵɵadvance();
|
|
121
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks");
|
|
122
|
+
i0.ɵɵadvance();
|
|
123
|
+
i0.ɵɵconditional(ctx_r1.isArtifactPanelOpen && ctx_r1.activeArtifactId ? 7 : -1);
|
|
93
124
|
} }
|
|
94
125
|
/**
|
|
95
126
|
* Top-level workspace component for conversations
|
|
@@ -101,7 +132,9 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
101
132
|
artifactState;
|
|
102
133
|
collectionState;
|
|
103
134
|
artifactPermissionService;
|
|
135
|
+
mentionAutocompleteService;
|
|
104
136
|
notificationService;
|
|
137
|
+
streamingService;
|
|
105
138
|
cdr;
|
|
106
139
|
environmentId;
|
|
107
140
|
initialConversationId;
|
|
@@ -157,6 +190,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
157
190
|
isSidebarVisible = true;
|
|
158
191
|
isArtifactPanelOpen = false;
|
|
159
192
|
isSearchPanelOpen = false;
|
|
193
|
+
isWorkspaceReady = false;
|
|
160
194
|
renamedConversationId = null;
|
|
161
195
|
activeArtifactId = null;
|
|
162
196
|
activeVersionNumber = null;
|
|
@@ -188,16 +222,22 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
188
222
|
ARTIFACT_PANEL_WIDTH_KEY = 'mj-artifact-panel-width';
|
|
189
223
|
// Task filter for conversation-specific filtering
|
|
190
224
|
tasksFilter = '1=1';
|
|
191
|
-
constructor(conversationState, artifactState, collectionState, artifactPermissionService, notificationService, cdr) {
|
|
225
|
+
constructor(conversationState, artifactState, collectionState, artifactPermissionService, mentionAutocompleteService, notificationService, streamingService, cdr) {
|
|
192
226
|
super();
|
|
193
227
|
this.conversationState = conversationState;
|
|
194
228
|
this.artifactState = artifactState;
|
|
195
229
|
this.collectionState = collectionState;
|
|
196
230
|
this.artifactPermissionService = artifactPermissionService;
|
|
231
|
+
this.mentionAutocompleteService = mentionAutocompleteService;
|
|
197
232
|
this.notificationService = notificationService;
|
|
233
|
+
this.streamingService = streamingService;
|
|
198
234
|
this.cdr = cdr;
|
|
199
235
|
}
|
|
200
236
|
async ngOnInit() {
|
|
237
|
+
// Initialize global streaming service FIRST
|
|
238
|
+
// This establishes the single PubSub connection for all conversations
|
|
239
|
+
this.streamingService.initialize();
|
|
240
|
+
console.log('✅ Global streaming service initialized');
|
|
201
241
|
// Check initial mobile state
|
|
202
242
|
this.checkMobileView();
|
|
203
243
|
// Load saved widths from localStorage
|
|
@@ -209,14 +249,26 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
209
249
|
// Setup touch listeners for mobile
|
|
210
250
|
window.addEventListener('touchmove', this.onResizeTouchMove.bind(this));
|
|
211
251
|
window.addEventListener('touchend', this.onResizeTouchEnd.bind(this));
|
|
212
|
-
// Initialize AI Engine
|
|
213
|
-
//
|
|
252
|
+
// CRITICAL: Initialize AI Engine FIRST before rendering any UI
|
|
253
|
+
// The isWorkspaceReady flag blocks all child components from rendering
|
|
254
|
+
// until agents are fully loaded and ready
|
|
214
255
|
try {
|
|
215
256
|
await AIEngineBase.Instance.Config(false);
|
|
216
257
|
console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');
|
|
258
|
+
// Initialize mention autocomplete service immediately after AI engine
|
|
259
|
+
// This ensures the cache is built from the fully-loaded agent list
|
|
260
|
+
await this.mentionAutocompleteService.initialize(this.currentUser);
|
|
261
|
+
console.log('✅ Mention autocomplete initialized');
|
|
262
|
+
// Mark workspace as ready - this allows UI to render
|
|
263
|
+
this.isWorkspaceReady = true;
|
|
264
|
+
this.cdr.detectChanges();
|
|
265
|
+
console.log('✅ Workspace ready - UI can now render');
|
|
217
266
|
}
|
|
218
267
|
catch (error) {
|
|
219
268
|
console.error('❌ Failed to initialize AI Engine:', error);
|
|
269
|
+
// Still mark as ready so UI isn't blocked forever
|
|
270
|
+
this.isWorkspaceReady = true;
|
|
271
|
+
this.cdr.detectChanges();
|
|
220
272
|
}
|
|
221
273
|
// Subscribe to artifact panel state
|
|
222
274
|
this.artifactState.isPanelOpen$
|
|
@@ -408,6 +460,8 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
408
460
|
async onRefreshAgentCache() {
|
|
409
461
|
try {
|
|
410
462
|
await AIEngineBase.Instance.Config(true);
|
|
463
|
+
// Refresh the mention autocomplete service to pick up new agents
|
|
464
|
+
await this.mentionAutocompleteService.refresh(this.currentUser);
|
|
411
465
|
const agentCount = AIEngineBase.Instance.Agents?.length || 0;
|
|
412
466
|
this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);
|
|
413
467
|
this.cdr.detectChanges();
|
|
@@ -786,53 +840,41 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
786
840
|
await this.loadArtifactPermissions(this.activeArtifactId);
|
|
787
841
|
}
|
|
788
842
|
}
|
|
789
|
-
static ɵfac = function ConversationWorkspaceComponent_Factory(t) { return new (t || ConversationWorkspaceComponent)(i0.ɵɵdirectiveInject(i1.ConversationStateService), i0.ɵɵdirectiveInject(i2.ArtifactStateService), i0.ɵɵdirectiveInject(i3.CollectionStateService), i0.ɵɵdirectiveInject(i4.ArtifactPermissionService), i0.ɵɵdirectiveInject(i5.MJNotificationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
843
|
+
static ɵfac = function ConversationWorkspaceComponent_Factory(t) { return new (t || ConversationWorkspaceComponent)(i0.ɵɵdirectiveInject(i1.ConversationStateService), i0.ɵɵdirectiveInject(i2.ArtifactStateService), i0.ɵɵdirectiveInject(i3.CollectionStateService), i0.ɵɵdirectiveInject(i4.ArtifactPermissionService), i0.ɵɵdirectiveInject(i5.MentionAutocompleteService), i0.ɵɵdirectiveInject(i6.MJNotificationService), i0.ɵɵdirectiveInject(i7.ConversationStreamingService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
790
844
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationWorkspaceComponent, selectors: [["mj-conversation-workspace"]], hostBindings: function ConversationWorkspaceComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
791
845
|
i0.ɵɵlistener("resize", function ConversationWorkspaceComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, false, i0.ɵɵresolveWindow);
|
|
792
|
-
} }, inputs: { environmentId: "environmentId", initialConversationId: "initialConversationId", layout: "layout", currentUser: "currentUser", activeContext: "activeContext", contextItemId: "contextItemId", activeTabInput: "activeTabInput", activeConversationInput: "activeConversationInput", activeCollectionInput: "activeCollectionInput", activeVersionIdInput: "activeVersionIdInput", activeTaskInput: "activeTaskInput" }, outputs: { conversationChanged: "conversationChanged", artifactOpened: "artifactOpened", openEntityRecord: "openEntityRecord", navigationChanged: "navigationChanged", newConversationStarted: "newConversationStarted" }, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
846
|
+
} }, inputs: { environmentId: "environmentId", initialConversationId: "initialConversationId", layout: "layout", currentUser: "currentUser", activeContext: "activeContext", contextItemId: "contextItemId", activeTabInput: "activeTabInput", activeConversationInput: "activeConversationInput", activeCollectionInput: "activeCollectionInput", activeVersionIdInput: "activeVersionIdInput", activeTaskInput: "activeTaskInput" }, outputs: { conversationChanged: "conversationChanged", artifactOpened: "artifactOpened", openEntityRecord: "openEntityRecord", navigationChanged: "navigationChanged", newConversationStarted: "newConversationStarted" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 11, consts: [["mjSearchShortcut", "", "kendoDialogContainer", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId"], [1, "workspace-loading"], [1, "workspace-content"], [3, "close", "resultSelected", "isOpen", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], [1, "loading-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "mobile-sidebar-backdrop", "visible"], ["class", "workspace-sidebar", 3, "open", "width", 4, "ngIf"], ["class", "sidebar-resize-handle", 3, "mousedown", 4, "ngIf"], ["class", "workspace-main", 4, "ngIf"], [1, "mobile-sidebar-backdrop", "visible", 3, "click"], [1, "workspace-sidebar"], [3, "activeTab", "environmentId", "currentUser", "renamedConversationId"], [1, "sidebar-resize-handle", 3, "mousedown"], [1, "workspace-main"], [3, "collectionNavigated", "environmentId", "currentUser"], [3, "openEntityRecord", "environmentId", "currentUser", "baseFilter", "activeTaskId"], [3, "conversationRenamed", "openEntityRecord", "taskClicked", "artifactLinkClicked", "environmentId", "currentUser"], [1, "artifact-panel-resize-handle", 3, "mousedown"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
793
847
|
i0.ɵɵelementStart(0, "div", 0);
|
|
794
848
|
i0.ɵɵlistener("searchTriggered", function ConversationWorkspaceComponent_Template_div_searchTriggered_0_listener() { return ctx.openSearch(); });
|
|
795
849
|
i0.ɵɵelementStart(1, "div", 1)(2, "mj-conversation-navigation", 2);
|
|
796
850
|
i0.ɵɵlistener("tabChanged", function ConversationWorkspaceComponent_Template_mj_conversation_navigation_tabChanged_2_listener($event) { return ctx.onTabChanged($event); })("sidebarToggled", function ConversationWorkspaceComponent_Template_mj_conversation_navigation_sidebarToggled_2_listener() { return ctx.toggleSidebar(); })("searchTriggered", function ConversationWorkspaceComponent_Template_mj_conversation_navigation_searchTriggered_2_listener() { return ctx.openSearch(); })("refreshTriggered", function ConversationWorkspaceComponent_Template_mj_conversation_navigation_refreshTriggered_2_listener() { return ctx.onRefreshAgentCache(); });
|
|
797
851
|
i0.ɵɵelementEnd()();
|
|
798
|
-
i0.ɵɵ
|
|
799
|
-
i0.ɵɵ
|
|
800
|
-
i0.ɵɵ
|
|
801
|
-
i0.ɵɵelementStart(11, "mj-search-panel", 8);
|
|
802
|
-
i0.ɵɵlistener("close", function ConversationWorkspaceComponent_Template_mj_search_panel_close_11_listener() { return ctx.closeSearch(); })("resultSelected", function ConversationWorkspaceComponent_Template_mj_search_panel_resultSelected_11_listener($event) { return ctx.handleSearchResult($event); });
|
|
852
|
+
i0.ɵɵtemplate(3, ConversationWorkspaceComponent_Conditional_3_Template, 5, 0, "div", 3)(4, ConversationWorkspaceComponent_Conditional_4_Template, 8, 7, "div", 4);
|
|
853
|
+
i0.ɵɵelementStart(5, "mj-search-panel", 5);
|
|
854
|
+
i0.ɵɵlistener("close", function ConversationWorkspaceComponent_Template_mj_search_panel_close_5_listener() { return ctx.closeSearch(); })("resultSelected", function ConversationWorkspaceComponent_Template_mj_search_panel_resultSelected_5_listener($event) { return ctx.handleSearchResult($event); });
|
|
803
855
|
i0.ɵɵelementEnd();
|
|
804
|
-
i0.ɵɵelement(
|
|
805
|
-
i0.ɵɵelementStart(
|
|
806
|
-
i0.ɵɵlistener("saved", function
|
|
856
|
+
i0.ɵɵelement(6, "mj-toast");
|
|
857
|
+
i0.ɵɵelementStart(7, "mj-artifact-share-modal", 6);
|
|
858
|
+
i0.ɵɵlistener("saved", function ConversationWorkspaceComponent_Template_mj_artifact_share_modal_saved_7_listener() { return ctx.onArtifactShared(); })("cancelled", function ConversationWorkspaceComponent_Template_mj_artifact_share_modal_cancelled_7_listener() { return ctx.onArtifactShareModalClose(); });
|
|
807
859
|
i0.ɵɵelementEnd()();
|
|
808
860
|
} if (rf & 2) {
|
|
809
861
|
i0.ɵɵattribute("data-layout", ctx.layout);
|
|
810
862
|
i0.ɵɵadvance(2);
|
|
811
863
|
i0.ɵɵproperty("activeTab", ctx.activeTab)("environmentId", ctx.environmentId);
|
|
812
|
-
i0.ɵɵadvance(2);
|
|
813
|
-
i0.ɵɵconditional(ctx.isMobileView && ctx.isSidebarVisible && ctx.activeTab !== "collections" && ctx.activeTab !== "tasks" ? 4 : -1);
|
|
814
|
-
i0.ɵɵadvance();
|
|
815
|
-
i0.ɵɵproperty("ngIf", ctx.activeTab !== "collections" && ctx.activeTab !== "tasks");
|
|
816
|
-
i0.ɵɵadvance();
|
|
817
|
-
i0.ɵɵproperty("ngIf", ctx.isSidebarVisible && ctx.activeTab !== "collections" && ctx.activeTab !== "tasks");
|
|
818
|
-
i0.ɵɵadvance();
|
|
819
|
-
i0.ɵɵproperty("ngIf", ctx.activeTab === "collections");
|
|
820
|
-
i0.ɵɵadvance();
|
|
821
|
-
i0.ɵɵproperty("ngIf", ctx.activeTab === "tasks");
|
|
822
864
|
i0.ɵɵadvance();
|
|
823
|
-
i0.ɵɵ
|
|
865
|
+
i0.ɵɵconditional(!ctx.isWorkspaceReady ? 3 : -1);
|
|
824
866
|
i0.ɵɵadvance();
|
|
825
|
-
i0.ɵɵconditional(ctx.
|
|
867
|
+
i0.ɵɵconditional(ctx.isWorkspaceReady ? 4 : -1);
|
|
826
868
|
i0.ɵɵadvance();
|
|
827
869
|
i0.ɵɵproperty("isOpen", ctx.isSearchPanelOpen)("environmentId", ctx.environmentId)("currentUser", ctx.currentUser);
|
|
828
870
|
i0.ɵɵadvance(2);
|
|
829
871
|
i0.ɵɵproperty("isOpen", ctx.isArtifactShareModalOpen)("artifact", ctx.artifactToShare)("currentUser", ctx.currentUser);
|
|
830
|
-
} }, dependencies: [
|
|
872
|
+
} }, dependencies: [i8.NgIf, i9.DialogContainerDirective, i10.ArtifactViewerPanelComponent, i11.TasksFullViewComponent, i12.ArtifactShareModalComponent, i13.ConversationNavigationComponent, i14.ConversationSidebarComponent, i15.ConversationChatAreaComponent, i16.CollectionsFullViewComponent, i17.SearchPanelComponent, i18.ToastComponent, i19.SearchShortcutDirective], styles: [".conversation-workspace[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: calc(100vh - 123px); \n\n background-color: #F4F4F4;\n position: relative;\n}\n\n.workspace-navigation[_ngcontent-%COMP%] {\n flex-shrink: 0;\n height: 48px;\n background-color: #092340;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.workspace-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-sidebar[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background-color: #092340;\n border-right: 1px solid #D9D9D9;\n overflow-y: auto;\n}\n\n.sidebar-resize-handle[_ngcontent-%COMP%] {\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[_ngcontent-%COMP%]:hover {\n background: #1e40af;\n}\n\n.sidebar-resize-handle[_ngcontent-%COMP%]:active {\n background: #1e3a8a;\n}\n\n.sidebar-resize-handle[_ngcontent-%COMP%]::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.workspace-main[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: #FFF;\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-main[_ngcontent-%COMP%] > mj-conversation-chat-area[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.workspace-artifact-panel[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background-color: #FFF;\n overflow: hidden;\n min-width: 300px;\n max-width: 70%;\n}\n\n.artifact-panel-resize-handle[_ngcontent-%COMP%] {\n width: 4px;\n background-color: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n transition: background-color 0.2s;\n position: relative;\n z-index: 10;\n}\n\n\n\n.artifact-panel-resize-handle[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n cursor: ew-resize;\n}\n\n.artifact-panel-resize-handle[_ngcontent-%COMP%]:hover {\n background-color: #1e40af;\n}\n\n.artifact-panel-resize-handle[_ngcontent-%COMP%]:active {\n background-color: #1e3a8a;\n}\n\n\n\n.conversation-workspace[data-layout=\"compact\"][_ngcontent-%COMP%] .workspace-sidebar[_ngcontent-%COMP%] {\n width: 240px;\n}\n\n.conversation-workspace[data-layout=\"compact\"][_ngcontent-%COMP%] .workspace-artifact-panel[_ngcontent-%COMP%] {\n width: 400px;\n}\n\n\n\n.conversation-workspace[data-layout=\"embedded\"][_ngcontent-%COMP%] {\n height: 100%;\n}\n\n.conversation-workspace[data-layout=\"embedded\"][_ngcontent-%COMP%] .workspace-navigation[_ngcontent-%COMP%] {\n height: 48px;\n}\n\n\n\n@media (max-width: 1024px) {\n .workspace-sidebar[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);\n }\n\n .workspace-artifact-panel[_ngcontent-%COMP%] {\n position: fixed;\n right: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1);\n }\n}\n\n\n\n@media (min-width: 769px) {\n .workspace-sidebar[_ngcontent-%COMP%] {\n transition: width 0.3s ease, min-width 0.3s ease;\n overflow: hidden;\n }\n\n .workspace-sidebar[_ngcontent-%COMP%]:not(.open) {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n }\n\n .sidebar-resize-handle[_ngcontent-%COMP%] {\n transition: opacity 0.3s ease, width 0.3s ease;\n }\n\n .workspace-sidebar[_ngcontent-%COMP%]:not(.open) ~ .sidebar-resize-handle[_ngcontent-%COMP%] {\n opacity: 0;\n width: 0;\n pointer-events: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .workspace-sidebar[_ngcontent-%COMP%] {\n position: fixed;\n left: 0;\n top: 80px;\n z-index: 1000;\n width: 260px !important;\n height: calc(100vh - 80px);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .workspace-sidebar.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n }\n\n .workspace-artifact-panel[_ngcontent-%COMP%] {\n position: fixed;\n width: 100%;\n left: 0;\n right: 0;\n top: 48px;\n z-index: 1000;\n max-width: 100%;\n }\n\n .sidebar-resize-handle[_ngcontent-%COMP%], \n .artifact-panel-resize-handle[_ngcontent-%COMP%] {\n display: none;\n }\n\n \n\n .mobile-sidebar-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n z-index: 999;\n }\n\n .mobile-sidebar-backdrop.visible[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n }\n}\n\n\n\n@media (max-width: 480px) {\n .workspace-navigation[_ngcontent-%COMP%] {\n height: 48px;\n }\n\n .workspace-sidebar[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n\n\n.workspace-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n background: #FFF;\n gap: 1rem;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n font-size: 3rem;\n color: #0078d4;\n}\n\n.workspace-loading[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #666;\n margin: 0;\n}"] });
|
|
831
873
|
}
|
|
832
874
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationWorkspaceComponent, [{
|
|
833
875
|
type: Component,
|
|
834
|
-
args: [{ selector: 'mj-conversation-workspace', template: "<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\" kendoDialogContainer>\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <div class=\"workspace-
|
|
835
|
-
}], () => [{ type: i1.ConversationStateService }, { type: i2.ArtifactStateService }, { type: i3.CollectionStateService }, { type: i4.ArtifactPermissionService }, { type: i5.MJNotificationService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
|
|
876
|
+
args: [{ selector: 'mj-conversation-workspace', template: "<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\" kendoDialogContainer>\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <!-- Loading spinner while initializing agents -->\n @if (!isWorkspaceReady) {\n <div class=\"workspace-loading\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n <p>Loading agents...</p>\n </div>\n }\n\n <!-- Main workspace content - only renders when agents are ready -->\n @if (isWorkspaceReady) {\n <div class=\"workspace-content\">\n <!-- Mobile sidebar backdrop -->\n @if (isMobileView && isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"mobile-sidebar-backdrop visible\" (click)=\"closeSidebar()\"></div>\n }\n\n <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n <div class=\"workspace-sidebar\"\n *ngIf=\"activeTab !== 'collections' && activeTab !== 'tasks'\"\n [class.open]=\"isSidebarVisible\"\n [style.width.px]=\"sidebarWidth\">\n <mj-conversation-sidebar\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [renamedConversationId]=\"renamedConversationId\">\n </mj-conversation-sidebar>\n </div>\n\n <!-- Resize handle for sidebar -->\n <div class=\"sidebar-resize-handle\" *ngIf=\"isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks'\" (mousedown)=\"onSidebarResizeStart($event)\"></div>\n\n <!-- Collections Full-Panel View -->\n <div class=\"workspace-main\" *ngIf=\"activeTab === 'collections'\">\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (collectionNavigated)=\"onCollectionNavigated($event)\">\n </mj-collections-full-view>\n </div>\n\n <!-- Tasks Full-Panel View -->\n <div class=\"workspace-main\" *ngIf=\"activeTab === 'tasks'\">\n <mj-tasks-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [baseFilter]=\"tasksFilter\"\n [activeTaskId]=\"activeTaskId\"\n (openEntityRecord)=\"onOpenEntityRecordFromTasks($event)\">\n </mj-tasks-full-view>\n </div>\n\n <!-- Main Chat Area (only shown when not in Collections or Tasks view) -->\n <div class=\"workspace-main\" *ngIf=\"activeTab !== 'collections' && activeTab !== 'tasks'\">\n <mj-conversation-chat-area\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (taskClicked)=\"onTaskClicked($event)\"\n (artifactLinkClicked)=\"onArtifactLinkNavigation($event)\">\n </mj-conversation-chat-area>\n </div>\n\n <!-- Right Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n <div class=\"artifact-panel-resize-handle\" (mousedown)=\"onArtifactPanelResizeStart($event)\"></div>\n <div class=\"workspace-artifact-panel\" [style.width.%]=\"artifactPanelWidth\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"activeTab !== 'collections'\"\n [viewContext]=\"activeTab === 'collections' ? 'collection' : 'conversation'\"\n [contextCollectionId]=\"collectionState.activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n (closed)=\"closeArtifactPanel()\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n }\n\n <!-- Global Search Panel -->\n <mj-search-panel\n [isOpen]=\"isSearchPanelOpen\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (close)=\"closeSearch()\"\n (resultSelected)=\"handleSearchResult($event)\">\n </mj-search-panel>\n\n <!-- Toast Notifications -->\n <mj-toast></mj-toast>\n\n <!-- Artifact Share Modal -->\n <mj-artifact-share-modal\n [isOpen]=\"isArtifactShareModalOpen\"\n [artifact]=\"artifactToShare\"\n [currentUser]=\"currentUser\"\n (saved)=\"onArtifactShared()\"\n (cancelled)=\"onArtifactShareModalClose()\">\n </mj-artifact-share-modal>\n</div>", styles: [".conversation-workspace {\n display: flex;\n flex-direction: column;\n height: calc(100vh - 123px); /* Account for parent app header (~60px) */\n background-color: #F4F4F4;\n position: relative;\n}\n\n.workspace-navigation {\n flex-shrink: 0;\n height: 48px;\n background-color: #092340;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.workspace-content {\n flex: 1;\n display: flex;\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-sidebar {\n flex-shrink: 0;\n background-color: #092340;\n border-right: 1px solid #D9D9D9;\n overflow-y: auto;\n}\n\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: #1e40af;\n}\n\n.sidebar-resize-handle:active {\n background: #1e3a8a;\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.workspace-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: #FFF;\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-main > mj-conversation-chat-area {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.workspace-artifact-panel {\n flex-shrink: 0;\n background-color: #FFF;\n overflow: hidden;\n min-width: 300px;\n max-width: 70%;\n}\n\n.artifact-panel-resize-handle {\n width: 4px;\n background-color: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n transition: background-color 0.2s;\n position: relative;\n z-index: 10;\n}\n\n/* Wider hit area for easier grabbing */\n.artifact-panel-resize-handle::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n cursor: ew-resize;\n}\n\n.artifact-panel-resize-handle:hover {\n background-color: #1e40af;\n}\n\n.artifact-panel-resize-handle:active {\n background-color: #1e3a8a;\n}\n\n/* Compact layout */\n.conversation-workspace[data-layout=\"compact\"] .workspace-sidebar {\n width: 240px;\n}\n\n.conversation-workspace[data-layout=\"compact\"] .workspace-artifact-panel {\n width: 400px;\n}\n\n/* Embedded layout */\n.conversation-workspace[data-layout=\"embedded\"] {\n height: 100%;\n}\n\n.conversation-workspace[data-layout=\"embedded\"] .workspace-navigation {\n height: 48px;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .workspace-sidebar {\n position: absolute;\n left: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n right: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1);\n }\n}\n\n/* Desktop sidebar toggle animation */\n@media (min-width: 769px) {\n .workspace-sidebar {\n transition: width 0.3s ease, min-width 0.3s ease;\n overflow: hidden;\n }\n\n .workspace-sidebar:not(.open) {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n }\n\n .sidebar-resize-handle {\n transition: opacity 0.3s ease, width 0.3s ease;\n }\n\n .workspace-sidebar:not(.open) ~ .sidebar-resize-handle {\n opacity: 0;\n width: 0;\n pointer-events: none;\n }\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .workspace-sidebar {\n position: fixed;\n left: 0;\n top: 80px;\n z-index: 1000;\n width: 260px !important;\n height: calc(100vh - 80px);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .workspace-sidebar.open {\n transform: translateX(0);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n width: 100%;\n left: 0;\n right: 0;\n top: 48px;\n z-index: 1000;\n max-width: 100%;\n }\n\n .sidebar-resize-handle,\n .artifact-panel-resize-handle {\n display: none;\n }\n\n /* Mobile sidebar backdrop */\n .mobile-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n z-index: 999;\n }\n\n .mobile-sidebar-backdrop.visible {\n opacity: 1;\n pointer-events: auto;\n }\n}\n\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .workspace-navigation {\n height: 48px;\n }\n\n .workspace-sidebar {\n width: 100%;\n }\n}\n\n/* Loading spinner (shown while initializing agents) */\n.workspace-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n background: #FFF;\n gap: 1rem;\n}\n\n.loading-spinner {\n font-size: 3rem;\n color: #0078d4;\n}\n\n.workspace-loading p {\n font-size: 1rem;\n color: #666;\n margin: 0;\n}"] }]
|
|
877
|
+
}], () => [{ type: i1.ConversationStateService }, { type: i2.ArtifactStateService }, { type: i3.CollectionStateService }, { type: i4.ArtifactPermissionService }, { type: i5.MentionAutocompleteService }, { type: i6.MJNotificationService }, { type: i7.ConversationStreamingService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
|
|
836
878
|
type: Input
|
|
837
879
|
}], initialConversationId: [{
|
|
838
880
|
type: Input
|
|
@@ -868,5 +910,5 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
|
|
|
868
910
|
type: HostListener,
|
|
869
911
|
args: ['window:resize']
|
|
870
912
|
}] }); })();
|
|
871
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationWorkspaceComponent, { className: "ConversationWorkspaceComponent", filePath: "src/lib/components/workspace/conversation-workspace.component.ts", lineNumber:
|
|
913
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationWorkspaceComponent, { className: "ConversationWorkspaceComponent", filePath: "src/lib/components/workspace/conversation-workspace.component.ts", lineNumber: 37 }); })();
|
|
872
914
|
//# sourceMappingURL=conversation-workspace.component.js.map
|