@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.
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +12 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +141 -7
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -3
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +398 -197
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +4 -0
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +9 -0
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +18 -15
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +108 -93
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +1 -0
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +8 -4
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +3 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +24 -17
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/services/conversation-state.service.d.ts +14 -0
- package/dist/lib/services/conversation-state.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-state.service.js +32 -0
- package/dist/lib/services/conversation-state.service.js.map +1 -1
- package/dist/lib/services/conversation-streaming.service.d.ts +101 -0
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-streaming.service.js +319 -0
- package/dist/lib/services/conversation-streaming.service.js.map +1 -0
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- 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/
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "
|
|
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
|
|
15
|
-
i0.ɵɵ
|
|
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
|
|
18
|
-
i0.ɵɵ
|
|
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
|
|
21
|
-
const
|
|
22
|
-
i0.ɵɵelementStart(0, "div",
|
|
23
|
-
i0.ɵɵlistener("click", function
|
|
24
|
-
i0.ɵɵelementStart(1, "button",
|
|
25
|
-
i0.ɵɵlistener("click", function
|
|
26
|
-
i0.ɵɵelement(2, "i",
|
|
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
|
-
i0.ɵɵlistener("click", function
|
|
32
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
37
|
-
i0.ɵɵelementStart(10, "button",
|
|
38
|
-
i0.ɵɵlistener("click", function
|
|
39
|
-
i0.ɵɵelement(11, "i",
|
|
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
|
|
45
|
-
const
|
|
46
|
-
i0.ɵɵelementStart(0, "div",
|
|
47
|
-
i0.ɵɵlistener("click", function
|
|
48
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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
|
-
|
|
58
|
-
i0.ɵɵ
|
|
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(
|
|
61
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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
|
|
94
|
+
const conversation_r5 = ctx.$implicit;
|
|
68
95
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
69
|
-
i0.ɵɵclassProp("active",
|
|
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.ɵɵ
|
|
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",
|
|
102
|
+
i0.ɵɵproperty("conversationId", conversation_r5.ID);
|
|
78
103
|
i0.ɵɵadvance();
|
|
79
|
-
i0.ɵɵproperty("title",
|
|
104
|
+
i0.ɵɵproperty("title", conversation_r5.Name + (conversation_r5.Description ? "\n" + conversation_r5.Description : ""));
|
|
80
105
|
i0.ɵɵadvance(2);
|
|
81
|
-
i0.ɵɵtextInterpolate(
|
|
106
|
+
i0.ɵɵtextInterpolate(conversation_r5.Name);
|
|
82
107
|
i0.ɵɵadvance(2);
|
|
83
|
-
i0.ɵɵtextInterpolate(
|
|
84
|
-
i0.ɵɵadvance(
|
|
85
|
-
i0.ɵɵconditional(ctx_r1.
|
|
108
|
+
i0.ɵɵtextInterpolate(conversation_r5.Description);
|
|
109
|
+
i0.ɵɵadvance();
|
|
110
|
+
i0.ɵɵconditional(!ctx_r1.isSelectionMode ? 11 : -1);
|
|
86
111
|
} }
|
|
87
|
-
function
|
|
88
|
-
const
|
|
89
|
-
i0.ɵɵelementStart(0, "div",
|
|
90
|
-
i0.ɵɵlistener("click", function
|
|
91
|
-
i0.ɵɵelementStart(2, "div",
|
|
92
|
-
i0.ɵɵelement(3, "i",
|
|
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",
|
|
97
|
-
i0.ɵɵrepeaterCreate(8,
|
|
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
|
|
109
|
-
i0.ɵɵ
|
|
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
|
|
112
|
-
i0.ɵɵ
|
|
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
|
|
115
|
-
const
|
|
116
|
-
i0.ɵɵelementStart(0, "div",
|
|
117
|
-
i0.ɵɵlistener("click", function
|
|
118
|
-
i0.ɵɵelementStart(1, "button",
|
|
119
|
-
i0.ɵɵlistener("click", function
|
|
120
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
125
|
-
i0.ɵɵlistener("click", function
|
|
126
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
131
|
-
i0.ɵɵelementStart(10, "button",
|
|
132
|
-
i0.ɵɵlistener("click", function
|
|
133
|
-
i0.ɵɵelement(11, "i",
|
|
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
|
|
139
|
-
const
|
|
140
|
-
i0.ɵɵelementStart(0, "div",
|
|
141
|
-
i0.ɵɵlistener("click", function
|
|
142
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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
|
-
|
|
152
|
-
i0.ɵɵ
|
|
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(
|
|
155
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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
|
|
206
|
+
const conversation_r10 = ctx.$implicit;
|
|
162
207
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
163
|
-
i0.ɵɵclassProp("active",
|
|
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.ɵɵ
|
|
210
|
+
i0.ɵɵconditional(ctx_r1.isSelectionMode ? 1 : -1);
|
|
170
211
|
i0.ɵɵadvance(2);
|
|
171
|
-
i0.ɵɵ
|
|
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",
|
|
216
|
+
i0.ɵɵproperty("title", conversation_r10.Name + (conversation_r10.Description ? "\n" + conversation_r10.Description : ""));
|
|
174
217
|
i0.ɵɵadvance(2);
|
|
175
|
-
i0.ɵɵtextInterpolate(
|
|
218
|
+
i0.ɵɵtextInterpolate(conversation_r10.Name);
|
|
176
219
|
i0.ɵɵadvance(2);
|
|
177
|
-
i0.ɵɵtextInterpolate(
|
|
178
|
-
i0.ɵɵadvance(
|
|
179
|
-
i0.ɵɵconditional(ctx_r1.
|
|
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,
|
|
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
|
-
|
|
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:
|
|
317
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "
|
|
318
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
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(
|
|
321
|
-
i0.ɵɵlistener("click", function
|
|
322
|
-
i0.ɵɵelement(
|
|
323
|
-
i0.ɵɵelementStart(
|
|
324
|
-
i0.ɵɵtext(
|
|
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(
|
|
327
|
-
i0.ɵɵtemplate(
|
|
328
|
-
i0.ɵɵelementStart(
|
|
329
|
-
i0.ɵɵlistener("click", function
|
|
330
|
-
i0.ɵɵelementStart(
|
|
331
|
-
i0.ɵɵelement(
|
|
332
|
-
i0.ɵɵelementStart(
|
|
333
|
-
i0.ɵɵtext(
|
|
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.ɵɵ
|
|
336
|
-
i0.ɵɵ
|
|
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(
|
|
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 ?
|
|
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
|
-
<
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
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)="
|
|
383
|
-
|
|
384
|
-
<div class="conversation-
|
|
385
|
-
<
|
|
386
|
-
|
|
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
|
-
|
|
397
|
-
<
|
|
398
|
-
<
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
<
|
|
403
|
-
<
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
<
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
<
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
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)="
|
|
438
|
-
|
|
439
|
-
<div class="conversation-
|
|
440
|
-
<
|
|
441
|
-
|
|
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
|
-
|
|
452
|
-
<
|
|
453
|
-
<
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
<
|
|
458
|
-
<
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
<
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
<
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
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.
|
|
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:
|
|
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
|