@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.
Files changed (52) hide show
  1. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +12 -0
  2. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  3. package/dist/lib/components/conversation/conversation-chat-area.component.js +149 -11
  4. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -3
  6. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  7. package/dist/lib/components/conversation/conversation-list.component.js +398 -197
  8. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  9. package/dist/lib/components/mention/mention-dropdown.component.js +31 -23
  10. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  11. package/dist/lib/components/mention/mention-editor.component.d.ts +117 -0
  12. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -0
  13. package/dist/lib/components/mention/mention-editor.component.js +550 -0
  14. package/dist/lib/components/mention/mention-editor.component.js.map +1 -0
  15. package/dist/lib/components/message/message-input-box.component.d.ts +22 -33
  16. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  17. package/dist/lib/components/message/message-input-box.component.js +71 -172
  18. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  19. package/dist/lib/components/message/message-input.component.d.ts +18 -15
  20. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  21. package/dist/lib/components/message/message-input.component.js +108 -93
  22. package/dist/lib/components/message/message-input.component.js.map +1 -1
  23. package/dist/lib/components/message/message-item.component.d.ts +1 -0
  24. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  25. package/dist/lib/components/message/message-item.component.js +49 -7
  26. package/dist/lib/components/message/message-item.component.js.map +1 -1
  27. package/dist/lib/components/navigation/conversation-navigation.component.js +2 -2
  28. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +6 -1
  29. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  30. package/dist/lib/components/workspace/conversation-workspace.component.js +115 -73
  31. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  32. package/dist/lib/conversations.module.d.ts +55 -54
  33. package/dist/lib/conversations.module.d.ts.map +1 -1
  34. package/dist/lib/conversations.module.js +4 -0
  35. package/dist/lib/conversations.module.js.map +1 -1
  36. package/dist/lib/services/conversation-state.service.d.ts +14 -0
  37. package/dist/lib/services/conversation-state.service.d.ts.map +1 -1
  38. package/dist/lib/services/conversation-state.service.js +32 -0
  39. package/dist/lib/services/conversation-state.service.js.map +1 -1
  40. package/dist/lib/services/conversation-streaming.service.d.ts +101 -0
  41. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -0
  42. package/dist/lib/services/conversation-streaming.service.js +319 -0
  43. package/dist/lib/services/conversation-streaming.service.js.map +1 -0
  44. package/dist/lib/services/mention-autocomplete.service.d.ts +8 -0
  45. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  46. package/dist/lib/services/mention-autocomplete.service.js +34 -3
  47. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  48. package/dist/public-api.d.ts +2 -0
  49. package/dist/public-api.d.ts.map +1 -1
  50. package/dist/public-api.js +2 -0
  51. package/dist/public-api.js.map +1 -1
  52. 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: none;\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 }"] });
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: none;\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 "] }]
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":"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"}
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 "@memberjunction/ng-notifications";
12
- import * as i6 from "@angular/common";
13
- import * as i7 from "@progress/kendo-angular-dialog";
14
- import * as i8 from "@memberjunction/ng-artifacts";
15
- import * as i9 from "../task/tasks-full-view.component";
16
- import * as i10 from "../artifact/artifact-share-modal.component";
17
- import * as i11 from "../navigation/conversation-navigation.component";
18
- import * as i12 from "../sidebar/conversation-sidebar.component";
19
- import * as i13 from "../conversation/conversation-chat-area.component";
20
- import * as i14 from "../collection/collections-full-view.component";
21
- import * as i15 from "../search/search-panel.component";
22
- import * as i16 from "../toast/toast.component";
23
- import * as i17 from "../../directives/search-shortcut.directive";
24
- function ConversationWorkspaceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
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", 10);
27
- i0.ɵɵlistener("click", function ConversationWorkspaceComponent_Conditional_4_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeSidebar()); });
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 ConversationWorkspaceComponent_div_5_Template(rf, ctx) { if (rf & 1) {
31
- i0.ɵɵelementStart(0, "div", 11);
32
- i0.ɵɵelement(1, "mj-conversation-sidebar", 12);
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 ConversationWorkspaceComponent_div_6_Template(rf, ctx) { if (rf & 1) {
51
+ function ConversationWorkspaceComponent_Conditional_4_div_3_Template(rf, ctx) { if (rf & 1) {
42
52
  const _r3 = i0.ɵɵgetCurrentView();
43
- i0.ɵɵelementStart(0, "div", 13);
44
- i0.ɵɵlistener("mousedown", function ConversationWorkspaceComponent_div_6_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSidebarResizeStart($event)); });
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 ConversationWorkspaceComponent_div_7_Template(rf, ctx) { if (rf & 1) {
57
+ function ConversationWorkspaceComponent_Conditional_4_div_4_Template(rf, ctx) { if (rf & 1) {
48
58
  const _r4 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "div", 14)(1, "mj-collections-full-view", 15);
50
- i0.ɵɵlistener("collectionNavigated", function ConversationWorkspaceComponent_div_7_Template_mj_collections_full_view_collectionNavigated_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCollectionNavigated($event)); });
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 ConversationWorkspaceComponent_div_8_Template(rf, ctx) { if (rf & 1) {
67
+ function ConversationWorkspaceComponent_Conditional_4_div_5_Template(rf, ctx) { if (rf & 1) {
58
68
  const _r5 = i0.ɵɵgetCurrentView();
59
- i0.ɵɵelementStart(0, "div", 14)(1, "mj-tasks-full-view", 16);
60
- i0.ɵɵlistener("openEntityRecord", function ConversationWorkspaceComponent_div_8_Template_mj_tasks_full_view_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecordFromTasks($event)); });
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 ConversationWorkspaceComponent_div_9_Template(rf, ctx) { if (rf & 1) {
77
+ function ConversationWorkspaceComponent_Conditional_4_div_6_Template(rf, ctx) { if (rf & 1) {
68
78
  const _r6 = i0.ɵɵgetCurrentView();
69
- i0.ɵɵelementStart(0, "div", 14)(1, "mj-conversation-chat-area", 17);
70
- i0.ɵɵlistener("conversationRenamed", function ConversationWorkspaceComponent_div_9_Template_mj_conversation_chat_area_conversationRenamed_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("openEntityRecord", function ConversationWorkspaceComponent_div_9_Template_mj_conversation_chat_area_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("taskClicked", function ConversationWorkspaceComponent_div_9_Template_mj_conversation_chat_area_taskClicked_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTaskClicked($event)); })("artifactLinkClicked", function ConversationWorkspaceComponent_div_9_Template_mj_conversation_chat_area_artifactLinkClicked_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); });
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 ConversationWorkspaceComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
87
+ function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
78
88
  const _r7 = i0.ɵɵgetCurrentView();
79
- i0.ɵɵelementStart(0, "div", 18);
80
- i0.ɵɵlistener("mousedown", function ConversationWorkspaceComponent_Conditional_10_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactPanelResizeStart($event)); });
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", 19)(2, "mj-artifact-viewer-panel", 20);
83
- i0.ɵɵlistener("closed", function ConversationWorkspaceComponent_Conditional_10_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeArtifactPanel()); })("navigateToLink", function ConversationWorkspaceComponent_Conditional_10_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationWorkspaceComponent_Conditional_10_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactShareRequested($event)); });
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 tmp_5_0;
87
- let tmp_8_0;
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", (tmp_5_0 = ctx_r1.activeVersionNumber) !== null && tmp_5_0 !== undefined ? tmp_5_0 : undefined)("showSaveToCollection", ctx_r1.activeTab !== "collections")("viewContext", ctx_r1.activeTab === "collections" ? "collection" : "conversation")("contextCollectionId", (tmp_8_0 = ctx_r1.collectionState.activeCollectionId) !== null && tmp_8_0 !== undefined ? tmp_8_0 : undefined)("canShare", ctx_r1.canShareActiveArtifact)("canEdit", ctx_r1.canEditActiveArtifact);
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 to load agent metadata cache
213
- // This ensures agent names and icons are available for display
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: 14, vars: 16, consts: [["mjSearchShortcut", "", "kendoDialogContainer", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId"], [1, "workspace-content"], [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"], [3, "close", "resultSelected", "isOpen", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], [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) {
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.ɵɵelementStart(3, "div", 3);
799
- i0.ɵɵtemplate(4, ConversationWorkspaceComponent_Conditional_4_Template, 1, 0, "div", 4)(5, ConversationWorkspaceComponent_div_5_Template, 2, 8, "div", 5)(6, ConversationWorkspaceComponent_div_6_Template, 1, 0, "div", 6)(7, ConversationWorkspaceComponent_div_7_Template, 2, 2, "div", 7)(8, ConversationWorkspaceComponent_div_8_Template, 2, 4, "div", 7)(9, ConversationWorkspaceComponent_div_9_Template, 2, 2, "div", 7)(10, ConversationWorkspaceComponent_Conditional_10_Template, 3, 11);
800
- i0.ɵɵelementEnd();
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(12, "mj-toast");
805
- i0.ɵɵelementStart(13, "mj-artifact-share-modal", 9);
806
- i0.ɵɵlistener("saved", function ConversationWorkspaceComponent_Template_mj_artifact_share_modal_saved_13_listener() { return ctx.onArtifactShared(); })("cancelled", function ConversationWorkspaceComponent_Template_mj_artifact_share_modal_cancelled_13_listener() { return ctx.onArtifactShareModalClose(); });
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.ɵɵproperty("ngIf", ctx.activeTab !== "collections" && ctx.activeTab !== "tasks");
865
+ i0.ɵɵconditional(!ctx.isWorkspaceReady ? 3 : -1);
824
866
  i0.ɵɵadvance();
825
- i0.ɵɵconditional(ctx.isArtifactPanelOpen && ctx.activeArtifactId ? 10 : -1);
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: [i6.NgIf, i7.DialogContainerDirective, i8.ArtifactViewerPanelComponent, i9.TasksFullViewComponent, i10.ArtifactShareModalComponent, i11.ConversationNavigationComponent, i12.ConversationSidebarComponent, i13.ConversationChatAreaComponent, i14.CollectionsFullViewComponent, i15.SearchPanelComponent, i16.ToastComponent, i17.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 (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}"] });
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-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 <!-- 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/* 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}"] }]
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: 35 }); })();
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