@memberjunction/ng-conversations 5.37.0 → 5.39.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 (56) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +47 -0
  3. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -0
  4. package/dist/lib/components/conversation/conversation-agent-picker.component.js +253 -0
  5. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -0
  6. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +148 -11
  7. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  8. package/dist/lib/components/conversation/conversation-chat-area.component.js +498 -261
  9. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  10. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +2 -1
  11. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  12. package/dist/lib/components/conversation/conversation-empty-state.component.js +6 -3
  13. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  14. package/dist/lib/components/conversation/conversation-mode-picker.component.d.ts +57 -0
  15. package/dist/lib/components/conversation/conversation-mode-picker.component.d.ts.map +1 -0
  16. package/dist/lib/components/conversation/conversation-mode-picker.component.js +252 -0
  17. package/dist/lib/components/conversation/conversation-mode-picker.component.js.map +1 -0
  18. package/dist/lib/components/message/message-input.component.d.ts +51 -3
  19. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  20. package/dist/lib/components/message/message-input.component.js +107 -18
  21. package/dist/lib/components/message/message-input.component.js.map +1 -1
  22. package/dist/lib/components/message/message-item.component.d.ts +0 -13
  23. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  24. package/dist/lib/components/message/message-item.component.js +124 -150
  25. package/dist/lib/components/message/message-item.component.js.map +1 -1
  26. package/dist/lib/components/overlay/chat-overlay.component.d.ts +15 -0
  27. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
  28. package/dist/lib/components/overlay/chat-overlay.component.js +123 -46
  29. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  30. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
  31. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  32. package/dist/lib/components/workspace/conversation-workspace.component.js +13 -3
  33. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  34. package/dist/lib/conversations.module.d.ts +59 -58
  35. package/dist/lib/conversations.module.d.ts.map +1 -1
  36. package/dist/lib/conversations.module.js +8 -4
  37. package/dist/lib/conversations.module.js.map +1 -1
  38. package/dist/lib/models/conversation-state.model.d.ts +0 -27
  39. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  40. package/dist/lib/models/conversation-state.model.js.map +1 -1
  41. package/dist/lib/services/conversation-agent.service.d.ts +1 -9
  42. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  43. package/dist/lib/services/conversation-agent.service.js +22 -121
  44. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  45. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  46. package/dist/lib/services/conversation-attachment.service.js +5 -26
  47. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  48. package/dist/lib/services/conversation-bridge.service.d.ts +13 -0
  49. package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
  50. package/dist/lib/services/conversation-bridge.service.js +15 -0
  51. package/dist/lib/services/conversation-bridge.service.js.map +1 -1
  52. package/package.json +23 -22
  53. package/dist/lib/components/message/suggested-responses.component.d.ts +0 -55
  54. package/dist/lib/components/message/suggested-responses.component.d.ts.map +0 -1
  55. package/dist/lib/components/message/suggested-responses.component.js +0 -207
  56. package/dist/lib/components/message/suggested-responses.component.js.map +0 -1
@@ -32,12 +32,14 @@ import * as i17 from "../artifact/artifact-share-modal.component";
32
32
  import * as i18 from "../message/message-list.component";
33
33
  import * as i19 from "../message/message-input.component";
34
34
  import * as i20 from "./conversation-empty-state.component";
35
- import * as i21 from "../thread/thread-panel.component";
36
- import * as i22 from "../project/project-selector.component";
37
- import * as i23 from "../members/members-modal.component";
38
- import * as i24 from "../export/export-modal.component";
39
- import * as i25 from "../attachment/image-viewer.component";
40
- import * as i26 from "./pinned-messages-panel.component";
35
+ import * as i21 from "./conversation-agent-picker.component";
36
+ import * as i22 from "./conversation-mode-picker.component";
37
+ import * as i23 from "../thread/thread-panel.component";
38
+ import * as i24 from "../project/project-selector.component";
39
+ import * as i25 from "../members/members-modal.component";
40
+ import * as i26 from "../export/export-modal.component";
41
+ import * as i27 from "../attachment/image-viewer.component";
42
+ import * as i28 from "./pinned-messages-panel.component";
41
43
  const _c0 = ["scrollContainer"];
42
44
  const _c1 = ["messageInput"];
43
45
  const _c2 = () => [];
@@ -46,14 +48,23 @@ const _forTrack1 = ($index, $item) => $item.artifactId;
46
48
  const _forTrack2 = ($index, $item) => $item.versionId;
47
49
  function ConversationChatAreaComponent_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
48
50
  const _r1 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "button", 31);
51
+ i0.ɵɵelementStart(0, "button", 33);
50
52
  i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.sidebarToggleClicked.emit()); });
51
- i0.ɵɵelement(1, "i", 32);
53
+ i0.ɵɵelement(1, "i", 34);
52
54
  i0.ɵɵelementEnd();
53
55
  } }
54
- function ConversationChatAreaComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
56
+ function ConversationChatAreaComponent_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
57
+ i0.ɵɵelementStart(0, "div", 21);
58
+ i0.ɵɵtext(1);
59
+ i0.ɵɵelementEnd();
60
+ } if (rf & 2) {
61
+ const ctx_r1 = i0.ɵɵnextContext(2);
62
+ i0.ɵɵadvance();
63
+ i0.ɵɵtextInterpolate(ctx_r1.conversation.Name || "");
64
+ } }
65
+ function ConversationChatAreaComponent_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
55
66
  i0.ɵɵelementStart(0, "span", 22);
56
- i0.ɵɵelement(1, "i", 33);
67
+ i0.ɵɵelement(1, "i", 35);
57
68
  i0.ɵɵelementStart(2, "span");
58
69
  i0.ɵɵtext(3);
59
70
  i0.ɵɵelementEnd()();
@@ -63,11 +74,11 @@ function ConversationChatAreaComponent_Conditional_1_Conditional_5_Template(rf,
63
74
  i0.ɵɵadvance(3);
64
75
  i0.ɵɵtextInterpolate1("Shared by ", ctx_r1.sharedByBadge.display);
65
76
  } }
66
- function ConversationChatAreaComponent_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
77
+ function ConversationChatAreaComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
67
78
  const _r3 = i0.ɵɵgetCurrentView();
68
- i0.ɵɵelementStart(0, "button", 34);
69
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openProjectSelector()); });
70
- i0.ɵɵelement(1, "i", 35);
79
+ i0.ɵɵelementStart(0, "button", 36);
80
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openProjectSelector()); });
81
+ i0.ɵɵelement(1, "i", 37);
71
82
  i0.ɵɵelementStart(2, "span");
72
83
  i0.ɵɵtext(3);
73
84
  i0.ɵɵelementEnd()();
@@ -76,21 +87,21 @@ function ConversationChatAreaComponent_Conditional_1_Conditional_6_Template(rf,
76
87
  i0.ɵɵadvance(3);
77
88
  i0.ɵɵtextInterpolate(ctx_r1.conversation.Project || "Project");
78
89
  } }
79
- function ConversationChatAreaComponent_Conditional_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
90
+ function ConversationChatAreaComponent_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
80
91
  const _r4 = i0.ɵɵgetCurrentView();
81
- i0.ɵɵelementStart(0, "button", 36);
82
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewTestRun(ctx_r1.conversation.TestRunID)); });
83
- i0.ɵɵelement(1, "i", 37);
92
+ i0.ɵɵelementStart(0, "button", 38);
93
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewTestRun(ctx_r1.conversation.TestRunID)); });
94
+ i0.ɵɵelement(1, "i", 39);
84
95
  i0.ɵɵelementStart(2, "span");
85
96
  i0.ɵɵtext(3, "Test");
86
97
  i0.ɵɵelementEnd()();
87
98
  } }
88
- function ConversationChatAreaComponent_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
99
+ function ConversationChatAreaComponent_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
89
100
  const _r5 = i0.ɵɵgetCurrentView();
90
- i0.ɵɵelementStart(0, "button", 38);
91
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.showPinsPanel = !ctx_r1.showPinsPanel); });
92
- i0.ɵɵelement(1, "i", 39);
93
- i0.ɵɵelementStart(2, "span", 40);
101
+ i0.ɵɵelementStart(0, "button", 40);
102
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.showPinsPanel = !ctx_r1.showPinsPanel); });
103
+ i0.ɵɵelement(1, "i", 41);
104
+ i0.ɵɵelementStart(2, "span", 42);
94
105
  i0.ɵɵtext(3);
95
106
  i0.ɵɵelementEnd()();
96
107
  } if (rf & 2) {
@@ -99,12 +110,12 @@ function ConversationChatAreaComponent_Conditional_1_Conditional_9_Template(rf,
99
110
  i0.ɵɵadvance(3);
100
111
  i0.ɵɵtextInterpolate(ctx_r1.pinnedMessages.length);
101
112
  } }
102
- function ConversationChatAreaComponent_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
113
+ function ConversationChatAreaComponent_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
103
114
  const _r6 = i0.ɵɵgetCurrentView();
104
- i0.ɵɵelementStart(0, "button", 41);
105
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewArtifacts()); });
106
- i0.ɵɵelement(1, "i", 42);
107
- i0.ɵɵelementStart(2, "span", 43);
115
+ i0.ɵɵelementStart(0, "button", 43);
116
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.viewArtifacts()); });
117
+ i0.ɵɵelement(1, "i", 44);
118
+ i0.ɵɵelementStart(2, "span", 45);
108
119
  i0.ɵɵtext(3);
109
120
  i0.ɵɵelementEnd()();
110
121
  } if (rf & 2) {
@@ -112,12 +123,12 @@ function ConversationChatAreaComponent_Conditional_1_Conditional_10_Template(rf,
112
123
  i0.ɵɵadvance(3);
113
124
  i0.ɵɵtextInterpolate(ctx_r1.artifactCountDisplay);
114
125
  } }
115
- function ConversationChatAreaComponent_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
126
+ function ConversationChatAreaComponent_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
116
127
  const _r7 = i0.ɵɵgetCurrentView();
117
- i0.ɵɵelementStart(0, "button", 44);
118
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMembersModal()); });
119
- i0.ɵɵelement(1, "i", 45);
120
- i0.ɵɵelementStart(2, "span", 46);
128
+ i0.ɵɵelementStart(0, "button", 46);
129
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMembersModal()); });
130
+ i0.ɵɵelement(1, "i", 47);
131
+ i0.ɵɵelementStart(2, "span", 48);
121
132
  i0.ɵɵtext(3);
122
133
  i0.ɵɵelementEnd()();
123
134
  } if (rf & 2) {
@@ -125,21 +136,36 @@ function ConversationChatAreaComponent_Conditional_1_Conditional_11_Template(rf,
125
136
  i0.ɵɵadvance(3);
126
137
  i0.ɵɵtextInterpolate(ctx_r1.memberCount);
127
138
  } }
128
- function ConversationChatAreaComponent_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
139
+ function ConversationChatAreaComponent_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
129
140
  const _r8 = i0.ɵɵgetCurrentView();
130
- i0.ɵɵelementStart(0, "button", 47);
131
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.exportConversation()); });
132
- i0.ɵɵelement(1, "i", 48);
133
- i0.ɵɵelementStart(2, "span", 49);
134
- i0.ɵɵtext(3, "Export");
135
- i0.ɵɵelementEnd()();
141
+ i0.ɵɵelementStart(0, "mj-conversation-mode-picker", 49);
142
+ i0.ɵɵlistener("PresetChanged", function ConversationChatAreaComponent_Conditional_1_Conditional_11_Template_mj_conversation_mode_picker_PresetChanged_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnAgentModePresetChanged($event)); });
143
+ i0.ɵɵelementEnd();
144
+ } if (rf & 2) {
145
+ const ctx_r1 = i0.ɵɵnextContext(2);
146
+ i0.ɵɵproperty("AgentID", ctx_r1.ModePickerTargetAgentId)("Disabled", ctx_r1.isProcessing);
147
+ } }
148
+ function ConversationChatAreaComponent_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
149
+ i0.ɵɵelement(0, "mj-conversation-agent-picker", 30);
150
+ } if (rf & 2) {
151
+ const ctx_r1 = i0.ɵɵnextContext(2);
152
+ i0.ɵɵproperty("Conversation", ctx_r1.conversation)("CurrentUser", ctx_r1.currentUser)("Disabled", ctx_r1.isReadOnlyView);
136
153
  } }
137
154
  function ConversationChatAreaComponent_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
138
155
  const _r9 = i0.ɵɵgetCurrentView();
139
156
  i0.ɵɵelementStart(0, "button", 50);
140
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.shareConversation()); });
141
- i0.ɵɵelement(1, "i", 33);
142
- i0.ɵɵelementStart(2, "span", 49);
157
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.exportConversation()); });
158
+ i0.ɵɵelement(1, "i", 51);
159
+ i0.ɵɵelementStart(2, "span", 52);
160
+ i0.ɵɵtext(3, "Export");
161
+ i0.ɵɵelementEnd()();
162
+ } }
163
+ function ConversationChatAreaComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
164
+ const _r10 = i0.ɵɵgetCurrentView();
165
+ i0.ɵɵelementStart(0, "button", 53);
166
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_1_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.shareConversation()); });
167
+ i0.ɵɵelement(1, "i", 35);
168
+ i0.ɵɵelementStart(2, "span", 52);
143
169
  i0.ɵɵtext(3, "Share");
144
170
  i0.ɵɵelementEnd()();
145
171
  } if (rf & 2) {
@@ -150,19 +176,19 @@ function ConversationChatAreaComponent_Conditional_1_Conditional_13_Template(rf,
150
176
  function ConversationChatAreaComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
151
177
  i0.ɵɵelementStart(0, "div", 3)(1, "div", 19);
152
178
  i0.ɵɵconditionalCreate(2, ConversationChatAreaComponent_Conditional_1_Conditional_2_Template, 2, 0, "button", 20);
153
- i0.ɵɵelementStart(3, "div", 21);
154
- i0.ɵɵtext(4);
179
+ i0.ɵɵconditionalCreate(3, ConversationChatAreaComponent_Conditional_1_Conditional_3_Template, 2, 1, "div", 21);
180
+ i0.ɵɵconditionalCreate(4, ConversationChatAreaComponent_Conditional_1_Conditional_4_Template, 4, 2, "span", 22);
181
+ i0.ɵɵconditionalCreate(5, ConversationChatAreaComponent_Conditional_1_Conditional_5_Template, 4, 1, "button", 23);
182
+ i0.ɵɵconditionalCreate(6, ConversationChatAreaComponent_Conditional_1_Conditional_6_Template, 4, 0, "button", 24);
155
183
  i0.ɵɵelementEnd();
156
- i0.ɵɵconditionalCreate(5, ConversationChatAreaComponent_Conditional_1_Conditional_5_Template, 4, 2, "span", 22);
157
- i0.ɵɵconditionalCreate(6, ConversationChatAreaComponent_Conditional_1_Conditional_6_Template, 4, 1, "button", 23);
158
- i0.ɵɵconditionalCreate(7, ConversationChatAreaComponent_Conditional_1_Conditional_7_Template, 4, 0, "button", 24);
159
- i0.ɵɵelementEnd();
160
- i0.ɵɵelementStart(8, "div", 25);
161
- i0.ɵɵconditionalCreate(9, ConversationChatAreaComponent_Conditional_1_Conditional_9_Template, 4, 3, "button", 26);
162
- i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_1_Conditional_10_Template, 4, 1, "button", 27);
163
- i0.ɵɵconditionalCreate(11, ConversationChatAreaComponent_Conditional_1_Conditional_11_Template, 4, 1, "button", 28);
164
- i0.ɵɵconditionalCreate(12, ConversationChatAreaComponent_Conditional_1_Conditional_12_Template, 4, 0, "button", 29);
165
- i0.ɵɵconditionalCreate(13, ConversationChatAreaComponent_Conditional_1_Conditional_13_Template, 4, 3, "button", 30);
184
+ i0.ɵɵelementStart(7, "div", 25);
185
+ i0.ɵɵconditionalCreate(8, ConversationChatAreaComponent_Conditional_1_Conditional_8_Template, 4, 3, "button", 26);
186
+ i0.ɵɵconditionalCreate(9, ConversationChatAreaComponent_Conditional_1_Conditional_9_Template, 4, 1, "button", 27);
187
+ i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_1_Conditional_10_Template, 4, 1, "button", 28);
188
+ i0.ɵɵconditionalCreate(11, ConversationChatAreaComponent_Conditional_1_Conditional_11_Template, 1, 2, "mj-conversation-mode-picker", 29);
189
+ i0.ɵɵconditionalCreate(12, ConversationChatAreaComponent_Conditional_1_Conditional_12_Template, 1, 3, "mj-conversation-agent-picker", 30);
190
+ i0.ɵɵconditionalCreate(13, ConversationChatAreaComponent_Conditional_1_Conditional_13_Template, 4, 0, "button", 31);
191
+ i0.ɵɵconditionalCreate(14, ConversationChatAreaComponent_Conditional_1_Conditional_14_Template, 4, 3, "button", 32);
166
192
  i0.ɵɵelementEnd()();
167
193
  } if (rf & 2) {
168
194
  const ctx_r1 = i0.ɵɵnextContext();
@@ -170,81 +196,97 @@ function ConversationChatAreaComponent_Conditional_1_Template(rf, ctx) { if (rf
170
196
  i0.ɵɵclassProp("with-sidebar-toggle", ctx_r1.showSidebarToggle);
171
197
  i0.ɵɵadvance();
172
198
  i0.ɵɵconditional(ctx_r1.showSidebarToggle ? 2 : -1);
173
- i0.ɵɵadvance(2);
174
- i0.ɵɵtextInterpolate(ctx_r1.conversation.Name || "");
175
199
  i0.ɵɵadvance();
176
- i0.ɵɵconditional(ctx_r1.sharedByBadge ? 5 : -1);
200
+ i0.ɵɵconditional(ctx_r1.conversation ? 3 : -1);
201
+ i0.ɵɵadvance();
202
+ i0.ɵɵconditional(ctx_r1.sharedByBadge ? 4 : -1);
177
203
  i0.ɵɵadvance();
178
- i0.ɵɵconditional(ctx_r1.conversation.ProjectID ? 6 : -1);
204
+ i0.ɵɵconditional((ctx_r1.conversation == null ? null : ctx_r1.conversation.ProjectID) ? 5 : -1);
179
205
  i0.ɵɵadvance();
180
- i0.ɵɵconditional(ctx_r1.conversation.TestRunID ? 7 : -1);
206
+ i0.ɵɵconditional((ctx_r1.conversation == null ? null : ctx_r1.conversation.TestRunID) ? 6 : -1);
181
207
  i0.ɵɵadvance(2);
182
- i0.ɵɵconditional(ctx_r1.pinnedMessages.length > 0 ? 9 : -1);
208
+ i0.ɵɵconditional(ctx_r1.pinnedMessages.length > 0 ? 8 : -1);
183
209
  i0.ɵɵadvance();
184
- i0.ɵɵconditional(ctx_r1.showArtifactIndicator && ctx_r1.artifactCountDisplay > 0 ? 10 : -1);
210
+ i0.ɵɵconditional(ctx_r1.showArtifactIndicator && ctx_r1.artifactCountDisplay > 0 ? 9 : -1);
185
211
  i0.ɵɵadvance();
186
- i0.ɵɵconditional(ctx_r1.memberCount > 1 ? 11 : -1);
212
+ i0.ɵɵconditional(ctx_r1.memberCount > 1 ? 10 : -1);
187
213
  i0.ɵɵadvance();
188
- i0.ɵɵconditional(ctx_r1.showExportButton ? 12 : -1);
214
+ i0.ɵɵconditional(ctx_r1.showAgentModePicker && ctx_r1.ModePickerTargetAgentId ? 11 : -1);
189
215
  i0.ɵɵadvance();
190
- i0.ɵɵconditional(ctx_r1.showShareButton && ctx_r1.canShareConversation ? 13 : -1);
216
+ i0.ɵɵconditional(ctx_r1.showAgentPicker && ctx_r1.conversation ? 12 : -1);
217
+ i0.ɵɵadvance();
218
+ i0.ɵɵconditional(ctx_r1.showExportButton ? 13 : -1);
219
+ i0.ɵɵadvance();
220
+ i0.ɵɵconditional(ctx_r1.showShareButton && ctx_r1.canShareConversation ? 14 : -1);
191
221
  } }
192
222
  function ConversationChatAreaComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
193
223
  i0.ɵɵelementStart(0, "div", 6);
194
- i0.ɵɵelement(1, "mj-loading", 51);
224
+ i0.ɵɵelement(1, "mj-loading", 54);
195
225
  i0.ɵɵelementEnd();
196
226
  } }
197
227
  function ConversationChatAreaComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
198
- const _r10 = i0.ɵɵgetCurrentView();
199
- i0.ɵɵelementStart(0, "mj-conversation-empty-state", 52);
200
- i0.ɵɵlistener("sidebarToggleClicked", function ConversationChatAreaComponent_Conditional_5_Template_mj_conversation_empty_state_sidebarToggleClicked_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.sidebarToggleClicked.emit()); })("messageSent", function ConversationChatAreaComponent_Conditional_5_Template_mj_conversation_empty_state_messageSent_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEmptyStateMessageSent($event)); });
228
+ const _r11 = i0.ɵɵgetCurrentView();
229
+ i0.ɵɵelementStart(0, "mj-conversation-empty-state", 55);
230
+ i0.ɵɵlistener("sidebarToggleClicked", function ConversationChatAreaComponent_Conditional_5_Template_mj_conversation_empty_state_sidebarToggleClicked_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.sidebarToggleClicked.emit()); })("messageSent", function ConversationChatAreaComponent_Conditional_5_Template_mj_conversation_empty_state_messageSent_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEmptyStateMessageSent($event)); });
201
231
  i0.ɵɵelementEnd();
202
232
  } if (rf & 2) {
203
233
  const ctx_r1 = i0.ɵɵnextContext();
204
- i0.ɵɵproperty("currentUser", ctx_r1.currentUser)("disabled", ctx_r1.isProcessing)("showSidebarToggle", ctx_r1.showSidebarToggle)("overlayMode", ctx_r1.overlayMode)("greeting", ctx_r1.emptyStateGreeting)("enableAttachments", ctx_r1.enableAttachments)("maxAttachments", ctx_r1.maxAttachments)("maxAttachmentSizeBytes", ctx_r1.maxAttachmentSizeBytes)("acceptedFileTypes", ctx_r1.acceptedFileTypes);
234
+ i0.ɵɵproperty("currentUser", ctx_r1.currentUser)("disabled", ctx_r1.isProcessing)("showSidebarToggle", ctx_r1.showSidebarToggle)("overlayMode", ctx_r1.overlayMode)("greeting", ctx_r1.emptyStateGreeting)("enableAttachments", ctx_r1.enableAttachments && ctx_r1.allowAttachments)("enableMentions", ctx_r1.allowMentions)("maxAttachments", ctx_r1.maxAttachments)("maxAttachmentSizeBytes", ctx_r1.maxAttachmentSizeBytes)("acceptedFileTypes", ctx_r1.acceptedFileTypes);
205
235
  } }
206
- function ConversationChatAreaComponent_Conditional_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
207
- i0.ɵɵelementStart(0, "div", 53);
208
- i0.ɵɵelement(1, "mj-loading", 59);
236
+ function ConversationChatAreaComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
237
+ const _r12 = i0.ɵɵgetCurrentView();
238
+ i0.ɵɵelementStart(0, "div", 8);
239
+ i0.ɵɵelement(1, "div", 56);
240
+ i0.ɵɵelementStart(2, "div", 57)(3, "div", 58)(4, "mj-message-input", 59);
241
+ i0.ɵɵlistener("emptyStateSubmit", function ConversationChatAreaComponent_Conditional_6_Template_mj_message_input_emptyStateSubmit_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEmptyStateMessageSent($event)); });
242
+ i0.ɵɵelementEnd()()()();
243
+ } if (rf & 2) {
244
+ const ctx_r1 = i0.ɵɵnextContext();
245
+ i0.ɵɵadvance(4);
246
+ i0.ɵɵproperty("emptyStateMode", true)("currentUser", ctx_r1.currentUser)("disabled", ctx_r1.isProcessing)("enableAttachments", ctx_r1.enableAttachments && ctx_r1.allowAttachments)("enableMentions", ctx_r1.allowMentions)("maxAttachments", ctx_r1.maxAttachments)("maxAttachmentSizeBytes", ctx_r1.maxAttachmentSizeBytes)("acceptedFileTypes", ctx_r1.acceptedFileTypes);
247
+ } }
248
+ function ConversationChatAreaComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelementStart(0, "div", 60);
250
+ i0.ɵɵelement(1, "mj-loading", 65);
209
251
  i0.ɵɵelementEnd();
210
252
  } if (rf & 2) {
211
253
  const ctx_r1 = i0.ɵɵnextContext(2);
212
254
  i0.ɵɵadvance();
213
255
  i0.ɵɵproperty("text", ctx_r1.uploadingMessage);
214
256
  } }
215
- function ConversationChatAreaComponent_Conditional_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
216
- const _r12 = i0.ɵɵgetCurrentView();
217
- i0.ɵɵelementStart(0, "span", 60);
218
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_6_Conditional_5_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scrollToBottomAnimate()); });
219
- i0.ɵɵelement(1, "i", 61);
257
+ function ConversationChatAreaComponent_Conditional_7_Conditional_5_Template(rf, ctx) { if (rf & 1) {
258
+ const _r14 = i0.ɵɵgetCurrentView();
259
+ i0.ɵɵelementStart(0, "span", 66);
260
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_7_Conditional_5_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.scrollToBottomAnimate()); });
261
+ i0.ɵɵelement(1, "i", 67);
220
262
  i0.ɵɵelementEnd();
221
263
  } }
222
- function ConversationChatAreaComponent_Conditional_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
223
- i0.ɵɵelementStart(0, "div", 58);
224
- i0.ɵɵelement(1, "mj-loading", 62);
264
+ function ConversationChatAreaComponent_Conditional_7_Conditional_7_Template(rf, ctx) { if (rf & 1) {
265
+ i0.ɵɵelementStart(0, "div", 64);
266
+ i0.ɵɵelement(1, "mj-loading", 68);
225
267
  i0.ɵɵelementEnd();
226
268
  } }
227
- function ConversationChatAreaComponent_Conditional_6_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
228
- i0.ɵɵelementStart(0, "div", 63);
229
- i0.ɵɵelement(1, "i", 66);
269
+ function ConversationChatAreaComponent_Conditional_7_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelementStart(0, "div", 69);
271
+ i0.ɵɵelement(1, "i", 71);
230
272
  i0.ɵɵelementStart(2, "span");
231
273
  i0.ɵɵtext(3, "You have view-only access to this conversation.");
232
274
  i0.ɵɵelementEnd()();
233
275
  } }
234
- function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template(rf, ctx) { if (rf & 1) {
235
- const _r13 = i0.ɵɵgetCurrentView();
236
- i0.ɵɵelementStart(0, "mj-message-input", 67, 1);
237
- i0.ɵɵlistener("messageSent", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_messageSent_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onMessageSent($event)); })("agentResponse", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_agentResponse_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAgentResponse($event)); })("agentRunDetected", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_agentRunDetected_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAgentRunDetected($event)); })("agentRunUpdate", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_agentRunUpdate_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAgentRunUpdate($event)); })("messageComplete", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_messageComplete_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onMessageComplete($event)); })("artifactCreated", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_artifactCreated_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onArtifactCreated($event)); })("conversationRenamed", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_conversationRenamed_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("intentCheckStarted", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_intentCheckStarted_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onIntentCheckStarted()); })("intentCheckCompleted", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_intentCheckCompleted_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onIntentCheckCompleted()); })("uploadStateChanged", function ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template_mj_message_input_uploadStateChanged_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onUploadStateChanged($event)); });
276
+ function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template(rf, ctx) { if (rf & 1) {
277
+ const _r15 = i0.ɵɵgetCurrentView();
278
+ i0.ɵɵelementStart(0, "mj-message-input", 72, 1);
279
+ i0.ɵɵlistener("messageSent", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_messageSent_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onMessageSent($event)); })("agentResponse", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_agentResponse_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAgentResponse($event)); })("agentRunDetected", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_agentRunDetected_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAgentRunDetected($event)); })("agentRunUpdate", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_agentRunUpdate_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onAgentRunUpdate($event)); })("messageComplete", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_messageComplete_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onMessageComplete($event)); })("artifactCreated", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_artifactCreated_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onArtifactCreated($event)); })("conversationRenamed", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_conversationRenamed_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("intentCheckStarted", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_intentCheckStarted_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onIntentCheckStarted()); })("intentCheckCompleted", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_intentCheckCompleted_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onIntentCheckCompleted()); })("uploadStateChanged", function ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template_mj_message_input_uploadStateChanged_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onUploadStateChanged($event)); });
238
280
  i0.ɵɵelementEnd();
239
281
  } if (rf & 2) {
240
- const inputRef_r14 = ctx.$implicit;
282
+ const inputRef_r16 = ctx.$implicit;
241
283
  const ctx_r1 = i0.ɵɵnextContext(3);
242
- i0.ɵɵproperty("hidden", inputRef_r14.conversationId !== ctx_r1.conversationId)("conversationId", inputRef_r14.conversationId)("conversationName", inputRef_r14.conversationName)("currentUser", ctx_r1.currentUser)("conversationHistory", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.messages : i0.ɵɵpureFunction0(17, _c2))("artifactsByDetailId", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.artifactsByDetailId : ctx_r1.emptyArtifactsMap)("systemArtifactsByDetailId", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.systemArtifactsByDetailId : ctx_r1.emptyArtifactsMap)("agentRunsByDetailId", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.agentRunsByDetailId : ctx_r1.emptyAgentRunsMap)("appContext", ctx_r1.appContext)("inProgressMessageIds", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.inProgressMessageIds : ctx_r1.emptyInProgressIds)("disabled", ctx_r1.isProcessing || ctx_r1.isReadOnlyView)("enableAttachments", ctx_r1.enableAttachments)("maxAttachments", ctx_r1.maxAttachments)("maxAttachmentSizeBytes", ctx_r1.maxAttachmentSizeBytes)("acceptedFileTypes", ctx_r1.acceptedFileTypes)("initialMessage", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.pendingMessage : null)("initialAttachments", inputRef_r14.conversationId === ctx_r1.conversationId ? ctx_r1.pendingAttachments : null);
284
+ i0.ɵɵproperty("hidden", inputRef_r16.conversationId !== ctx_r1.conversationId)("conversationId", inputRef_r16.conversationId)("conversationName", inputRef_r16.conversationName)("currentUser", ctx_r1.currentUser)("conversationHistory", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.messages : i0.ɵɵpureFunction0(21, _c2))("artifactsByDetailId", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.artifactsByDetailId : ctx_r1.emptyArtifactsMap)("systemArtifactsByDetailId", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.systemArtifactsByDetailId : ctx_r1.emptyArtifactsMap)("agentRunsByDetailId", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.agentRunsByDetailId : ctx_r1.emptyAgentRunsMap)("appContext", ctx_r1.appContext)("defaultAgentId", ctx_r1.defaultAgentId)("conversationDefaultAgentId", inputRef_r16.conversationId === ctx_r1.conversationId ? (ctx_r1.conversation == null ? null : ctx_r1.conversation.DefaultAgentID) ?? null : null)("agentConfigurationPresetId", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.ActiveAgentConfigurationPresetId : null)("inProgressMessageIds", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.inProgressMessageIds : ctx_r1.emptyInProgressIds)("disabled", ctx_r1.isProcessing || ctx_r1.isReadOnlyView)("enableAttachments", ctx_r1.enableAttachments && ctx_r1.allowAttachments)("enableMentions", ctx_r1.allowMentions)("maxAttachments", ctx_r1.maxAttachments)("maxAttachmentSizeBytes", ctx_r1.maxAttachmentSizeBytes)("acceptedFileTypes", ctx_r1.acceptedFileTypes)("initialMessage", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.pendingMessage : null)("initialAttachments", inputRef_r16.conversationId === ctx_r1.conversationId ? ctx_r1.pendingAttachments : null);
243
285
  } }
244
- function ConversationChatAreaComponent_Conditional_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵconditionalCreate(0, ConversationChatAreaComponent_Conditional_6_Conditional_8_Conditional_0_Template, 4, 0, "div", 63);
246
- i0.ɵɵelementStart(1, "div", 64);
247
- i0.ɵɵrepeaterCreate(2, ConversationChatAreaComponent_Conditional_6_Conditional_8_For_3_Template, 2, 18, "mj-message-input", 65, _forTrack0);
286
+ function ConversationChatAreaComponent_Conditional_7_Conditional_8_Template(rf, ctx) { if (rf & 1) {
287
+ i0.ɵɵconditionalCreate(0, ConversationChatAreaComponent_Conditional_7_Conditional_8_Conditional_0_Template, 4, 0, "div", 69);
288
+ i0.ɵɵelementStart(1, "div", 58);
289
+ i0.ɵɵrepeaterCreate(2, ConversationChatAreaComponent_Conditional_7_Conditional_8_For_3_Template, 2, 22, "mj-message-input", 70, _forTrack0);
248
290
  i0.ɵɵelementEnd();
249
291
  } if (rf & 2) {
250
292
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -252,19 +294,19 @@ function ConversationChatAreaComponent_Conditional_6_Conditional_8_Template(rf,
252
294
  i0.ɵɵadvance(2);
253
295
  i0.ɵɵrepeater(ctx_r1.getCachedInputs());
254
296
  } }
255
- function ConversationChatAreaComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
256
- const _r11 = i0.ɵɵgetCurrentView();
297
+ function ConversationChatAreaComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
298
+ const _r13 = i0.ɵɵgetCurrentView();
257
299
  i0.ɵɵelementStart(0, "div", 8);
258
- i0.ɵɵconditionalCreate(1, ConversationChatAreaComponent_Conditional_6_Conditional_1_Template, 2, 1, "div", 53);
259
- i0.ɵɵelementStart(2, "div", 54, 0);
260
- i0.ɵɵlistener("scroll", function ConversationChatAreaComponent_Conditional_6_Template_div_scroll_2_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.checkScroll()); });
261
- i0.ɵɵelementStart(4, "mj-conversation-message-list", 55);
262
- i0.ɵɵlistener("replyInThread", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_replyInThread_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReplyInThread($event)); })("viewThread", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_viewThread_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewThread($event)); })("deleteMessage", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_deleteMessage_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDeleteMessage($event)); })("retryMessage", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_retryMessage_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRetryMessage($event)); })("testFeedbackMessage", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_testFeedbackMessage_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestFeedbackMessage($event)); })("artifactClicked", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_artifactClicked_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactClicked($event)); })("messageEdited", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_messageEdited_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMessageEdited($event)); })("openEntityRecord", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_openEntityRecord_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("suggestedResponseSelected", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_suggestedResponseSelected_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSuggestedResponseSelected($event)); })("attachmentClicked", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_attachmentClicked_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onAttachmentClicked($event)); })("diagnosticRequested", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_diagnosticRequested_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDiagnosticRequested($event)); })("messagePinToggled", function ConversationChatAreaComponent_Conditional_6_Template_mj_conversation_message_list_messagePinToggled_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMessagePinToggled($event)); });
300
+ i0.ɵɵconditionalCreate(1, ConversationChatAreaComponent_Conditional_7_Conditional_1_Template, 2, 1, "div", 60);
301
+ i0.ɵɵelementStart(2, "div", 61, 0);
302
+ i0.ɵɵlistener("scroll", function ConversationChatAreaComponent_Conditional_7_Template_div_scroll_2_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.checkScroll()); });
303
+ i0.ɵɵelementStart(4, "mj-conversation-message-list", 62);
304
+ i0.ɵɵlistener("replyInThread", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_replyInThread_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReplyInThread($event)); })("viewThread", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_viewThread_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewThread($event)); })("deleteMessage", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_deleteMessage_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDeleteMessage($event)); })("retryMessage", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_retryMessage_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRetryMessage($event)); })("testFeedbackMessage", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_testFeedbackMessage_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestFeedbackMessage($event)); })("artifactClicked", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_artifactClicked_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactClicked($event)); })("messageEdited", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_messageEdited_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMessageEdited($event)); })("openEntityRecord", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_openEntityRecord_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("suggestedResponseSelected", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_suggestedResponseSelected_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSuggestedResponseSelected($event)); })("attachmentClicked", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_attachmentClicked_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onAttachmentClicked($event)); })("diagnosticRequested", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_diagnosticRequested_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDiagnosticRequested($event)); })("messagePinToggled", function ConversationChatAreaComponent_Conditional_7_Template_mj_conversation_message_list_messagePinToggled_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMessagePinToggled($event)); });
263
305
  i0.ɵɵelementEnd();
264
- i0.ɵɵconditionalCreate(5, ConversationChatAreaComponent_Conditional_6_Conditional_5_Template, 2, 0, "span", 56);
306
+ i0.ɵɵconditionalCreate(5, ConversationChatAreaComponent_Conditional_7_Conditional_5_Template, 2, 0, "span", 63);
265
307
  i0.ɵɵelementEnd();
266
308
  i0.ɵɵelementStart(6, "div", 57);
267
- i0.ɵɵconditionalCreate(7, ConversationChatAreaComponent_Conditional_6_Conditional_7_Template, 2, 0, "div", 58)(8, ConversationChatAreaComponent_Conditional_6_Conditional_8_Template, 4, 1);
309
+ i0.ɵɵconditionalCreate(7, ConversationChatAreaComponent_Conditional_7_Conditional_7_Template, 2, 0, "div", 64)(8, ConversationChatAreaComponent_Conditional_7_Conditional_8_Template, 4, 1);
268
310
  i0.ɵɵelementEnd()();
269
311
  } if (rf & 2) {
270
312
  const ctx_r1 = i0.ɵɵnextContext();
@@ -277,17 +319,17 @@ function ConversationChatAreaComponent_Conditional_6_Template(rf, ctx) { if (rf
277
319
  i0.ɵɵadvance(2);
278
320
  i0.ɵɵconditional(ctx_r1.isLoadingPeripheralData ? 7 : 8);
279
321
  } }
280
- function ConversationChatAreaComponent_Conditional_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
281
- const _r16 = i0.ɵɵgetCurrentView();
282
- i0.ɵɵelementStart(0, "div", 71);
283
- i0.ɵɵlistener("mousedown", function ConversationChatAreaComponent_Conditional_7_Conditional_0_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onResizeStart($event)); })("touchstart", function ConversationChatAreaComponent_Conditional_7_Conditional_0_Template_div_touchstart_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onResizeTouchStart($event)); });
322
+ function ConversationChatAreaComponent_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
323
+ const _r18 = i0.ɵɵgetCurrentView();
324
+ i0.ɵɵelementStart(0, "div", 76);
325
+ i0.ɵɵlistener("mousedown", function ConversationChatAreaComponent_Conditional_8_Conditional_0_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onResizeStart($event)); })("touchstart", function ConversationChatAreaComponent_Conditional_8_Conditional_0_Template_div_touchstart_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onResizeTouchStart($event)); });
284
326
  i0.ɵɵelementEnd();
285
327
  } }
286
- function ConversationChatAreaComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
287
- const _r15 = i0.ɵɵgetCurrentView();
288
- i0.ɵɵconditionalCreate(0, ConversationChatAreaComponent_Conditional_7_Conditional_0_Template, 1, 0, "div", 68);
289
- i0.ɵɵelementStart(1, "div", 69)(2, "mj-artifact-viewer-panel", 70);
290
- i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCloseArtifactPanel()); })("saveToCollectionRequested", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_saveToCollectionRequested_2_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSaveToCollectionRequested($event)); })("navigateToLink", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactShareRequested($event)); })("maximizeToggled", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_maximizeToggled_2_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleMaximizeArtifactPane()); })("openEntityRecord", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_openEntityRecord_2_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("navigationRequest", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_navigationRequest_2_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNavigationRequest($event)); })("analyzeRequested", function ConversationChatAreaComponent_Conditional_7_Template_mj_artifact_viewer_panel_analyzeRequested_2_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnAnalyzeArtifact($event)); });
328
+ function ConversationChatAreaComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
329
+ const _r17 = i0.ɵɵgetCurrentView();
330
+ i0.ɵɵconditionalCreate(0, ConversationChatAreaComponent_Conditional_8_Conditional_0_Template, 1, 0, "div", 73);
331
+ i0.ɵɵelementStart(1, "div", 74)(2, "mj-artifact-viewer-panel", 75);
332
+ i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCloseArtifactPanel()); })("saveToCollectionRequested", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_saveToCollectionRequested_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSaveToCollectionRequested($event)); })("navigateToLink", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onArtifactShareRequested($event)); })("maximizeToggled", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_maximizeToggled_2_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleMaximizeArtifactPane()); })("openEntityRecord", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_openEntityRecord_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("navigationRequest", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_navigationRequest_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNavigationRequest($event)); })("analyzeRequested", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_analyzeRequested_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnAnalyzeArtifact($event)); })("applyFormRequested", function ConversationChatAreaComponent_Conditional_8_Template_mj_artifact_viewer_panel_applyFormRequested_2_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnApplyFormRequested($event)); });
291
333
  i0.ɵɵelementEnd()();
292
334
  } if (rf & 2) {
293
335
  const ctx_r1 = i0.ɵɵnextContext();
@@ -298,50 +340,50 @@ function ConversationChatAreaComponent_Conditional_7_Template(rf, ctx) { if (rf
298
340
  i0.ɵɵadvance();
299
341
  i0.ɵɵproperty("artifactId", ctx_r1.selectedArtifactId)("currentUser", ctx_r1.currentUser)("environmentId", ctx_r1.environmentId)("versionNumber", ctx_r1.selectedVersionNumber)("viewContext", "conversation")("canShare", ctx_r1.canShareSelectedArtifact)("canEdit", ctx_r1.canEditSelectedArtifact)("isMaximized", ctx_r1.isArtifactPaneMaximized)("refreshTrigger", ctx_r1.artifactViewerRefresh$);
300
342
  } }
301
- function ConversationChatAreaComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
302
- const _r17 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "mj-pinned-messages-panel", 72);
304
- i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_9_Template_mj_pinned_messages_panel_closed_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showPinsPanel = false); })("jumpRequested", function ConversationChatAreaComponent_Conditional_9_Template_mj_pinned_messages_panel_jumpRequested_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onJumpToMessage($event)); })("unpinRequested", function ConversationChatAreaComponent_Conditional_9_Template_mj_pinned_messages_panel_unpinRequested_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onUnpinFromPanel($event)); });
343
+ function ConversationChatAreaComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
344
+ const _r19 = i0.ɵɵgetCurrentView();
345
+ i0.ɵɵelementStart(0, "mj-pinned-messages-panel", 77);
346
+ i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_10_Template_mj_pinned_messages_panel_closed_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showPinsPanel = false); })("jumpRequested", function ConversationChatAreaComponent_Conditional_10_Template_mj_pinned_messages_panel_jumpRequested_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onJumpToMessage($event)); })("unpinRequested", function ConversationChatAreaComponent_Conditional_10_Template_mj_pinned_messages_panel_unpinRequested_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onUnpinFromPanel($event)); });
305
347
  i0.ɵɵelementEnd();
306
348
  } if (rf & 2) {
307
349
  const ctx_r1 = i0.ɵɵnextContext();
308
350
  i0.ɵɵproperty("pinnedMessages", ctx_r1.pinnedMessages);
309
351
  } }
310
- function ConversationChatAreaComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
311
- const _r18 = i0.ɵɵgetCurrentView();
312
- i0.ɵɵelementStart(0, "mj-thread-panel", 73);
313
- i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_10_Template_mj_thread_panel_closed_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLocalThreadClosed()); })("replyAdded", function ConversationChatAreaComponent_Conditional_10_Template_mj_thread_panel_replyAdded_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onThreadReplyAdded($event)); });
352
+ function ConversationChatAreaComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
353
+ const _r20 = i0.ɵɵgetCurrentView();
354
+ i0.ɵɵelementStart(0, "mj-thread-panel", 78);
355
+ i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_11_Template_mj_thread_panel_closed_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLocalThreadClosed()); })("replyAdded", function ConversationChatAreaComponent_Conditional_11_Template_mj_thread_panel_replyAdded_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onThreadReplyAdded($event)); });
314
356
  i0.ɵɵelementEnd();
315
357
  } if (rf & 2) {
316
358
  const ctx_r1 = i0.ɵɵnextContext();
317
359
  i0.ɵɵproperty("parentMessageId", ctx_r1.threadId)("conversationId", ctx_r1.conversationId || "")("currentUser", ctx_r1.currentUser);
318
360
  } }
319
- function ConversationChatAreaComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
320
- const _r19 = i0.ɵɵgetCurrentView();
321
- i0.ɵɵelementStart(0, "div", 74);
322
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_14_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showProjectSelector = false); });
323
- i0.ɵɵelementStart(1, "div", 75);
324
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_14_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
325
- i0.ɵɵelementStart(2, "div", 76)(3, "h3");
361
+ function ConversationChatAreaComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
362
+ const _r21 = i0.ɵɵgetCurrentView();
363
+ i0.ɵɵelementStart(0, "div", 79);
364
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showProjectSelector = false); });
365
+ i0.ɵɵelementStart(1, "div", 80);
366
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r21); return i0.ɵɵresetView($event.stopPropagation()); });
367
+ i0.ɵɵelementStart(2, "div", 81)(3, "h3");
326
368
  i0.ɵɵtext(4, "Assign Project");
327
369
  i0.ɵɵelementEnd();
328
- i0.ɵɵelementStart(5, "button", 77);
329
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_14_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showProjectSelector = false); });
330
- i0.ɵɵelement(6, "i", 78);
370
+ i0.ɵɵelementStart(5, "button", 82);
371
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showProjectSelector = false); });
372
+ i0.ɵɵelement(6, "i", 83);
331
373
  i0.ɵɵelementEnd()();
332
- i0.ɵɵelementStart(7, "div", 79)(8, "mj-project-selector", 80);
333
- i0.ɵɵlistener("projectSelected", function ConversationChatAreaComponent_Conditional_14_Template_mj_project_selector_projectSelected_8_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onProjectSelected($event)); });
374
+ i0.ɵɵelementStart(7, "div", 84)(8, "mj-project-selector", 85);
375
+ i0.ɵɵlistener("projectSelected", function ConversationChatAreaComponent_Conditional_15_Template_mj_project_selector_projectSelected_8_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onProjectSelected($event)); });
334
376
  i0.ɵɵelementEnd()()()();
335
377
  } if (rf & 2) {
336
378
  const ctx_r1 = i0.ɵɵnextContext();
337
379
  i0.ɵɵadvance(8);
338
380
  i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("selectedProjectId", ctx_r1.conversation.ProjectID);
339
381
  } }
340
- function ConversationChatAreaComponent_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
341
- const _r21 = i0.ɵɵgetCurrentView();
342
- i0.ɵɵelementStart(0, "button", 87);
343
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleSystemArtifacts()); });
344
- i0.ɵɵelement(1, "i", 88);
382
+ function ConversationChatAreaComponent_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
383
+ const _r23 = i0.ɵɵgetCurrentView();
384
+ i0.ɵɵelementStart(0, "button", 92);
385
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleSystemArtifacts()); });
386
+ i0.ɵɵelement(1, "i", 93);
345
387
  i0.ɵɵelementStart(2, "span");
346
388
  i0.ɵɵtext(3);
347
389
  i0.ɵɵelementEnd()();
@@ -351,110 +393,110 @@ function ConversationChatAreaComponent_Conditional_15_Conditional_6_Template(rf,
351
393
  i0.ɵɵadvance(3);
352
394
  i0.ɵɵtextInterpolate1("", ctx_r1.showSystemArtifacts ? "Hide" : "Show", " System");
353
395
  } }
354
- function ConversationChatAreaComponent_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
355
- i0.ɵɵelementStart(0, "div", 85);
356
- i0.ɵɵelement(1, "i", 89);
357
- i0.ɵɵelementStart(2, "p", 90);
396
+ function ConversationChatAreaComponent_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵelementStart(0, "div", 90);
398
+ i0.ɵɵelement(1, "i", 94);
399
+ i0.ɵɵelementStart(2, "p", 95);
358
400
  i0.ɵɵtext(3, "No artifacts in this conversation yet");
359
401
  i0.ɵɵelementEnd()();
360
402
  } }
361
- function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_8_Template(rf, ctx) { if (rf & 1) {
403
+ function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_8_Template(rf, ctx) { if (rf & 1) {
362
404
  i0.ɵɵtext(0);
363
405
  } if (rf & 2) {
364
- const artifact_r23 = i0.ɵɵnextContext().$implicit;
365
- i0.ɵɵtextInterpolate1(" ", artifact_r23.versionCount, " versions ");
406
+ const artifact_r25 = i0.ɵɵnextContext().$implicit;
407
+ i0.ɵɵtextInterpolate1(" ", artifact_r25.versionCount, " versions ");
366
408
  } }
367
- function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
409
+ function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
368
410
  i0.ɵɵtext(0, " 1 version ");
369
411
  } }
370
- function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
371
- const _r24 = i0.ɵɵgetCurrentView();
372
- i0.ɵɵelementStart(0, "button", 102);
373
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_10_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r24); const artifact_r23 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleArtifactExpansion(artifact_r23.artifactId, $event)); });
374
- i0.ɵɵelement(1, "i", 103);
412
+ function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
413
+ const _r26 = i0.ɵɵgetCurrentView();
414
+ i0.ɵɵelementStart(0, "button", 107);
415
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_10_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r26); const artifact_r25 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleArtifactExpansion(artifact_r25.artifactId, $event)); });
416
+ i0.ɵɵelement(1, "i", 108);
375
417
  i0.ɵɵelementEnd();
376
418
  } if (rf & 2) {
377
- const artifact_r23 = i0.ɵɵnextContext().$implicit;
419
+ const artifact_r25 = i0.ɵɵnextContext().$implicit;
378
420
  const ctx_r1 = i0.ɵɵnextContext(2);
379
421
  i0.ɵɵadvance();
380
- i0.ɵɵclassProp("fa-chevron-down", ctx_r1.expandedArtifactId !== artifact_r23.artifactId)("fa-chevron-up", ctx_r1.expandedArtifactId === artifact_r23.artifactId);
422
+ i0.ɵɵclassProp("fa-chevron-down", ctx_r1.expandedArtifactId !== artifact_r25.artifactId)("fa-chevron-up", ctx_r1.expandedArtifactId === artifact_r25.artifactId);
381
423
  } }
382
- function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
383
- const _r25 = i0.ɵɵgetCurrentView();
384
- i0.ɵɵelementStart(0, "div", 105);
385
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_13_For_2_Template_div_click_0_listener($event) { const version_r26 = i0.ɵɵrestoreView(_r25).$implicit; const artifact_r23 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.openArtifactFromModal(artifact_r23.artifactId, version_r26.versionNumber); return i0.ɵɵresetView($event.stopPropagation()); });
386
- i0.ɵɵelementStart(1, "span", 106);
424
+ function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
425
+ const _r27 = i0.ɵɵgetCurrentView();
426
+ i0.ɵɵelementStart(0, "div", 110);
427
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_13_For_2_Template_div_click_0_listener($event) { const version_r28 = i0.ɵɵrestoreView(_r27).$implicit; const artifact_r25 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.openArtifactFromModal(artifact_r25.artifactId, version_r28.versionNumber); return i0.ɵɵresetView($event.stopPropagation()); });
428
+ i0.ɵɵelementStart(1, "span", 111);
387
429
  i0.ɵɵtext(2);
388
430
  i0.ɵɵelementEnd();
389
- i0.ɵɵelementStart(3, "span", 107);
431
+ i0.ɵɵelementStart(3, "span", 112);
390
432
  i0.ɵɵtext(4, "Open this version");
391
433
  i0.ɵɵelementEnd();
392
- i0.ɵɵelement(5, "i", 108);
434
+ i0.ɵɵelement(5, "i", 113);
393
435
  i0.ɵɵelementEnd();
394
436
  } if (rf & 2) {
395
- const version_r26 = ctx.$implicit;
437
+ const version_r28 = ctx.$implicit;
396
438
  i0.ɵɵadvance(2);
397
- i0.ɵɵtextInterpolate1("v", version_r26.versionNumber);
439
+ i0.ɵɵtextInterpolate1("v", version_r28.versionNumber);
398
440
  } }
399
- function ConversationChatAreaComponent_Conditional_15_For_12_Conditional_13_Template(rf, ctx) { if (rf & 1) {
400
- i0.ɵɵelementStart(0, "div", 101);
401
- i0.ɵɵrepeaterCreate(1, ConversationChatAreaComponent_Conditional_15_For_12_Conditional_13_For_2_Template, 6, 1, "div", 104, _forTrack2);
441
+ function ConversationChatAreaComponent_Conditional_16_For_12_Conditional_13_Template(rf, ctx) { if (rf & 1) {
442
+ i0.ɵɵelementStart(0, "div", 106);
443
+ i0.ɵɵrepeaterCreate(1, ConversationChatAreaComponent_Conditional_16_For_12_Conditional_13_For_2_Template, 6, 1, "div", 109, _forTrack2);
402
444
  i0.ɵɵelementEnd();
403
445
  } if (rf & 2) {
404
- const artifact_r23 = i0.ɵɵnextContext().$implicit;
446
+ const artifact_r25 = i0.ɵɵnextContext().$implicit;
405
447
  i0.ɵɵadvance();
406
- i0.ɵɵrepeater(artifact_r23.versions);
448
+ i0.ɵɵrepeater(artifact_r25.versions);
407
449
  } }
408
- function ConversationChatAreaComponent_Conditional_15_For_12_Template(rf, ctx) { if (rf & 1) {
409
- const _r22 = i0.ɵɵgetCurrentView();
410
- i0.ɵɵelementStart(0, "div", 91)(1, "div", 92);
411
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_For_12_Template_div_click_1_listener() { const artifact_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openArtifactFromModal(artifact_r23.artifactId)); });
412
- i0.ɵɵelementStart(2, "div", 93);
413
- i0.ɵɵelement(3, "i", 94);
450
+ function ConversationChatAreaComponent_Conditional_16_For_12_Template(rf, ctx) { if (rf & 1) {
451
+ const _r24 = i0.ɵɵgetCurrentView();
452
+ i0.ɵɵelementStart(0, "div", 96)(1, "div", 97);
453
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_For_12_Template_div_click_1_listener() { const artifact_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openArtifactFromModal(artifact_r25.artifactId)); });
454
+ i0.ɵɵelementStart(2, "div", 98);
455
+ i0.ɵɵelement(3, "i", 99);
414
456
  i0.ɵɵelementEnd();
415
- i0.ɵɵelementStart(4, "div", 95)(5, "div", 96);
457
+ i0.ɵɵelementStart(4, "div", 100)(5, "div", 101);
416
458
  i0.ɵɵtext(6);
417
459
  i0.ɵɵelementEnd();
418
- i0.ɵɵelementStart(7, "div", 97);
419
- i0.ɵɵconditionalCreate(8, ConversationChatAreaComponent_Conditional_15_For_12_Conditional_8_Template, 1, 1)(9, ConversationChatAreaComponent_Conditional_15_For_12_Conditional_9_Template, 1, 0);
460
+ i0.ɵɵelementStart(7, "div", 102);
461
+ i0.ɵɵconditionalCreate(8, ConversationChatAreaComponent_Conditional_16_For_12_Conditional_8_Template, 1, 1)(9, ConversationChatAreaComponent_Conditional_16_For_12_Conditional_9_Template, 1, 0);
420
462
  i0.ɵɵelementEnd()();
421
- i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_15_For_12_Conditional_10_Template, 2, 4, "button", 98);
422
- i0.ɵɵelementStart(11, "div", 99);
423
- i0.ɵɵelement(12, "i", 100);
463
+ i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_16_For_12_Conditional_10_Template, 2, 4, "button", 103);
464
+ i0.ɵɵelementStart(11, "div", 104);
465
+ i0.ɵɵelement(12, "i", 105);
424
466
  i0.ɵɵelementEnd()();
425
- i0.ɵɵconditionalCreate(13, ConversationChatAreaComponent_Conditional_15_For_12_Conditional_13_Template, 3, 0, "div", 101);
467
+ i0.ɵɵconditionalCreate(13, ConversationChatAreaComponent_Conditional_16_For_12_Conditional_13_Template, 3, 0, "div", 106);
426
468
  i0.ɵɵelementEnd();
427
469
  } if (rf & 2) {
428
- const artifact_r23 = ctx.$implicit;
470
+ const artifact_r25 = ctx.$implicit;
429
471
  const ctx_r1 = i0.ɵɵnextContext(2);
430
- i0.ɵɵclassProp("expanded", ctx_r1.expandedArtifactId === artifact_r23.artifactId)("system-artifact", artifact_r23.visibility === "System Only");
472
+ i0.ɵɵclassProp("expanded", ctx_r1.expandedArtifactId === artifact_r25.artifactId)("system-artifact", artifact_r25.visibility === "System Only");
431
473
  i0.ɵɵadvance(6);
432
- i0.ɵɵtextInterpolate(artifact_r23.name);
474
+ i0.ɵɵtextInterpolate(artifact_r25.name);
433
475
  i0.ɵɵadvance(2);
434
- i0.ɵɵconditional(artifact_r23.versionCount > 1 ? 8 : 9);
476
+ i0.ɵɵconditional(artifact_r25.versionCount > 1 ? 8 : 9);
435
477
  i0.ɵɵadvance(2);
436
- i0.ɵɵconditional(artifact_r23.versionCount > 1 ? 10 : -1);
478
+ i0.ɵɵconditional(artifact_r25.versionCount > 1 ? 10 : -1);
437
479
  i0.ɵɵadvance(3);
438
- i0.ɵɵconditional(ctx_r1.expandedArtifactId === artifact_r23.artifactId && artifact_r23.versionCount > 1 ? 13 : -1);
480
+ i0.ɵɵconditional(ctx_r1.expandedArtifactId === artifact_r25.artifactId && artifact_r25.versionCount > 1 ? 13 : -1);
439
481
  } }
440
- function ConversationChatAreaComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
441
- const _r20 = i0.ɵɵgetCurrentView();
442
- i0.ɵɵelementStart(0, "div", 74);
443
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showArtifactsModal = false); });
444
- i0.ɵɵelementStart(1, "div", 81);
445
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r20); return i0.ɵɵresetView($event.stopPropagation()); });
446
- i0.ɵɵelementStart(2, "div", 76)(3, "h3");
482
+ function ConversationChatAreaComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
483
+ const _r22 = i0.ɵɵgetCurrentView();
484
+ i0.ɵɵelementStart(0, "div", 79);
485
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showArtifactsModal = false); });
486
+ i0.ɵɵelementStart(1, "div", 86);
487
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r22); return i0.ɵɵresetView($event.stopPropagation()); });
488
+ i0.ɵɵelementStart(2, "div", 81)(3, "h3");
447
489
  i0.ɵɵtext(4, "Conversation Artifacts");
448
490
  i0.ɵɵelementEnd();
449
- i0.ɵɵelementStart(5, "div", 82);
450
- i0.ɵɵconditionalCreate(6, ConversationChatAreaComponent_Conditional_15_Conditional_6_Template, 4, 3, "button", 83);
451
- i0.ɵɵelementStart(7, "button", 77);
452
- i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_15_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showArtifactsModal = false); });
453
- i0.ɵɵelement(8, "i", 78);
491
+ i0.ɵɵelementStart(5, "div", 87);
492
+ i0.ɵɵconditionalCreate(6, ConversationChatAreaComponent_Conditional_16_Conditional_6_Template, 4, 3, "button", 88);
493
+ i0.ɵɵelementStart(7, "button", 82);
494
+ i0.ɵɵlistener("click", function ConversationChatAreaComponent_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showArtifactsModal = false); });
495
+ i0.ɵɵelement(8, "i", 83);
454
496
  i0.ɵɵelementEnd()()();
455
- i0.ɵɵelementStart(9, "div", 84);
456
- i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_15_Conditional_10_Template, 4, 0, "div", 85);
457
- i0.ɵɵrepeaterCreate(11, ConversationChatAreaComponent_Conditional_15_For_12_Template, 14, 8, "div", 86, _forTrack1);
497
+ i0.ɵɵelementStart(9, "div", 89);
498
+ i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_16_Conditional_10_Template, 4, 0, "div", 90);
499
+ i0.ɵɵrepeaterCreate(11, ConversationChatAreaComponent_Conditional_16_For_12_Template, 14, 8, "div", 91, _forTrack1);
458
500
  i0.ɵɵelementEnd()()();
459
501
  } if (rf & 2) {
460
502
  const ctx_r1 = i0.ɵɵnextContext();
@@ -465,28 +507,28 @@ function ConversationChatAreaComponent_Conditional_15_Template(rf, ctx) { if (rf
465
507
  i0.ɵɵadvance();
466
508
  i0.ɵɵrepeater(ctx_r1.getArtifactsArray());
467
509
  } }
468
- function ConversationChatAreaComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
469
- const _r27 = i0.ɵɵgetCurrentView();
470
- i0.ɵɵelementStart(0, "mj-artifact-collection-picker-modal", 109);
471
- i0.ɵɵlistener("completed", function ConversationChatAreaComponent_Conditional_16_Template_mj_artifact_collection_picker_modal_completed_0_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCollectionPickerCompleted($event)); })("cancelled", function ConversationChatAreaComponent_Conditional_16_Template_mj_artifact_collection_picker_modal_cancelled_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCollectionPickerCancelled()); });
510
+ function ConversationChatAreaComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
511
+ const _r29 = i0.ɵɵgetCurrentView();
512
+ i0.ɵɵelementStart(0, "mj-artifact-collection-picker-modal", 114);
513
+ i0.ɵɵlistener("completed", function ConversationChatAreaComponent_Conditional_17_Template_mj_artifact_collection_picker_modal_completed_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCollectionPickerCompleted($event)); })("cancelled", function ConversationChatAreaComponent_Conditional_17_Template_mj_artifact_collection_picker_modal_cancelled_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCollectionPickerCancelled()); });
472
514
  i0.ɵɵelementEnd();
473
515
  } if (rf & 2) {
474
516
  const ctx_r1 = i0.ɵɵnextContext();
475
517
  i0.ɵɵproperty("isOpen", ctx_r1.showCollectionPicker)("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("excludeCollectionIds", ctx_r1.collectionPickerExcludedIds)("artifactVersionId", ctx_r1.collectionPickerVersionId)("artifactName", ctx_r1.collectionPickerArtifactName)("artifactVersionNumber", ctx_r1.collectionPickerVersionNumber);
476
518
  } }
477
- function ConversationChatAreaComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
478
- const _r28 = i0.ɵɵgetCurrentView();
479
- i0.ɵɵelementStart(0, "mj-test-feedback-dialog", 110);
480
- i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_17_Template_mj_test_feedback_dialog_closed_0_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestFeedbackDialogClosed($event)); });
519
+ function ConversationChatAreaComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
520
+ const _r30 = i0.ɵɵgetCurrentView();
521
+ i0.ɵɵelementStart(0, "mj-test-feedback-dialog", 115);
522
+ i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_18_Template_mj_test_feedback_dialog_closed_0_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestFeedbackDialogClosed($event)); });
481
523
  i0.ɵɵelementEnd();
482
524
  } if (rf & 2) {
483
525
  const ctx_r1 = i0.ɵɵnextContext();
484
526
  i0.ɵɵproperty("data", ctx_r1.testFeedbackDialogData)("visible", ctx_r1.showTestFeedbackDialog);
485
527
  } }
486
- function ConversationChatAreaComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
487
- const _r29 = i0.ɵɵgetCurrentView();
488
- i0.ɵɵelementStart(0, "mj-image-viewer", 111);
489
- i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_18_Template_mj_image_viewer_closed_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onImageViewerClosed()); });
528
+ function ConversationChatAreaComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
529
+ const _r31 = i0.ɵɵgetCurrentView();
530
+ i0.ɵɵelementStart(0, "mj-image-viewer", 116);
531
+ i0.ɵɵlistener("closed", function ConversationChatAreaComponent_Conditional_19_Template_mj_image_viewer_closed_0_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onImageViewerClosed()); });
490
532
  i0.ɵɵelementEnd();
491
533
  } if (rf & 2) {
492
534
  const ctx_r1 = i0.ɵɵnextContext();
@@ -509,6 +551,7 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
509
551
  bridge;
510
552
  analyzeArtifactService;
511
553
  uiCommandHandler;
554
+ interactiveFormApplyService;
512
555
  environmentId;
513
556
  currentUser;
514
557
  // LOCAL STATE INPUTS - passed from parent workspace
@@ -528,6 +571,30 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
528
571
  }
529
572
  conversation = null;
530
573
  threadId = null;
574
+ /**
575
+ * When true, render the normal message-list + message-input layout even
576
+ * before a conversation exists, instead of the centered empty-state
577
+ * welcome card. Lets host pages (e.g. Form Builder cockpit) put the chat
578
+ * header + mode picker front-and-center on first open and let the user
579
+ * pick a mode before typing. The first send still routes through
580
+ * MessageInputComponent and triggers conversationCreated as usual.
581
+ */
582
+ suppressNewConversationEmptyState = false;
583
+ /**
584
+ * Host-level cap for @-mention autocomplete (agents and users).
585
+ * Defaults true. Hosts addressing a single fixed agent (e.g. Form Builder
586
+ * cockpit pinned to the Form Builder agent) should set false so the user
587
+ * can't accidentally redirect a turn to a different agent.
588
+ */
589
+ allowMentions = true;
590
+ /**
591
+ * Host-level cap for attachments. Defaults true. When false, the host
592
+ * disables attachments regardless of agent modality support — useful for
593
+ * surfaces where attachments don't make sense (cockpit text-only flows).
594
+ * When true (default), attachment availability still depends on the
595
+ * agent's modality support, computed at runtime.
596
+ */
597
+ allowAttachments = true;
531
598
  _isNewConversation = false;
532
599
  set isNewConversation(value) {
533
600
  this._isNewConversation = value;
@@ -572,6 +639,113 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
572
639
  showArtifactIndicator = true;
573
640
  /** Application context snapshot for AI agent awareness. Included in agent execution data. */
574
641
  appContext = null;
642
+ /**
643
+ * Optional default agent ID for the conversation. Forwarded to
644
+ * `<mj-message-input>` as its `[defaultAgentId]` so the first message
645
+ * routes directly to this agent instead of Sage. See
646
+ * `MessageInputComponent.routeMessage` priority rules — explicit
647
+ * @mention and prior-agent continuity still take precedence.
648
+ *
649
+ * Embedded chat surfaces (Form Builder cockpit, future domain chats)
650
+ * set this to the specialist agent's ID; the main Chat app leaves it
651
+ * unset to preserve the Sage-fronted UX.
652
+ */
653
+ defaultAgentId = null;
654
+ /**
655
+ * Scope to apply when this surface CREATES a new conversation. Forwarded
656
+ * to `ConversationEngine.CreateConversation` so the new row's
657
+ * `ApplicationScope` column is stamped correctly. Embedded surfaces
658
+ * (e.g. the Form Builder cockpit) set this to `'Application'` so their
659
+ * conversations don't pollute the main Chat app list. Main Chat leaves
660
+ * it as the default `'Global'`. Has no effect on existing conversations.
661
+ */
662
+ applicationScope = 'Global';
663
+ /**
664
+ * Application ID to bind a newly-created conversation to. REQUIRED when
665
+ * `applicationScope` is 'Application' or 'Both' (DB CHECK constraint
666
+ * enforces it). Used by embedded chat surfaces to scope their
667
+ * conversations to their owning Application.
668
+ */
669
+ applicationId = null;
670
+ /**
671
+ * "What is this conversation about?" — the Entity ID this conversation
672
+ * references. Forwarded to `ConversationEngine.CreateConversation` so
673
+ * the new row's `LinkedEntityID` is stamped at creation time. Paired
674
+ * with {@link linkedRecordId} (DB CHECK requires both populated or both
675
+ * null). Form Builder cockpit passes the MJ: Components entity ID;
676
+ * Component Studio's AI panel does the same. Surfaces use this to
677
+ * later list "prior conversations about THIS form/component."
678
+ * Has no effect on existing conversations.
679
+ */
680
+ linkedEntityId = null;
681
+ /**
682
+ * Primary key of the linked record, serialized as a string. Used with
683
+ * {@link linkedEntityId}. Form Builder cockpit passes the active
684
+ * form's ComponentID; Component Studio's AI panel passes the
685
+ * currently-selected component's ID.
686
+ */
687
+ linkedRecordId = null;
688
+ /**
689
+ * Whether the conversation header should render the per-conversation
690
+ * agent picker. Default true. The picker lets a user pin a default
691
+ * agent on the active conversation (saved to
692
+ * `MJConversationEntity.DefaultAgentID`), so non-mention messages route
693
+ * to that agent instead of through Sage. Surfaces with no meaningful
694
+ * agent-choice UX can set this to false to hide the widget.
695
+ */
696
+ showAgentPicker = true;
697
+ /**
698
+ * Whether the chat header should render the per-agent mode/quality
699
+ * picker (Draft / Standard / High, etc.). Default true. The picker
700
+ * auto-hides when the bound agent has fewer than 2 configured
701
+ * presets, so embedders rarely need to set this explicitly — turn
702
+ * off only when the surface should never expose model-tier choice
703
+ * (kiosks, specialty embeds).
704
+ */
705
+ showAgentModePicker = true;
706
+ /**
707
+ * The mode/preset picker's selected configuration ID, forwarded to
708
+ * `<mj-message-input>` so non-mention routes apply it on the next
709
+ * send. Past messages are NOT retroactively re-routed — the picker
710
+ * only affects subsequent requests. Updated when the user picks a
711
+ * row in the mode picker; the picker itself persists the choice
712
+ * per-user, per-agent via UserInfoEngine.
713
+ */
714
+ ActiveAgentConfigurationPresetId = null;
715
+ /**
716
+ * Agent the mode picker should target. Mirrors the routing precedence
717
+ * minus message-history continuity (the picker is persistent UI; it
718
+ * shouldn't flip as the user scrolls history).
719
+ *
720
+ * Order: conversation-pinned default → embedder default → Sage.
721
+ */
722
+ /**
723
+ * True when the chat header should render even before a conversation
724
+ * row exists. Currently means: the embedder has enabled the mode
725
+ * picker AND we resolved a target agent for it (so there's actually
726
+ * something to put in the header). Lets surfaces like the Form
727
+ * Builder cockpit show the mode picker on top of the empty-state
728
+ * instead of waiting for the first message to create a conversation.
729
+ */
730
+ get HasPreConversationHeader() {
731
+ return this.showAgentModePicker && !!this.ModePickerTargetAgentId;
732
+ }
733
+ get ModePickerTargetAgentId() {
734
+ return this.conversation?.DefaultAgentID
735
+ ?? this.defaultAgentId
736
+ ?? this.conversationManagerAgent?.ID
737
+ ?? null;
738
+ }
739
+ /**
740
+ * Mode picker emitted a new selection. Store it; the next message's
741
+ * route picks it up via `<mj-message-input>`'s
742
+ * `[agentConfigurationPresetId]` binding. Past messages stay routed
743
+ * as they were — the change is forward-only.
744
+ */
745
+ OnAgentModePresetChanged(presetId) {
746
+ this.ActiveAgentConfigurationPresetId = presetId;
747
+ this.cdr.markForCheck();
748
+ }
575
749
  /** Greeting message shown in the empty state when no conversation is active */
576
750
  emptyStateGreeting = 'How can I help you?';
577
751
  // Sidebar toggle - when true, shows toggle button in header to expand sidebar
@@ -712,7 +886,7 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
712
886
  acceptedFileTypes = 'image/*';
713
887
  conversationManagerAgent = null;
714
888
  engine = ConversationEngine.Instance;
715
- constructor(agentStateService, conversationAgentService, activeTasks, cdr, mentionAutocompleteService, artifactPermissionService, attachmentService, streamingService, confirmDialog, bridge, analyzeArtifactService, uiCommandHandler) {
889
+ constructor(agentStateService, conversationAgentService, activeTasks, cdr, mentionAutocompleteService, artifactPermissionService, attachmentService, streamingService, confirmDialog, bridge, analyzeArtifactService, uiCommandHandler, interactiveFormApplyService) {
716
890
  super();
717
891
  this.agentStateService = agentStateService;
718
892
  this.conversationAgentService = conversationAgentService;
@@ -726,6 +900,16 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
726
900
  this.bridge = bridge;
727
901
  this.analyzeArtifactService = analyzeArtifactService;
728
902
  this.uiCommandHandler = uiCommandHandler;
903
+ this.interactiveFormApplyService = interactiveFormApplyService;
904
+ }
905
+ /**
906
+ * Apply a form-role artifact's spec as an EntityFormOverride for the
907
+ * current user. The service handles the Create-vs-Modify decision (based
908
+ * on whether an Active override already exists), confirms via dialog,
909
+ * and surfaces success/failure via notification.
910
+ */
911
+ async OnApplyFormRequested(event) {
912
+ await this.interactiveFormApplyService.ConfirmAndApply(event.spec, event.entityName, this.ProviderToUse);
729
913
  }
730
914
  async ngOnInit() {
731
915
  // Bind provider-aware services to this component's provider so multi-server
@@ -2268,9 +2452,35 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
2268
2452
  LogStatusEx({ message: '📨 Empty state message received', verboseOnly: true, additionalArgs: [text, `${attachments?.length || 0} attachments`] });
2269
2453
  try {
2270
2454
  this.isProcessing = true;
2271
- // Create a new conversation using the engine
2455
+ // Create a new conversation using the engine. applicationScope +
2456
+ // applicationId let embedded surfaces (e.g. the Form Builder cockpit)
2457
+ // stamp their conversations as 'Application'-scoped so they don't
2458
+ // leak into the main chat list. defaultAgentId pins the routing
2459
+ // target for the first message — it's the same value forwarded to
2460
+ // <mj-message-input> as [defaultAgentId].
2461
+ //
2462
+ // Safety net: the DB CHECK constraint rejects ('Application' || 'Both')
2463
+ // without an ApplicationID. If the embedder hasn't resolved its app
2464
+ // ID yet (or it's missing from the Metadata cache), demote to
2465
+ // 'Global' so the save doesn't blow up. The conversation lands in
2466
+ // the main list — visible but not silently lost.
2467
+ const effectiveScope = (this.applicationScope !== 'Global' && !this.applicationId)
2468
+ ? 'Global'
2469
+ : this.applicationScope;
2470
+ // Linked-record stamping — both columns must be populated together
2471
+ // or both null (DB CHECK constraint CK_Conversation_LinkBinding).
2472
+ // We only forward the pair when BOTH inputs are supplied; if the
2473
+ // host bound one but not the other, treat as misconfiguration and
2474
+ // skip the linkage rather than failing the save.
2475
+ const hasLink = !!this.linkedEntityId && !!this.linkedRecordId;
2272
2476
  const newConversation = await this.engine.CreateConversation('New Conversation', // Temporary name - will be auto-named after first message
2273
- this.environmentId, this.currentUser);
2477
+ this.environmentId, this.currentUser, undefined, undefined, {
2478
+ applicationScope: effectiveScope,
2479
+ applicationId: effectiveScope === 'Global' ? null : this.applicationId,
2480
+ defaultAgentId: this.defaultAgentId,
2481
+ linkedEntityId: hasLink ? this.linkedEntityId : null,
2482
+ linkedRecordId: hasLink ? this.linkedRecordId : null,
2483
+ });
2274
2484
  if (!newConversation) {
2275
2485
  console.error('Failed to create new conversation');
2276
2486
  this.isProcessing = false;
@@ -2535,8 +2745,10 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
2535
2745
  console.log('[client:capture-data-snapshot] Opened artifact panel; waiting for viewer mount + data load');
2536
2746
  }
2537
2747
  // Poll for the snapshot — interactive components need a few render cycles
2538
- // before `getCurrentDataState()` registers via callbacks.RegisterMethod.
2539
- const snapshot = await this.waitForViewerSnapshot(10000);
2748
+ // before `getCurrentDataState()` registers via callbacks.RegisterMethod,
2749
+ // and query-backed / server-paged components need additional time to load
2750
+ // their rows (we now wait for rows, not just a registered table).
2751
+ const snapshot = await this.waitForViewerSnapshot(15000);
2540
2752
  if (!snapshot) {
2541
2753
  console.warn('[client:capture-data-snapshot] Artifact viewer did not produce a snapshot within timeout');
2542
2754
  return;
@@ -2584,19 +2796,24 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
2584
2796
  * fetches run and its `getCurrentDataState()` becomes callable via
2585
2797
  * `callbacks.RegisterMethod('getCurrentDataState', ...)`.
2586
2798
  *
2587
- * `GetCurrentStateSnapshot()` returns two distinct shapes:
2588
- * - **Live**: a populated DataSnapshot with `tables[]` containing rows.
2799
+ * `GetCurrentStateSnapshot()` returns three distinct shapes:
2800
+ * - **Live**: a populated DataSnapshot with `tables[]` whose rows are filled.
2589
2801
  * - **Fallback**: an empty placeholder with only `title` + `interpretation`
2590
2802
  * ("No live data was captured — the component either has no data-fetching
2591
2803
  * hooks or has not yet run its queries"). This fires when the React
2592
2804
  * component hasn't yet registered `getCurrentDataState()`.
2805
+ * - **Schema-only**: a structured snapshot with real `tables`/`columns` and
2806
+ * metadata (e.g. `totalAvailableRowCount`) but `rows: []`. This is common
2807
+ * for query-backed / server-paged components whose data load hasn't
2808
+ * completed (or whose visible page is empty) at the moment of capture.
2593
2809
  *
2594
- * We must NOT accept the fallback while waitingcapturing the placeholder
2595
- * defeats the entire point of the snapshot pipeline. Keep polling until we
2596
- * either see a real snapshot (has `tables`) or the timeout elapses. Only
2597
- * after timeout do we return the last available fallback (any data is
2598
- * better than no data, but the user will see the placeholder text in the
2599
- * resulting artifact).
2810
+ * We must accept ONLY a snapshot that actually carries rows a schema-only
2811
+ * or placeholder snapshot defeats the point of the pipeline (the analysis
2812
+ * agent receives an empty table). So we key "live" on `rows.length`, not just
2813
+ * `tables.length`, and keep polling so async/paged data has time to load.
2814
+ * Only after timeout do we return the last available row-less snapshot (any
2815
+ * structure is better than nothing, but the user will see an empty table in
2816
+ * the resulting artifact).
2600
2817
  */
2601
2818
  async waitForViewerSnapshot(timeoutMs) {
2602
2819
  const intervalMs = 200;
@@ -2610,7 +2827,7 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
2610
2827
  const viewer = this.artifactViewerComponent;
2611
2828
  const snap = viewer?.GetCurrentStateSnapshot?.();
2612
2829
  if (snap) {
2613
- const hasLiveData = Array.isArray(snap.tables) && snap.tables.length > 0;
2830
+ const hasLiveData = Array.isArray(snap.tables) && snap.tables.some((t) => Array.isArray(t.rows) && t.rows.length > 0);
2614
2831
  const tableShape = Array.isArray(snap.tables)
2615
2832
  ? snap.tables.map((t) => `${t.name}:${(t.rows ?? []).length}rows`).join(', ')
2616
2833
  : 'no-tables';
@@ -2952,7 +3169,7 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
2952
3169
  this.cdr.detectChanges();
2953
3170
  }
2954
3171
  }
2955
- static ɵfac = function ConversationChatAreaComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConversationChatAreaComponent)(i0.ɵɵdirectiveInject(i1.AgentStateService), i0.ɵɵdirectiveInject(i2.ConversationAgentService), i0.ɵɵdirectiveInject(i3.ActiveTasksService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i4.MentionAutocompleteService), i0.ɵɵdirectiveInject(i5.ArtifactPermissionService), i0.ɵɵdirectiveInject(i6.ConversationAttachmentService), i0.ɵɵdirectiveInject(i7.ConversationStreamingService), i0.ɵɵdirectiveInject(i8.DialogService), i0.ɵɵdirectiveInject(i9.ConversationBridgeService), i0.ɵɵdirectiveInject(i10.AnalyzeArtifactService), i0.ɵɵdirectiveInject(i11.UICommandHandlerService)); };
3172
+ static ɵfac = function ConversationChatAreaComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConversationChatAreaComponent)(i0.ɵɵdirectiveInject(i1.AgentStateService), i0.ɵɵdirectiveInject(i2.ConversationAgentService), i0.ɵɵdirectiveInject(i3.ActiveTasksService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i4.MentionAutocompleteService), i0.ɵɵdirectiveInject(i5.ArtifactPermissionService), i0.ɵɵdirectiveInject(i6.ConversationAttachmentService), i0.ɵɵdirectiveInject(i7.ConversationStreamingService), i0.ɵɵdirectiveInject(i8.DialogService), i0.ɵɵdirectiveInject(i9.ConversationBridgeService), i0.ɵɵdirectiveInject(i10.AnalyzeArtifactService), i0.ɵɵdirectiveInject(i11.UICommandHandlerService), i0.ɵɵdirectiveInject(i10.InteractiveFormApplyService)); };
2956
3173
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationChatAreaComponent, selectors: [["mj-conversation-chat-area"]], viewQuery: function ConversationChatAreaComponent_Query(rf, ctx) { if (rf & 1) {
2957
3174
  i0.ɵɵviewQuery(_c0, 5)(ArtifactViewerPanelComponent, 5)(ConversationEmptyStateComponent, 5)(_c1, 5);
2958
3175
  } if (rf & 2) {
@@ -2961,48 +3178,48 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
2961
3178
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.artifactViewerComponent = _t.first);
2962
3179
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.emptyStateComponent = _t.first);
2963
3180
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.messageInputComponents = _t);
2964
- } }, inputs: { environmentId: "environmentId", currentUser: "currentUser", conversationId: "conversationId", conversation: "conversation", threadId: "threadId", isNewConversation: "isNewConversation", pendingMessage: "pendingMessage", pendingAttachments: "pendingAttachments", pendingArtifactId: "pendingArtifactId", pendingArtifactVersionNumber: "pendingArtifactVersionNumber", overlayMode: "overlayMode", showExportButton: "showExportButton", showShareButton: "showShareButton", showArtifactIndicator: "showArtifactIndicator", appContext: "appContext", emptyStateGreeting: "emptyStateGreeting", showSidebarToggle: "showSidebarToggle" }, outputs: { conversationRenamed: "conversationRenamed", openEntityRecord: "openEntityRecord", navigationRequest: "navigationRequest", taskClicked: "taskClicked", artifactLinkClicked: "artifactLinkClicked", sidebarToggleClicked: "sidebarToggleClicked", conversationCreated: "conversationCreated", threadOpened: "threadOpened", threadClosed: "threadClosed", pendingArtifactConsumed: "pendingArtifactConsumed", pendingMessageConsumed: "pendingMessageConsumed", pendingMessageRequested: "pendingMessageRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 26, consts: [["scrollContainer", ""], ["messageInput", ""], [1, "chat-area"], [1, "chat-header"], [1, "chat-content-area"], [1, "chat-messages-pane"], [1, "conversation-loading-state"], [3, "currentUser", "disabled", "showSidebarToggle", "overlayMode", "greeting", "enableAttachments", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes"], [1, "chat-messages-wrapper"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], [3, "pinnedMessages"], [3, "parentMessageId", "conversationId", "currentUser"], [3, "cancelled", "exported", "isVisible", "conversation", "currentUser"], [3, "Result", "Visible", "Context", "Adapter"], [3, "cancelled", "membersChanged", "isVisible", "conversation", "currentUser"], [1, "modal-overlay"], [3, "isOpen", "environmentId", "currentUser", "excludeCollectionIds", "artifactVersionId", "artifactName", "artifactVersionNumber"], [3, "data", "visible"], [3, "imageUrl", "alt", "fileName", "visible"], [1, "chat-info"], ["title", "Show conversations", 1, "sidebar-toggle-btn"], [1, "chat-title"], [1, "shared-by-badge", 3, "title"], ["title", "Assign to project", 1, "project-tag"], ["title", "View Test Run", 1, "test-indicator"], [1, "chat-actions", "chat-actions-buttons"], ["title", "View pinned messages", 1, "pin-chip", 3, "active"], ["title", "View artifacts", 1, "artifact-indicator"], ["title", "View members", 1, "chat-members"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Export conversation"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "shared", "title"], ["title", "Show conversations", 1, "sidebar-toggle-btn", 3, "click"], [1, "fas", "fa-table-columns"], [1, "fas", "fa-share-nodes"], ["title", "Assign to project", 1, "project-tag", 3, "click"], [1, "fas", "fa-folder"], ["title", "View Test Run", 1, "test-indicator", 3, "click"], [1, "fas", "fa-flask"], ["title", "View pinned messages", 1, "pin-chip", 3, "click"], [1, "fas", "fa-thumbtack"], [1, "pin-chip-count"], ["title", "View artifacts", 1, "artifact-indicator", 3, "click"], [1, "fas", "fa-cube"], [1, "artifact-badge"], ["title", "View members", 1, "chat-members", 3, "click"], [1, "fas", "fa-users"], [1, "members-badge"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Export conversation", 3, "click"], [1, "fas", "fa-download"], [1, "btn-label"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click", "title"], ["text", "Loading conversation...", "size", "large"], [3, "sidebarToggleClicked", "messageSent", "currentUser", "disabled", "showSidebarToggle", "overlayMode", "greeting", "enableAttachments", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes"], [1, "upload-indicator-overlay"], [1, "chat-messages-container", 3, "scroll"], [3, "replyInThread", "viewThread", "deleteMessage", "retryMessage", "testFeedbackMessage", "artifactClicked", "messageEdited", "openEntityRecord", "suggestedResponseSelected", "attachmentClicked", "diagnosticRequested", "messagePinToggled", "messages", "conversation", "currentUser", "isProcessing", "artifactMap", "agentRunMap", "ratingsMap", "userAvatarMap", "attachmentsMap"], [1, "scroll-to-bottom-icon", 2, "left", "50%"], [1, "chat-input-container"], [1, "loading-peripheral-placeholder"], ["size", "medium", 3, "text"], [1, "scroll-to-bottom-icon", 2, "left", "50%", 3, "click"], [1, "fas", "fa-arrow-down"], ["text", "Loading conversation data...", "size", "medium"], ["role", "status", 1, "read-only-banner"], [1, "message-input-container-wrapper"], [3, "hidden", "conversationId", "conversationName", "currentUser", "conversationHistory", "artifactsByDetailId", "systemArtifactsByDetailId", "agentRunsByDetailId", "appContext", "inProgressMessageIds", "disabled", "enableAttachments", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes", "initialMessage", "initialAttachments"], [1, "fas", "fa-eye"], [3, "messageSent", "agentResponse", "agentRunDetected", "agentRunUpdate", "messageComplete", "artifactCreated", "conversationRenamed", "intentCheckStarted", "intentCheckCompleted", "uploadStateChanged", "hidden", "conversationId", "conversationName", "currentUser", "conversationHistory", "artifactsByDetailId", "systemArtifactsByDetailId", "agentRunsByDetailId", "appContext", "inProgressMessageIds", "disabled", "enableAttachments", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes", "initialMessage", "initialAttachments"], [1, "resize-handle"], [1, "chat-artifact-pane"], [3, "closed", "saveToCollectionRequested", "navigateToLink", "shareRequested", "maximizeToggled", "openEntityRecord", "navigationRequest", "analyzeRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "viewContext", "canShare", "canEdit", "isMaximized", "refreshTrigger"], [1, "resize-handle", 3, "mousedown", "touchstart"], [3, "closed", "jumpRequested", "unpinRequested", "pinnedMessages"], [3, "closed", "replyAdded", "parentMessageId", "conversationId", "currentUser"], [1, "modal-overlay", 3, "click"], [1, "modal-content", "project-selector-modal", 3, "click"], [1, "modal-header"], [1, "modal-close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "modal-body"], [3, "projectSelected", "environmentId", "currentUser", "selectedProjectId"], [1, "modal-content", "artifacts-modal", 3, "click"], [1, "modal-header-actions"], ["title", "Toggle system artifacts visibility", 1, "toggle-system-btn", 3, "active"], [1, "modal-body", "artifacts-grid"], [1, "empty-state"], [1, "artifact-modal-card", 3, "expanded", "system-artifact"], ["title", "Toggle system artifacts visibility", 1, "toggle-system-btn", 3, "click"], [1, "fas", "fa-cog"], [1, "fas", "fa-cube", 2, "font-size", "48px", "color", "var(--mj-text-muted)", "margin-bottom", "16px"], [2, "color", "var(--mj-text-muted)", "font-size", "14px"], [1, "artifact-modal-card"], [1, "artifact-card-header", 3, "click"], [1, "artifact-modal-icon"], [1, "fas", "fa-file-code"], [1, "artifact-modal-info"], [1, "artifact-modal-title"], [1, "artifact-modal-meta"], [1, "expand-btn"], [1, "artifact-modal-action"], [1, "fas", "fa-external-link-alt"], [1, "artifact-versions-list"], [1, "expand-btn", 3, "click"], [1, "fas"], [1, "artifact-version-item"], [1, "artifact-version-item", 3, "click"], [1, "version-badge"], [1, "version-open-text"], [1, "fas", "fa-arrow-right"], [3, "completed", "cancelled", "isOpen", "environmentId", "currentUser", "excludeCollectionIds", "artifactVersionId", "artifactName", "artifactVersionNumber"], [3, "closed", "data", "visible"], [3, "closed", "imageUrl", "alt", "fileName", "visible"]], template: function ConversationChatAreaComponent_Template(rf, ctx) { if (rf & 1) {
3181
+ } }, inputs: { environmentId: "environmentId", currentUser: "currentUser", conversationId: "conversationId", conversation: "conversation", threadId: "threadId", suppressNewConversationEmptyState: "suppressNewConversationEmptyState", allowMentions: "allowMentions", allowAttachments: "allowAttachments", isNewConversation: "isNewConversation", pendingMessage: "pendingMessage", pendingAttachments: "pendingAttachments", pendingArtifactId: "pendingArtifactId", pendingArtifactVersionNumber: "pendingArtifactVersionNumber", overlayMode: "overlayMode", showExportButton: "showExportButton", showShareButton: "showShareButton", showArtifactIndicator: "showArtifactIndicator", appContext: "appContext", defaultAgentId: "defaultAgentId", applicationScope: "applicationScope", applicationId: "applicationId", linkedEntityId: "linkedEntityId", linkedRecordId: "linkedRecordId", showAgentPicker: "showAgentPicker", showAgentModePicker: "showAgentModePicker", emptyStateGreeting: "emptyStateGreeting", showSidebarToggle: "showSidebarToggle" }, outputs: { conversationRenamed: "conversationRenamed", openEntityRecord: "openEntityRecord", navigationRequest: "navigationRequest", taskClicked: "taskClicked", artifactLinkClicked: "artifactLinkClicked", sidebarToggleClicked: "sidebarToggleClicked", conversationCreated: "conversationCreated", threadOpened: "threadOpened", threadClosed: "threadClosed", pendingArtifactConsumed: "pendingArtifactConsumed", pendingMessageConsumed: "pendingMessageConsumed", pendingMessageRequested: "pendingMessageRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 26, consts: [["scrollContainer", ""], ["messageInput", ""], [1, "chat-area"], [1, "chat-header"], [1, "chat-content-area"], [1, "chat-messages-pane"], [1, "conversation-loading-state"], [3, "currentUser", "disabled", "showSidebarToggle", "overlayMode", "greeting", "enableAttachments", "enableMentions", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes"], [1, "chat-messages-wrapper"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], [3, "pinnedMessages"], [3, "parentMessageId", "conversationId", "currentUser"], [3, "cancelled", "exported", "isVisible", "conversation", "currentUser"], [3, "Result", "Visible", "Context", "Adapter"], [3, "cancelled", "membersChanged", "isVisible", "conversation", "currentUser"], [1, "modal-overlay"], [3, "isOpen", "environmentId", "currentUser", "excludeCollectionIds", "artifactVersionId", "artifactName", "artifactVersionNumber"], [3, "data", "visible"], [3, "imageUrl", "alt", "fileName", "visible"], [1, "chat-info"], ["title", "Show conversations", 1, "sidebar-toggle-btn"], [1, "chat-title"], [1, "shared-by-badge", 3, "title"], ["title", "Assign to project", 1, "project-tag"], ["title", "View Test Run", 1, "test-indicator"], [1, "chat-actions", "chat-actions-buttons"], ["title", "View pinned messages", 1, "pin-chip", 3, "active"], ["title", "View artifacts", 1, "artifact-indicator"], ["title", "View members", 1, "chat-members"], [3, "AgentID", "Disabled"], [3, "Conversation", "CurrentUser", "Disabled"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Export conversation"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "shared", "title"], ["title", "Show conversations", 1, "sidebar-toggle-btn", 3, "click"], [1, "fas", "fa-table-columns"], [1, "fas", "fa-share-nodes"], ["title", "Assign to project", 1, "project-tag", 3, "click"], [1, "fas", "fa-folder"], ["title", "View Test Run", 1, "test-indicator", 3, "click"], [1, "fas", "fa-flask"], ["title", "View pinned messages", 1, "pin-chip", 3, "click"], [1, "fas", "fa-thumbtack"], [1, "pin-chip-count"], ["title", "View artifacts", 1, "artifact-indicator", 3, "click"], [1, "fas", "fa-cube"], [1, "artifact-badge"], ["title", "View members", 1, "chat-members", 3, "click"], [1, "fas", "fa-users"], [1, "members-badge"], [3, "PresetChanged", "AgentID", "Disabled"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Export conversation", 3, "click"], [1, "fas", "fa-download"], [1, "btn-label"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click", "title"], ["text", "Loading conversation...", "size", "large"], [3, "sidebarToggleClicked", "messageSent", "currentUser", "disabled", "showSidebarToggle", "overlayMode", "greeting", "enableAttachments", "enableMentions", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes"], [1, "chat-messages-container"], [1, "chat-input-container"], [1, "message-input-container-wrapper"], [3, "emptyStateSubmit", "emptyStateMode", "currentUser", "disabled", "enableAttachments", "enableMentions", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes"], [1, "upload-indicator-overlay"], [1, "chat-messages-container", 3, "scroll"], [3, "replyInThread", "viewThread", "deleteMessage", "retryMessage", "testFeedbackMessage", "artifactClicked", "messageEdited", "openEntityRecord", "suggestedResponseSelected", "attachmentClicked", "diagnosticRequested", "messagePinToggled", "messages", "conversation", "currentUser", "isProcessing", "artifactMap", "agentRunMap", "ratingsMap", "userAvatarMap", "attachmentsMap"], [1, "scroll-to-bottom-icon", 2, "left", "50%"], [1, "loading-peripheral-placeholder"], ["size", "medium", 3, "text"], [1, "scroll-to-bottom-icon", 2, "left", "50%", 3, "click"], [1, "fas", "fa-arrow-down"], ["text", "Loading conversation data...", "size", "medium"], ["role", "status", 1, "read-only-banner"], [3, "hidden", "conversationId", "conversationName", "currentUser", "conversationHistory", "artifactsByDetailId", "systemArtifactsByDetailId", "agentRunsByDetailId", "appContext", "defaultAgentId", "conversationDefaultAgentId", "agentConfigurationPresetId", "inProgressMessageIds", "disabled", "enableAttachments", "enableMentions", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes", "initialMessage", "initialAttachments"], [1, "fas", "fa-eye"], [3, "messageSent", "agentResponse", "agentRunDetected", "agentRunUpdate", "messageComplete", "artifactCreated", "conversationRenamed", "intentCheckStarted", "intentCheckCompleted", "uploadStateChanged", "hidden", "conversationId", "conversationName", "currentUser", "conversationHistory", "artifactsByDetailId", "systemArtifactsByDetailId", "agentRunsByDetailId", "appContext", "defaultAgentId", "conversationDefaultAgentId", "agentConfigurationPresetId", "inProgressMessageIds", "disabled", "enableAttachments", "enableMentions", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes", "initialMessage", "initialAttachments"], [1, "resize-handle"], [1, "chat-artifact-pane"], [3, "closed", "saveToCollectionRequested", "navigateToLink", "shareRequested", "maximizeToggled", "openEntityRecord", "navigationRequest", "analyzeRequested", "applyFormRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "viewContext", "canShare", "canEdit", "isMaximized", "refreshTrigger"], [1, "resize-handle", 3, "mousedown", "touchstart"], [3, "closed", "jumpRequested", "unpinRequested", "pinnedMessages"], [3, "closed", "replyAdded", "parentMessageId", "conversationId", "currentUser"], [1, "modal-overlay", 3, "click"], [1, "modal-content", "project-selector-modal", 3, "click"], [1, "modal-header"], [1, "modal-close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "modal-body"], [3, "projectSelected", "environmentId", "currentUser", "selectedProjectId"], [1, "modal-content", "artifacts-modal", 3, "click"], [1, "modal-header-actions"], ["title", "Toggle system artifacts visibility", 1, "toggle-system-btn", 3, "active"], [1, "modal-body", "artifacts-grid"], [1, "empty-state"], [1, "artifact-modal-card", 3, "expanded", "system-artifact"], ["title", "Toggle system artifacts visibility", 1, "toggle-system-btn", 3, "click"], [1, "fas", "fa-cog"], [1, "fas", "fa-cube", 2, "font-size", "48px", "color", "var(--mj-text-muted)", "margin-bottom", "16px"], [2, "color", "var(--mj-text-muted)", "font-size", "14px"], [1, "artifact-modal-card"], [1, "artifact-card-header", 3, "click"], [1, "artifact-modal-icon"], [1, "fas", "fa-file-code"], [1, "artifact-modal-info"], [1, "artifact-modal-title"], [1, "artifact-modal-meta"], [1, "expand-btn"], [1, "artifact-modal-action"], [1, "fas", "fa-external-link-alt"], [1, "artifact-versions-list"], [1, "expand-btn", 3, "click"], [1, "fas"], [1, "artifact-version-item"], [1, "artifact-version-item", 3, "click"], [1, "version-badge"], [1, "version-open-text"], [1, "fas", "fa-arrow-right"], [3, "completed", "cancelled", "isOpen", "environmentId", "currentUser", "excludeCollectionIds", "artifactVersionId", "artifactName", "artifactVersionNumber"], [3, "closed", "data", "visible"], [3, "closed", "imageUrl", "alt", "fileName", "visible"]], template: function ConversationChatAreaComponent_Template(rf, ctx) { if (rf & 1) {
2965
3182
  i0.ɵɵelementStart(0, "div", 2);
2966
- i0.ɵɵconditionalCreate(1, ConversationChatAreaComponent_Conditional_1_Template, 14, 12, "div", 3);
3183
+ i0.ɵɵconditionalCreate(1, ConversationChatAreaComponent_Conditional_1_Template, 15, 14, "div", 3);
2967
3184
  i0.ɵɵelementStart(2, "div", 4)(3, "div", 5);
2968
- i0.ɵɵconditionalCreate(4, ConversationChatAreaComponent_Conditional_4_Template, 2, 0, "div", 6)(5, ConversationChatAreaComponent_Conditional_5_Template, 1, 9, "mj-conversation-empty-state", 7)(6, ConversationChatAreaComponent_Conditional_6_Template, 9, 12, "div", 8);
3185
+ i0.ɵɵconditionalCreate(4, ConversationChatAreaComponent_Conditional_4_Template, 2, 0, "div", 6)(5, ConversationChatAreaComponent_Conditional_5_Template, 1, 10, "mj-conversation-empty-state", 7)(6, ConversationChatAreaComponent_Conditional_6_Template, 5, 8, "div", 8)(7, ConversationChatAreaComponent_Conditional_7_Template, 9, 12, "div", 8);
2969
3186
  i0.ɵɵelementEnd();
2970
- i0.ɵɵconditionalCreate(7, ConversationChatAreaComponent_Conditional_7_Template, 3, 14);
2971
- i0.ɵɵelementStart(8, "mj-artifact-share-modal", 9);
2972
- i0.ɵɵlistener("saved", function ConversationChatAreaComponent_Template_mj_artifact_share_modal_saved_8_listener() { return ctx.onArtifactShared(); })("cancelled", function ConversationChatAreaComponent_Template_mj_artifact_share_modal_cancelled_8_listener() { return ctx.onArtifactShareModalClose(); });
3187
+ i0.ɵɵconditionalCreate(8, ConversationChatAreaComponent_Conditional_8_Template, 3, 14);
3188
+ i0.ɵɵelementStart(9, "mj-artifact-share-modal", 9);
3189
+ i0.ɵɵlistener("saved", function ConversationChatAreaComponent_Template_mj_artifact_share_modal_saved_9_listener() { return ctx.onArtifactShared(); })("cancelled", function ConversationChatAreaComponent_Template_mj_artifact_share_modal_cancelled_9_listener() { return ctx.onArtifactShareModalClose(); });
2973
3190
  i0.ɵɵelementEnd();
2974
- i0.ɵɵconditionalCreate(9, ConversationChatAreaComponent_Conditional_9_Template, 1, 1, "mj-pinned-messages-panel", 10);
3191
+ i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_10_Template, 1, 1, "mj-pinned-messages-panel", 10);
2975
3192
  i0.ɵɵelementEnd()();
2976
- i0.ɵɵconditionalCreate(10, ConversationChatAreaComponent_Conditional_10_Template, 1, 3, "mj-thread-panel", 11);
2977
- i0.ɵɵelementStart(11, "mj-export-modal", 12);
2978
- i0.ɵɵlistener("cancelled", function ConversationChatAreaComponent_Template_mj_export_modal_cancelled_11_listener() { return ctx.onExportModalCancelled(); })("exported", function ConversationChatAreaComponent_Template_mj_export_modal_exported_11_listener() { return ctx.onExportModalComplete(); });
3193
+ i0.ɵɵconditionalCreate(11, ConversationChatAreaComponent_Conditional_11_Template, 1, 3, "mj-thread-panel", 11);
3194
+ i0.ɵɵelementStart(12, "mj-export-modal", 12);
3195
+ i0.ɵɵlistener("cancelled", function ConversationChatAreaComponent_Template_mj_export_modal_cancelled_12_listener() { return ctx.onExportModalCancelled(); })("exported", function ConversationChatAreaComponent_Template_mj_export_modal_exported_12_listener() { return ctx.onExportModalComplete(); });
2979
3196
  i0.ɵɵelementEnd();
2980
- i0.ɵɵelementStart(12, "mj-resource-share-dialog", 13);
2981
- i0.ɵɵlistener("Result", function ConversationChatAreaComponent_Template_mj_resource_share_dialog_Result_12_listener($event) { return ctx.onShareDialogResult($event); });
3197
+ i0.ɵɵelementStart(13, "mj-resource-share-dialog", 13);
3198
+ i0.ɵɵlistener("Result", function ConversationChatAreaComponent_Template_mj_resource_share_dialog_Result_13_listener($event) { return ctx.onShareDialogResult($event); });
2982
3199
  i0.ɵɵelementEnd();
2983
- i0.ɵɵelementStart(13, "mj-members-modal", 14);
2984
- i0.ɵɵlistener("cancelled", function ConversationChatAreaComponent_Template_mj_members_modal_cancelled_13_listener() { return ctx.showMembersModal = false; })("membersChanged", function ConversationChatAreaComponent_Template_mj_members_modal_membersChanged_13_listener() { return ctx.showMembersModal = false; });
3200
+ i0.ɵɵelementStart(14, "mj-members-modal", 14);
3201
+ i0.ɵɵlistener("cancelled", function ConversationChatAreaComponent_Template_mj_members_modal_cancelled_14_listener() { return ctx.showMembersModal = false; })("membersChanged", function ConversationChatAreaComponent_Template_mj_members_modal_membersChanged_14_listener() { return ctx.showMembersModal = false; });
2985
3202
  i0.ɵɵelementEnd();
2986
- i0.ɵɵconditionalCreate(14, ConversationChatAreaComponent_Conditional_14_Template, 9, 3, "div", 15);
2987
- i0.ɵɵconditionalCreate(15, ConversationChatAreaComponent_Conditional_15_Template, 13, 2, "div", 15);
2988
- i0.ɵɵconditionalCreate(16, ConversationChatAreaComponent_Conditional_16_Template, 1, 7, "mj-artifact-collection-picker-modal", 16);
2989
- i0.ɵɵconditionalCreate(17, ConversationChatAreaComponent_Conditional_17_Template, 1, 2, "mj-test-feedback-dialog", 17);
2990
- i0.ɵɵconditionalCreate(18, ConversationChatAreaComponent_Conditional_18_Template, 1, 4, "mj-image-viewer", 18);
3203
+ i0.ɵɵconditionalCreate(15, ConversationChatAreaComponent_Conditional_15_Template, 9, 3, "div", 15);
3204
+ i0.ɵɵconditionalCreate(16, ConversationChatAreaComponent_Conditional_16_Template, 13, 2, "div", 15);
3205
+ i0.ɵɵconditionalCreate(17, ConversationChatAreaComponent_Conditional_17_Template, 1, 7, "mj-artifact-collection-picker-modal", 16);
3206
+ i0.ɵɵconditionalCreate(18, ConversationChatAreaComponent_Conditional_18_Template, 1, 2, "mj-test-feedback-dialog", 17);
3207
+ i0.ɵɵconditionalCreate(19, ConversationChatAreaComponent_Conditional_19_Template, 1, 4, "mj-image-viewer", 18);
2991
3208
  } if (rf & 2) {
2992
3209
  i0.ɵɵadvance();
2993
- i0.ɵɵconditional(ctx.conversation ? 1 : -1);
3210
+ i0.ɵɵconditional(ctx.conversation || ctx.HasPreConversationHeader ? 1 : -1);
2994
3211
  i0.ɵɵadvance(2);
2995
3212
  i0.ɵɵclassProp("full-width", !ctx.showArtifactPanel)("hidden", ctx.isArtifactPaneMaximized);
2996
3213
  i0.ɵɵadvance();
2997
- i0.ɵɵconditional(ctx.isLoadingConversation ? 4 : ctx.isNewConversation || !ctx.conversationId ? 5 : 6);
2998
- i0.ɵɵadvance(3);
2999
- i0.ɵɵconditional(ctx.showArtifactPanel && ctx.selectedArtifactId ? 7 : -1);
3214
+ i0.ɵɵconditional(ctx.isLoadingConversation ? 4 : (ctx.isNewConversation || !ctx.conversationId) && !ctx.suppressNewConversationEmptyState ? 5 : (ctx.isNewConversation || !ctx.conversationId) && ctx.suppressNewConversationEmptyState ? 6 : 7);
3215
+ i0.ɵɵadvance(4);
3216
+ i0.ɵɵconditional(ctx.showArtifactPanel && ctx.selectedArtifactId ? 8 : -1);
3000
3217
  i0.ɵɵadvance();
3001
3218
  i0.ɵɵproperty("isOpen", ctx.isArtifactShareModalOpen)("artifact", ctx.artifactToShare)("currentUser", ctx.currentUser);
3002
3219
  i0.ɵɵadvance();
3003
- i0.ɵɵconditional(ctx.showPinsPanel ? 9 : -1);
3220
+ i0.ɵɵconditional(ctx.showPinsPanel ? 10 : -1);
3004
3221
  i0.ɵɵadvance();
3005
- i0.ɵɵconditional(ctx.threadId ? 10 : -1);
3222
+ i0.ɵɵconditional(ctx.threadId ? 11 : -1);
3006
3223
  i0.ɵɵadvance();
3007
3224
  i0.ɵɵproperty("isVisible", ctx.showExportModal)("conversation", ctx.conversation || undefined)("currentUser", ctx.currentUser);
3008
3225
  i0.ɵɵadvance();
@@ -3010,21 +3227,21 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
3010
3227
  i0.ɵɵadvance();
3011
3228
  i0.ɵɵproperty("isVisible", ctx.showMembersModal)("conversation", ctx.conversation || undefined)("currentUser", ctx.currentUser);
3012
3229
  i0.ɵɵadvance();
3013
- i0.ɵɵconditional(ctx.showProjectSelector && ctx.conversation ? 14 : -1);
3230
+ i0.ɵɵconditional(ctx.showProjectSelector && ctx.conversation ? 15 : -1);
3014
3231
  i0.ɵɵadvance();
3015
- i0.ɵɵconditional(ctx.showArtifactsModal ? 15 : -1);
3232
+ i0.ɵɵconditional(ctx.showArtifactsModal ? 16 : -1);
3016
3233
  i0.ɵɵadvance();
3017
- i0.ɵɵconditional(ctx.showCollectionPicker ? 16 : -1);
3234
+ i0.ɵɵconditional(ctx.showCollectionPicker ? 17 : -1);
3018
3235
  i0.ɵɵadvance();
3019
- i0.ɵɵconditional(ctx.testFeedbackDialogData ? 17 : -1);
3236
+ i0.ɵɵconditional(ctx.testFeedbackDialogData ? 18 : -1);
3020
3237
  i0.ɵɵadvance();
3021
- i0.ɵɵconditional(ctx.showImageViewer ? 18 : -1);
3022
- } }, dependencies: [i12.MJButtonDirective, i10.ArtifactViewerPanelComponent, i13.TestFeedbackDialogComponent, i14.LoadingComponent, i15.GenericShareDialogComponent, i16.ArtifactCollectionPickerModalComponent, i17.ArtifactShareModalComponent, i18.MessageListComponent, i19.MessageInputComponent, i20.ConversationEmptyStateComponent, i21.ThreadPanelComponent, i22.ProjectSelectorComponent, i23.MembersModalComponent, i24.ExportModalComponent, i25.ImageViewerComponent, i26.PinnedMessagesPanelComponent], styles: ["[_nghost-%COMP%] {\n display: flex;\n width: 100%;\n height: 100%;\n}\n\n.chat-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.chat-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n background: var(--mj-bg-surface-card);\n z-index: 10;\n box-shadow: var(--mj-shadow-sm);\n}\n\n.chat-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n\n\n.sidebar-toggle-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%]:active {\n background: color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 18px;\n transition: color 0.15s ease;\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.chat-title[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 999px;\n font-size: 12px;\n font-weight: 500;\n flex-shrink: 0;\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.shared-by-badge[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.project-tag[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 12px;\n}\n\n.project-tag[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-text-muted);\n}\n\n.project-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.test-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-warning);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-status-warning);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 8px;\n}\n\n.test-indicator[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.test-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.pin-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 45%, transparent);\n border-radius: 20px;\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pin-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.pin-chip[_ngcontent-%COMP%]:hover, \n.pin-chip.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.pin-chip-count[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n}\n\n.chat-members[_ngcontent-%COMP%], \n.artifact-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 6px 8px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.chat-members[_ngcontent-%COMP%]:hover, \n.artifact-indicator[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n\n\n.artifact-badge[_ngcontent-%COMP%], \n.members-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.members-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.ambient-agent-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n.ambient-agent-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n}\n.chat-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 150ms ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.share-btn.shared[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-brand-primary-hover);\n}\n\n.share-btn.shared[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.chat-content-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: row;\n position: relative;\n}\n\n.chat-messages-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n min-width: min(300px, 100%); \n\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.chat-messages-pane.full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.chat-messages-pane[_ngcontent-%COMP%]:not(.full-width) {\n flex: 1;\n}\n\n.chat-messages-pane.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.resize-handle[_ngcontent-%COMP%] {\n width: 4px;\n background: transparent;\n cursor: col-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.resize-handle[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n}\n\n.resize-handle[_ngcontent-%COMP%]::before {\n content: \"\";\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n}\n\n.chat-artifact-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.chat-artifact-pane.maximized[_ngcontent-%COMP%] {\n width: 100% !important;\n}\n\n.chat-artifact-pane[_ngcontent-%COMP%] > mj-artifact-viewer-panel[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.chat-messages-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n position: relative; \n\n}\n\n\n\n.upload-indicator-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem 1.5rem;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n z-index: 100;\n pointer-events: none;\n}\n\n.chat-messages-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: var(--mj-bg-surface-card);\n min-height: 0;\n position: relative;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 21px;\n left: 50%;\n transform: translateX(-50%);\n width: 40px;\n height: 40px;\n margin-top: -40px;\n margin-left: auto;\n margin-right: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.2s ease;\n z-index: 100;\n pointer-events: auto;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateX(-50%) translateY(-2px);\n box-shadow: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent) 0 4px 12px;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 16px;\n transition: color 0.2s;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.chat-input-container[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n padding: 0 1.25rem 1.25rem 1.25rem;\n overflow: visible;\n}\n\n.read-only-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 1.25rem 0.5rem 1.25rem;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n font-size: 12px;\n}\n\n.read-only-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.loading-peripheral-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 140px;\n padding: 24px;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 50%, transparent);\n backdrop-filter: blur(2px);\n border-radius: 12px;\n margin: 12px;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease-in-out;\n}\n\n.modal-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-md);\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n}\n\n.project-selector-modal[_ngcontent-%COMP%] {\n width: 600px;\n height: 500px;\n}\n\n.modal-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n}\n\n.modal-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toggle-system-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.toggle-system-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.toggle-system-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.toggle-system-btn.active[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.toggle-system-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.modal-close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.modal-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.modal-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 20px;\n}\n\n.artifacts-modal[_ngcontent-%COMP%] {\n width: 700px;\n max-height: 600px;\n}\n\n.artifacts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n grid-column: 1/-1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.artifact-modal-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-card);\n border: 1.5px solid var(--mj-border-default);\n border-radius: 12px;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.artifact-modal-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-modal-card.system-artifact[_ngcontent-%COMP%] {\n opacity: 0.85;\n border-color: var(--mj-border-default);\n border-style: dashed;\n position: relative;\n}\n\n.artifact-modal-card.system-artifact[_ngcontent-%COMP%]::before {\n content: \"SYSTEM\";\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n.artifact-modal-card.system-artifact[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-text-muted);\n box-shadow: var(--mj-shadow-md);\n}\n\n.artifact-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n cursor: pointer;\n}\n\n.artifact-card-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-modal-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-2px);\n}\n\n.artifact-modal-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 10px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.artifact-modal-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.artifact-modal-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-modal-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.artifact-modal-meta[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.artifact-modal-action[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: color 0.2s;\n}\n\n.artifact-modal-card[_ngcontent-%COMP%]:hover .artifact-modal-action[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n}\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.artifact-versions-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 0 1rem 1rem 1rem;\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-version-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px 12px 68px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n.artifact-version-item[_ngcontent-%COMP%] .version-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n}\n.artifact-version-item[_ngcontent-%COMP%] .version-open-text[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n.artifact-version-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover .version-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover .version-open-text[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.loading-peripheral-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-weight: 500;\n}\n.loading-peripheral-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.conversation-loading-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 20px;\n gap: 16px;\n color: var(--mj-text-secondary);\n font-size: 15px;\n}\n.loading-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-brand-primary);\n}\n.loading-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n\n\n@media (max-width: 768px) {\n .chat-header[_ngcontent-%COMP%] {\n padding: 8px 12px;\n gap: 6px;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n position: relative;\n }\n .chat-info[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n order: 1;\n }\n .chat-title[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 700;\n width: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n min-width: 0;\n }\n .project-tag[_ngcontent-%COMP%] {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n display: none; \n\n }\n .test-indicator[_ngcontent-%COMP%] {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n }\n \n\n .chat-actions-buttons[_ngcontent-%COMP%] {\n order: 2;\n flex-shrink: 0;\n }\n .chat-actions-buttons[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] {\n padding: 6px 8px;\n min-width: auto;\n }\n .chat-actions-buttons[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] .btn-label[_ngcontent-%COMP%] {\n display: none;\n }\n .chat-actions[_ngcontent-%COMP%] {\n flex-wrap: nowrap;\n }\n .chat-members[_ngcontent-%COMP%], \n .artifact-indicator[_ngcontent-%COMP%] {\n padding: 5px 7px;\n font-size: 13px;\n }\n .action-btn[_ngcontent-%COMP%] {\n padding: 6px 8px;\n font-size: 12px;\n }\n .ambient-agent-indicator[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 4px 8px;\n }\n .project-selector-modal[_ngcontent-%COMP%] {\n width: min(95vw, 600px);\n height: auto;\n }\n .artifacts-modal[_ngcontent-%COMP%] {\n width: min(95vw, 700px);\n }\n .artifacts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .chat-input-container[_ngcontent-%COMP%] {\n padding: 0 0.75rem 0.75rem 0.75rem;\n }\n .scroll-to-bottom-icon[_ngcontent-%COMP%] {\n bottom: 16px;\n width: 36px;\n height: 36px;\n }\n \n\n .chat-content-area[_ngcontent-%COMP%] {\n position: relative;\n }\n .chat-artifact-pane[_ngcontent-%COMP%] {\n position: fixed;\n left: 0;\n right: 0;\n top: 56px; \n\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n background: var(--mj-bg-surface-card);\n }\n .resize-handle[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n@media (max-width: 480px) {\n .chat-header[_ngcontent-%COMP%] {\n padding: 6px 8px;\n gap: 4px;\n }\n .chat-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 700;\n }\n .project-tag[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n display: none;\n }\n .test-indicator[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n }\n .chat-members[_ngcontent-%COMP%], \n .artifact-indicator[_ngcontent-%COMP%] {\n padding: 4px 8px;\n font-size: 11px;\n }\n .action-btn[_ngcontent-%COMP%] {\n padding: 5px 7px;\n font-size: 11px;\n }\n .ambient-agent-indicator[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 3px 6px;\n }\n .project-selector-modal[_ngcontent-%COMP%], \n .artifacts-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n }\n .chat-input-container[_ngcontent-%COMP%] {\n padding: 0 0.5rem 0.5rem 0.5rem;\n }\n .scroll-to-bottom-icon[_ngcontent-%COMP%] {\n bottom: 12px;\n width: 32px;\n height: 32px;\n }\n .scroll-to-bottom-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n\n\n\n.artifact-picker-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--mj-bg-overlay);\n z-index: 999;\n}\n\n.artifact-picker-panel[_ngcontent-%COMP%] {\n position: fixed;\n right: 0;\n top: 0;\n width: 360px;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 12px rgba(0, 0, 0, 0.1);\n animation: _ngcontent-%COMP%_slideInRight 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideInRight {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n}\n\n.artifact-picker-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.artifact-picker-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-close[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 8px;\n color: var(--mj-text-muted);\n border-radius: 4px;\n}\n\n.artifact-picker-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n\n.artifact-picker-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n gap: 8px;\n}\n\n.artifact-picker-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.artifact-picker-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.artifact-picker-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n text-align: left;\n width: 100%;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.artifact-picker-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-picker-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n width: 24px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file-pdf[_ngcontent-%COMP%] { color: #e53e3e; }\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file-excel[_ngcontent-%COMP%] { color: #38a169; }\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file-word[_ngcontent-%COMP%] { color: #3182ce; }\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file[_ngcontent-%COMP%] { color: var(--mj-text-muted); }\n\n.artifact-picker-item-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.artifact-picker-item-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.artifact-picker-item-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}"] });
3238
+ i0.ɵɵconditional(ctx.showImageViewer ? 19 : -1);
3239
+ } }, dependencies: [i12.MJButtonDirective, i10.ArtifactViewerPanelComponent, i13.TestFeedbackDialogComponent, i14.LoadingComponent, i15.GenericShareDialogComponent, i16.ArtifactCollectionPickerModalComponent, i17.ArtifactShareModalComponent, i18.MessageListComponent, i19.MessageInputComponent, i20.ConversationEmptyStateComponent, i21.ConversationAgentPickerComponent, i22.ConversationModePickerComponent, i23.ThreadPanelComponent, i24.ProjectSelectorComponent, i25.MembersModalComponent, i26.ExportModalComponent, i27.ImageViewerComponent, i28.PinnedMessagesPanelComponent], styles: ["[_nghost-%COMP%] {\n display: flex;\n width: 100%;\n height: 100%;\n}\n\n.chat-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.chat-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n background: var(--mj-bg-surface-card);\n z-index: 10;\n box-shadow: var(--mj-shadow-sm);\n}\n\n.chat-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n\n\n.sidebar-toggle-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%]:active {\n background: color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 18px;\n transition: color 0.15s ease;\n}\n\n.sidebar-toggle-btn[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.chat-title[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 999px;\n font-size: 12px;\n font-weight: 500;\n flex-shrink: 0;\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.shared-by-badge[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.project-tag[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 12px;\n}\n\n.project-tag[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-text-muted);\n}\n\n.project-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.test-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-warning);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-status-warning);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 8px;\n}\n\n.test-indicator[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.test-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.pin-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 45%, transparent);\n border-radius: 20px;\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pin-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.pin-chip[_ngcontent-%COMP%]:hover, \n.pin-chip.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.pin-chip-count[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n}\n\n.chat-members[_ngcontent-%COMP%], \n.artifact-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 6px 8px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.chat-members[_ngcontent-%COMP%]:hover, \n.artifact-indicator[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n\n\n.artifact-badge[_ngcontent-%COMP%], \n.members-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.members-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.ambient-agent-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n.ambient-agent-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n}\n.chat-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 150ms ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.share-btn.shared[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-brand-primary-hover);\n}\n\n.share-btn.shared[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.chat-content-area[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: row;\n position: relative;\n}\n\n.chat-messages-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n min-width: min(300px, 100%); \n\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.chat-messages-pane.full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.chat-messages-pane[_ngcontent-%COMP%]:not(.full-width) {\n flex: 1;\n}\n\n.chat-messages-pane.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.resize-handle[_ngcontent-%COMP%] {\n width: 4px;\n background: transparent;\n cursor: col-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.resize-handle[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n}\n\n.resize-handle[_ngcontent-%COMP%]::before {\n content: \"\";\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n}\n\n.chat-artifact-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.chat-artifact-pane.maximized[_ngcontent-%COMP%] {\n width: 100% !important;\n}\n\n.chat-artifact-pane[_ngcontent-%COMP%] > mj-artifact-viewer-panel[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.chat-messages-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n position: relative; \n\n}\n\n\n\n.upload-indicator-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem 1.5rem;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n z-index: 100;\n pointer-events: none;\n}\n\n.chat-messages-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: var(--mj-bg-surface-card);\n min-height: 0;\n position: relative;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 21px;\n left: 50%;\n transform: translateX(-50%);\n width: 40px;\n height: 40px;\n margin-top: -40px;\n margin-left: auto;\n margin-right: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.2s ease;\n z-index: 100;\n pointer-events: auto;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateX(-50%) translateY(-2px);\n box-shadow: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent) 0 4px 12px;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 16px;\n transition: color 0.2s;\n}\n\n.scroll-to-bottom-icon[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.chat-input-container[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n padding: 0 1.25rem 1.25rem 1.25rem;\n overflow: visible;\n}\n\n.read-only-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 1.25rem 0.5rem 1.25rem;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n font-size: 12px;\n}\n\n.read-only-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.loading-peripheral-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 140px;\n padding: 24px;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 50%, transparent);\n backdrop-filter: blur(2px);\n border-radius: 12px;\n margin: 12px;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease-in-out;\n}\n\n.modal-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-md);\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n}\n\n.project-selector-modal[_ngcontent-%COMP%] {\n width: 600px;\n height: 500px;\n}\n\n.modal-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n}\n\n.modal-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toggle-system-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.toggle-system-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.toggle-system-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.toggle-system-btn.active[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.toggle-system-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.modal-close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.modal-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.modal-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 20px;\n}\n\n.artifacts-modal[_ngcontent-%COMP%] {\n width: 700px;\n max-height: 600px;\n}\n\n.artifacts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n grid-column: 1/-1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.artifact-modal-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-card);\n border: 1.5px solid var(--mj-border-default);\n border-radius: 12px;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.artifact-modal-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-modal-card.system-artifact[_ngcontent-%COMP%] {\n opacity: 0.85;\n border-color: var(--mj-border-default);\n border-style: dashed;\n position: relative;\n}\n\n.artifact-modal-card.system-artifact[_ngcontent-%COMP%]::before {\n content: \"SYSTEM\";\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n.artifact-modal-card.system-artifact[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-text-muted);\n box-shadow: var(--mj-shadow-md);\n}\n\n.artifact-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n cursor: pointer;\n}\n\n.artifact-card-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-modal-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-2px);\n}\n\n.artifact-modal-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 10px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.artifact-modal-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.artifact-modal-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-modal-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.artifact-modal-meta[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.artifact-modal-action[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: color 0.2s;\n}\n\n.artifact-modal-card[_ngcontent-%COMP%]:hover .artifact-modal-action[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n}\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.artifact-versions-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 0 1rem 1rem 1rem;\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-version-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px 12px 68px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n.artifact-version-item[_ngcontent-%COMP%] .version-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n}\n.artifact-version-item[_ngcontent-%COMP%] .version-open-text[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n.artifact-version-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover .version-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover .version-open-text[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n.artifact-version-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.loading-peripheral-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-weight: 500;\n}\n.loading-peripheral-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.conversation-loading-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 20px;\n gap: 16px;\n color: var(--mj-text-secondary);\n font-size: 15px;\n}\n.loading-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-brand-primary);\n}\n.loading-content[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n\n\n@media (max-width: 768px) {\n .chat-header[_ngcontent-%COMP%] {\n padding: 8px 12px;\n gap: 6px;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n position: relative;\n }\n .chat-info[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n order: 1;\n }\n .chat-title[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 700;\n width: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n min-width: 0;\n }\n .project-tag[_ngcontent-%COMP%] {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n display: none; \n\n }\n .test-indicator[_ngcontent-%COMP%] {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n }\n \n\n .chat-actions-buttons[_ngcontent-%COMP%] {\n order: 2;\n flex-shrink: 0;\n }\n .chat-actions-buttons[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] {\n padding: 6px 8px;\n min-width: auto;\n }\n .chat-actions-buttons[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%] .btn-label[_ngcontent-%COMP%] {\n display: none;\n }\n .chat-actions[_ngcontent-%COMP%] {\n flex-wrap: nowrap;\n }\n .chat-members[_ngcontent-%COMP%], \n .artifact-indicator[_ngcontent-%COMP%] {\n padding: 5px 7px;\n font-size: 13px;\n }\n .action-btn[_ngcontent-%COMP%] {\n padding: 6px 8px;\n font-size: 12px;\n }\n .ambient-agent-indicator[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 4px 8px;\n }\n .project-selector-modal[_ngcontent-%COMP%] {\n width: min(95vw, 600px);\n height: auto;\n }\n .artifacts-modal[_ngcontent-%COMP%] {\n width: min(95vw, 700px);\n }\n .artifacts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .chat-input-container[_ngcontent-%COMP%] {\n padding: 0 0.75rem 0.75rem 0.75rem;\n }\n .scroll-to-bottom-icon[_ngcontent-%COMP%] {\n bottom: 16px;\n width: 36px;\n height: 36px;\n }\n \n\n .chat-content-area[_ngcontent-%COMP%] {\n position: relative;\n }\n .chat-artifact-pane[_ngcontent-%COMP%] {\n position: fixed;\n left: 0;\n right: 0;\n top: 56px; \n\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n background: var(--mj-bg-surface-card);\n }\n .resize-handle[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n@media (max-width: 480px) {\n .chat-header[_ngcontent-%COMP%] {\n padding: 6px 8px;\n gap: 4px;\n }\n .chat-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 700;\n }\n .project-tag[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n display: none;\n }\n .test-indicator[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n }\n .chat-members[_ngcontent-%COMP%], \n .artifact-indicator[_ngcontent-%COMP%] {\n padding: 4px 8px;\n font-size: 11px;\n }\n .action-btn[_ngcontent-%COMP%] {\n padding: 5px 7px;\n font-size: 11px;\n }\n .ambient-agent-indicator[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 3px 6px;\n }\n .project-selector-modal[_ngcontent-%COMP%], \n .artifacts-modal[_ngcontent-%COMP%] {\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n }\n .chat-input-container[_ngcontent-%COMP%] {\n padding: 0 0.5rem 0.5rem 0.5rem;\n }\n .scroll-to-bottom-icon[_ngcontent-%COMP%] {\n bottom: 12px;\n width: 32px;\n height: 32px;\n }\n .scroll-to-bottom-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n\n\n\n.artifact-picker-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--mj-bg-overlay);\n z-index: 999;\n}\n\n.artifact-picker-panel[_ngcontent-%COMP%] {\n position: fixed;\n right: 0;\n top: 0;\n width: 360px;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 12px rgba(0, 0, 0, 0.1);\n animation: _ngcontent-%COMP%_slideInRight 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideInRight {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n}\n\n.artifact-picker-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.artifact-picker-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-close[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 8px;\n color: var(--mj-text-muted);\n border-radius: 4px;\n}\n\n.artifact-picker-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n\n.artifact-picker-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n gap: 8px;\n}\n\n.artifact-picker-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.artifact-picker-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.artifact-picker-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n text-align: left;\n width: 100%;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.artifact-picker-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-picker-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n width: 24px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file-pdf[_ngcontent-%COMP%] { color: #e53e3e; }\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file-excel[_ngcontent-%COMP%] { color: #38a169; }\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file-word[_ngcontent-%COMP%] { color: #3182ce; }\n.artifact-picker-item[_ngcontent-%COMP%] i.fa-file[_ngcontent-%COMP%] { color: var(--mj-text-muted); }\n\n.artifact-picker-item-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.artifact-picker-item-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.artifact-picker-item-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}"] });
3023
3240
  }
3024
3241
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationChatAreaComponent, [{
3025
3242
  type: Component,
3026
- args: [{ standalone: false, selector: 'mj-conversation-chat-area', template: "<div class=\"chat-area\">\n <!-- Fixed Header -->\n @if (conversation) {\n <div class=\"chat-header\">\n <div class=\"chat-info\" [class.with-sidebar-toggle]=\"showSidebarToggle\">\n @if (showSidebarToggle) {\n <button class=\"sidebar-toggle-btn\"\n (click)=\"sidebarToggleClicked.emit()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n <div class=\"chat-title\">{{ conversation.Name || '' }}</div>\n @if (sharedByBadge) {\n <span class=\"shared-by-badge\" [title]=\"sharedByBadge.fullTooltip\">\n <i class=\"fas fa-share-nodes\"></i>\n <span>Shared by {{ sharedByBadge.display }}</span>\n </span>\n }\n @if (conversation.ProjectID) {\n <button class=\"project-tag\" (click)=\"openProjectSelector()\" title=\"Assign to project\">\n <i class=\"fas fa-folder\"></i>\n <span>{{ conversation.Project || 'Project' }}</span>\n </button>\n }\n @if (conversation.TestRunID) {\n <button class=\"test-indicator\" (click)=\"viewTestRun(conversation.TestRunID)\" title=\"View Test Run\">\n <i class=\"fas fa-flask\"></i>\n <span>Test</span>\n </button>\n }\n </div>\n <div class=\"chat-actions chat-actions-buttons\">\n @if (pinnedMessages.length > 0) {\n <button class=\"pin-chip\" [class.active]=\"showPinsPanel\" (click)=\"showPinsPanel = !showPinsPanel\" title=\"View pinned messages\">\n <i class=\"fas fa-thumbtack\"></i>\n <span class=\"pin-chip-count\">{{ pinnedMessages.length }}</span>\n </button>\n }\n @if (showArtifactIndicator && artifactCountDisplay > 0) {\n <button class=\"artifact-indicator\" (click)=\"viewArtifacts()\" title=\"View artifacts\">\n <i class=\"fas fa-cube\"></i>\n <span class=\"artifact-badge\">{{ artifactCountDisplay }}</span>\n </button>\n }\n @if (memberCount > 1) {\n <button class=\"chat-members\" (click)=\"toggleMembersModal()\" title=\"View members\">\n <i class=\"fas fa-users\"></i>\n <span class=\"members-badge\">{{ memberCount }}</span>\n </button>\n }\n @if (showExportButton) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"exportConversation()\" title=\"Export conversation\">\n <i class=\"fas fa-download\"></i>\n <span class=\"btn-label\">Export</span>\n </button>\n }\n @if (showShareButton && canShareConversation) {\n <button mjButton variant=\"flat\" size=\"sm\"\n [class.shared]=\"isShared\"\n (click)=\"shareConversation()\"\n [title]=\"isShared ? 'Manage sharing' : 'Share conversation'\">\n <i class=\"fas fa-share-nodes\"></i>\n <span class=\"btn-label\">Share</span>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Messages and Artifact Split Layout -->\n <div class=\"chat-content-area\">\n <!-- Messages Pane -->\n <div class=\"chat-messages-pane\"\n [class.full-width]=\"!showArtifactPanel\"\n [class.hidden]=\"isArtifactPaneMaximized\">\n @if (isLoadingConversation) {\n <!-- Loading State - Show centered spinner while conversation loads (checked FIRST to prevent empty state flash) -->\n <div class=\"conversation-loading-state\">\n <mj-loading text=\"Loading conversation...\" size=\"large\"></mj-loading>\n </div>\n } @else if (isNewConversation || !conversationId) {\n <!-- Empty State - No conversation selected OR new unsaved conversation -->\n <mj-conversation-empty-state\n [currentUser]=\"currentUser\"\n [disabled]=\"isProcessing\"\n [showSidebarToggle]=\"showSidebarToggle\"\n [overlayMode]=\"overlayMode\"\n [greeting]=\"emptyStateGreeting\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (sidebarToggleClicked)=\"sidebarToggleClicked.emit()\"\n (messageSent)=\"onEmptyStateMessageSent($event)\">\n </mj-conversation-empty-state>\n } @else {\n <!-- Normal Message View -->\n <div class=\"chat-messages-wrapper\">\n <!-- Upload Indicator Overlay (centered in conversation area) -->\n @if (isUploadingAttachments) {\n <div class=\"upload-indicator-overlay\">\n <mj-loading [text]=\"uploadingMessage\" size=\"medium\"></mj-loading>\n </div>\n }\n <div class=\"chat-messages-container\" #scrollContainer (scroll)=\"checkScroll()\">\n <mj-conversation-message-list\n [messages]=\"messages\"\n [conversation]=\"conversation\"\n [currentUser]=\"currentUser\"\n [isProcessing]=\"isProcessing\"\n [artifactMap]=\"effectiveArtifactsMap\"\n [agentRunMap]=\"agentRunsByDetailId\"\n [ratingsMap]=\"ratingsByDetailId\"\n [userAvatarMap]=\"userAvatarMap\"\n [attachmentsMap]=\"attachmentsByDetailId\"\n (replyInThread)=\"onReplyInThread($event)\"\n (viewThread)=\"onViewThread($event)\"\n (deleteMessage)=\"onDeleteMessage($event)\"\n (retryMessage)=\"onRetryMessage($event)\"\n (testFeedbackMessage)=\"onTestFeedbackMessage($event)\"\n (artifactClicked)=\"onArtifactClicked($event)\"\n (messageEdited)=\"onMessageEdited($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (suggestedResponseSelected)=\"onSuggestedResponseSelected($event)\"\n (attachmentClicked)=\"onAttachmentClicked($event)\"\n (diagnosticRequested)=\"onDiagnosticRequested($event)\"\n (messagePinToggled)=\"onMessagePinToggled($event)\">\n </mj-conversation-message-list>\n\n <!-- Scroll to Bottom Icon (positioned within scroll container for proper centering) -->\n @if (showScrollToBottomIcon && messages && messages.length > 0) {\n <span class=\"scroll-to-bottom-icon\" style=\"left: 50%;\"\n (click)=\"scrollToBottomAnimate()\">\n <i class=\"fas fa-arrow-down\"></i>\n </span>\n }\n </div>\n\n <!-- Fixed Input Area -->\n <div class=\"chat-input-container\">\n @if (isLoadingPeripheralData) {\n <!-- Loading State -->\n <div class=\"loading-peripheral-placeholder\">\n <mj-loading text=\"Loading conversation data...\" size=\"medium\"></mj-loading>\n </div>\n } @else {\n @if (isReadOnlyView) {\n <div class=\"read-only-banner\" role=\"status\">\n <i class=\"fas fa-eye\"></i>\n <span>You have view-only access to this conversation.</span>\n </div>\n }\n <!-- Input Component - Multiple instances cached, only one visible -->\n <div class=\"message-input-container-wrapper\">\n @for (inputRef of getCachedInputs(); track inputRef.conversationId) {\n <mj-message-input\n #messageInput\n [hidden]=\"inputRef.conversationId !== conversationId\"\n [conversationId]=\"inputRef.conversationId\"\n [conversationName]=\"inputRef.conversationName\"\n [currentUser]=\"currentUser\"\n [conversationHistory]=\"inputRef.conversationId === conversationId ? messages : []\"\n [artifactsByDetailId]=\"inputRef.conversationId === conversationId ? artifactsByDetailId : emptyArtifactsMap\"\n [systemArtifactsByDetailId]=\"inputRef.conversationId === conversationId ? systemArtifactsByDetailId : emptyArtifactsMap\"\n [agentRunsByDetailId]=\"inputRef.conversationId === conversationId ? agentRunsByDetailId : emptyAgentRunsMap\"\n [appContext]=\"appContext\"\n [inProgressMessageIds]=\"inputRef.conversationId === conversationId ? inProgressMessageIds : emptyInProgressIds\"\n [disabled]=\"isProcessing || isReadOnlyView\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n [initialMessage]=\"inputRef.conversationId === conversationId ? pendingMessage : null\"\n [initialAttachments]=\"inputRef.conversationId === conversationId ? pendingAttachments : null\"\n (messageSent)=\"onMessageSent($event)\"\n (agentResponse)=\"onAgentResponse($event)\"\n (agentRunDetected)=\"onAgentRunDetected($event)\"\n (agentRunUpdate)=\"onAgentRunUpdate($event)\"\n (messageComplete)=\"onMessageComplete($event)\"\n (artifactCreated)=\"onArtifactCreated($event)\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (intentCheckStarted)=\"onIntentCheckStarted()\"\n (intentCheckCompleted)=\"onIntentCheckCompleted()\"\n (uploadStateChanged)=\"onUploadStateChanged($event)\">\n </mj-message-input>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Artifact Viewer Pane -->\n @if (showArtifactPanel && selectedArtifactId) {\n @if (!isArtifactPaneMaximized) {\n <div class=\"resize-handle\" (mousedown)=\"onResizeStart($event)\" (touchstart)=\"onResizeTouchStart($event)\"></div>\n }\n <div class=\"chat-artifact-pane\"\n [style.width.%]=\"artifactPaneWidth\"\n [class.maximized]=\"isArtifactPaneMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"selectedArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"selectedVersionNumber\"\n [viewContext]=\"'conversation'\"\n [canShare]=\"canShareSelectedArtifact\"\n [canEdit]=\"canEditSelectedArtifact\"\n [isMaximized]=\"isArtifactPaneMaximized\"\n [refreshTrigger]=\"artifactViewerRefresh$\"\n (closed)=\"onCloseArtifactPanel()\"\n (saveToCollectionRequested)=\"onSaveToCollectionRequested($event)\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPane()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (analyzeRequested)=\"OnAnalyzeArtifact($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\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\n <!-- Pinned Messages Panel (overlay) -->\n @if (showPinsPanel) {\n <mj-pinned-messages-panel\n [pinnedMessages]=\"pinnedMessages\"\n (closed)=\"showPinsPanel = false\"\n (jumpRequested)=\"onJumpToMessage($event)\"\n (unpinRequested)=\"onUnpinFromPanel($event)\">\n </mj-pinned-messages-panel>\n }\n </div>\n</div>\n\n<!-- Thread Panel -->\n@if (threadId) {\n <mj-thread-panel\n [parentMessageId]=\"threadId\"\n [conversationId]=\"conversationId || ''\"\n [currentUser]=\"currentUser\"\n (closed)=\"onLocalThreadClosed()\"\n (replyAdded)=\"onThreadReplyAdded($event)\">\n </mj-thread-panel>\n}\n\n<!-- Export Modal -->\n<mj-export-modal\n [isVisible]=\"showExportModal\"\n [conversation]=\"conversation || undefined\"\n [currentUser]=\"currentUser\"\n (cancelled)=\"onExportModalCancelled()\"\n (exported)=\"onExportModalComplete()\">\n</mj-export-modal>\n\n<!-- Share Dialog (generic, shared with dashboards) -->\n<mj-resource-share-dialog\n [Visible]=\"showShareModal\"\n [Context]=\"shareContext\"\n [Adapter]=\"shareAdapter\"\n (Result)=\"onShareDialogResult($event)\">\n</mj-resource-share-dialog>\n\n<!-- Members Modal -->\n<mj-members-modal\n [isVisible]=\"showMembersModal\"\n [conversation]=\"conversation || undefined\"\n [currentUser]=\"currentUser\"\n (cancelled)=\"showMembersModal = false\"\n (membersChanged)=\"showMembersModal = false\">\n</mj-members-modal>\n\n<!-- Project Selector Modal -->\n@if (showProjectSelector && conversation) {\n <div class=\"modal-overlay\" (click)=\"showProjectSelector = false\">\n <div class=\"modal-content project-selector-modal\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>Assign Project</h3>\n <button class=\"modal-close-btn\" (click)=\"showProjectSelector = false\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <mj-project-selector\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedProjectId]=\"conversation.ProjectID\"\n (projectSelected)=\"onProjectSelected($event)\">\n </mj-project-selector>\n </div>\n </div>\n </div>\n}\n\n<!-- Artifacts Modal -->\n@if (showArtifactsModal) {\n <div class=\"modal-overlay\" (click)=\"showArtifactsModal = false\">\n <div class=\"modal-content artifacts-modal\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>Conversation Artifacts</h3>\n <div class=\"modal-header-actions\">\n @if (hasSystemArtifacts) {\n <button class=\"toggle-system-btn\"\n [class.active]=\"showSystemArtifacts\"\n (click)=\"toggleSystemArtifacts()\"\n title=\"Toggle system artifacts visibility\">\n <i class=\"fas fa-cog\"></i>\n <span>{{ showSystemArtifacts ? 'Hide' : 'Show' }} System</span>\n </button>\n }\n <button class=\"modal-close-btn\" (click)=\"showArtifactsModal = false\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"modal-body artifacts-grid\">\n @if (artifactsByDetailId.size === 0) {\n <div class=\"empty-state\">\n <i class=\"fas fa-cube\" style=\"font-size: 48px; color: var(--mj-text-muted); margin-bottom: 16px;\"></i>\n <p style=\"color: var(--mj-text-muted); font-size: 14px;\">No artifacts in this conversation yet</p>\n </div>\n }\n @for (artifact of getArtifactsArray(); track artifact.artifactId) {\n <div class=\"artifact-modal-card\"\n [class.expanded]=\"expandedArtifactId === artifact.artifactId\"\n [class.system-artifact]=\"artifact.visibility === 'System Only'\">\n <!-- Main card header - click to open latest version -->\n <div class=\"artifact-card-header\" (click)=\"openArtifactFromModal(artifact.artifactId)\">\n <div class=\"artifact-modal-icon\">\n <i class=\"fas fa-file-code\"></i>\n </div>\n <div class=\"artifact-modal-info\">\n <div class=\"artifact-modal-title\">{{artifact.name}}</div>\n <div class=\"artifact-modal-meta\">\n @if (artifact.versionCount > 1) {\n {{artifact.versionCount}} versions\n } @else {\n 1 version\n }\n </div>\n </div>\n @if (artifact.versionCount > 1) {\n <button class=\"expand-btn\" (click)=\"toggleArtifactExpansion(artifact.artifactId, $event)\">\n <i class=\"fas\" [class.fa-chevron-down]=\"expandedArtifactId !== artifact.artifactId\"\n [class.fa-chevron-up]=\"expandedArtifactId === artifact.artifactId\"></i>\n </button>\n }\n <div class=\"artifact-modal-action\">\n <i class=\"fas fa-external-link-alt\"></i>\n </div>\n </div>\n\n <!-- Expanded version list -->\n @if (expandedArtifactId === artifact.artifactId && artifact.versionCount > 1) {\n <div class=\"artifact-versions-list\">\n @for (version of artifact.versions; track version.versionId) {\n <div class=\"artifact-version-item\" (click)=\"openArtifactFromModal(artifact.artifactId, version.versionNumber); $event.stopPropagation()\">\n <span class=\"version-badge\">v{{version.versionNumber}}</span>\n <span class=\"version-open-text\">Open this version</span>\n <i class=\"fas fa-arrow-right\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Collection Picker Modal -->\n@if (showCollectionPicker) {\n <mj-artifact-collection-picker-modal\n [isOpen]=\"showCollectionPicker\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [excludeCollectionIds]=\"collectionPickerExcludedIds\"\n [artifactVersionId]=\"collectionPickerVersionId\"\n [artifactName]=\"collectionPickerArtifactName\"\n [artifactVersionNumber]=\"collectionPickerVersionNumber\"\n (completed)=\"onCollectionPickerCompleted($event)\"\n (cancelled)=\"onCollectionPickerCancelled()\">\n </mj-artifact-collection-picker-modal>\n}\n\n<!-- Test Feedback Dialog -->\n@if (testFeedbackDialogData) {\n <mj-test-feedback-dialog\n [data]=\"testFeedbackDialogData\"\n [visible]=\"showTestFeedbackDialog\"\n (closed)=\"onTestFeedbackDialogClosed($event)\">\n </mj-test-feedback-dialog>\n}\n\n<!-- Image Viewer Modal -->\n@if (showImageViewer) {\n <mj-image-viewer\n [imageUrl]=\"selectedImageUrl\"\n [alt]=\"selectedImageAlt\"\n [fileName]=\"selectedImageFileName\"\n [visible]=\"showImageViewer\"\n (closed)=\"onImageViewerClosed()\">\n </mj-image-viewer>\n}", styles: [":host {\n display: flex;\n width: 100%;\n height: 100%;\n}\n\n.chat-area {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.chat-header {\n flex-shrink: 0;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n background: var(--mj-bg-surface-card);\n z-index: 10;\n box-shadow: var(--mj-shadow-sm);\n}\n\n.chat-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n/* Sidebar toggle button in header */\n.sidebar-toggle-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.sidebar-toggle-btn:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.sidebar-toggle-btn:active {\n background: color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n.sidebar-toggle-btn i {\n color: var(--mj-text-secondary);\n font-size: 18px;\n transition: color 0.15s ease;\n}\n\n.sidebar-toggle-btn:hover i {\n color: var(--mj-text-primary);\n}\n\n.chat-title {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 999px;\n font-size: 12px;\n font-weight: 500;\n flex-shrink: 0;\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge i {\n font-size: 10px;\n}\n\n.shared-by-badge span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.project-tag {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 12px;\n}\n\n.project-tag:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-text-muted);\n}\n\n.project-tag i {\n font-size: 10px;\n}\n\n.test-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-warning);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-status-warning);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 8px;\n}\n\n.test-indicator:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.test-indicator i {\n font-size: 10px;\n}\n\n/* Pinned messages chip in chat header */\n.pin-chip {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 45%, transparent);\n border-radius: 20px;\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pin-chip i {\n font-size: 11px;\n}\n\n.pin-chip:hover,\n.pin-chip.active {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.pin-chip-count {\n font-size: 12px;\n font-weight: 700;\n}\n\n.chat-members,\n.artifact-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 6px 8px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.chat-members:hover,\n.artifact-indicator:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n/* Badge overlay for artifact and member counts */\n.artifact-badge,\n.members-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.members-badge {\n background: var(--mj-brand-primary);\n}\n\n.ambient-agent-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n animation: pulse 2s ease-in-out infinite;\n}\n\n.ambient-agent-indicator i {\n color: var(--mj-brand-primary);\n}\n\n@keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n}\n.chat-actions {\n display: flex;\n gap: 8px;\n}\n\n.action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 150ms ease;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.share-btn.shared {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-brand-primary-hover);\n}\n\n.share-btn.shared:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.chat-content-area {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: row;\n position: relative;\n}\n\n.chat-messages-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n min-width: min(300px, 100%); /* Respect container bounds while maintaining minimum */\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.chat-messages-pane.full-width {\n width: 100%;\n}\n\n.chat-messages-pane:not(.full-width) {\n flex: 1;\n}\n\n.chat-messages-pane.hidden {\n display: none;\n}\n\n.resize-handle {\n width: 4px;\n background: transparent;\n cursor: col-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.resize-handle:hover {\n background: var(--mj-brand-primary);\n}\n\n.resize-handle::before {\n content: \"\";\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n}\n\n.chat-artifact-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.chat-artifact-pane.maximized {\n width: 100% !important;\n}\n\n.chat-artifact-pane > mj-artifact-viewer-panel {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.chat-messages-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n position: relative; /* For upload overlay positioning */\n}\n\n/* Upload indicator overlay - centered in conversation area */\n.upload-indicator-overlay {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem 1.5rem;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n z-index: 100;\n pointer-events: none;\n}\n\n.chat-messages-container {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: var(--mj-bg-surface-card);\n min-height: 0;\n position: relative;\n}\n\n.scroll-to-bottom-icon {\n position: sticky;\n bottom: 21px;\n left: 50%;\n transform: translateX(-50%);\n width: 40px;\n height: 40px;\n margin-top: -40px;\n margin-left: auto;\n margin-right: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.2s ease;\n z-index: 100;\n pointer-events: auto;\n}\n\n.scroll-to-bottom-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateX(-50%) translateY(-2px);\n box-shadow: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent) 0 4px 12px;\n}\n\n.scroll-to-bottom-icon i {\n color: var(--mj-text-secondary);\n font-size: 16px;\n transition: color 0.2s;\n}\n\n.scroll-to-bottom-icon:hover i {\n color: var(--mj-brand-primary);\n}\n\n.chat-input-container {\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n padding: 0 1.25rem 1.25rem 1.25rem;\n overflow: visible;\n}\n\n.read-only-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 1.25rem 0.5rem 1.25rem;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n font-size: 12px;\n}\n\n.read-only-banner i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.loading-peripheral-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 140px;\n padding: 24px;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 50%, transparent);\n backdrop-filter: blur(2px);\n border-radius: 12px;\n margin: 12px;\n animation: fadeIn 0.2s ease-in-out;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-md);\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n}\n\n.project-selector-modal {\n width: 600px;\n height: 500px;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n}\n\n.modal-header-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toggle-system-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.toggle-system-btn:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.toggle-system-btn.active {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.toggle-system-btn.active:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.toggle-system-btn i {\n font-size: 12px;\n}\n\n.modal-close-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.modal-close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.modal-body {\n flex: 1;\n overflow: auto;\n padding: 20px;\n}\n\n.artifacts-modal {\n width: 700px;\n max-height: 600px;\n}\n\n.artifacts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.empty-state {\n grid-column: 1/-1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.artifact-modal-card {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-card);\n border: 1.5px solid var(--mj-border-default);\n border-radius: 12px;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.artifact-modal-card.expanded {\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-modal-card.system-artifact {\n opacity: 0.85;\n border-color: var(--mj-border-default);\n border-style: dashed;\n position: relative;\n}\n\n.artifact-modal-card.system-artifact::before {\n content: \"SYSTEM\";\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n.artifact-modal-card.system-artifact:hover {\n border-color: var(--mj-text-muted);\n box-shadow: var(--mj-shadow-md);\n}\n\n.artifact-card-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n cursor: pointer;\n}\n\n.artifact-card-header:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-modal-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-2px);\n}\n\n.artifact-modal-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 10px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.artifact-modal-icon i {\n font-size: 18px;\n}\n\n.artifact-modal-info {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-modal-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.artifact-modal-meta {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.artifact-modal-action {\n color: var(--mj-text-muted);\n transition: color 0.2s;\n}\n\n.artifact-modal-card:hover .artifact-modal-action {\n color: var(--mj-brand-primary);\n}\n\n.expand-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n}\n.expand-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.artifact-versions-list {\n display: flex;\n flex-direction: column;\n padding: 0 1rem 1rem 1rem;\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-version-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px 12px 68px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.artifact-version-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n.artifact-version-item .version-badge {\n display: inline-block;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n}\n.artifact-version-item .version-open-text {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n.artifact-version-item i {\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n.artifact-version-item:hover .version-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n.artifact-version-item:hover .version-open-text {\n color: var(--mj-brand-primary);\n}\n.artifact-version-item:hover i {\n color: var(--mj-brand-primary);\n}\n\n.loading-peripheral-content {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-weight: 500;\n}\n.loading-peripheral-content i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.conversation-loading-state {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 20px;\n gap: 16px;\n color: var(--mj-text-secondary);\n font-size: 15px;\n}\n.loading-content i {\n font-size: 32px;\n color: var(--mj-brand-primary);\n}\n.loading-content span {\n font-weight: 500;\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .chat-header {\n padding: 8px 12px;\n gap: 6px;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n position: relative;\n }\n .chat-info {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n order: 1;\n }\n .chat-title {\n font-size: 15px;\n font-weight: 700;\n width: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n min-width: 0;\n }\n .project-tag {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n display: none; /* Hide on mobile to save space */\n }\n .test-indicator {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n }\n /* Action buttons - icon only on mobile */\n .chat-actions-buttons {\n order: 2;\n flex-shrink: 0;\n }\n .chat-actions-buttons .action-btn {\n padding: 6px 8px;\n min-width: auto;\n }\n .chat-actions-buttons .action-btn .btn-label {\n display: none;\n }\n .chat-actions {\n flex-wrap: nowrap;\n }\n .chat-members,\n .artifact-indicator {\n padding: 5px 7px;\n font-size: 13px;\n }\n .action-btn {\n padding: 6px 8px;\n font-size: 12px;\n }\n .ambient-agent-indicator {\n font-size: 12px;\n padding: 4px 8px;\n }\n .project-selector-modal {\n width: min(95vw, 600px);\n height: auto;\n }\n .artifacts-modal {\n width: min(95vw, 700px);\n }\n .artifacts-grid {\n grid-template-columns: 1fr;\n }\n .chat-input-container {\n padding: 0 0.75rem 0.75rem 0.75rem;\n }\n .scroll-to-bottom-icon {\n bottom: 16px;\n width: 36px;\n height: 36px;\n }\n /* Artifact pane - full width overlay on mobile, overlapping header */\n .chat-content-area {\n position: relative;\n }\n .chat-artifact-pane {\n position: fixed;\n left: 0;\n right: 0;\n top: 56px; /* 48px nav + 8px dark strip above blue border */\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n background: var(--mj-bg-surface-card);\n }\n .resize-handle {\n display: none;\n }\n}\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .chat-header {\n padding: 6px 8px;\n gap: 4px;\n }\n .chat-title {\n font-size: 14px;\n font-weight: 700;\n }\n .project-tag {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n display: none;\n }\n .test-indicator {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n }\n .chat-members,\n .artifact-indicator {\n padding: 4px 8px;\n font-size: 11px;\n }\n .action-btn {\n padding: 5px 7px;\n font-size: 11px;\n }\n .ambient-agent-indicator {\n font-size: 11px;\n padding: 3px 6px;\n }\n .project-selector-modal,\n .artifacts-modal {\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n }\n .chat-input-container {\n padding: 0 0.5rem 0.5rem 0.5rem;\n }\n .scroll-to-bottom-icon {\n bottom: 12px;\n width: 32px;\n height: 32px;\n }\n .scroll-to-bottom-icon i {\n font-size: 14px;\n }\n}\n\n/* Artifact Picker Panel */\n.artifact-picker-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--mj-bg-overlay);\n z-index: 999;\n}\n\n.artifact-picker-panel {\n position: fixed;\n right: 0;\n top: 0;\n width: 360px;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 12px rgba(0, 0, 0, 0.1);\n animation: slideInRight 0.2s ease-out;\n}\n\n@keyframes slideInRight {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n}\n\n.artifact-picker-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.artifact-picker-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-close {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 8px;\n color: var(--mj-text-muted);\n border-radius: 4px;\n}\n\n.artifact-picker-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n\n.artifact-picker-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n gap: 8px;\n}\n\n.artifact-picker-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.artifact-picker-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.artifact-picker-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n text-align: left;\n width: 100%;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.artifact-picker-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-picker-item i {\n font-size: 20px;\n width: 24px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.artifact-picker-item i.fa-file-pdf { color: #e53e3e; }\n.artifact-picker-item i.fa-file-excel { color: #38a169; }\n.artifact-picker-item i.fa-file-word { color: #3182ce; }\n.artifact-picker-item i.fa-file { color: var(--mj-text-muted); }\n\n.artifact-picker-item-info {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.artifact-picker-item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.artifact-picker-item-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n"] }]
3027
- }], () => [{ type: i1.AgentStateService }, { type: i2.ConversationAgentService }, { type: i3.ActiveTasksService }, { type: i0.ChangeDetectorRef }, { type: i4.MentionAutocompleteService }, { type: i5.ArtifactPermissionService }, { type: i6.ConversationAttachmentService }, { type: i7.ConversationStreamingService }, { type: i8.DialogService }, { type: i9.ConversationBridgeService }, { type: i10.AnalyzeArtifactService }, { type: i11.UICommandHandlerService }], { environmentId: [{
3243
+ args: [{ standalone: false, selector: 'mj-conversation-chat-area', template: "<div class=\"chat-area\">\n <!-- Fixed Header \u2014 also renders BEFORE a conversation exists when the\n embedder has pre-conversation chrome to surface (currently just the\n mode picker \u2014 agent / share / export / members / artifacts all\n require a conversation row and stay hidden). Lets embedded surfaces\n like the Form Builder cockpit show the mode picker above the\n empty-state on a fresh chat instead of waiting for the first\n message to round-trip. -->\n @if (conversation || HasPreConversationHeader) {\n <div class=\"chat-header\">\n <div class=\"chat-info\" [class.with-sidebar-toggle]=\"showSidebarToggle\">\n @if (showSidebarToggle) {\n <button class=\"sidebar-toggle-btn\"\n (click)=\"sidebarToggleClicked.emit()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n @if (conversation) {\n <div class=\"chat-title\">{{ conversation.Name || '' }}</div>\n }\n @if (sharedByBadge) {\n <span class=\"shared-by-badge\" [title]=\"sharedByBadge.fullTooltip\">\n <i class=\"fas fa-share-nodes\"></i>\n <span>Shared by {{ sharedByBadge.display }}</span>\n </span>\n }\n @if (conversation?.ProjectID) {\n <button class=\"project-tag\" (click)=\"openProjectSelector()\" title=\"Assign to project\">\n <i class=\"fas fa-folder\"></i>\n <span>{{ conversation!.Project || 'Project' }}</span>\n </button>\n }\n @if (conversation?.TestRunID) {\n <button class=\"test-indicator\" (click)=\"viewTestRun(conversation!.TestRunID!)\" title=\"View Test Run\">\n <i class=\"fas fa-flask\"></i>\n <span>Test</span>\n </button>\n }\n </div>\n <div class=\"chat-actions chat-actions-buttons\">\n @if (pinnedMessages.length > 0) {\n <button class=\"pin-chip\" [class.active]=\"showPinsPanel\" (click)=\"showPinsPanel = !showPinsPanel\" title=\"View pinned messages\">\n <i class=\"fas fa-thumbtack\"></i>\n <span class=\"pin-chip-count\">{{ pinnedMessages.length }}</span>\n </button>\n }\n @if (showArtifactIndicator && artifactCountDisplay > 0) {\n <button class=\"artifact-indicator\" (click)=\"viewArtifacts()\" title=\"View artifacts\">\n <i class=\"fas fa-cube\"></i>\n <span class=\"artifact-badge\">{{ artifactCountDisplay }}</span>\n </button>\n }\n @if (memberCount > 1) {\n <button class=\"chat-members\" (click)=\"toggleMembersModal()\" title=\"View members\">\n <i class=\"fas fa-users\"></i>\n <span class=\"members-badge\">{{ memberCount }}</span>\n </button>\n }\n @if (showAgentModePicker && ModePickerTargetAgentId) {\n <!-- Per-agent mode/quality picker (Draft / Standard / High).\n Targets the agent the next non-mention message will route\n to. Auto-hides when that agent has fewer than 2 configured\n presets. Choice persists per-user, per-agent via\n UserInfoEngine; emits the picked configuration ID up so\n <mj-message-input> can forward it on the next route. -->\n <mj-conversation-mode-picker\n [AgentID]=\"ModePickerTargetAgentId\"\n [Disabled]=\"isProcessing\"\n (PresetChanged)=\"OnAgentModePresetChanged($event)\">\n </mj-conversation-mode-picker>\n }\n @if (showAgentPicker && conversation) {\n <!-- Per-conversation default-agent pin. When set, non-mention\n messages route to this agent instead of Sage. Persists to\n MJConversationEntity.DefaultAgentID. Hidden when no\n conversation is loaded or when the embedder disables it. -->\n <mj-conversation-agent-picker\n [Conversation]=\"conversation\"\n [CurrentUser]=\"currentUser\"\n [Disabled]=\"isReadOnlyView\">\n </mj-conversation-agent-picker>\n }\n @if (showExportButton) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"exportConversation()\" title=\"Export conversation\">\n <i class=\"fas fa-download\"></i>\n <span class=\"btn-label\">Export</span>\n </button>\n }\n @if (showShareButton && canShareConversation) {\n <button mjButton variant=\"flat\" size=\"sm\"\n [class.shared]=\"isShared\"\n (click)=\"shareConversation()\"\n [title]=\"isShared ? 'Manage sharing' : 'Share conversation'\">\n <i class=\"fas fa-share-nodes\"></i>\n <span class=\"btn-label\">Share</span>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Messages and Artifact Split Layout -->\n <div class=\"chat-content-area\">\n <!-- Messages Pane -->\n <div class=\"chat-messages-pane\"\n [class.full-width]=\"!showArtifactPanel\"\n [class.hidden]=\"isArtifactPaneMaximized\">\n @if (isLoadingConversation) {\n <!-- Loading State - Show centered spinner while conversation loads (checked FIRST to prevent empty state flash) -->\n <div class=\"conversation-loading-state\">\n <mj-loading text=\"Loading conversation...\" size=\"large\"></mj-loading>\n </div>\n } @else if ((isNewConversation || !conversationId) && !suppressNewConversationEmptyState) {\n <!-- Empty State - No conversation selected OR new unsaved conversation -->\n <mj-conversation-empty-state\n [currentUser]=\"currentUser\"\n [disabled]=\"isProcessing\"\n [showSidebarToggle]=\"showSidebarToggle\"\n [overlayMode]=\"overlayMode\"\n [greeting]=\"emptyStateGreeting\"\n [enableAttachments]=\"enableAttachments && allowAttachments\"\n [enableMentions]=\"allowMentions\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (sidebarToggleClicked)=\"sidebarToggleClicked.emit()\"\n (messageSent)=\"onEmptyStateMessageSent($event)\">\n </mj-conversation-empty-state>\n } @else if ((isNewConversation || !conversationId) && suppressNewConversationEmptyState) {\n <!-- Pre-conversation normal-view: empty message list + emptyStateMode input.\n Used when host (e.g. Form Builder cockpit) wants the header + mode picker\n visible on first open instead of the centered welcome card. First send\n routes through onEmptyStateMessageSent which creates the conversation. -->\n <div class=\"chat-messages-wrapper\">\n <div class=\"chat-messages-container\"></div>\n <div class=\"chat-input-container\">\n <div class=\"message-input-container-wrapper\">\n <mj-message-input\n [emptyStateMode]=\"true\"\n [currentUser]=\"currentUser\"\n [disabled]=\"isProcessing\"\n [enableAttachments]=\"enableAttachments && allowAttachments\"\n [enableMentions]=\"allowMentions\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateMessageSent($event)\">\n </mj-message-input>\n </div>\n </div>\n </div>\n } @else {\n <!-- Normal Message View -->\n <div class=\"chat-messages-wrapper\">\n <!-- Upload Indicator Overlay (centered in conversation area) -->\n @if (isUploadingAttachments) {\n <div class=\"upload-indicator-overlay\">\n <mj-loading [text]=\"uploadingMessage\" size=\"medium\"></mj-loading>\n </div>\n }\n <div class=\"chat-messages-container\" #scrollContainer (scroll)=\"checkScroll()\">\n <mj-conversation-message-list\n [messages]=\"messages\"\n [conversation]=\"conversation\"\n [currentUser]=\"currentUser\"\n [isProcessing]=\"isProcessing\"\n [artifactMap]=\"effectiveArtifactsMap\"\n [agentRunMap]=\"agentRunsByDetailId\"\n [ratingsMap]=\"ratingsByDetailId\"\n [userAvatarMap]=\"userAvatarMap\"\n [attachmentsMap]=\"attachmentsByDetailId\"\n (replyInThread)=\"onReplyInThread($event)\"\n (viewThread)=\"onViewThread($event)\"\n (deleteMessage)=\"onDeleteMessage($event)\"\n (retryMessage)=\"onRetryMessage($event)\"\n (testFeedbackMessage)=\"onTestFeedbackMessage($event)\"\n (artifactClicked)=\"onArtifactClicked($event)\"\n (messageEdited)=\"onMessageEdited($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (suggestedResponseSelected)=\"onSuggestedResponseSelected($event)\"\n (attachmentClicked)=\"onAttachmentClicked($event)\"\n (diagnosticRequested)=\"onDiagnosticRequested($event)\"\n (messagePinToggled)=\"onMessagePinToggled($event)\">\n </mj-conversation-message-list>\n\n <!-- Scroll to Bottom Icon (positioned within scroll container for proper centering) -->\n @if (showScrollToBottomIcon && messages && messages.length > 0) {\n <span class=\"scroll-to-bottom-icon\" style=\"left: 50%;\"\n (click)=\"scrollToBottomAnimate()\">\n <i class=\"fas fa-arrow-down\"></i>\n </span>\n }\n </div>\n\n <!-- Fixed Input Area -->\n <div class=\"chat-input-container\">\n @if (isLoadingPeripheralData) {\n <!-- Loading State -->\n <div class=\"loading-peripheral-placeholder\">\n <mj-loading text=\"Loading conversation data...\" size=\"medium\"></mj-loading>\n </div>\n } @else {\n @if (isReadOnlyView) {\n <div class=\"read-only-banner\" role=\"status\">\n <i class=\"fas fa-eye\"></i>\n <span>You have view-only access to this conversation.</span>\n </div>\n }\n <!-- Input Component - Multiple instances cached, only one visible -->\n <div class=\"message-input-container-wrapper\">\n @for (inputRef of getCachedInputs(); track inputRef.conversationId) {\n <mj-message-input\n #messageInput\n [hidden]=\"inputRef.conversationId !== conversationId\"\n [conversationId]=\"inputRef.conversationId\"\n [conversationName]=\"inputRef.conversationName\"\n [currentUser]=\"currentUser\"\n [conversationHistory]=\"inputRef.conversationId === conversationId ? messages : []\"\n [artifactsByDetailId]=\"inputRef.conversationId === conversationId ? artifactsByDetailId : emptyArtifactsMap\"\n [systemArtifactsByDetailId]=\"inputRef.conversationId === conversationId ? systemArtifactsByDetailId : emptyArtifactsMap\"\n [agentRunsByDetailId]=\"inputRef.conversationId === conversationId ? agentRunsByDetailId : emptyAgentRunsMap\"\n [appContext]=\"appContext\"\n [defaultAgentId]=\"defaultAgentId\"\n [conversationDefaultAgentId]=\"inputRef.conversationId === conversationId ? (conversation?.DefaultAgentID ?? null) : null\"\n [agentConfigurationPresetId]=\"inputRef.conversationId === conversationId ? ActiveAgentConfigurationPresetId : null\"\n [inProgressMessageIds]=\"inputRef.conversationId === conversationId ? inProgressMessageIds : emptyInProgressIds\"\n [disabled]=\"isProcessing || isReadOnlyView\"\n [enableAttachments]=\"enableAttachments && allowAttachments\"\n [enableMentions]=\"allowMentions\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n [initialMessage]=\"inputRef.conversationId === conversationId ? pendingMessage : null\"\n [initialAttachments]=\"inputRef.conversationId === conversationId ? pendingAttachments : null\"\n (messageSent)=\"onMessageSent($event)\"\n (agentResponse)=\"onAgentResponse($event)\"\n (agentRunDetected)=\"onAgentRunDetected($event)\"\n (agentRunUpdate)=\"onAgentRunUpdate($event)\"\n (messageComplete)=\"onMessageComplete($event)\"\n (artifactCreated)=\"onArtifactCreated($event)\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (intentCheckStarted)=\"onIntentCheckStarted()\"\n (intentCheckCompleted)=\"onIntentCheckCompleted()\"\n (uploadStateChanged)=\"onUploadStateChanged($event)\">\n </mj-message-input>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Artifact Viewer Pane -->\n @if (showArtifactPanel && selectedArtifactId) {\n @if (!isArtifactPaneMaximized) {\n <div class=\"resize-handle\" (mousedown)=\"onResizeStart($event)\" (touchstart)=\"onResizeTouchStart($event)\"></div>\n }\n <div class=\"chat-artifact-pane\"\n [style.width.%]=\"artifactPaneWidth\"\n [class.maximized]=\"isArtifactPaneMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"selectedArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"selectedVersionNumber\"\n [viewContext]=\"'conversation'\"\n [canShare]=\"canShareSelectedArtifact\"\n [canEdit]=\"canEditSelectedArtifact\"\n [isMaximized]=\"isArtifactPaneMaximized\"\n [refreshTrigger]=\"artifactViewerRefresh$\"\n (closed)=\"onCloseArtifactPanel()\"\n (saveToCollectionRequested)=\"onSaveToCollectionRequested($event)\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPane()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (analyzeRequested)=\"OnAnalyzeArtifact($event)\"\n (applyFormRequested)=\"OnApplyFormRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\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\n <!-- Pinned Messages Panel (overlay) -->\n @if (showPinsPanel) {\n <mj-pinned-messages-panel\n [pinnedMessages]=\"pinnedMessages\"\n (closed)=\"showPinsPanel = false\"\n (jumpRequested)=\"onJumpToMessage($event)\"\n (unpinRequested)=\"onUnpinFromPanel($event)\">\n </mj-pinned-messages-panel>\n }\n </div>\n</div>\n\n<!-- Thread Panel -->\n@if (threadId) {\n <mj-thread-panel\n [parentMessageId]=\"threadId\"\n [conversationId]=\"conversationId || ''\"\n [currentUser]=\"currentUser\"\n (closed)=\"onLocalThreadClosed()\"\n (replyAdded)=\"onThreadReplyAdded($event)\">\n </mj-thread-panel>\n}\n\n<!-- Export Modal -->\n<mj-export-modal\n [isVisible]=\"showExportModal\"\n [conversation]=\"conversation || undefined\"\n [currentUser]=\"currentUser\"\n (cancelled)=\"onExportModalCancelled()\"\n (exported)=\"onExportModalComplete()\">\n</mj-export-modal>\n\n<!-- Share Dialog (generic, shared with dashboards) -->\n<mj-resource-share-dialog\n [Visible]=\"showShareModal\"\n [Context]=\"shareContext\"\n [Adapter]=\"shareAdapter\"\n (Result)=\"onShareDialogResult($event)\">\n</mj-resource-share-dialog>\n\n<!-- Members Modal -->\n<mj-members-modal\n [isVisible]=\"showMembersModal\"\n [conversation]=\"conversation || undefined\"\n [currentUser]=\"currentUser\"\n (cancelled)=\"showMembersModal = false\"\n (membersChanged)=\"showMembersModal = false\">\n</mj-members-modal>\n\n<!-- Project Selector Modal -->\n@if (showProjectSelector && conversation) {\n <div class=\"modal-overlay\" (click)=\"showProjectSelector = false\">\n <div class=\"modal-content project-selector-modal\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>Assign Project</h3>\n <button class=\"modal-close-btn\" (click)=\"showProjectSelector = false\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <mj-project-selector\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedProjectId]=\"conversation.ProjectID\"\n (projectSelected)=\"onProjectSelected($event)\">\n </mj-project-selector>\n </div>\n </div>\n </div>\n}\n\n<!-- Artifacts Modal -->\n@if (showArtifactsModal) {\n <div class=\"modal-overlay\" (click)=\"showArtifactsModal = false\">\n <div class=\"modal-content artifacts-modal\" (click)=\"$event.stopPropagation()\">\n <div class=\"modal-header\">\n <h3>Conversation Artifacts</h3>\n <div class=\"modal-header-actions\">\n @if (hasSystemArtifacts) {\n <button class=\"toggle-system-btn\"\n [class.active]=\"showSystemArtifacts\"\n (click)=\"toggleSystemArtifacts()\"\n title=\"Toggle system artifacts visibility\">\n <i class=\"fas fa-cog\"></i>\n <span>{{ showSystemArtifacts ? 'Hide' : 'Show' }} System</span>\n </button>\n }\n <button class=\"modal-close-btn\" (click)=\"showArtifactsModal = false\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"modal-body artifacts-grid\">\n @if (artifactsByDetailId.size === 0) {\n <div class=\"empty-state\">\n <i class=\"fas fa-cube\" style=\"font-size: 48px; color: var(--mj-text-muted); margin-bottom: 16px;\"></i>\n <p style=\"color: var(--mj-text-muted); font-size: 14px;\">No artifacts in this conversation yet</p>\n </div>\n }\n @for (artifact of getArtifactsArray(); track artifact.artifactId) {\n <div class=\"artifact-modal-card\"\n [class.expanded]=\"expandedArtifactId === artifact.artifactId\"\n [class.system-artifact]=\"artifact.visibility === 'System Only'\">\n <!-- Main card header - click to open latest version -->\n <div class=\"artifact-card-header\" (click)=\"openArtifactFromModal(artifact.artifactId)\">\n <div class=\"artifact-modal-icon\">\n <i class=\"fas fa-file-code\"></i>\n </div>\n <div class=\"artifact-modal-info\">\n <div class=\"artifact-modal-title\">{{artifact.name}}</div>\n <div class=\"artifact-modal-meta\">\n @if (artifact.versionCount > 1) {\n {{artifact.versionCount}} versions\n } @else {\n 1 version\n }\n </div>\n </div>\n @if (artifact.versionCount > 1) {\n <button class=\"expand-btn\" (click)=\"toggleArtifactExpansion(artifact.artifactId, $event)\">\n <i class=\"fas\" [class.fa-chevron-down]=\"expandedArtifactId !== artifact.artifactId\"\n [class.fa-chevron-up]=\"expandedArtifactId === artifact.artifactId\"></i>\n </button>\n }\n <div class=\"artifact-modal-action\">\n <i class=\"fas fa-external-link-alt\"></i>\n </div>\n </div>\n\n <!-- Expanded version list -->\n @if (expandedArtifactId === artifact.artifactId && artifact.versionCount > 1) {\n <div class=\"artifact-versions-list\">\n @for (version of artifact.versions; track version.versionId) {\n <div class=\"artifact-version-item\" (click)=\"openArtifactFromModal(artifact.artifactId, version.versionNumber); $event.stopPropagation()\">\n <span class=\"version-badge\">v{{version.versionNumber}}</span>\n <span class=\"version-open-text\">Open this version</span>\n <i class=\"fas fa-arrow-right\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Collection Picker Modal -->\n@if (showCollectionPicker) {\n <mj-artifact-collection-picker-modal\n [isOpen]=\"showCollectionPicker\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [excludeCollectionIds]=\"collectionPickerExcludedIds\"\n [artifactVersionId]=\"collectionPickerVersionId\"\n [artifactName]=\"collectionPickerArtifactName\"\n [artifactVersionNumber]=\"collectionPickerVersionNumber\"\n (completed)=\"onCollectionPickerCompleted($event)\"\n (cancelled)=\"onCollectionPickerCancelled()\">\n </mj-artifact-collection-picker-modal>\n}\n\n<!-- Test Feedback Dialog -->\n@if (testFeedbackDialogData) {\n <mj-test-feedback-dialog\n [data]=\"testFeedbackDialogData\"\n [visible]=\"showTestFeedbackDialog\"\n (closed)=\"onTestFeedbackDialogClosed($event)\">\n </mj-test-feedback-dialog>\n}\n\n<!-- Image Viewer Modal -->\n@if (showImageViewer) {\n <mj-image-viewer\n [imageUrl]=\"selectedImageUrl\"\n [alt]=\"selectedImageAlt\"\n [fileName]=\"selectedImageFileName\"\n [visible]=\"showImageViewer\"\n (closed)=\"onImageViewerClosed()\">\n </mj-image-viewer>\n}", styles: [":host {\n display: flex;\n width: 100%;\n height: 100%;\n}\n\n.chat-area {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.chat-header {\n flex-shrink: 0;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 16px;\n background: var(--mj-bg-surface-card);\n z-index: 10;\n box-shadow: var(--mj-shadow-sm);\n}\n\n.chat-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n/* Sidebar toggle button in header */\n.sidebar-toggle-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.sidebar-toggle-btn:hover {\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.sidebar-toggle-btn:active {\n background: color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n.sidebar-toggle-btn i {\n color: var(--mj-text-secondary);\n font-size: 18px;\n transition: color 0.15s ease;\n}\n\n.sidebar-toggle-btn:hover i {\n color: var(--mj-text-primary);\n}\n\n.chat-title {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 999px;\n font-size: 12px;\n font-weight: 500;\n flex-shrink: 0;\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.shared-by-badge i {\n font-size: 10px;\n}\n\n.shared-by-badge span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.project-tag {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 12px;\n}\n\n.project-tag:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-text-muted);\n}\n\n.project-tag i {\n font-size: 10px;\n}\n\n.test-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-warning);\n border-radius: 16px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-status-warning);\n cursor: pointer;\n transition: all 0.2s;\n height: 28px;\n margin-left: 8px;\n}\n\n.test-indicator:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.test-indicator i {\n font-size: 10px;\n}\n\n/* Pinned messages chip in chat header */\n.pin-chip {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 45%, transparent);\n border-radius: 20px;\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pin-chip i {\n font-size: 11px;\n}\n\n.pin-chip:hover,\n.pin-chip.active {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n}\n\n.pin-chip-count {\n font-size: 12px;\n font-weight: 700;\n}\n\n.chat-members,\n.artifact-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 6px 8px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.chat-members:hover,\n.artifact-indicator:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n/* Badge overlay for artifact and member counts */\n.artifact-badge,\n.members-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\n.members-badge {\n background: var(--mj-brand-primary);\n}\n\n.ambient-agent-indicator {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n animation: pulse 2s ease-in-out infinite;\n}\n\n.ambient-agent-indicator i {\n color: var(--mj-brand-primary);\n}\n\n@keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n}\n.chat-actions {\n display: flex;\n gap: 8px;\n}\n\n.action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 150ms ease;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.share-btn.shared {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n color: var(--mj-brand-primary-hover);\n}\n\n.share-btn.shared:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.chat-content-area {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: row;\n position: relative;\n}\n\n.chat-messages-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n min-width: min(300px, 100%); /* Respect container bounds while maintaining minimum */\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.chat-messages-pane.full-width {\n width: 100%;\n}\n\n.chat-messages-pane:not(.full-width) {\n flex: 1;\n}\n\n.chat-messages-pane.hidden {\n display: none;\n}\n\n.resize-handle {\n width: 4px;\n background: transparent;\n cursor: col-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.resize-handle:hover {\n background: var(--mj-brand-primary);\n}\n\n.resize-handle::before {\n content: \"\";\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n}\n\n.chat-artifact-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.chat-artifact-pane.maximized {\n width: 100% !important;\n}\n\n.chat-artifact-pane > mj-artifact-viewer-panel {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.chat-messages-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n position: relative; /* For upload overlay positioning */\n}\n\n/* Upload indicator overlay - centered in conversation area */\n.upload-indicator-overlay {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem 1.5rem;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n z-index: 100;\n pointer-events: none;\n}\n\n.chat-messages-container {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n background: var(--mj-bg-surface-card);\n min-height: 0;\n position: relative;\n}\n\n.scroll-to-bottom-icon {\n position: sticky;\n bottom: 21px;\n left: 50%;\n transform: translateX(-50%);\n width: 40px;\n height: 40px;\n margin-top: -40px;\n margin-left: auto;\n margin-right: auto;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: var(--mj-shadow-md);\n transition: all 0.2s ease;\n z-index: 100;\n pointer-events: auto;\n}\n\n.scroll-to-bottom-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateX(-50%) translateY(-2px);\n box-shadow: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent) 0 4px 12px;\n}\n\n.scroll-to-bottom-icon i {\n color: var(--mj-text-secondary);\n font-size: 16px;\n transition: color 0.2s;\n}\n\n.scroll-to-bottom-icon:hover i {\n color: var(--mj-brand-primary);\n}\n\n.chat-input-container {\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n padding: 0 1.25rem 1.25rem 1.25rem;\n overflow: visible;\n}\n\n.read-only-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 1.25rem 0.5rem 1.25rem;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n font-size: 12px;\n}\n\n.read-only-banner i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.loading-peripheral-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 140px;\n padding: 24px;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 50%, transparent);\n backdrop-filter: blur(2px);\n border-radius: 12px;\n margin: 12px;\n animation: fadeIn 0.2s ease-in-out;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-md);\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n}\n\n.project-selector-modal {\n width: 600px;\n height: 500px;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n}\n\n.modal-header-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toggle-system-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.toggle-system-btn:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.toggle-system-btn.active {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.toggle-system-btn.active:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.toggle-system-btn i {\n font-size: 12px;\n}\n\n.modal-close-btn {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.modal-close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.modal-body {\n flex: 1;\n overflow: auto;\n padding: 20px;\n}\n\n.artifacts-modal {\n width: 700px;\n max-height: 600px;\n}\n\n.artifacts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.empty-state {\n grid-column: 1/-1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n}\n\n.artifact-modal-card {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-card);\n border: 1.5px solid var(--mj-border-default);\n border-radius: 12px;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.artifact-modal-card.expanded {\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-modal-card.system-artifact {\n opacity: 0.85;\n border-color: var(--mj-border-default);\n border-style: dashed;\n position: relative;\n}\n\n.artifact-modal-card.system-artifact::before {\n content: \"SYSTEM\";\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n.artifact-modal-card.system-artifact:hover {\n border-color: var(--mj-text-muted);\n box-shadow: var(--mj-shadow-md);\n}\n\n.artifact-card-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n cursor: pointer;\n}\n\n.artifact-card-header:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-modal-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-2px);\n}\n\n.artifact-modal-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 10px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.artifact-modal-icon i {\n font-size: 18px;\n}\n\n.artifact-modal-info {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-modal-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.artifact-modal-meta {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.artifact-modal-action {\n color: var(--mj-text-muted);\n transition: color 0.2s;\n}\n\n.artifact-modal-card:hover .artifact-modal-action {\n color: var(--mj-brand-primary);\n}\n\n.expand-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 6px;\n transition: all 0.2s;\n}\n.expand-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.artifact-versions-list {\n display: flex;\n flex-direction: column;\n padding: 0 1rem 1rem 1rem;\n background: var(--mj-bg-surface-sunken);\n}\n\n.artifact-version-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px 12px 68px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.artifact-version-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n.artifact-version-item .version-badge {\n display: inline-block;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n}\n.artifact-version-item .version-open-text {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n.artifact-version-item i {\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n.artifact-version-item:hover .version-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n.artifact-version-item:hover .version-open-text {\n color: var(--mj-brand-primary);\n}\n.artifact-version-item:hover i {\n color: var(--mj-brand-primary);\n}\n\n.loading-peripheral-content {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-md);\n color: var(--mj-text-secondary);\n font-size: 14px;\n font-weight: 500;\n}\n.loading-peripheral-content i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.conversation-loading-state {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 20px;\n gap: 16px;\n color: var(--mj-text-secondary);\n font-size: 15px;\n}\n.loading-content i {\n font-size: 32px;\n color: var(--mj-brand-primary);\n}\n.loading-content span {\n font-weight: 500;\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .chat-header {\n padding: 8px 12px;\n gap: 6px;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n position: relative;\n }\n .chat-info {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n order: 1;\n }\n .chat-title {\n font-size: 15px;\n font-weight: 700;\n width: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n min-width: 0;\n }\n .project-tag {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n display: none; /* Hide on mobile to save space */\n }\n .test-indicator {\n margin-left: 0;\n font-size: 10px;\n padding: 3px 8px;\n height: 24px;\n }\n /* Action buttons - icon only on mobile */\n .chat-actions-buttons {\n order: 2;\n flex-shrink: 0;\n }\n .chat-actions-buttons .action-btn {\n padding: 6px 8px;\n min-width: auto;\n }\n .chat-actions-buttons .action-btn .btn-label {\n display: none;\n }\n .chat-actions {\n flex-wrap: nowrap;\n }\n .chat-members,\n .artifact-indicator {\n padding: 5px 7px;\n font-size: 13px;\n }\n .action-btn {\n padding: 6px 8px;\n font-size: 12px;\n }\n .ambient-agent-indicator {\n font-size: 12px;\n padding: 4px 8px;\n }\n .project-selector-modal {\n width: min(95vw, 600px);\n height: auto;\n }\n .artifacts-modal {\n width: min(95vw, 700px);\n }\n .artifacts-grid {\n grid-template-columns: 1fr;\n }\n .chat-input-container {\n padding: 0 0.75rem 0.75rem 0.75rem;\n }\n .scroll-to-bottom-icon {\n bottom: 16px;\n width: 36px;\n height: 36px;\n }\n /* Artifact pane - full width overlay on mobile, overlapping header */\n .chat-content-area {\n position: relative;\n }\n .chat-artifact-pane {\n position: fixed;\n left: 0;\n right: 0;\n top: 56px; /* 48px nav + 8px dark strip above blue border */\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n background: var(--mj-bg-surface-card);\n }\n .resize-handle {\n display: none;\n }\n}\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .chat-header {\n padding: 6px 8px;\n gap: 4px;\n }\n .chat-title {\n font-size: 14px;\n font-weight: 700;\n }\n .project-tag {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n display: none;\n }\n .test-indicator {\n font-size: 9px;\n padding: 2px 6px;\n height: 20px;\n }\n .chat-members,\n .artifact-indicator {\n padding: 4px 8px;\n font-size: 11px;\n }\n .action-btn {\n padding: 5px 7px;\n font-size: 11px;\n }\n .ambient-agent-indicator {\n font-size: 11px;\n padding: 3px 6px;\n }\n .project-selector-modal,\n .artifacts-modal {\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n }\n .chat-input-container {\n padding: 0 0.5rem 0.5rem 0.5rem;\n }\n .scroll-to-bottom-icon {\n bottom: 12px;\n width: 32px;\n height: 32px;\n }\n .scroll-to-bottom-icon i {\n font-size: 14px;\n }\n}\n\n/* Artifact Picker Panel */\n.artifact-picker-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--mj-bg-overlay);\n z-index: 999;\n}\n\n.artifact-picker-panel {\n position: fixed;\n right: 0;\n top: 0;\n width: 360px;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n box-shadow: -4px 0 12px rgba(0, 0, 0, 0.1);\n animation: slideInRight 0.2s ease-out;\n}\n\n@keyframes slideInRight {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n}\n\n.artifact-picker-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.artifact-picker-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-close {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 8px;\n color: var(--mj-text-muted);\n border-radius: 4px;\n}\n\n.artifact-picker-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.artifact-picker-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n\n.artifact-picker-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n gap: 8px;\n}\n\n.artifact-picker-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.artifact-picker-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.artifact-picker-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n text-align: left;\n width: 100%;\n transition: background 0.15s, border-color 0.15s;\n}\n\n.artifact-picker-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.artifact-picker-item i {\n font-size: 20px;\n width: 24px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.artifact-picker-item i.fa-file-pdf { color: #e53e3e; }\n.artifact-picker-item i.fa-file-excel { color: #38a169; }\n.artifact-picker-item i.fa-file-word { color: #3182ce; }\n.artifact-picker-item i.fa-file { color: var(--mj-text-muted); }\n\n.artifact-picker-item-info {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.artifact-picker-item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.artifact-picker-item-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n"] }]
3244
+ }], () => [{ type: i1.AgentStateService }, { type: i2.ConversationAgentService }, { type: i3.ActiveTasksService }, { type: i0.ChangeDetectorRef }, { type: i4.MentionAutocompleteService }, { type: i5.ArtifactPermissionService }, { type: i6.ConversationAttachmentService }, { type: i7.ConversationStreamingService }, { type: i8.DialogService }, { type: i9.ConversationBridgeService }, { type: i10.AnalyzeArtifactService }, { type: i11.UICommandHandlerService }, { type: i10.InteractiveFormApplyService }], { environmentId: [{
3028
3245
  type: Input
3029
3246
  }], currentUser: [{
3030
3247
  type: Input
@@ -3034,6 +3251,12 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
3034
3251
  type: Input
3035
3252
  }], threadId: [{
3036
3253
  type: Input
3254
+ }], suppressNewConversationEmptyState: [{
3255
+ type: Input
3256
+ }], allowMentions: [{
3257
+ type: Input
3258
+ }], allowAttachments: [{
3259
+ type: Input
3037
3260
  }], isNewConversation: [{
3038
3261
  type: Input
3039
3262
  }], pendingMessage: [{
@@ -3054,6 +3277,20 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
3054
3277
  type: Input
3055
3278
  }], appContext: [{
3056
3279
  type: Input
3280
+ }], defaultAgentId: [{
3281
+ type: Input
3282
+ }], applicationScope: [{
3283
+ type: Input
3284
+ }], applicationId: [{
3285
+ type: Input
3286
+ }], linkedEntityId: [{
3287
+ type: Input
3288
+ }], linkedRecordId: [{
3289
+ type: Input
3290
+ }], showAgentPicker: [{
3291
+ type: Input
3292
+ }], showAgentModePicker: [{
3293
+ type: Input
3057
3294
  }], emptyStateGreeting: [{
3058
3295
  type: Input
3059
3296
  }], showSidebarToggle: [{
@@ -3095,5 +3332,5 @@ export class ConversationChatAreaComponent extends BaseAngularComponent {
3095
3332
  type: ViewChild,
3096
3333
  args: [ConversationEmptyStateComponent]
3097
3334
  }] }); })();
3098
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationChatAreaComponent, { className: "ConversationChatAreaComponent", filePath: "src/lib/components/conversation/conversation-chat-area.component.ts", lineNumber: 42 }); })();
3335
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationChatAreaComponent, { className: "ConversationChatAreaComponent", filePath: "src/lib/components/conversation/conversation-chat-area.component.ts", lineNumber: 43 }); })();
3099
3336
  //# sourceMappingURL=conversation-chat-area.component.js.map