@memberjunction/ng-conversations 2.113.2 → 2.115.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 (47) hide show
  1. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +7 -1
  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 +90 -33
  4. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-empty-state.component.js +2 -2
  6. package/dist/lib/components/conversation/conversation-list.component.js +1 -1
  7. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  8. package/dist/lib/components/mention/mention-dropdown.component.js +31 -23
  9. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  10. package/dist/lib/components/mention/mention-editor.component.d.ts +117 -0
  11. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -0
  12. package/dist/lib/components/mention/mention-editor.component.js +550 -0
  13. package/dist/lib/components/mention/mention-editor.component.js.map +1 -0
  14. package/dist/lib/components/message/message-input-box.component.d.ts +19 -34
  15. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  16. package/dist/lib/components/message/message-input-box.component.js +66 -176
  17. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  18. package/dist/lib/components/message/message-input.component.d.ts +7 -1
  19. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  20. package/dist/lib/components/message/message-input.component.js +124 -36
  21. package/dist/lib/components/message/message-input.component.js.map +1 -1
  22. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  23. package/dist/lib/components/message/message-item.component.js +41 -3
  24. package/dist/lib/components/message/message-item.component.js.map +1 -1
  25. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  26. package/dist/lib/components/navigation/conversation-navigation.component.js +3 -3
  27. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  28. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  29. package/dist/lib/components/tasks/tasks-dropdown.component.js +3 -3
  30. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  31. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +15 -1
  32. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  33. package/dist/lib/components/workspace/conversation-workspace.component.js +203 -80
  34. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  35. package/dist/lib/conversations.module.d.ts +55 -54
  36. package/dist/lib/conversations.module.d.ts.map +1 -1
  37. package/dist/lib/conversations.module.js +4 -0
  38. package/dist/lib/conversations.module.js.map +1 -1
  39. package/dist/lib/services/mention-autocomplete.service.d.ts +8 -0
  40. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  41. package/dist/lib/services/mention-autocomplete.service.js +34 -3
  42. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  43. package/dist/public-api.d.ts +1 -0
  44. package/dist/public-api.d.ts.map +1 -1
  45. package/dist/public-api.js +1 -0
  46. package/dist/public-api.js.map +1 -1
  47. package/package.json +14 -14
@@ -1,4 +1,4 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
2
  import { CompositeKey, KeyValuePair, Metadata } from '@memberjunction/core';
3
3
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
4
4
  import { Subject, takeUntil } from 'rxjs';
@@ -8,81 +8,118 @@ 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_div_4_Template(rf, ctx) { if (rf & 1) {
25
- i0.ɵɵelementStart(0, "div", 9);
26
- i0.ɵɵelement(1, "mj-conversation-sidebar", 10);
11
+ import * as i5 from "../../services/mention-autocomplete.service";
12
+ import * as i6 from "@memberjunction/ng-notifications";
13
+ import * as i7 from "@angular/common";
14
+ import * as i8 from "@progress/kendo-angular-dialog";
15
+ import * as i9 from "@memberjunction/ng-artifacts";
16
+ import * as i10 from "../task/tasks-full-view.component";
17
+ import * as i11 from "../artifact/artifact-share-modal.component";
18
+ import * as i12 from "../navigation/conversation-navigation.component";
19
+ import * as i13 from "../sidebar/conversation-sidebar.component";
20
+ import * as i14 from "../conversation/conversation-chat-area.component";
21
+ import * as i15 from "../collection/collections-full-view.component";
22
+ import * as i16 from "../search/search-panel.component";
23
+ import * as i17 from "../toast/toast.component";
24
+ import * as i18 from "../../directives/search-shortcut.directive";
25
+ function ConversationWorkspaceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "div", 3)(1, "div", 7);
27
+ i0.ɵɵelement(2, "i", 8);
27
28
  i0.ɵɵelementEnd();
28
- } if (rf & 2) {
29
- const ctx_r0 = i0.ɵɵnextContext();
30
- i0.ɵɵstyleProp("width", ctx_r0.sidebarWidth, "px");
31
- i0.ɵɵadvance();
32
- i0.ɵɵproperty("activeTab", ctx_r0.activeTab)("environmentId", ctx_r0.environmentId)("currentUser", ctx_r0.currentUser)("renamedConversationId", ctx_r0.renamedConversationId);
29
+ i0.ɵɵelementStart(3, "p");
30
+ i0.ɵɵtext(4, "Loading agents...");
31
+ i0.ɵɵelementEnd()();
33
32
  } }
34
- function ConversationWorkspaceComponent_div_5_Template(rf, ctx) { if (rf & 1) {
35
- const _r2 = i0.ɵɵgetCurrentView();
36
- i0.ɵɵelementStart(0, "div", 11);
37
- i0.ɵɵlistener("mousedown", function ConversationWorkspaceComponent_div_5_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onSidebarResizeStart($event)); });
33
+ function ConversationWorkspaceComponent_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
34
+ const _r1 = i0.ɵɵgetCurrentView();
35
+ i0.ɵɵelementStart(0, "div", 13);
36
+ 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()); });
38
37
  i0.ɵɵelementEnd();
39
38
  } }
40
- function ConversationWorkspaceComponent_div_6_Template(rf, ctx) { if (rf & 1) {
41
- const _r3 = i0.ɵɵgetCurrentView();
42
- i0.ɵɵelementStart(0, "div", 12)(1, "mj-collections-full-view", 13);
43
- i0.ɵɵlistener("collectionNavigated", function ConversationWorkspaceComponent_div_6_Template_mj_collections_full_view_collectionNavigated_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onCollectionNavigated($event)); });
44
- i0.ɵɵelementEnd()();
39
+ function ConversationWorkspaceComponent_Conditional_4_div_2_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "div", 14);
41
+ i0.ɵɵelement(1, "mj-conversation-sidebar", 15);
42
+ i0.ɵɵelementEnd();
45
43
  } if (rf & 2) {
46
- const ctx_r0 = i0.ɵɵnextContext();
44
+ const ctx_r1 = i0.ɵɵnextContext(2);
45
+ i0.ɵɵstyleProp("width", ctx_r1.sidebarWidth, "px");
46
+ i0.ɵɵclassProp("open", ctx_r1.isSidebarVisible);
47
47
  i0.ɵɵadvance();
48
- i0.ɵɵproperty("environmentId", ctx_r0.environmentId)("currentUser", ctx_r0.currentUser);
48
+ i0.ɵɵproperty("activeTab", ctx_r1.activeTab)("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("renamedConversationId", ctx_r1.renamedConversationId);
49
+ } }
50
+ function ConversationWorkspaceComponent_Conditional_4_div_3_Template(rf, ctx) { if (rf & 1) {
51
+ const _r3 = i0.ɵɵgetCurrentView();
52
+ i0.ɵɵelementStart(0, "div", 16);
53
+ 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)); });
54
+ i0.ɵɵelementEnd();
49
55
  } }
50
- function ConversationWorkspaceComponent_div_7_Template(rf, ctx) { if (rf & 1) {
56
+ function ConversationWorkspaceComponent_Conditional_4_div_4_Template(rf, ctx) { if (rf & 1) {
51
57
  const _r4 = i0.ɵɵgetCurrentView();
52
- i0.ɵɵelementStart(0, "div", 12)(1, "mj-tasks-full-view", 14);
53
- i0.ɵɵlistener("openEntityRecord", function ConversationWorkspaceComponent_div_7_Template_mj_tasks_full_view_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onOpenEntityRecordFromTasks($event)); });
58
+ i0.ɵɵelementStart(0, "div", 17)(1, "mj-collections-full-view", 18);
59
+ 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)); });
54
60
  i0.ɵɵelementEnd()();
55
61
  } if (rf & 2) {
56
- const ctx_r0 = i0.ɵɵnextContext();
62
+ const ctx_r1 = i0.ɵɵnextContext(2);
57
63
  i0.ɵɵadvance();
58
- i0.ɵɵproperty("environmentId", ctx_r0.environmentId)("currentUser", ctx_r0.currentUser)("baseFilter", ctx_r0.tasksFilter)("activeTaskId", ctx_r0.activeTaskId);
64
+ i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser);
59
65
  } }
60
- function ConversationWorkspaceComponent_div_8_Template(rf, ctx) { if (rf & 1) {
66
+ function ConversationWorkspaceComponent_Conditional_4_div_5_Template(rf, ctx) { if (rf & 1) {
61
67
  const _r5 = i0.ɵɵgetCurrentView();
62
- i0.ɵɵelementStart(0, "div", 12)(1, "mj-conversation-chat-area", 15);
63
- i0.ɵɵlistener("conversationRenamed", function ConversationWorkspaceComponent_div_8_Template_mj_conversation_chat_area_conversationRenamed_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onConversationRenamed($event)); })("openEntityRecord", function ConversationWorkspaceComponent_div_8_Template_mj_conversation_chat_area_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onOpenEntityRecord($event)); })("taskClicked", function ConversationWorkspaceComponent_div_8_Template_mj_conversation_chat_area_taskClicked_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onTaskClicked($event)); })("artifactLinkClicked", function ConversationWorkspaceComponent_div_8_Template_mj_conversation_chat_area_artifactLinkClicked_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onArtifactLinkNavigation($event)); });
68
+ i0.ɵɵelementStart(0, "div", 17)(1, "mj-tasks-full-view", 19);
69
+ 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)); });
64
70
  i0.ɵɵelementEnd()();
65
71
  } if (rf & 2) {
66
- const ctx_r0 = i0.ɵɵnextContext();
72
+ const ctx_r1 = i0.ɵɵnextContext(2);
67
73
  i0.ɵɵadvance();
68
- i0.ɵɵproperty("environmentId", ctx_r0.environmentId)("currentUser", ctx_r0.currentUser);
74
+ i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("baseFilter", ctx_r1.tasksFilter)("activeTaskId", ctx_r1.activeTaskId);
69
75
  } }
70
- function ConversationWorkspaceComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
76
+ function ConversationWorkspaceComponent_Conditional_4_div_6_Template(rf, ctx) { if (rf & 1) {
71
77
  const _r6 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "div", 16);
73
- i0.ɵɵlistener("mousedown", function ConversationWorkspaceComponent_Conditional_9_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onArtifactPanelResizeStart($event)); });
78
+ i0.ɵɵelementStart(0, "div", 17)(1, "mj-conversation-chat-area", 20);
79
+ 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)); });
80
+ i0.ɵɵelementEnd()();
81
+ } if (rf & 2) {
82
+ const ctx_r1 = i0.ɵɵnextContext(2);
83
+ i0.ɵɵadvance();
84
+ i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser);
85
+ } }
86
+ function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
87
+ const _r7 = i0.ɵɵgetCurrentView();
88
+ i0.ɵɵelementStart(0, "div", 21);
89
+ 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)); });
74
90
  i0.ɵɵelementEnd();
75
- i0.ɵɵelementStart(1, "div", 17)(2, "mj-artifact-viewer-panel", 18);
76
- i0.ɵɵlistener("closed", function ConversationWorkspaceComponent_Conditional_9_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeArtifactPanel()); })("navigateToLink", function ConversationWorkspaceComponent_Conditional_9_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationWorkspaceComponent_Conditional_9_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onArtifactShareRequested($event)); });
91
+ i0.ɵɵelementStart(1, "div", 22)(2, "mj-artifact-viewer-panel", 23);
92
+ 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)); });
77
93
  i0.ɵɵelementEnd()();
78
94
  } if (rf & 2) {
79
- let tmp_5_0;
80
- let tmp_8_0;
81
- const ctx_r0 = i0.ɵɵnextContext();
95
+ let tmp_6_0;
96
+ let tmp_9_0;
97
+ const ctx_r1 = i0.ɵɵnextContext(2);
98
+ i0.ɵɵadvance();
99
+ i0.ɵɵstyleProp("width", ctx_r1.artifactPanelWidth, "%");
100
+ i0.ɵɵadvance();
101
+ 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);
102
+ } }
103
+ function ConversationWorkspaceComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵelementStart(0, "div", 4);
105
+ 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);
106
+ i0.ɵɵelementEnd();
107
+ } if (rf & 2) {
108
+ const ctx_r1 = i0.ɵɵnextContext();
109
+ i0.ɵɵadvance();
110
+ i0.ɵɵconditional(ctx_r1.isMobileView && ctx_r1.isSidebarVisible && ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks" ? 1 : -1);
111
+ i0.ɵɵadvance();
112
+ i0.ɵɵproperty("ngIf", ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks");
113
+ i0.ɵɵadvance();
114
+ i0.ɵɵproperty("ngIf", ctx_r1.isSidebarVisible && ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks");
82
115
  i0.ɵɵadvance();
83
- i0.ɵɵstyleProp("width", ctx_r0.artifactPanelWidth, "%");
116
+ i0.ɵɵproperty("ngIf", ctx_r1.activeTab === "collections");
84
117
  i0.ɵɵadvance();
85
- i0.ɵɵproperty("artifactId", ctx_r0.activeArtifactId)("currentUser", ctx_r0.currentUser)("environmentId", ctx_r0.environmentId)("versionNumber", (tmp_5_0 = ctx_r0.activeVersionNumber) !== null && tmp_5_0 !== undefined ? tmp_5_0 : undefined)("showSaveToCollection", ctx_r0.activeTab !== "collections")("viewContext", ctx_r0.activeTab === "collections" ? "collection" : "conversation")("contextCollectionId", (tmp_8_0 = ctx_r0.collectionState.activeCollectionId) !== null && tmp_8_0 !== undefined ? tmp_8_0 : undefined)("canShare", ctx_r0.canShareActiveArtifact)("canEdit", ctx_r0.canEditActiveArtifact);
118
+ i0.ɵɵproperty("ngIf", ctx_r1.activeTab === "tasks");
119
+ i0.ɵɵadvance();
120
+ i0.ɵɵproperty("ngIf", ctx_r1.activeTab !== "collections" && ctx_r1.activeTab !== "tasks");
121
+ i0.ɵɵadvance();
122
+ i0.ɵɵconditional(ctx_r1.isArtifactPanelOpen && ctx_r1.activeArtifactId ? 7 : -1);
86
123
  } }
87
124
  /**
88
125
  * Top-level workspace component for conversations
@@ -94,6 +131,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
94
131
  artifactState;
95
132
  collectionState;
96
133
  artifactPermissionService;
134
+ mentionAutocompleteService;
97
135
  notificationService;
98
136
  cdr;
99
137
  environmentId;
@@ -150,10 +188,12 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
150
188
  isSidebarVisible = true;
151
189
  isArtifactPanelOpen = false;
152
190
  isSearchPanelOpen = false;
191
+ isWorkspaceReady = false;
153
192
  renamedConversationId = null;
154
193
  activeArtifactId = null;
155
194
  activeVersionNumber = null;
156
195
  activeVersionId = null;
196
+ isMobileView = false;
157
197
  // Artifact permissions
158
198
  canShareActiveArtifact = false;
159
199
  canEditActiveArtifact = false;
@@ -180,30 +220,48 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
180
220
  ARTIFACT_PANEL_WIDTH_KEY = 'mj-artifact-panel-width';
181
221
  // Task filter for conversation-specific filtering
182
222
  tasksFilter = '1=1';
183
- constructor(conversationState, artifactState, collectionState, artifactPermissionService, notificationService, cdr) {
223
+ constructor(conversationState, artifactState, collectionState, artifactPermissionService, mentionAutocompleteService, notificationService, cdr) {
184
224
  super();
185
225
  this.conversationState = conversationState;
186
226
  this.artifactState = artifactState;
187
227
  this.collectionState = collectionState;
188
228
  this.artifactPermissionService = artifactPermissionService;
229
+ this.mentionAutocompleteService = mentionAutocompleteService;
189
230
  this.notificationService = notificationService;
190
231
  this.cdr = cdr;
191
232
  }
192
233
  async ngOnInit() {
234
+ // Check initial mobile state
235
+ this.checkMobileView();
193
236
  // Load saved widths from localStorage
194
237
  this.loadSidebarWidth();
195
238
  this.loadArtifactPanelWidth();
196
239
  // Setup resize listeners
197
240
  window.addEventListener('mousemove', this.onResizeMove.bind(this));
198
241
  window.addEventListener('mouseup', this.onResizeEnd.bind(this));
199
- // Initialize AI Engine to load agent metadata cache
200
- // This ensures agent names and icons are available for display
242
+ // Setup touch listeners for mobile
243
+ window.addEventListener('touchmove', this.onResizeTouchMove.bind(this));
244
+ window.addEventListener('touchend', this.onResizeTouchEnd.bind(this));
245
+ // CRITICAL: Initialize AI Engine FIRST before rendering any UI
246
+ // The isWorkspaceReady flag blocks all child components from rendering
247
+ // until agents are fully loaded and ready
201
248
  try {
202
249
  await AIEngineBase.Instance.Config(false);
203
250
  console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');
251
+ // Initialize mention autocomplete service immediately after AI engine
252
+ // This ensures the cache is built from the fully-loaded agent list
253
+ await this.mentionAutocompleteService.initialize(this.currentUser);
254
+ console.log('✅ Mention autocomplete initialized');
255
+ // Mark workspace as ready - this allows UI to render
256
+ this.isWorkspaceReady = true;
257
+ this.cdr.detectChanges();
258
+ console.log('✅ Workspace ready - UI can now render');
204
259
  }
205
260
  catch (error) {
206
261
  console.error('❌ Failed to initialize AI Engine:', error);
262
+ // Still mark as ready so UI isn't blocked forever
263
+ this.isWorkspaceReady = true;
264
+ this.cdr.detectChanges();
207
265
  }
208
266
  // Subscribe to artifact panel state
209
267
  this.artifactState.isPanelOpen$
@@ -323,6 +381,21 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
323
381
  // Remove resize listeners
324
382
  window.removeEventListener('mousemove', this.onResizeMove.bind(this));
325
383
  window.removeEventListener('mouseup', this.onResizeEnd.bind(this));
384
+ window.removeEventListener('touchmove', this.onResizeTouchMove.bind(this));
385
+ window.removeEventListener('touchend', this.onResizeTouchEnd.bind(this));
386
+ }
387
+ onWindowResize() {
388
+ this.checkMobileView();
389
+ }
390
+ checkMobileView() {
391
+ const wasMobile = this.isMobileView;
392
+ this.isMobileView = window.innerWidth < 768;
393
+ if (this.isMobileView && !wasMobile) {
394
+ this.isSidebarVisible = false;
395
+ }
396
+ else if (!this.isMobileView && wasMobile) {
397
+ this.isSidebarVisible = true;
398
+ }
326
399
  }
327
400
  onTabChanged(tab) {
328
401
  const wasOnDifferentTab = this.activeTab !== tab;
@@ -363,6 +436,11 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
363
436
  toggleSidebar() {
364
437
  this.isSidebarVisible = !this.isSidebarVisible;
365
438
  }
439
+ closeSidebar() {
440
+ if (this.isMobileView && this.isSidebarVisible) {
441
+ this.isSidebarVisible = false;
442
+ }
443
+ }
366
444
  closeArtifactPanel() {
367
445
  this.artifactState.closeArtifact();
368
446
  }
@@ -375,6 +453,8 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
375
453
  async onRefreshAgentCache() {
376
454
  try {
377
455
  await AIEngineBase.Instance.Config(true);
456
+ // Refresh the mention autocomplete service to pick up new agents
457
+ await this.mentionAutocompleteService.refresh(this.currentUser);
378
458
  const agentCount = AIEngineBase.Instance.Agents?.length || 0;
379
459
  this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);
380
460
  this.cdr.detectChanges();
@@ -500,6 +580,54 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
500
580
  this.saveArtifactPanelWidth();
501
581
  }
502
582
  }
583
+ /**
584
+ * Touch event handlers for mobile resize support
585
+ */
586
+ onSidebarResizeTouchStart(event) {
587
+ this.isSidebarResizing = true;
588
+ const touch = event.touches[0];
589
+ this.sidebarResizeStartX = touch.clientX;
590
+ this.sidebarResizeStartWidth = this.sidebarWidth;
591
+ event.preventDefault();
592
+ }
593
+ onArtifactPanelResizeTouchStart(event) {
594
+ this.isArtifactPanelResizing = true;
595
+ const touch = event.touches[0];
596
+ this.artifactPanelResizeStartX = touch.clientX;
597
+ this.artifactPanelResizeStartWidth = this.artifactPanelWidth;
598
+ event.preventDefault();
599
+ }
600
+ onResizeTouchMove(event) {
601
+ if (this.isSidebarResizing) {
602
+ const touch = event.touches[0];
603
+ const deltaX = touch.clientX - this.sidebarResizeStartX;
604
+ let newWidth = this.sidebarResizeStartWidth + deltaX;
605
+ newWidth = Math.max(200, Math.min(500, newWidth));
606
+ this.sidebarWidth = newWidth;
607
+ }
608
+ else if (this.isArtifactPanelResizing) {
609
+ const container = document.querySelector('.workspace-content');
610
+ if (!container)
611
+ return;
612
+ const touch = event.touches[0];
613
+ const containerWidth = container.offsetWidth;
614
+ const deltaX = touch.clientX - this.artifactPanelResizeStartX;
615
+ const deltaPercent = (deltaX / containerWidth) * -100;
616
+ let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;
617
+ newWidth = Math.max(20, Math.min(70, newWidth));
618
+ this.artifactPanelWidth = newWidth;
619
+ }
620
+ }
621
+ onResizeTouchEnd(event) {
622
+ if (this.isSidebarResizing) {
623
+ this.isSidebarResizing = false;
624
+ this.saveSidebarWidth();
625
+ }
626
+ else if (this.isArtifactPanelResizing) {
627
+ this.isArtifactPanelResizing = false;
628
+ this.saveArtifactPanelWidth();
629
+ }
630
+ }
503
631
  /**
504
632
  * LocalStorage persistence methods
505
633
  */
@@ -705,49 +833,41 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
705
833
  await this.loadArtifactPermissions(this.activeArtifactId);
706
834
  }
707
835
  }
708
- 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)); };
709
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationWorkspaceComponent, selectors: [["mj-conversation-workspace"]], 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: 13, vars: 15, consts: [["mjSearchShortcut", "", "kendoDialogContainer", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId"], [1, "workspace-content"], ["class", "workspace-sidebar", 3, "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, "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) {
836
+ 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(i0.ChangeDetectorRef)); };
837
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationWorkspaceComponent, selectors: [["mj-conversation-workspace"]], hostBindings: function ConversationWorkspaceComponent_HostBindings(rf, ctx) { if (rf & 1) {
838
+ i0.ɵɵlistener("resize", function ConversationWorkspaceComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, false, i0.ɵɵresolveWindow);
839
+ } }, 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) {
710
840
  i0.ɵɵelementStart(0, "div", 0);
711
841
  i0.ɵɵlistener("searchTriggered", function ConversationWorkspaceComponent_Template_div_searchTriggered_0_listener() { return ctx.openSearch(); });
712
842
  i0.ɵɵelementStart(1, "div", 1)(2, "mj-conversation-navigation", 2);
713
843
  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(); });
714
844
  i0.ɵɵelementEnd()();
715
- i0.ɵɵelementStart(3, "div", 3);
716
- i0.ɵɵtemplate(4, ConversationWorkspaceComponent_div_4_Template, 2, 6, "div", 4)(5, ConversationWorkspaceComponent_div_5_Template, 1, 0, "div", 5)(6, ConversationWorkspaceComponent_div_6_Template, 2, 2, "div", 6)(7, ConversationWorkspaceComponent_div_7_Template, 2, 4, "div", 6)(8, ConversationWorkspaceComponent_div_8_Template, 2, 2, "div", 6)(9, ConversationWorkspaceComponent_Conditional_9_Template, 3, 11);
717
- i0.ɵɵelementEnd();
718
- i0.ɵɵelementStart(10, "mj-search-panel", 7);
719
- i0.ɵɵlistener("close", function ConversationWorkspaceComponent_Template_mj_search_panel_close_10_listener() { return ctx.closeSearch(); })("resultSelected", function ConversationWorkspaceComponent_Template_mj_search_panel_resultSelected_10_listener($event) { return ctx.handleSearchResult($event); });
845
+ i0.ɵɵtemplate(3, ConversationWorkspaceComponent_Conditional_3_Template, 5, 0, "div", 3)(4, ConversationWorkspaceComponent_Conditional_4_Template, 8, 7, "div", 4);
846
+ i0.ɵɵelementStart(5, "mj-search-panel", 5);
847
+ 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); });
720
848
  i0.ɵɵelementEnd();
721
- i0.ɵɵelement(11, "mj-toast");
722
- i0.ɵɵelementStart(12, "mj-artifact-share-modal", 8);
723
- i0.ɵɵlistener("saved", function ConversationWorkspaceComponent_Template_mj_artifact_share_modal_saved_12_listener() { return ctx.onArtifactShared(); })("cancelled", function ConversationWorkspaceComponent_Template_mj_artifact_share_modal_cancelled_12_listener() { return ctx.onArtifactShareModalClose(); });
849
+ i0.ɵɵelement(6, "mj-toast");
850
+ i0.ɵɵelementStart(7, "mj-artifact-share-modal", 6);
851
+ 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(); });
724
852
  i0.ɵɵelementEnd()();
725
853
  } if (rf & 2) {
726
854
  i0.ɵɵattribute("data-layout", ctx.layout);
727
855
  i0.ɵɵadvance(2);
728
856
  i0.ɵɵproperty("activeTab", ctx.activeTab)("environmentId", ctx.environmentId);
729
- i0.ɵɵadvance(2);
730
- i0.ɵɵproperty("ngIf", ctx.isSidebarVisible && ctx.activeTab !== "collections" && ctx.activeTab !== "tasks");
731
- i0.ɵɵadvance();
732
- i0.ɵɵproperty("ngIf", ctx.isSidebarVisible && ctx.activeTab !== "collections" && ctx.activeTab !== "tasks");
733
- i0.ɵɵadvance();
734
- i0.ɵɵproperty("ngIf", ctx.activeTab === "collections");
735
- i0.ɵɵadvance();
736
- i0.ɵɵproperty("ngIf", ctx.activeTab === "tasks");
737
857
  i0.ɵɵadvance();
738
- i0.ɵɵproperty("ngIf", ctx.activeTab !== "collections" && ctx.activeTab !== "tasks");
858
+ i0.ɵɵconditional(!ctx.isWorkspaceReady ? 3 : -1);
739
859
  i0.ɵɵadvance();
740
- i0.ɵɵconditional(ctx.isArtifactPanelOpen && ctx.activeArtifactId ? 9 : -1);
860
+ i0.ɵɵconditional(ctx.isWorkspaceReady ? 4 : -1);
741
861
  i0.ɵɵadvance();
742
862
  i0.ɵɵproperty("isOpen", ctx.isSearchPanelOpen)("environmentId", ctx.environmentId)("currentUser", ctx.currentUser);
743
863
  i0.ɵɵadvance(2);
744
864
  i0.ɵɵproperty("isOpen", ctx.isArtifactShareModalOpen)("artifact", ctx.artifactToShare)("currentUser", ctx.currentUser);
745
- } }, 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}"] });
865
+ } }, dependencies: [i7.NgIf, i8.DialogContainerDirective, i9.ArtifactViewerPanelComponent, i10.TasksFullViewComponent, i11.ArtifactShareModalComponent, i12.ConversationNavigationComponent, i13.ConversationSidebarComponent, i14.ConversationChatAreaComponent, i15.CollectionsFullViewComponent, i16.SearchPanelComponent, i17.ToastComponent, i18.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}"] });
746
866
  }
747
867
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationWorkspaceComponent, [{
748
868
  type: Component,
749
- 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 <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n <div class=\"workspace-sidebar\" *ngIf=\"isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks'\" [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}"] }]
750
- }], () => [{ type: i1.ConversationStateService }, { type: i2.ArtifactStateService }, { type: i3.CollectionStateService }, { type: i4.ArtifactPermissionService }, { type: i5.MJNotificationService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
869
+ 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}"] }]
870
+ }], () => [{ type: i1.ConversationStateService }, { type: i2.ArtifactStateService }, { type: i3.CollectionStateService }, { type: i4.ArtifactPermissionService }, { type: i5.MentionAutocompleteService }, { type: i6.MJNotificationService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
751
871
  type: Input
752
872
  }], initialConversationId: [{
753
873
  type: Input
@@ -779,6 +899,9 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
779
899
  type: Output
780
900
  }], newConversationStarted: [{
781
901
  type: Output
902
+ }], onWindowResize: [{
903
+ type: HostListener,
904
+ args: ['window:resize']
782
905
  }] }); })();
783
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationWorkspaceComponent, { className: "ConversationWorkspaceComponent", filePath: "src/lib/components/workspace/conversation-workspace.component.ts", lineNumber: 34 }); })();
906
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationWorkspaceComponent, { className: "ConversationWorkspaceComponent", filePath: "src/lib/components/workspace/conversation-workspace.component.ts", lineNumber: 36 }); })();
784
907
  //# sourceMappingURL=conversation-workspace.component.js.map