@memberjunction/ng-conversations 2.115.0 → 2.117.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 (37) hide show
  1. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +12 -0
  2. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  3. package/dist/lib/components/conversation/conversation-chat-area.component.js +141 -7
  4. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -3
  6. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  7. package/dist/lib/components/conversation/conversation-list.component.js +398 -197
  8. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  9. package/dist/lib/components/message/message-input-box.component.d.ts +4 -0
  10. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  11. package/dist/lib/components/message/message-input-box.component.js +9 -0
  12. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  13. package/dist/lib/components/message/message-input.component.d.ts +18 -15
  14. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  15. package/dist/lib/components/message/message-input.component.js +108 -93
  16. package/dist/lib/components/message/message-input.component.js.map +1 -1
  17. package/dist/lib/components/message/message-item.component.d.ts +1 -0
  18. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  19. package/dist/lib/components/message/message-item.component.js +8 -4
  20. package/dist/lib/components/message/message-item.component.js.map +1 -1
  21. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +3 -1
  22. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  23. package/dist/lib/components/workspace/conversation-workspace.component.js +24 -17
  24. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  25. package/dist/lib/services/conversation-state.service.d.ts +14 -0
  26. package/dist/lib/services/conversation-state.service.d.ts.map +1 -1
  27. package/dist/lib/services/conversation-state.service.js +32 -0
  28. package/dist/lib/services/conversation-state.service.js.map +1 -1
  29. package/dist/lib/services/conversation-streaming.service.d.ts +101 -0
  30. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -0
  31. package/dist/lib/services/conversation-streaming.service.js +319 -0
  32. package/dist/lib/services/conversation-streaming.service.js.map +1 -0
  33. package/dist/public-api.d.ts +1 -0
  34. package/dist/public-api.d.ts.map +1 -1
  35. package/dist/public-api.js +1 -0
  36. package/dist/public-api.js.map +1 -1
  37. package/package.json +14 -14
@@ -5,96 +5,121 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../services/conversation-state.service";
6
6
  import * as i2 from "../../services/dialog.service";
7
7
  import * as i3 from "../../services/notification.service";
8
- import * as i4 from "../../services/toast.service";
9
- import * as i5 from "../../services/active-tasks.service";
10
- import * as i6 from "@angular/common";
11
- import * as i7 from "@angular/forms";
12
- import * as i8 from "../notification/notification-badge.component";
8
+ import * as i4 from "../../services/active-tasks.service";
9
+ import * as i5 from "@angular/forms";
10
+ import * as i6 from "../notification/notification-badge.component";
13
11
  const _forTrack0 = ($index, $item) => $item.ID;
14
- function ConversationListComponent_Conditional_8_For_9_i_3_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelement(0, "i", 28);
12
+ function ConversationListComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
13
+ const _r1 = i0.ɵɵgetCurrentView();
14
+ i0.ɵɵelementStart(0, "button", 16);
15
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSelectionMode()); });
16
+ i0.ɵɵelement(1, "i", 17);
17
+ i0.ɵɵelementStart(2, "span");
18
+ i0.ɵɵtext(3, "Select");
19
+ i0.ɵɵelementEnd()();
20
+ } }
21
+ function ConversationListComponent_Conditional_10_For_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
22
+ const _r6 = i0.ɵɵgetCurrentView();
23
+ i0.ɵɵelementStart(0, "div", 20)(1, "input", 29);
24
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(_r6); const conversation_r5 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.toggleConversationSelection(conversation_r5.ID)); });
25
+ i0.ɵɵelementEnd()();
26
+ } if (rf & 2) {
27
+ const conversation_r5 = i0.ɵɵnextContext().$implicit;
28
+ const ctx_r1 = i0.ɵɵnextContext(2);
29
+ i0.ɵɵadvance();
30
+ i0.ɵɵproperty("checked", ctx_r1.selectedConversationIds.has(conversation_r5.ID));
16
31
  } }
17
- function ConversationListComponent_Conditional_8_For_9_i_4_Template(rf, ctx) { if (rf & 1) {
18
- i0.ɵɵelement(0, "i", 29);
32
+ function ConversationListComponent_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵelementStart(0, "div", 22);
34
+ i0.ɵɵelement(1, "i", 30);
35
+ i0.ɵɵelementEnd();
19
36
  } }
20
- function ConversationListComponent_Conditional_8_For_9_Conditional_15_Template(rf, ctx) { if (rf & 1) {
21
- const _r5 = i0.ɵɵgetCurrentView();
22
- i0.ɵɵelementStart(0, "div", 30);
23
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_For_9_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r5); return i0.ɵɵresetView($event.stopPropagation()); });
24
- i0.ɵɵelementStart(1, "button", 31);
25
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_For_9_Conditional_15_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r5); const conversation_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.togglePin(conversation_r4, $event)); });
26
- i0.ɵɵelement(2, "i", 32);
37
+ function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
38
+ const _r8 = i0.ɵɵgetCurrentView();
39
+ i0.ɵɵelementStart(0, "div", 34);
40
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
41
+ i0.ɵɵelementStart(1, "button", 35);
42
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r8); const conversation_r5 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.togglePin(conversation_r5, $event)); });
43
+ i0.ɵɵelement(2, "i", 36);
27
44
  i0.ɵɵelementStart(3, "span");
28
45
  i0.ɵɵtext(4, "Unpin");
29
46
  i0.ɵɵelementEnd()();
30
- i0.ɵɵelementStart(5, "button", 31);
31
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_For_9_Conditional_15_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r5); const conversation_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.renameConversation(conversation_r4); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
32
- i0.ɵɵelement(6, "i", 33);
47
+ i0.ɵɵelementStart(5, "button", 35);
48
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r8); const conversation_r5 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.renameConversation(conversation_r5); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
49
+ i0.ɵɵelement(6, "i", 37);
33
50
  i0.ɵɵelementStart(7, "span");
34
51
  i0.ɵɵtext(8, "Rename");
35
52
  i0.ɵɵelementEnd()();
36
- i0.ɵɵelement(9, "div", 34);
37
- i0.ɵɵelementStart(10, "button", 35);
38
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_For_9_Conditional_15_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r5); const conversation_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.deleteConversation(conversation_r4); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
39
- i0.ɵɵelement(11, "i", 36);
53
+ i0.ɵɵelement(9, "div", 38);
54
+ i0.ɵɵelementStart(10, "button", 39);
55
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r8); const conversation_r5 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.deleteConversation(conversation_r5); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
56
+ i0.ɵɵelement(11, "i", 40);
40
57
  i0.ɵɵelementStart(12, "span");
41
58
  i0.ɵɵtext(13, "Delete");
42
59
  i0.ɵɵelementEnd()()();
43
60
  } }
44
- function ConversationListComponent_Conditional_8_For_9_Template(rf, ctx) { if (rf & 1) {
45
- const _r3 = i0.ɵɵgetCurrentView();
46
- i0.ɵɵelementStart(0, "div", 14);
47
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_For_9_Template_div_click_0_listener() { const conversation_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectConversation(conversation_r4)); });
48
- i0.ɵɵelementStart(1, "div", 15)(2, "div", 16);
49
- i0.ɵɵtemplate(3, ConversationListComponent_Conditional_8_For_9_i_3_Template, 1, 0, "i", 17)(4, ConversationListComponent_Conditional_8_For_9_i_4_Template, 1, 0, "i", 18);
61
+ function ConversationListComponent_Conditional_10_For_9_Conditional_11_Template(rf, ctx) { if (rf & 1) {
62
+ const _r7 = i0.ɵɵgetCurrentView();
63
+ i0.ɵɵelementStart(0, "div", 28)(1, "button", 31);
64
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r7); const conversation_r5 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMenu(conversation_r5.ID, $event)); });
65
+ i0.ɵɵelement(2, "i", 32);
50
66
  i0.ɵɵelementEnd();
51
- i0.ɵɵelementStart(5, "div", 19);
52
- i0.ɵɵelement(6, "mj-notification-badge", 20);
53
- i0.ɵɵelementEnd()();
54
- i0.ɵɵelementStart(7, "div", 21)(8, "div", 22);
55
- i0.ɵɵtext(9);
67
+ i0.ɵɵtemplate(3, ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template, 14, 0, "div", 33);
56
68
  i0.ɵɵelementEnd();
57
- i0.ɵɵelementStart(10, "div", 23);
58
- i0.ɵɵtext(11);
69
+ } if (rf & 2) {
70
+ const conversation_r5 = i0.ɵɵnextContext().$implicit;
71
+ const ctx_r1 = i0.ɵɵnextContext(2);
72
+ i0.ɵɵadvance(3);
73
+ i0.ɵɵconditional(ctx_r1.openMenuConversationId === conversation_r5.ID ? 3 : -1);
74
+ } }
75
+ function ConversationListComponent_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
76
+ const _r4 = i0.ɵɵgetCurrentView();
77
+ i0.ɵɵelementStart(0, "div", 19);
78
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Template_div_click_0_listener() { const conversation_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleConversationClick(conversation_r5)); });
79
+ i0.ɵɵtemplate(1, ConversationListComponent_Conditional_10_For_9_Conditional_1_Template, 2, 1, "div", 20);
80
+ i0.ɵɵelementStart(2, "div", 21);
81
+ i0.ɵɵtemplate(3, ConversationListComponent_Conditional_10_For_9_Conditional_3_Template, 2, 0, "div", 22);
82
+ i0.ɵɵelementStart(4, "div", 23);
83
+ i0.ɵɵelement(5, "mj-notification-badge", 24);
59
84
  i0.ɵɵelementEnd()();
60
- i0.ɵɵelementStart(12, "div", 24)(13, "button", 25);
61
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_For_9_Template_button_click_13_listener($event) { const conversation_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMenu(conversation_r4.ID, $event)); });
62
- i0.ɵɵelement(14, "i", 26);
85
+ i0.ɵɵelementStart(6, "div", 25)(7, "div", 26);
86
+ i0.ɵɵtext(8);
63
87
  i0.ɵɵelementEnd();
64
- i0.ɵɵtemplate(15, ConversationListComponent_Conditional_8_For_9_Conditional_15_Template, 14, 0, "div", 27);
88
+ i0.ɵɵelementStart(9, "div", 27);
89
+ i0.ɵɵtext(10);
65
90
  i0.ɵɵelementEnd()();
91
+ i0.ɵɵtemplate(11, ConversationListComponent_Conditional_10_For_9_Conditional_11_Template, 4, 1, "div", 28);
92
+ i0.ɵɵelementEnd();
66
93
  } if (rf & 2) {
67
- const conversation_r4 = ctx.$implicit;
94
+ const conversation_r5 = ctx.$implicit;
68
95
  const ctx_r1 = i0.ɵɵnextContext(2);
69
- i0.ɵɵclassProp("active", conversation_r4.ID === ctx_r1.conversationState.activeConversationId)("renamed", conversation_r4.ID === ctx_r1.renamedConversationId);
70
- i0.ɵɵadvance(2);
71
- i0.ɵɵclassProp("has-tasks", ctx_r1.hasActiveTasks(conversation_r4.ID));
72
- i0.ɵɵadvance();
73
- i0.ɵɵproperty("ngIf", !ctx_r1.hasActiveTasks(conversation_r4.ID));
96
+ i0.ɵɵclassProp("active", conversation_r5.ID === ctx_r1.conversationState.activeConversationId)("renamed", conversation_r5.ID === ctx_r1.renamedConversationId);
74
97
  i0.ɵɵadvance();
75
- i0.ɵɵproperty("ngIf", ctx_r1.hasActiveTasks(conversation_r4.ID));
98
+ i0.ɵɵconditional(ctx_r1.isSelectionMode ? 1 : -1);
99
+ i0.ɵɵadvance(2);
100
+ i0.ɵɵconditional(ctx_r1.hasActiveTasks(conversation_r5.ID) ? 3 : -1);
76
101
  i0.ɵɵadvance(2);
77
- i0.ɵɵproperty("conversationId", conversation_r4.ID);
102
+ i0.ɵɵproperty("conversationId", conversation_r5.ID);
78
103
  i0.ɵɵadvance();
79
- i0.ɵɵproperty("title", conversation_r4.Name + (conversation_r4.Description ? "\n" + conversation_r4.Description : ""));
104
+ i0.ɵɵproperty("title", conversation_r5.Name + (conversation_r5.Description ? "\n" + conversation_r5.Description : ""));
80
105
  i0.ɵɵadvance(2);
81
- i0.ɵɵtextInterpolate(conversation_r4.Name);
106
+ i0.ɵɵtextInterpolate(conversation_r5.Name);
82
107
  i0.ɵɵadvance(2);
83
- i0.ɵɵtextInterpolate(conversation_r4.Description);
84
- i0.ɵɵadvance(4);
85
- i0.ɵɵconditional(ctx_r1.openMenuConversationId === conversation_r4.ID ? 15 : -1);
108
+ i0.ɵɵtextInterpolate(conversation_r5.Description);
109
+ i0.ɵɵadvance();
110
+ i0.ɵɵconditional(!ctx_r1.isSelectionMode ? 11 : -1);
86
111
  } }
87
- function ConversationListComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
88
- const _r1 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "div", 6)(1, "div", 8);
90
- i0.ɵɵlistener("click", function ConversationListComponent_Conditional_8_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.togglePinned()); });
91
- i0.ɵɵelementStart(2, "div", 9);
92
- i0.ɵɵelement(3, "i", 10)(4, "i", 13);
112
+ function ConversationListComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
113
+ const _r3 = i0.ɵɵgetCurrentView();
114
+ i0.ɵɵelementStart(0, "div", 8)(1, "div", 10);
115
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.togglePinned()); });
116
+ i0.ɵɵelementStart(2, "div", 11);
117
+ i0.ɵɵelement(3, "i", 12)(4, "i", 18);
93
118
  i0.ɵɵelementStart(5, "span");
94
119
  i0.ɵɵtext(6, "Pinned");
95
120
  i0.ɵɵelementEnd()()();
96
- i0.ɵɵelementStart(7, "div", 11);
97
- i0.ɵɵrepeaterCreate(8, ConversationListComponent_Conditional_8_For_9_Template, 16, 13, "div", 12, _forTrack0);
121
+ i0.ɵɵelementStart(7, "div", 13);
122
+ i0.ɵɵrepeaterCreate(8, ConversationListComponent_Conditional_10_For_9_Template, 12, 11, "div", 14, _forTrack0);
98
123
  i0.ɵɵelementEnd()();
99
124
  } if (rf & 2) {
100
125
  const ctx_r1 = i0.ɵɵnextContext();
@@ -105,84 +130,142 @@ function ConversationListComponent_Conditional_8_Template(rf, ctx) { if (rf & 1)
105
130
  i0.ɵɵadvance();
106
131
  i0.ɵɵrepeater(ctx_r1.pinnedConversations);
107
132
  } }
108
- function ConversationListComponent_For_17_i_3_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelement(0, "i", 28);
133
+ function ConversationListComponent_For_19_Conditional_1_Template(rf, ctx) { if (rf & 1) {
134
+ const _r11 = i0.ɵɵgetCurrentView();
135
+ i0.ɵɵelementStart(0, "div", 20)(1, "input", 29);
136
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(_r11); const conversation_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.toggleConversationSelection(conversation_r10.ID)); });
137
+ i0.ɵɵelementEnd()();
138
+ } if (rf & 2) {
139
+ const conversation_r10 = i0.ɵɵnextContext().$implicit;
140
+ const ctx_r1 = i0.ɵɵnextContext();
141
+ i0.ɵɵadvance();
142
+ i0.ɵɵproperty("checked", ctx_r1.selectedConversationIds.has(conversation_r10.ID));
110
143
  } }
111
- function ConversationListComponent_For_17_i_4_Template(rf, ctx) { if (rf & 1) {
112
- i0.ɵɵelement(0, "i", 29);
144
+ function ConversationListComponent_For_19_Conditional_3_Template(rf, ctx) { if (rf & 1) {
145
+ i0.ɵɵelementStart(0, "div", 22);
146
+ i0.ɵɵelement(1, "i", 30);
147
+ i0.ɵɵelementEnd();
113
148
  } }
114
- function ConversationListComponent_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
115
- const _r8 = i0.ɵɵgetCurrentView();
116
- i0.ɵɵelementStart(0, "div", 30);
117
- i0.ɵɵlistener("click", function ConversationListComponent_For_17_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
118
- i0.ɵɵelementStart(1, "button", 31);
119
- i0.ɵɵlistener("click", function ConversationListComponent_For_17_Conditional_15_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r8); const conversation_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.togglePin(conversation_r7, $event)); });
120
- i0.ɵɵelement(2, "i", 32);
149
+ function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
150
+ const _r13 = i0.ɵɵgetCurrentView();
151
+ i0.ɵɵelementStart(0, "div", 34);
152
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.stopPropagation()); });
153
+ i0.ɵɵelementStart(1, "button", 35);
154
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r13); const conversation_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.togglePin(conversation_r10, $event)); });
155
+ i0.ɵɵelement(2, "i", 36);
121
156
  i0.ɵɵelementStart(3, "span");
122
157
  i0.ɵɵtext(4, "Pin");
123
158
  i0.ɵɵelementEnd()();
124
- i0.ɵɵelementStart(5, "button", 31);
125
- i0.ɵɵlistener("click", function ConversationListComponent_For_17_Conditional_15_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r8); const conversation_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.renameConversation(conversation_r7); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
126
- i0.ɵɵelement(6, "i", 33);
159
+ i0.ɵɵelementStart(5, "button", 35);
160
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r13); const conversation_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.renameConversation(conversation_r10); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
161
+ i0.ɵɵelement(6, "i", 37);
127
162
  i0.ɵɵelementStart(7, "span");
128
163
  i0.ɵɵtext(8, "Rename");
129
164
  i0.ɵɵelementEnd()();
130
- i0.ɵɵelement(9, "div", 34);
131
- i0.ɵɵelementStart(10, "button", 35);
132
- i0.ɵɵlistener("click", function ConversationListComponent_For_17_Conditional_15_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r8); const conversation_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.deleteConversation(conversation_r7); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
133
- i0.ɵɵelement(11, "i", 36);
165
+ i0.ɵɵelement(9, "div", 38);
166
+ i0.ɵɵelementStart(10, "button", 39);
167
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r13); const conversation_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.deleteConversation(conversation_r10); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
168
+ i0.ɵɵelement(11, "i", 40);
134
169
  i0.ɵɵelementStart(12, "span");
135
170
  i0.ɵɵtext(13, "Delete");
136
171
  i0.ɵɵelementEnd()()();
137
172
  } }
138
- function ConversationListComponent_For_17_Template(rf, ctx) { if (rf & 1) {
139
- const _r6 = i0.ɵɵgetCurrentView();
140
- i0.ɵɵelementStart(0, "div", 14);
141
- i0.ɵɵlistener("click", function ConversationListComponent_For_17_Template_div_click_0_listener() { const conversation_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectConversation(conversation_r7)); });
142
- i0.ɵɵelementStart(1, "div", 15)(2, "div", 16);
143
- i0.ɵɵtemplate(3, ConversationListComponent_For_17_i_3_Template, 1, 0, "i", 17)(4, ConversationListComponent_For_17_i_4_Template, 1, 0, "i", 18);
173
+ function ConversationListComponent_For_19_Conditional_11_Template(rf, ctx) { if (rf & 1) {
174
+ const _r12 = i0.ɵɵgetCurrentView();
175
+ i0.ɵɵelementStart(0, "div", 28)(1, "button", 31);
176
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r12); const conversation_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleMenu(conversation_r10.ID, $event)); });
177
+ i0.ɵɵelement(2, "i", 32);
144
178
  i0.ɵɵelementEnd();
145
- i0.ɵɵelementStart(5, "div", 19);
146
- i0.ɵɵelement(6, "mj-notification-badge", 20);
147
- i0.ɵɵelementEnd()();
148
- i0.ɵɵelementStart(7, "div", 21)(8, "div", 22);
149
- i0.ɵɵtext(9);
179
+ i0.ɵɵtemplate(3, ConversationListComponent_For_19_Conditional_11_Conditional_3_Template, 14, 0, "div", 33);
150
180
  i0.ɵɵelementEnd();
151
- i0.ɵɵelementStart(10, "div", 23);
152
- i0.ɵɵtext(11);
181
+ } if (rf & 2) {
182
+ const conversation_r10 = i0.ɵɵnextContext().$implicit;
183
+ const ctx_r1 = i0.ɵɵnextContext();
184
+ i0.ɵɵadvance(3);
185
+ i0.ɵɵconditional(ctx_r1.openMenuConversationId === conversation_r10.ID ? 3 : -1);
186
+ } }
187
+ function ConversationListComponent_For_19_Template(rf, ctx) { if (rf & 1) {
188
+ const _r9 = i0.ɵɵgetCurrentView();
189
+ i0.ɵɵelementStart(0, "div", 19);
190
+ i0.ɵɵlistener("click", function ConversationListComponent_For_19_Template_div_click_0_listener() { const conversation_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleConversationClick(conversation_r10)); });
191
+ i0.ɵɵtemplate(1, ConversationListComponent_For_19_Conditional_1_Template, 2, 1, "div", 20);
192
+ i0.ɵɵelementStart(2, "div", 21);
193
+ i0.ɵɵtemplate(3, ConversationListComponent_For_19_Conditional_3_Template, 2, 0, "div", 22);
194
+ i0.ɵɵelementStart(4, "div", 23);
195
+ i0.ɵɵelement(5, "mj-notification-badge", 24);
153
196
  i0.ɵɵelementEnd()();
154
- i0.ɵɵelementStart(12, "div", 24)(13, "button", 25);
155
- i0.ɵɵlistener("click", function ConversationListComponent_For_17_Template_button_click_13_listener($event) { const conversation_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleMenu(conversation_r7.ID, $event)); });
156
- i0.ɵɵelement(14, "i", 26);
197
+ i0.ɵɵelementStart(6, "div", 25)(7, "div", 26);
198
+ i0.ɵɵtext(8);
157
199
  i0.ɵɵelementEnd();
158
- i0.ɵɵtemplate(15, ConversationListComponent_For_17_Conditional_15_Template, 14, 0, "div", 27);
200
+ i0.ɵɵelementStart(9, "div", 27);
201
+ i0.ɵɵtext(10);
159
202
  i0.ɵɵelementEnd()();
203
+ i0.ɵɵtemplate(11, ConversationListComponent_For_19_Conditional_11_Template, 4, 1, "div", 28);
204
+ i0.ɵɵelementEnd();
160
205
  } if (rf & 2) {
161
- const conversation_r7 = ctx.$implicit;
206
+ const conversation_r10 = ctx.$implicit;
162
207
  const ctx_r1 = i0.ɵɵnextContext();
163
- i0.ɵɵclassProp("active", conversation_r7.ID === ctx_r1.conversationState.activeConversationId)("renamed", conversation_r7.ID === ctx_r1.renamedConversationId);
164
- i0.ɵɵadvance(2);
165
- i0.ɵɵclassProp("has-tasks", ctx_r1.hasActiveTasks(conversation_r7.ID));
166
- i0.ɵɵadvance();
167
- i0.ɵɵproperty("ngIf", !ctx_r1.hasActiveTasks(conversation_r7.ID));
208
+ i0.ɵɵclassProp("active", conversation_r10.ID === ctx_r1.conversationState.activeConversationId)("renamed", conversation_r10.ID === ctx_r1.renamedConversationId);
168
209
  i0.ɵɵadvance();
169
- i0.ɵɵproperty("ngIf", ctx_r1.hasActiveTasks(conversation_r7.ID));
210
+ i0.ɵɵconditional(ctx_r1.isSelectionMode ? 1 : -1);
170
211
  i0.ɵɵadvance(2);
171
- i0.ɵɵproperty("conversationId", conversation_r7.ID);
212
+ i0.ɵɵconditional(ctx_r1.hasActiveTasks(conversation_r10.ID) ? 3 : -1);
213
+ i0.ɵɵadvance(2);
214
+ i0.ɵɵproperty("conversationId", conversation_r10.ID);
172
215
  i0.ɵɵadvance();
173
- i0.ɵɵproperty("title", conversation_r7.Name + (conversation_r7.Description ? "\n" + conversation_r7.Description : ""));
216
+ i0.ɵɵproperty("title", conversation_r10.Name + (conversation_r10.Description ? "\n" + conversation_r10.Description : ""));
174
217
  i0.ɵɵadvance(2);
175
- i0.ɵɵtextInterpolate(conversation_r7.Name);
218
+ i0.ɵɵtextInterpolate(conversation_r10.Name);
176
219
  i0.ɵɵadvance(2);
177
- i0.ɵɵtextInterpolate(conversation_r7.Description);
178
- i0.ɵɵadvance(4);
179
- i0.ɵɵconditional(ctx_r1.openMenuConversationId === conversation_r7.ID ? 15 : -1);
220
+ i0.ɵɵtextInterpolate(conversation_r10.Description);
221
+ i0.ɵɵadvance();
222
+ i0.ɵɵconditional(!ctx_r1.isSelectionMode ? 11 : -1);
223
+ } }
224
+ function ConversationListComponent_Conditional_20_Conditional_4_Template(rf, ctx) { if (rf & 1) {
225
+ const _r15 = i0.ɵɵgetCurrentView();
226
+ i0.ɵɵelementStart(0, "button", 47);
227
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectAll()); });
228
+ i0.ɵɵtext(1, "Select All");
229
+ i0.ɵɵelementEnd();
230
+ } }
231
+ function ConversationListComponent_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
232
+ const _r16 = i0.ɵɵgetCurrentView();
233
+ i0.ɵɵelementStart(0, "button", 47);
234
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.deselectAll()); });
235
+ i0.ɵɵtext(1, "Deselect All");
236
+ i0.ɵɵelementEnd();
237
+ } }
238
+ function ConversationListComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
239
+ const _r14 = i0.ɵɵgetCurrentView();
240
+ i0.ɵɵelementStart(0, "div", 15)(1, "div", 41)(2, "span", 42);
241
+ i0.ɵɵtext(3);
242
+ i0.ɵɵelementEnd();
243
+ i0.ɵɵtemplate(4, ConversationListComponent_Conditional_20_Conditional_4_Template, 2, 0, "button", 43)(5, ConversationListComponent_Conditional_20_Conditional_5_Template, 2, 0, "button", 43);
244
+ i0.ɵɵelementEnd();
245
+ i0.ɵɵelementStart(6, "div", 44)(7, "button", 45);
246
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSelectionMode()); });
247
+ i0.ɵɵtext(8, " Cancel ");
248
+ i0.ɵɵelementEnd();
249
+ i0.ɵɵelementStart(9, "button", 46);
250
+ i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.bulkDeleteConversations()); });
251
+ i0.ɵɵelement(10, "i", 40);
252
+ i0.ɵɵtext(11);
253
+ i0.ɵɵelementEnd()()();
254
+ } if (rf & 2) {
255
+ const ctx_r1 = i0.ɵɵnextContext();
256
+ i0.ɵɵadvance(3);
257
+ i0.ɵɵtextInterpolate1("", ctx_r1.selectedConversationIds.size, " selected");
258
+ i0.ɵɵadvance();
259
+ i0.ɵɵconditional(ctx_r1.selectedConversationIds.size < ctx_r1.conversationState.filteredConversations.length ? 4 : 5);
260
+ i0.ɵɵadvance(5);
261
+ i0.ɵɵproperty("disabled", ctx_r1.selectedConversationIds.size === 0);
262
+ i0.ɵɵadvance(2);
263
+ i0.ɵɵtextInterpolate1(" Delete (", ctx_r1.selectedConversationIds.size, ") ");
180
264
  } }
181
265
  export class ConversationListComponent {
182
266
  conversationState;
183
267
  dialogService;
184
268
  notificationService;
185
- toastService;
186
269
  activeTasksService;
187
270
  cdr;
188
271
  environmentId;
@@ -192,12 +275,13 @@ export class ConversationListComponent {
192
275
  pinnedExpanded = true;
193
276
  openMenuConversationId = null;
194
277
  conversationIdsWithTasks = new Set();
278
+ isSelectionMode = false;
279
+ selectedConversationIds = new Set();
195
280
  destroy$ = new Subject();
196
- constructor(conversationState, dialogService, notificationService, toastService, activeTasksService, cdr) {
281
+ constructor(conversationState, dialogService, notificationService, activeTasksService, cdr) {
197
282
  this.conversationState = conversationState;
198
283
  this.dialogService = dialogService;
199
284
  this.notificationService = notificationService;
200
- this.toastService = toastService;
201
285
  this.activeTasksService = activeTasksService;
202
286
  this.cdr = cdr;
203
287
  }
@@ -310,54 +394,126 @@ export class ConversationListComponent {
310
394
  hasActiveTasks(conversationId) {
311
395
  return this.conversationIdsWithTasks.has(conversationId);
312
396
  }
313
- static ɵfac = function ConversationListComponent_Factory(t) { return new (t || ConversationListComponent)(i0.ɵɵdirectiveInject(i1.ConversationStateService), i0.ɵɵdirectiveInject(i2.DialogService), i0.ɵɵdirectiveInject(i3.NotificationService), i0.ɵɵdirectiveInject(i4.ToastService), i0.ɵɵdirectiveInject(i5.ActiveTasksService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
397
+ toggleSelectionMode() {
398
+ this.isSelectionMode = !this.isSelectionMode;
399
+ if (!this.isSelectionMode) {
400
+ this.selectedConversationIds.clear();
401
+ }
402
+ }
403
+ toggleConversationSelection(conversationId) {
404
+ if (this.selectedConversationIds.has(conversationId)) {
405
+ this.selectedConversationIds.delete(conversationId);
406
+ }
407
+ else {
408
+ this.selectedConversationIds.add(conversationId);
409
+ }
410
+ }
411
+ selectAll() {
412
+ this.conversationState.filteredConversations.forEach(c => {
413
+ this.selectedConversationIds.add(c.ID);
414
+ });
415
+ }
416
+ deselectAll() {
417
+ this.selectedConversationIds.clear();
418
+ }
419
+ async bulkDeleteConversations() {
420
+ const count = this.selectedConversationIds.size;
421
+ if (count === 0)
422
+ return;
423
+ const confirmed = await this.dialogService.confirm({
424
+ title: 'Delete Conversations',
425
+ message: `Are you sure you want to delete ${count} conversation${count > 1 ? 's' : ''}? This action cannot be undone.`,
426
+ okText: 'Delete',
427
+ cancelText: 'Cancel'
428
+ });
429
+ if (confirmed) {
430
+ try {
431
+ const result = await this.conversationState.deleteMultipleConversations(Array.from(this.selectedConversationIds), this.currentUser);
432
+ // Show results if there were any failures
433
+ if (result.failed.length > 0) {
434
+ await this.dialogService.alert('Partial Success', `Deleted ${result.successful.length} of ${count} conversations. ${result.failed.length} failed.`);
435
+ }
436
+ // Exit selection mode
437
+ this.toggleSelectionMode();
438
+ }
439
+ catch (error) {
440
+ console.error('Error deleting conversations:', error);
441
+ await this.dialogService.alert('Error', 'Failed to delete conversations. Please try again.');
442
+ }
443
+ }
444
+ }
445
+ handleConversationClick(conversation) {
446
+ if (this.isSelectionMode) {
447
+ this.toggleConversationSelection(conversation.ID);
448
+ }
449
+ else {
450
+ this.selectConversation(conversation);
451
+ }
452
+ }
453
+ static ɵfac = function ConversationListComponent_Factory(t) { return new (t || ConversationListComponent)(i0.ɵɵdirectiveInject(i1.ConversationStateService), i0.ɵɵdirectiveInject(i2.DialogService), i0.ɵɵdirectiveInject(i3.NotificationService), i0.ɵɵdirectiveInject(i4.ActiveTasksService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
314
454
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationListComponent, selectors: [["mj-conversation-list"]], hostBindings: function ConversationListComponent_HostBindings(rf, ctx) { if (rf & 1) {
315
455
  i0.ɵɵlistener("click", function ConversationListComponent_click_HostBindingHandler() { return ctx.onDocumentClick(); }, false, i0.ɵɵresolveDocument);
316
- } }, inputs: { environmentId: "environmentId", currentUser: "currentUser", renamedConversationId: "renamedConversationId" }, decls: 18, vars: 6, consts: [[1, "conversation-list"], [1, "list-header"], ["type", "text", "placeholder", "Search conversations...", 1, "search-input", 3, "ngModelChange", "ngModel"], ["title", "New Conversation", 1, "btn-new-conversation", 3, "click"], [1, "fas", "fa-plus"], [1, "list-content"], [1, "sidebar-section", "pinned-section"], [1, "sidebar-section"], [1, "section-header", 3, "click"], [1, "section-title"], [1, "fas", "fa-chevron-right"], [1, "chat-list"], [1, "conversation-item", 3, "active", "renamed"], [1, "fas", "fa-thumbtack", "section-icon"], [1, "conversation-item", 3, "click"], [1, "conversation-icon-wrapper"], [1, "conversation-icon"], ["class", "fas fa-comments", 4, "ngIf"], ["class", "fas fa-spinner fa-pulse", 4, "ngIf"], [1, "badge-overlay"], [3, "conversationId"], [1, "conversation-info", 3, "title"], [1, "conversation-name"], [1, "conversation-preview"], [1, "conversation-actions"], ["title", "More options", 1, "menu-btn", 3, "click"], [1, "fas", "fa-ellipsis"], [1, "context-menu"], [1, "fas", "fa-comments"], [1, "fas", "fa-spinner", "fa-pulse"], [1, "context-menu", 3, "click"], [1, "menu-item", 3, "click"], [1, "fas", "fa-thumbtack"], [1, "fas", "fa-edit"], [1, "menu-divider"], [1, "menu-item", "danger", 3, "click"], [1, "fas", "fa-trash"]], template: function ConversationListComponent_Template(rf, ctx) { if (rf & 1) {
317
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "input", 2);
318
- i0.ɵɵtwoWayListener("ngModelChange", function ConversationListComponent_Template_input_ngModelChange_2_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.conversationState.searchQuery, $event) || (ctx.conversationState.searchQuery = $event); return $event; });
456
+ } }, inputs: { environmentId: "environmentId", currentUser: "currentUser", renamedConversationId: "renamedConversationId" }, decls: 21, vars: 8, consts: [[1, "conversation-list"], [1, "list-header"], [1, "header-top"], ["type", "text", "placeholder", "Search conversations...", 1, "search-input", 3, "ngModelChange", "ngModel"], ["title", "Select conversations", 1, "btn-select"], ["title", "New Conversation", 1, "btn-new-conversation", 3, "click"], [1, "fas", "fa-plus"], [1, "list-content"], [1, "sidebar-section", "pinned-section"], [1, "sidebar-section"], [1, "section-header", 3, "click"], [1, "section-title"], [1, "fas", "fa-chevron-right"], [1, "chat-list"], [1, "conversation-item", 3, "active", "renamed"], [1, "selection-action-bar"], ["title", "Select conversations", 1, "btn-select", 3, "click"], [1, "fas", "fa-check-square"], [1, "fas", "fa-thumbtack", "section-icon"], [1, "conversation-item", 3, "click"], [1, "conversation-checkbox"], [1, "conversation-icon-wrapper"], [1, "conversation-icon", "has-tasks"], [1, "badge-overlay"], [3, "conversationId"], [1, "conversation-info", 3, "title"], [1, "conversation-name"], [1, "conversation-preview"], [1, "conversation-actions"], ["type", "checkbox", 3, "click", "checked"], [1, "fas", "fa-spinner", "fa-pulse"], ["title", "More options", 1, "menu-btn", 3, "click"], [1, "fas", "fa-ellipsis"], [1, "context-menu"], [1, "context-menu", 3, "click"], [1, "menu-item", 3, "click"], [1, "fas", "fa-thumbtack"], [1, "fas", "fa-edit"], [1, "menu-divider"], [1, "menu-item", "danger", 3, "click"], [1, "fas", "fa-trash"], [1, "selection-info"], [1, "selection-count"], [1, "link-btn"], [1, "selection-actions"], [1, "btn-cancel", 3, "click"], [1, "btn-delete-bulk", 3, "click", "disabled"], [1, "link-btn", 3, "click"]], template: function ConversationListComponent_Template(rf, ctx) { if (rf & 1) {
457
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "input", 3);
458
+ i0.ɵɵtwoWayListener("ngModelChange", function ConversationListComponent_Template_input_ngModelChange_3_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.conversationState.searchQuery, $event) || (ctx.conversationState.searchQuery = $event); return $event; });
459
+ i0.ɵɵelementEnd();
460
+ i0.ɵɵtemplate(4, ConversationListComponent_Conditional_4_Template, 4, 0, "button", 4);
319
461
  i0.ɵɵelementEnd()();
320
- i0.ɵɵelementStart(3, "button", 3);
321
- i0.ɵɵlistener("click", function ConversationListComponent_Template_button_click_3_listener() { return ctx.createNewConversation(); });
322
- i0.ɵɵelement(4, "i", 4);
323
- i0.ɵɵelementStart(5, "span");
324
- i0.ɵɵtext(6, "New Conversation");
462
+ i0.ɵɵelementStart(5, "button", 5);
463
+ i0.ɵɵlistener("click", function ConversationListComponent_Template_button_click_5_listener() { return ctx.createNewConversation(); });
464
+ i0.ɵɵelement(6, "i", 6);
465
+ i0.ɵɵelementStart(7, "span");
466
+ i0.ɵɵtext(8, "New Conversation");
325
467
  i0.ɵɵelementEnd()();
326
- i0.ɵɵelementStart(7, "div", 5);
327
- i0.ɵɵtemplate(8, ConversationListComponent_Conditional_8_Template, 10, 4, "div", 6);
328
- i0.ɵɵelementStart(9, "div", 7)(10, "div", 8);
329
- i0.ɵɵlistener("click", function ConversationListComponent_Template_div_click_10_listener() { return ctx.toggleDirectMessages(); });
330
- i0.ɵɵelementStart(11, "div", 9);
331
- i0.ɵɵelement(12, "i", 10);
332
- i0.ɵɵelementStart(13, "span");
333
- i0.ɵɵtext(14, "Messages");
468
+ i0.ɵɵelementStart(9, "div", 7);
469
+ i0.ɵɵtemplate(10, ConversationListComponent_Conditional_10_Template, 10, 4, "div", 8);
470
+ i0.ɵɵelementStart(11, "div", 9)(12, "div", 10);
471
+ i0.ɵɵlistener("click", function ConversationListComponent_Template_div_click_12_listener() { return ctx.toggleDirectMessages(); });
472
+ i0.ɵɵelementStart(13, "div", 11);
473
+ i0.ɵɵelement(14, "i", 12);
474
+ i0.ɵɵelementStart(15, "span");
475
+ i0.ɵɵtext(16, "Messages");
476
+ i0.ɵɵelementEnd()()();
477
+ i0.ɵɵelementStart(17, "div", 13);
478
+ i0.ɵɵrepeaterCreate(18, ConversationListComponent_For_19_Template, 12, 11, "div", 14, _forTrack0);
334
479
  i0.ɵɵelementEnd()()();
335
- i0.ɵɵelementStart(15, "div", 11);
336
- i0.ɵɵrepeaterCreate(16, ConversationListComponent_For_17_Template, 16, 13, "div", 12, _forTrack0);
337
- i0.ɵɵelementEnd()()()();
480
+ i0.ɵɵtemplate(20, ConversationListComponent_Conditional_20_Template, 12, 4, "div", 15);
481
+ i0.ɵɵelementEnd();
338
482
  } if (rf & 2) {
339
- i0.ɵɵadvance(2);
483
+ i0.ɵɵadvance(3);
340
484
  i0.ɵɵtwoWayProperty("ngModel", ctx.conversationState.searchQuery);
485
+ i0.ɵɵadvance();
486
+ i0.ɵɵconditional(!ctx.isSelectionMode ? 4 : -1);
341
487
  i0.ɵɵadvance(6);
342
- i0.ɵɵconditional(ctx.pinnedConversations.length > 0 ? 8 : -1);
488
+ i0.ɵɵconditional(ctx.pinnedConversations.length > 0 ? 10 : -1);
343
489
  i0.ɵɵadvance(2);
344
490
  i0.ɵɵclassProp("expanded", ctx.directMessagesExpanded);
345
491
  i0.ɵɵadvance(5);
346
492
  i0.ɵɵclassProp("expanded", ctx.directMessagesExpanded);
347
493
  i0.ɵɵadvance();
348
494
  i0.ɵɵrepeater(ctx.unpinnedConversations);
349
- } }, dependencies: [i6.NgIf, i7.DefaultValueAccessor, i7.NgControlStatus, i7.NgModel, i8.NotificationBadgeComponent], styles: [".conversation-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; height: 100%; background: #092340; }\n .list-header[_ngcontent-%COMP%] { padding: 8px; border-bottom: 1px solid rgba(255,255,255,0.1); }\n .search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n transition: all 0.2s;\n }\n .search-input[_ngcontent-%COMP%]::placeholder { color: rgba(255,255,255,0.5); }\n .search-input[_ngcontent-%COMP%]:focus { outline: none; background: rgba(255,255,255,0.15); border-color: #0076B6; }\n .btn-new-conversation[_ngcontent-%COMP%] {\n width: calc(100% - 16px);\n margin: 8px;\n padding: 10px;\n background: #0076B6;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: background 0.2s;\n flex-shrink: 0;\n }\n .btn-new-conversation[_ngcontent-%COMP%]:hover { background: #005A8C; }\n .btn-new-conversation[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 14px; }\n .list-content[_ngcontent-%COMP%] { flex: 1; overflow-y: auto; padding: 4px 0; }\n\n \n\n .sidebar-section[_ngcontent-%COMP%] { margin-bottom: 20px; }\n .pinned-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] {\n background: rgba(255, 193, 7, 0.08);\n border-radius: 4px;\n margin: 0 4px;\n }\n .pinned-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] .section-icon[_ngcontent-%COMP%] {\n color: #FFC107;\n font-size: 11px;\n margin-left: 2px;\n }\n .section-header[_ngcontent-%COMP%] {\n padding: 4px 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.7);\n font-size: 13px;\n font-weight: 500;\n transition: color 0.2s;\n user-select: none;\n }\n .section-header[_ngcontent-%COMP%]:hover { color: white; }\n .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s;\n }\n .section-header.expanded[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { transform: rotate(90deg); }\n .chat-list[_ngcontent-%COMP%] {\n padding: 4px 0;\n display: none;\n }\n .chat-list.expanded[_ngcontent-%COMP%] { display: block; }\n\n .conversation-item[_ngcontent-%COMP%] {\n padding: 6px 5px 6px 16px;\n cursor: pointer;\n display: flex;\n gap: 8px;\n align-items: center;\n transition: all 0.2s;\n position: relative;\n color: rgba(255,255,255,0.7);\n font-size: 14px;\n min-height: 45px;\n }\n .conversation-item[_ngcontent-%COMP%]:hover { background: rgba(255,255,255,0.08); color: white; }\n .conversation-item[_ngcontent-%COMP%]:hover .conversation-actions[_ngcontent-%COMP%] { opacity: 1; }\n .conversation-item.active[_ngcontent-%COMP%] { background: #0076B6; color: white; }\n .conversation-icon-wrapper[_ngcontent-%COMP%] { position: relative; flex-shrink: 0; }\n .conversation-icon[_ngcontent-%COMP%] { font-size: 12px; width: 16px; text-align: center; }\n .conversation-icon.has-tasks[_ngcontent-%COMP%] { color: #fb923c; }\n .badge-overlay[_ngcontent-%COMP%] { position: absolute; top: -4px; right: -4px; }\n .conversation-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n .conversation-name[_ngcontent-%COMP%] { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-preview[_ngcontent-%COMP%] { font-size: 12px; color: rgba(255,255,255,0.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-item.active[_ngcontent-%COMP%] .conversation-preview[_ngcontent-%COMP%] { color: rgba(255,255,255,0.8); }\n .conversation-meta[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }\n\n \n\n .project-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n margin-left: auto;\n background-color: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.6);\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .conversation-item[_ngcontent-%COMP%]:hover .project-badge[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.8);\n }\n .conversation-item.active[_ngcontent-%COMP%] .project-badge[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.2);\n color: white;\n }\n\n .conversation-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 5px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s;\n z-index: 10;\n }\n .conversation-item[_ngcontent-%COMP%]:hover .conversation-actions[_ngcontent-%COMP%] { opacity: 1; pointer-events: auto; }\n .conversation-item.active[_ngcontent-%COMP%] .conversation-actions[_ngcontent-%COMP%] { opacity: 1; pointer-events: auto; }\n .conversation-actions[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] { pointer-events: auto; }\n .pinned-icon[_ngcontent-%COMP%] { color: #AAE7FD; font-size: 12px; }\n\n \n\n .task-indicator[_ngcontent-%COMP%] {\n color: #fb923c;\n font-size: 12px;\n margin-right: 8px;\n flex-shrink: 0;\n animation: _ngcontent-%COMP%_pulse-glow 2s ease-in-out infinite;\n }\n @keyframes _ngcontent-%COMP%_pulse-glow {\n 0%, 100% {\n opacity: 1;\n filter: drop-shadow(0 0 2px #fb923c);\n }\n 50% {\n opacity: 0.6;\n filter: drop-shadow(0 0 4px #fb923c);\n }\n }\n .conversation-item.active[_ngcontent-%COMP%] .task-indicator[_ngcontent-%COMP%] {\n color: #fbbf24;\n }\n\n .menu-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n background: #092340 !important;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n }\n .menu-btn[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.15) !important;\n color: white;\n }\n .conversation-item.active[_ngcontent-%COMP%] .menu-btn[_ngcontent-%COMP%] {\n background: #005A8C !important;\n color: white;\n }\n .menu-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 14px; }\n\n .context-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 160px;\n background: #0A2742;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);\n z-index: 1001;\n overflow: hidden;\n pointer-events: auto;\n }\n\n .menu-item[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.85);\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .menu-item[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n font-size: 13px;\n color: rgba(255,255,255,0.6);\n }\n\n .menu-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: white;\n }\n\n .menu-item.danger[_ngcontent-%COMP%] {\n color: rgba(239, 68, 68, 0.9);\n }\n\n .menu-item.danger[_ngcontent-%COMP%]:hover {\n background: rgba(239, 68, 68, 0.15);\n color: #ff6b6b;\n }\n\n .menu-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: rgba(239, 68, 68, 0.8);\n }\n\n .menu-item.danger[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: #ff6b6b;\n }\n\n .menu-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: rgba(255,255,255,0.1);\n margin: 4px 0;\n }\n\n \n\n .conversation-item.renamed[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_renameHighlight 1500ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n @keyframes _ngcontent-%COMP%_renameHighlight {\n 0% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.4), rgba(147, 51, 234, 0.4));\n transform: scale(1.03);\n box-shadow: 0 0 20px rgba(59, 130, 246, 0.5);\n }\n 25% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.35), rgba(147, 51, 234, 0.35));\n box-shadow: 0 0 15px rgba(59, 130, 246, 0.4);\n }\n 50% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.3), rgba(59, 130, 246, 0.3));\n transform: scale(1.02);\n box-shadow: 0 0 10px rgba(16, 185, 129, 0.3);\n }\n 75% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.2), rgba(59, 130, 246, 0.2));\n box-shadow: 0 0 5px rgba(16, 185, 129, 0.2);\n }\n 100% {\n background: transparent;\n transform: scale(1);\n box-shadow: none;\n }\n }"] });
495
+ i0.ɵɵadvance(2);
496
+ i0.ɵɵconditional(ctx.isSelectionMode ? 20 : -1);
497
+ } }, dependencies: [i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i6.NotificationBadgeComponent], styles: [".conversation-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; height: 100%; background: #092340; }\n .list-header[_ngcontent-%COMP%] { padding: 8px; border-bottom: 1px solid rgba(255,255,255,0.1); }\n .search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n transition: all 0.2s;\n }\n .search-input[_ngcontent-%COMP%]::placeholder { color: rgba(255,255,255,0.5); }\n .search-input[_ngcontent-%COMP%]:focus { outline: none; background: rgba(255,255,255,0.15); border-color: #0076B6; }\n .btn-new-conversation[_ngcontent-%COMP%] {\n width: calc(100% - 16px);\n margin: 8px;\n padding: 10px;\n background: #0076B6;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: background 0.2s;\n flex-shrink: 0;\n }\n .btn-new-conversation[_ngcontent-%COMP%]:hover { background: #005A8C; }\n .btn-new-conversation[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 14px; }\n .list-content[_ngcontent-%COMP%] { flex: 1; overflow-y: auto; padding: 4px 0; }\n\n \n\n .sidebar-section[_ngcontent-%COMP%] { margin-bottom: 20px; }\n .pinned-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] {\n background: rgba(255, 193, 7, 0.08);\n border-radius: 4px;\n margin: 0 4px;\n }\n .pinned-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] .section-icon[_ngcontent-%COMP%] {\n color: #FFC107;\n font-size: 11px;\n margin-left: 2px;\n }\n .section-header[_ngcontent-%COMP%] {\n padding: 4px 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.7);\n font-size: 13px;\n font-weight: 500;\n transition: color 0.2s;\n user-select: none;\n }\n .section-header[_ngcontent-%COMP%]:hover { color: white; }\n .section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s;\n }\n .section-header.expanded[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { transform: rotate(90deg); }\n .chat-list[_ngcontent-%COMP%] {\n padding: 4px 0;\n display: none;\n }\n .chat-list.expanded[_ngcontent-%COMP%] { display: block; }\n\n .conversation-item[_ngcontent-%COMP%] {\n padding: 6px 5px 6px 16px;\n cursor: pointer;\n display: flex;\n gap: 8px;\n align-items: center;\n transition: all 0.2s;\n position: relative;\n color: rgba(255,255,255,0.7);\n font-size: 14px;\n min-height: 45px;\n }\n .conversation-item[_ngcontent-%COMP%]:hover { background: rgba(255,255,255,0.08); color: white; }\n .conversation-item[_ngcontent-%COMP%]:hover .conversation-actions[_ngcontent-%COMP%] { opacity: 1; }\n .conversation-item.active[_ngcontent-%COMP%] { background: #0076B6; color: white; }\n .conversation-icon-wrapper[_ngcontent-%COMP%] { position: relative; flex-shrink: 0; }\n .conversation-icon[_ngcontent-%COMP%] { font-size: 12px; width: 16px; text-align: center; }\n .conversation-icon.has-tasks[_ngcontent-%COMP%] { color: #fb923c; }\n .badge-overlay[_ngcontent-%COMP%] { position: absolute; top: -4px; right: -4px; }\n .conversation-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n .conversation-name[_ngcontent-%COMP%] { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-preview[_ngcontent-%COMP%] { font-size: 12px; color: rgba(255,255,255,0.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-item.active[_ngcontent-%COMP%] .conversation-preview[_ngcontent-%COMP%] { color: rgba(255,255,255,0.8); }\n .conversation-meta[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }\n\n \n\n .project-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n margin-left: auto;\n background-color: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.6);\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .conversation-item[_ngcontent-%COMP%]:hover .project-badge[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.8);\n }\n .conversation-item.active[_ngcontent-%COMP%] .project-badge[_ngcontent-%COMP%] {\n background-color: rgba(255, 255, 255, 0.2);\n color: white;\n }\n\n .conversation-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 5px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s;\n z-index: 10;\n }\n .conversation-item[_ngcontent-%COMP%]:hover .conversation-actions[_ngcontent-%COMP%] { opacity: 1; pointer-events: auto; }\n .conversation-item.active[_ngcontent-%COMP%] .conversation-actions[_ngcontent-%COMP%] { opacity: 1; pointer-events: auto; }\n .conversation-actions[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] { pointer-events: auto; }\n .pinned-icon[_ngcontent-%COMP%] { color: #AAE7FD; font-size: 12px; }\n\n \n\n .task-indicator[_ngcontent-%COMP%] {\n color: #fb923c;\n font-size: 12px;\n margin-right: 8px;\n flex-shrink: 0;\n animation: _ngcontent-%COMP%_pulse-glow 2s ease-in-out infinite;\n }\n @keyframes _ngcontent-%COMP%_pulse-glow {\n 0%, 100% {\n opacity: 1;\n filter: drop-shadow(0 0 2px #fb923c);\n }\n 50% {\n opacity: 0.6;\n filter: drop-shadow(0 0 4px #fb923c);\n }\n }\n .conversation-item.active[_ngcontent-%COMP%] .task-indicator[_ngcontent-%COMP%] {\n color: #fbbf24;\n }\n\n .menu-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n background: #092340 !important;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n }\n .menu-btn[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.15) !important;\n color: white;\n }\n .conversation-item.active[_ngcontent-%COMP%] .menu-btn[_ngcontent-%COMP%] {\n background: #005A8C !important;\n color: white;\n }\n .menu-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 14px; }\n\n .context-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 160px;\n background: #0A2742;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);\n z-index: 1001;\n overflow: hidden;\n pointer-events: auto;\n }\n\n .menu-item[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.85);\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .menu-item[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n font-size: 13px;\n color: rgba(255,255,255,0.6);\n }\n\n .menu-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: white;\n }\n\n .menu-item.danger[_ngcontent-%COMP%] {\n color: rgba(239, 68, 68, 0.9);\n }\n\n .menu-item.danger[_ngcontent-%COMP%]:hover {\n background: rgba(239, 68, 68, 0.15);\n color: #ff6b6b;\n }\n\n .menu-item.danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: rgba(239, 68, 68, 0.8);\n }\n\n .menu-item.danger[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: #ff6b6b;\n }\n\n .menu-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: rgba(255,255,255,0.1);\n margin: 4px 0;\n }\n\n \n\n .conversation-item.renamed[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_renameHighlight 1500ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n @keyframes _ngcontent-%COMP%_renameHighlight {\n 0% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.4), rgba(147, 51, 234, 0.4));\n transform: scale(1.03);\n box-shadow: 0 0 20px rgba(59, 130, 246, 0.5);\n }\n 25% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.35), rgba(147, 51, 234, 0.35));\n box-shadow: 0 0 15px rgba(59, 130, 246, 0.4);\n }\n 50% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.3), rgba(59, 130, 246, 0.3));\n transform: scale(1.02);\n box-shadow: 0 0 10px rgba(16, 185, 129, 0.3);\n }\n 75% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.2), rgba(59, 130, 246, 0.2));\n box-shadow: 0 0 5px rgba(16, 185, 129, 0.2);\n }\n 100% {\n background: transparent;\n transform: scale(1);\n box-shadow: none;\n }\n }\n\n \n\n .header-top[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n\n .btn-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n font-size: 13px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n transition: all 0.2s;\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n .btn-select[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n border-color: rgba(255,255,255,0.3);\n }\n\n .conversation-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n margin-right: 8px;\n flex-shrink: 0;\n }\n\n .conversation-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: #0076B6;\n }\n\n .selection-action-bar[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #0A2742;\n border-top: 1px solid rgba(255,255,255,0.15);\n gap: 12px;\n flex-wrap: wrap;\n flex-shrink: 0;\n }\n\n .selection-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n color: rgba(255,255,255,0.9);\n font-size: 14px;\n font-weight: 500;\n flex: 1 1 auto;\n min-width: 150px;\n }\n\n .selection-count[_ngcontent-%COMP%] {\n color: white;\n }\n\n .link-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #AAE7FD;\n cursor: pointer;\n font-size: 13px;\n text-decoration: underline;\n padding: 0;\n transition: color 0.2s;\n }\n\n .link-btn[_ngcontent-%COMP%]:hover {\n color: white;\n }\n\n .selection-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex: 0 0 auto;\n }\n\n .btn-cancel[_ngcontent-%COMP%] {\n padding: 8px 16px;\n background: transparent;\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n }\n\n .btn-cancel[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .btn-delete-bulk[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #DC2626;\n border: none;\n border-radius: 6px;\n color: white;\n cursor: pointer;\n font-size: 13px;\n font-weight: 600;\n transition: all 0.2s;\n }\n\n .btn-delete-bulk[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #B91C1C;\n }\n\n .btn-delete-bulk[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-delete-bulk[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }"] });
350
498
  }
351
499
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationListComponent, [{
352
500
  type: Component,
353
501
  args: [{ selector: 'mj-conversation-list', template: `
354
502
  <div class="conversation-list">
355
503
  <div class="list-header">
356
- <input
357
- type="text"
358
- class="search-input"
359
- placeholder="Search conversations..."
360
- [(ngModel)]="conversationState.searchQuery">
504
+ <div class="header-top">
505
+ <input
506
+ type="text"
507
+ class="search-input"
508
+ placeholder="Search conversations..."
509
+ [(ngModel)]="conversationState.searchQuery">
510
+ @if (!isSelectionMode) {
511
+ <button class="btn-select" (click)="toggleSelectionMode()" title="Select conversations">
512
+ <i class="fas fa-check-square"></i>
513
+ <span>Select</span>
514
+ </button>
515
+ }
516
+ </div>
361
517
  </div>
362
518
  <button class="btn-new-conversation" (click)="createNewConversation()" title="New Conversation">
363
519
  <i class="fas fa-plus"></i>
@@ -379,12 +535,20 @@ export class ConversationListComponent {
379
535
  <div class="conversation-item"
380
536
  [class.active]="conversation.ID === conversationState.activeConversationId"
381
537
  [class.renamed]="conversation.ID === renamedConversationId"
382
- (click)="selectConversation(conversation)">
383
- <div class="conversation-icon-wrapper">
384
- <div class="conversation-icon" [class.has-tasks]="hasActiveTasks(conversation.ID)">
385
- <i *ngIf="!hasActiveTasks(conversation.ID)" class="fas fa-comments"></i>
386
- <i *ngIf="hasActiveTasks(conversation.ID)" class="fas fa-spinner fa-pulse"></i>
538
+ (click)="handleConversationClick(conversation)">
539
+ @if (isSelectionMode) {
540
+ <div class="conversation-checkbox">
541
+ <input type="checkbox"
542
+ [checked]="selectedConversationIds.has(conversation.ID)"
543
+ (click)="$event.stopPropagation(); toggleConversationSelection(conversation.ID)">
387
544
  </div>
545
+ }
546
+ <div class="conversation-icon-wrapper">
547
+ @if (hasActiveTasks(conversation.ID)) {
548
+ <div class="conversation-icon has-tasks">
549
+ <i class="fas fa-spinner fa-pulse"></i>
550
+ </div>
551
+ }
388
552
  <div class="badge-overlay">
389
553
  <mj-notification-badge [conversationId]="conversation.ID"></mj-notification-badge>
390
554
  </div>
@@ -393,28 +557,30 @@ export class ConversationListComponent {
393
557
  <div class="conversation-name">{{ conversation.Name }}</div>
394
558
  <div class="conversation-preview">{{ conversation.Description }}</div>
395
559
  </div>
396
- <div class="conversation-actions">
397
- <button class="menu-btn" (click)="toggleMenu(conversation.ID, $event)" title="More options">
398
- <i class="fas fa-ellipsis"></i>
399
- </button>
400
- @if (openMenuConversationId === conversation.ID) {
401
- <div class="context-menu" (click)="$event.stopPropagation()">
402
- <button class="menu-item" (click)="togglePin(conversation, $event)">
403
- <i class="fas fa-thumbtack"></i>
404
- <span>Unpin</span>
405
- </button>
406
- <button class="menu-item" (click)="renameConversation(conversation); closeMenu()">
407
- <i class="fas fa-edit"></i>
408
- <span>Rename</span>
409
- </button>
410
- <div class="menu-divider"></div>
411
- <button class="menu-item danger" (click)="deleteConversation(conversation); closeMenu()">
412
- <i class="fas fa-trash"></i>
413
- <span>Delete</span>
414
- </button>
415
- </div>
416
- }
417
- </div>
560
+ @if (!isSelectionMode) {
561
+ <div class="conversation-actions">
562
+ <button class="menu-btn" (click)="toggleMenu(conversation.ID, $event)" title="More options">
563
+ <i class="fas fa-ellipsis"></i>
564
+ </button>
565
+ @if (openMenuConversationId === conversation.ID) {
566
+ <div class="context-menu" (click)="$event.stopPropagation()">
567
+ <button class="menu-item" (click)="togglePin(conversation, $event)">
568
+ <i class="fas fa-thumbtack"></i>
569
+ <span>Unpin</span>
570
+ </button>
571
+ <button class="menu-item" (click)="renameConversation(conversation); closeMenu()">
572
+ <i class="fas fa-edit"></i>
573
+ <span>Rename</span>
574
+ </button>
575
+ <div class="menu-divider"></div>
576
+ <button class="menu-item danger" (click)="deleteConversation(conversation); closeMenu()">
577
+ <i class="fas fa-trash"></i>
578
+ <span>Delete</span>
579
+ </button>
580
+ </div>
581
+ }
582
+ </div>
583
+ }
418
584
  </div>
419
585
  }
420
586
  </div>
@@ -434,12 +600,20 @@ export class ConversationListComponent {
434
600
  <div class="conversation-item"
435
601
  [class.active]="conversation.ID === conversationState.activeConversationId"
436
602
  [class.renamed]="conversation.ID === renamedConversationId"
437
- (click)="selectConversation(conversation)">
438
- <div class="conversation-icon-wrapper">
439
- <div class="conversation-icon" [class.has-tasks]="hasActiveTasks(conversation.ID)">
440
- <i *ngIf="!hasActiveTasks(conversation.ID)" class="fas fa-comments"></i>
441
- <i *ngIf="hasActiveTasks(conversation.ID)" class="fas fa-spinner fa-pulse"></i>
603
+ (click)="handleConversationClick(conversation)">
604
+ @if (isSelectionMode) {
605
+ <div class="conversation-checkbox">
606
+ <input type="checkbox"
607
+ [checked]="selectedConversationIds.has(conversation.ID)"
608
+ (click)="$event.stopPropagation(); toggleConversationSelection(conversation.ID)">
442
609
  </div>
610
+ }
611
+ <div class="conversation-icon-wrapper">
612
+ @if (hasActiveTasks(conversation.ID)) {
613
+ <div class="conversation-icon has-tasks">
614
+ <i class="fas fa-spinner fa-pulse"></i>
615
+ </div>
616
+ }
443
617
  <div class="badge-overlay">
444
618
  <mj-notification-badge [conversationId]="conversation.ID"></mj-notification-badge>
445
619
  </div>
@@ -448,36 +622,63 @@ export class ConversationListComponent {
448
622
  <div class="conversation-name">{{ conversation.Name }}</div>
449
623
  <div class="conversation-preview">{{ conversation.Description }}</div>
450
624
  </div>
451
- <div class="conversation-actions">
452
- <button class="menu-btn" (click)="toggleMenu(conversation.ID, $event)" title="More options">
453
- <i class="fas fa-ellipsis"></i>
454
- </button>
455
- @if (openMenuConversationId === conversation.ID) {
456
- <div class="context-menu" (click)="$event.stopPropagation()">
457
- <button class="menu-item" (click)="togglePin(conversation, $event)">
458
- <i class="fas fa-thumbtack"></i>
459
- <span>Pin</span>
460
- </button>
461
- <button class="menu-item" (click)="renameConversation(conversation); closeMenu()">
462
- <i class="fas fa-edit"></i>
463
- <span>Rename</span>
464
- </button>
465
- <div class="menu-divider"></div>
466
- <button class="menu-item danger" (click)="deleteConversation(conversation); closeMenu()">
467
- <i class="fas fa-trash"></i>
468
- <span>Delete</span>
469
- </button>
470
- </div>
471
- }
472
- </div>
625
+ @if (!isSelectionMode) {
626
+ <div class="conversation-actions">
627
+ <button class="menu-btn" (click)="toggleMenu(conversation.ID, $event)" title="More options">
628
+ <i class="fas fa-ellipsis"></i>
629
+ </button>
630
+ @if (openMenuConversationId === conversation.ID) {
631
+ <div class="context-menu" (click)="$event.stopPropagation()">
632
+ <button class="menu-item" (click)="togglePin(conversation, $event)">
633
+ <i class="fas fa-thumbtack"></i>
634
+ <span>Pin</span>
635
+ </button>
636
+ <button class="menu-item" (click)="renameConversation(conversation); closeMenu()">
637
+ <i class="fas fa-edit"></i>
638
+ <span>Rename</span>
639
+ </button>
640
+ <div class="menu-divider"></div>
641
+ <button class="menu-item danger" (click)="deleteConversation(conversation); closeMenu()">
642
+ <i class="fas fa-trash"></i>
643
+ <span>Delete</span>
644
+ </button>
645
+ </div>
646
+ }
647
+ </div>
648
+ }
473
649
  </div>
474
650
  }
475
651
  </div>
476
652
  </div>
477
653
  </div>
654
+
655
+ <!-- Selection Action Bar -->
656
+ @if (isSelectionMode) {
657
+ <div class="selection-action-bar">
658
+ <div class="selection-info">
659
+ <span class="selection-count">{{ selectedConversationIds.size }} selected</span>
660
+ @if (selectedConversationIds.size < conversationState.filteredConversations.length) {
661
+ <button class="link-btn" (click)="selectAll()">Select All</button>
662
+ } @else {
663
+ <button class="link-btn" (click)="deselectAll()">Deselect All</button>
664
+ }
665
+ </div>
666
+ <div class="selection-actions">
667
+ <button class="btn-cancel" (click)="toggleSelectionMode()">
668
+ Cancel
669
+ </button>
670
+ <button class="btn-delete-bulk"
671
+ (click)="bulkDeleteConversations()"
672
+ [disabled]="selectedConversationIds.size === 0">
673
+ <i class="fas fa-trash"></i>
674
+ Delete ({{ selectedConversationIds.size }})
675
+ </button>
676
+ </div>
677
+ </div>
678
+ }
478
679
  </div>
479
- `, styles: ["\n .conversation-list { display: flex; flex-direction: column; height: 100%; background: #092340; }\n .list-header { padding: 8px; border-bottom: 1px solid rgba(255,255,255,0.1); }\n .search-input {\n width: 100%;\n padding: 8px 12px;\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n transition: all 0.2s;\n }\n .search-input::placeholder { color: rgba(255,255,255,0.5); }\n .search-input:focus { outline: none; background: rgba(255,255,255,0.15); border-color: #0076B6; }\n .btn-new-conversation {\n width: calc(100% - 16px);\n margin: 8px;\n padding: 10px;\n background: #0076B6;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: background 0.2s;\n flex-shrink: 0;\n }\n .btn-new-conversation:hover { background: #005A8C; }\n .btn-new-conversation i { font-size: 14px; }\n .list-content { flex: 1; overflow-y: auto; padding: 4px 0; }\n\n /* Collapsible Sections */\n .sidebar-section { margin-bottom: 20px; }\n .pinned-section .section-header {\n background: rgba(255, 193, 7, 0.08);\n border-radius: 4px;\n margin: 0 4px;\n }\n .pinned-section .section-title .section-icon {\n color: #FFC107;\n font-size: 11px;\n margin-left: 2px;\n }\n .section-header {\n padding: 4px 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.7);\n font-size: 13px;\n font-weight: 500;\n transition: color 0.2s;\n user-select: none;\n }\n .section-header:hover { color: white; }\n .section-title {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .section-title i {\n font-size: 10px;\n transition: transform 0.2s;\n }\n .section-header.expanded .section-title i { transform: rotate(90deg); }\n .chat-list {\n padding: 4px 0;\n display: none;\n }\n .chat-list.expanded { display: block; }\n\n .conversation-item {\n padding: 6px 5px 6px 16px;\n cursor: pointer;\n display: flex;\n gap: 8px;\n align-items: center;\n transition: all 0.2s;\n position: relative;\n color: rgba(255,255,255,0.7);\n font-size: 14px;\n min-height: 45px;\n }\n .conversation-item:hover { background: rgba(255,255,255,0.08); color: white; }\n .conversation-item:hover .conversation-actions { opacity: 1; }\n .conversation-item.active { background: #0076B6; color: white; }\n .conversation-icon-wrapper { position: relative; flex-shrink: 0; }\n .conversation-icon { font-size: 12px; width: 16px; text-align: center; }\n .conversation-icon.has-tasks { color: #fb923c; }\n .badge-overlay { position: absolute; top: -4px; right: -4px; }\n .conversation-info { flex: 1; min-width: 0; }\n .conversation-name { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-preview { font-size: 12px; color: rgba(255,255,255,0.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-item.active .conversation-preview { color: rgba(255,255,255,0.8); }\n .conversation-meta { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }\n\n /* Project Badge */\n .project-badge {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n margin-left: auto;\n background-color: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.6);\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .conversation-item:hover .project-badge {\n background-color: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.8);\n }\n .conversation-item.active .project-badge {\n background-color: rgba(255, 255, 255, 0.2);\n color: white;\n }\n\n .conversation-actions {\n position: absolute;\n right: 5px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s;\n z-index: 10;\n }\n .conversation-item:hover .conversation-actions { opacity: 1; pointer-events: auto; }\n .conversation-item.active .conversation-actions { opacity: 1; pointer-events: auto; }\n .conversation-actions > * { pointer-events: auto; }\n .pinned-icon { color: #AAE7FD; font-size: 12px; }\n\n /* Task Indicator */\n .task-indicator {\n color: #fb923c;\n font-size: 12px;\n margin-right: 8px;\n flex-shrink: 0;\n animation: pulse-glow 2s ease-in-out infinite;\n }\n @keyframes pulse-glow {\n 0%, 100% {\n opacity: 1;\n filter: drop-shadow(0 0 2px #fb923c);\n }\n 50% {\n opacity: 0.6;\n filter: drop-shadow(0 0 4px #fb923c);\n }\n }\n .conversation-item.active .task-indicator {\n color: #fbbf24;\n }\n\n .menu-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n background: #092340 !important;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n }\n .menu-btn:hover {\n background: rgba(255,255,255,0.15) !important;\n color: white;\n }\n .conversation-item.active .menu-btn {\n background: #005A8C !important;\n color: white;\n }\n .menu-btn i { font-size: 14px; }\n\n .context-menu {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 160px;\n background: #0A2742;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);\n z-index: 1001;\n overflow: hidden;\n pointer-events: auto;\n }\n\n .menu-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.85);\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .menu-item:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .menu-item i {\n width: 16px;\n font-size: 13px;\n color: rgba(255,255,255,0.6);\n }\n\n .menu-item:hover i {\n color: white;\n }\n\n .menu-item.danger {\n color: rgba(239, 68, 68, 0.9);\n }\n\n .menu-item.danger:hover {\n background: rgba(239, 68, 68, 0.15);\n color: #ff6b6b;\n }\n\n .menu-item.danger i {\n color: rgba(239, 68, 68, 0.8);\n }\n\n .menu-item.danger:hover i {\n color: #ff6b6b;\n }\n\n .menu-divider {\n height: 1px;\n background: rgba(255,255,255,0.1);\n margin: 4px 0;\n }\n\n /* Rename Animation */\n .conversation-item.renamed {\n animation: renameHighlight 1500ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n @keyframes renameHighlight {\n 0% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.4), rgba(147, 51, 234, 0.4));\n transform: scale(1.03);\n box-shadow: 0 0 20px rgba(59, 130, 246, 0.5);\n }\n 25% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.35), rgba(147, 51, 234, 0.35));\n box-shadow: 0 0 15px rgba(59, 130, 246, 0.4);\n }\n 50% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.3), rgba(59, 130, 246, 0.3));\n transform: scale(1.02);\n box-shadow: 0 0 10px rgba(16, 185, 129, 0.3);\n }\n 75% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.2), rgba(59, 130, 246, 0.2));\n box-shadow: 0 0 5px rgba(16, 185, 129, 0.2);\n }\n 100% {\n background: transparent;\n transform: scale(1);\n box-shadow: none;\n }\n }\n "] }]
480
- }], () => [{ type: i1.ConversationStateService }, { type: i2.DialogService }, { type: i3.NotificationService }, { type: i4.ToastService }, { type: i5.ActiveTasksService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
680
+ `, styles: ["\n .conversation-list { display: flex; flex-direction: column; height: 100%; background: #092340; }\n .list-header { padding: 8px; border-bottom: 1px solid rgba(255,255,255,0.1); }\n .search-input {\n width: 100%;\n padding: 8px 12px;\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: white;\n font-size: 13px;\n transition: all 0.2s;\n }\n .search-input::placeholder { color: rgba(255,255,255,0.5); }\n .search-input:focus { outline: none; background: rgba(255,255,255,0.15); border-color: #0076B6; }\n .btn-new-conversation {\n width: calc(100% - 16px);\n margin: 8px;\n padding: 10px;\n background: #0076B6;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: background 0.2s;\n flex-shrink: 0;\n }\n .btn-new-conversation:hover { background: #005A8C; }\n .btn-new-conversation i { font-size: 14px; }\n .list-content { flex: 1; overflow-y: auto; padding: 4px 0; }\n\n /* Collapsible Sections */\n .sidebar-section { margin-bottom: 20px; }\n .pinned-section .section-header {\n background: rgba(255, 193, 7, 0.08);\n border-radius: 4px;\n margin: 0 4px;\n }\n .pinned-section .section-title .section-icon {\n color: #FFC107;\n font-size: 11px;\n margin-left: 2px;\n }\n .section-header {\n padding: 4px 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.7);\n font-size: 13px;\n font-weight: 500;\n transition: color 0.2s;\n user-select: none;\n }\n .section-header:hover { color: white; }\n .section-title {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .section-title i {\n font-size: 10px;\n transition: transform 0.2s;\n }\n .section-header.expanded .section-title i { transform: rotate(90deg); }\n .chat-list {\n padding: 4px 0;\n display: none;\n }\n .chat-list.expanded { display: block; }\n\n .conversation-item {\n padding: 6px 5px 6px 16px;\n cursor: pointer;\n display: flex;\n gap: 8px;\n align-items: center;\n transition: all 0.2s;\n position: relative;\n color: rgba(255,255,255,0.7);\n font-size: 14px;\n min-height: 45px;\n }\n .conversation-item:hover { background: rgba(255,255,255,0.08); color: white; }\n .conversation-item:hover .conversation-actions { opacity: 1; }\n .conversation-item.active { background: #0076B6; color: white; }\n .conversation-icon-wrapper { position: relative; flex-shrink: 0; }\n .conversation-icon { font-size: 12px; width: 16px; text-align: center; }\n .conversation-icon.has-tasks { color: #fb923c; }\n .badge-overlay { position: absolute; top: -4px; right: -4px; }\n .conversation-info { flex: 1; min-width: 0; }\n .conversation-name { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-preview { font-size: 12px; color: rgba(255,255,255,0.5); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .conversation-item.active .conversation-preview { color: rgba(255,255,255,0.8); }\n .conversation-meta { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }\n\n /* Project Badge */\n .project-badge {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n margin-left: auto;\n background-color: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.6);\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .conversation-item:hover .project-badge {\n background-color: rgba(255, 255, 255, 0.15);\n color: rgba(255, 255, 255, 0.8);\n }\n .conversation-item.active .project-badge {\n background-color: rgba(255, 255, 255, 0.2);\n color: white;\n }\n\n .conversation-actions {\n position: absolute;\n right: 5px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s;\n z-index: 10;\n }\n .conversation-item:hover .conversation-actions { opacity: 1; pointer-events: auto; }\n .conversation-item.active .conversation-actions { opacity: 1; pointer-events: auto; }\n .conversation-actions > * { pointer-events: auto; }\n .pinned-icon { color: #AAE7FD; font-size: 12px; }\n\n /* Task Indicator */\n .task-indicator {\n color: #fb923c;\n font-size: 12px;\n margin-right: 8px;\n flex-shrink: 0;\n animation: pulse-glow 2s ease-in-out infinite;\n }\n @keyframes pulse-glow {\n 0%, 100% {\n opacity: 1;\n filter: drop-shadow(0 0 2px #fb923c);\n }\n 50% {\n opacity: 0.6;\n filter: drop-shadow(0 0 4px #fb923c);\n }\n }\n .conversation-item.active .task-indicator {\n color: #fbbf24;\n }\n\n .menu-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n background: #092340 !important;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n }\n .menu-btn:hover {\n background: rgba(255,255,255,0.15) !important;\n color: white;\n }\n .conversation-item.active .menu-btn {\n background: #005A8C !important;\n color: white;\n }\n .menu-btn i { font-size: 14px; }\n\n .context-menu {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 160px;\n background: #0A2742;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);\n z-index: 1001;\n overflow: hidden;\n pointer-events: auto;\n }\n\n .menu-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.85);\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .menu-item:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .menu-item i {\n width: 16px;\n font-size: 13px;\n color: rgba(255,255,255,0.6);\n }\n\n .menu-item:hover i {\n color: white;\n }\n\n .menu-item.danger {\n color: rgba(239, 68, 68, 0.9);\n }\n\n .menu-item.danger:hover {\n background: rgba(239, 68, 68, 0.15);\n color: #ff6b6b;\n }\n\n .menu-item.danger i {\n color: rgba(239, 68, 68, 0.8);\n }\n\n .menu-item.danger:hover i {\n color: #ff6b6b;\n }\n\n .menu-divider {\n height: 1px;\n background: rgba(255,255,255,0.1);\n margin: 4px 0;\n }\n\n /* Rename Animation */\n .conversation-item.renamed {\n animation: renameHighlight 1500ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n @keyframes renameHighlight {\n 0% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.4), rgba(147, 51, 234, 0.4));\n transform: scale(1.03);\n box-shadow: 0 0 20px rgba(59, 130, 246, 0.5);\n }\n 25% {\n background: linear-gradient(90deg, rgba(59, 130, 246, 0.35), rgba(147, 51, 234, 0.35));\n box-shadow: 0 0 15px rgba(59, 130, 246, 0.4);\n }\n 50% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.3), rgba(59, 130, 246, 0.3));\n transform: scale(1.02);\n box-shadow: 0 0 10px rgba(16, 185, 129, 0.3);\n }\n 75% {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.2), rgba(59, 130, 246, 0.2));\n box-shadow: 0 0 5px rgba(16, 185, 129, 0.2);\n }\n 100% {\n background: transparent;\n transform: scale(1);\n box-shadow: none;\n }\n }\n\n /* Selection Mode Styles */\n .header-top {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n\n .btn-select {\n padding: 8px 12px;\n background: transparent;\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n font-size: 13px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n transition: all 0.2s;\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n .btn-select:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n border-color: rgba(255,255,255,0.3);\n }\n\n .conversation-checkbox {\n display: flex;\n align-items: center;\n margin-right: 8px;\n flex-shrink: 0;\n }\n\n .conversation-checkbox input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: #0076B6;\n }\n\n .selection-action-bar {\n position: sticky;\n bottom: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #0A2742;\n border-top: 1px solid rgba(255,255,255,0.15);\n gap: 12px;\n flex-wrap: wrap;\n flex-shrink: 0;\n }\n\n .selection-info {\n display: flex;\n align-items: center;\n gap: 12px;\n color: rgba(255,255,255,0.9);\n font-size: 14px;\n font-weight: 500;\n flex: 1 1 auto;\n min-width: 150px;\n }\n\n .selection-count {\n color: white;\n }\n\n .link-btn {\n background: none;\n border: none;\n color: #AAE7FD;\n cursor: pointer;\n font-size: 13px;\n text-decoration: underline;\n padding: 0;\n transition: color 0.2s;\n }\n\n .link-btn:hover {\n color: white;\n }\n\n .selection-actions {\n display: flex;\n gap: 8px;\n flex: 0 0 auto;\n }\n\n .btn-cancel {\n padding: 8px 16px;\n background: transparent;\n border: 1px solid rgba(255,255,255,0.2);\n border-radius: 6px;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n }\n\n .btn-cancel:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .btn-delete-bulk {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #DC2626;\n border: none;\n border-radius: 6px;\n color: white;\n cursor: pointer;\n font-size: 13px;\n font-weight: 600;\n transition: all 0.2s;\n }\n\n .btn-delete-bulk:hover:not(:disabled) {\n background: #B91C1C;\n }\n\n .btn-delete-bulk:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-delete-bulk i {\n font-size: 12px;\n }\n "] }]
681
+ }], () => [{ type: i1.ConversationStateService }, { type: i2.DialogService }, { type: i3.NotificationService }, { type: i4.ActiveTasksService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
481
682
  type: Input
482
683
  }], currentUser: [{
483
684
  type: Input
@@ -487,5 +688,5 @@ export class ConversationListComponent {
487
688
  type: HostListener,
488
689
  args: ['document:click']
489
690
  }] }); })();
490
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationListComponent, { className: "ConversationListComponent", filePath: "src/lib/components/conversation/conversation-list.component.ts", lineNumber: 430 }); })();
691
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationListComponent, { className: "ConversationListComponent", filePath: "src/lib/components/conversation/conversation-list.component.ts", lineNumber: 621 }); })();
491
692
  //# sourceMappingURL=conversation-list.component.js.map