@memberjunction/ng-conversations 2.128.0 → 2.130.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/attachment/image-viewer.component.d.ts +95 -0
- package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/attachment/image-viewer.component.js +293 -0
- package/dist/lib/components/attachment/image-viewer.component.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +88 -26
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +542 -338
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +12 -3
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +68 -55
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +13 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +237 -119
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +102 -5
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +349 -21
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/agent-response-form.component.d.ts +18 -0
- package/dist/lib/components/message/agent-response-form.component.d.ts.map +1 -1
- package/dist/lib/components/message/agent-response-form.component.js +149 -26
- package/dist/lib/components/message/agent-response-form.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +3 -2
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/form-question.component.js +3 -3
- package/dist/lib/components/message/message-input-box.component.d.ts +29 -2
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +79 -12
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +60 -5
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +303 -119
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +41 -3
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +237 -106
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +7 -2
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +19 -4
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +7 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +28 -6
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +83 -10
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +290 -103
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +26 -25
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +7 -3
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +2 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +23 -0
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +91 -2
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts +2 -0
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +20 -3
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +38 -6
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +233 -71
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts +79 -0
- package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-attachment.service.js +327 -0
- package/dist/lib/services/conversation-attachment.service.js.map +1 -0
- package/dist/lib/services/conversation-data.service.d.ts +15 -1
- package/dist/lib/services/conversation-data.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-data.service.js +23 -1
- package/dist/lib/services/conversation-data.service.js.map +1 -1
- package/dist/lib/services/conversation-streaming.service.d.ts +50 -1
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +92 -4
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +16 -1
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +30 -0
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +17 -17
|
@@ -10,110 +10,152 @@ import * as i5 from "@angular/forms";
|
|
|
10
10
|
import * as i6 from "@progress/kendo-angular-dialog";
|
|
11
11
|
import * as i7 from "../notification/notification-badge.component";
|
|
12
12
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
13
|
+
function ConversationListComponent_Conditional_4_Conditional_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
15
|
+
i0.ɵɵelementStart(0, "button", 21);
|
|
16
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_4_Conditional_3_Conditional_9_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onUnpinSidebarClick($event)); });
|
|
17
|
+
i0.ɵɵelement(1, "i", 24);
|
|
18
|
+
i0.ɵɵelementStart(2, "span");
|
|
19
|
+
i0.ɵɵtext(3, "Hide Sidebar");
|
|
20
|
+
i0.ɵɵelementEnd()();
|
|
21
|
+
} }
|
|
22
|
+
function ConversationListComponent_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
24
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "button", 19);
|
|
25
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_4_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onRefreshConversationsClick($event)); });
|
|
26
|
+
i0.ɵɵelement(2, "i", 20);
|
|
27
|
+
i0.ɵɵelementStart(3, "span");
|
|
28
|
+
i0.ɵɵtext(4);
|
|
29
|
+
i0.ɵɵelementEnd()();
|
|
30
|
+
i0.ɵɵelementStart(5, "button", 21);
|
|
31
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_4_Conditional_3_Template_button_click_5_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSelectConversationsClick($event)); });
|
|
32
|
+
i0.ɵɵelement(6, "i", 22);
|
|
33
|
+
i0.ɵɵelementStart(7, "span");
|
|
34
|
+
i0.ɵɵtext(8, "Select Conversations");
|
|
35
|
+
i0.ɵɵelementEnd()();
|
|
36
|
+
i0.ɵɵtemplate(9, ConversationListComponent_Conditional_4_Conditional_3_Conditional_9_Template, 4, 0, "button", 23);
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
40
|
+
i0.ɵɵadvance();
|
|
41
|
+
i0.ɵɵproperty("disabled", ctx_r1.isRefreshing);
|
|
42
|
+
i0.ɵɵadvance();
|
|
43
|
+
i0.ɵɵclassProp("fa-spin", ctx_r1.isRefreshing);
|
|
44
|
+
i0.ɵɵadvance(2);
|
|
45
|
+
i0.ɵɵtextInterpolate(ctx_r1.isRefreshing ? "Refreshing..." : "Refresh");
|
|
46
|
+
i0.ɵɵadvance(5);
|
|
47
|
+
i0.ɵɵconditional(!ctx_r1.isMobileView ? 9 : -1);
|
|
48
|
+
} }
|
|
13
49
|
function ConversationListComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
14
50
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
15
|
-
i0.ɵɵelementStart(0, "button", 16);
|
|
16
|
-
i0.ɵɵlistener("click", function
|
|
17
|
-
i0.ɵɵelement(
|
|
51
|
+
i0.ɵɵelementStart(0, "div", 4)(1, "button", 16);
|
|
52
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_4_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleHeaderMenu($event)); });
|
|
53
|
+
i0.ɵɵelement(2, "i", 17);
|
|
18
54
|
i0.ɵɵelementEnd();
|
|
55
|
+
i0.ɵɵtemplate(3, ConversationListComponent_Conditional_4_Conditional_3_Template, 10, 5, "div", 18);
|
|
56
|
+
i0.ɵɵelementEnd();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
59
|
+
i0.ɵɵadvance(3);
|
|
60
|
+
i0.ɵɵconditional(ctx_r1.isHeaderMenuOpen ? 3 : -1);
|
|
19
61
|
} }
|
|
20
62
|
function ConversationListComponent_Conditional_10_For_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
-
const
|
|
22
|
-
i0.ɵɵelementStart(0, "div",
|
|
23
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
63
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
64
|
+
i0.ɵɵelementStart(0, "div", 27)(1, "input", 36);
|
|
65
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(_r8); const conversation_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.toggleConversationSelection(conversation_r7.ID)); });
|
|
24
66
|
i0.ɵɵelementEnd()();
|
|
25
67
|
} if (rf & 2) {
|
|
26
|
-
const
|
|
68
|
+
const conversation_r7 = i0.ɵɵnextContext().$implicit;
|
|
27
69
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
28
70
|
i0.ɵɵadvance();
|
|
29
|
-
i0.ɵɵproperty("checked", ctx_r1.selectedConversationIds.has(
|
|
71
|
+
i0.ɵɵproperty("checked", ctx_r1.selectedConversationIds.has(conversation_r7.ID));
|
|
30
72
|
} }
|
|
31
73
|
function ConversationListComponent_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
-
i0.ɵɵelementStart(0, "div",
|
|
33
|
-
i0.ɵɵelement(1, "i",
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 29);
|
|
75
|
+
i0.ɵɵelement(1, "i", 37);
|
|
34
76
|
i0.ɵɵelementEnd();
|
|
35
77
|
} }
|
|
36
78
|
function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
const
|
|
38
|
-
i0.ɵɵelementStart(0, "div",
|
|
39
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(
|
|
40
|
-
i0.ɵɵelementStart(1, "button",
|
|
41
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
42
|
-
i0.ɵɵelement(2, "i",
|
|
79
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
80
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
81
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r10); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
82
|
+
i0.ɵɵelementStart(1, "button", 42);
|
|
83
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r10); const conversation_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.togglePin(conversation_r7, $event)); });
|
|
84
|
+
i0.ɵɵelement(2, "i", 43);
|
|
43
85
|
i0.ɵɵelementStart(3, "span");
|
|
44
86
|
i0.ɵɵtext(4, "Unpin");
|
|
45
87
|
i0.ɵɵelementEnd()();
|
|
46
|
-
i0.ɵɵelementStart(5, "button",
|
|
47
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(
|
|
48
|
-
i0.ɵɵelement(6, "i",
|
|
88
|
+
i0.ɵɵelementStart(5, "button", 42);
|
|
89
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const conversation_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.renameConversation(conversation_r7); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
|
|
90
|
+
i0.ɵɵelement(6, "i", 44);
|
|
49
91
|
i0.ɵɵelementStart(7, "span");
|
|
50
92
|
i0.ɵɵtext(8, "Rename");
|
|
51
93
|
i0.ɵɵelementEnd()();
|
|
52
|
-
i0.ɵɵelement(9, "div",
|
|
53
|
-
i0.ɵɵelementStart(10, "button",
|
|
54
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(
|
|
55
|
-
i0.ɵɵelement(11, "i",
|
|
94
|
+
i0.ɵɵelement(9, "div", 45);
|
|
95
|
+
i0.ɵɵelementStart(10, "button", 46);
|
|
96
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r10); const conversation_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.deleteConversation(conversation_r7); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
|
|
97
|
+
i0.ɵɵelement(11, "i", 47);
|
|
56
98
|
i0.ɵɵelementStart(12, "span");
|
|
57
99
|
i0.ɵɵtext(13, "Delete");
|
|
58
100
|
i0.ɵɵelementEnd()()();
|
|
59
101
|
} }
|
|
60
102
|
function ConversationListComponent_Conditional_10_For_9_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
-
const
|
|
62
|
-
i0.ɵɵelementStart(0, "div",
|
|
63
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
64
|
-
i0.ɵɵelement(2, "i",
|
|
103
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
104
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "button", 38);
|
|
105
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Conditional_11_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r9); const conversation_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMenu(conversation_r7.ID, $event)); });
|
|
106
|
+
i0.ɵɵelement(2, "i", 39);
|
|
65
107
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵtemplate(3, ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template, 14, 0, "div",
|
|
108
|
+
i0.ɵɵtemplate(3, ConversationListComponent_Conditional_10_For_9_Conditional_11_Conditional_3_Template, 14, 0, "div", 40);
|
|
67
109
|
i0.ɵɵelementEnd();
|
|
68
110
|
} if (rf & 2) {
|
|
69
|
-
const
|
|
111
|
+
const conversation_r7 = i0.ɵɵnextContext().$implicit;
|
|
70
112
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
71
113
|
i0.ɵɵadvance(3);
|
|
72
|
-
i0.ɵɵconditional(ctx_r1.openMenuConversationId ===
|
|
114
|
+
i0.ɵɵconditional(ctx_r1.openMenuConversationId === conversation_r7.ID ? 3 : -1);
|
|
73
115
|
} }
|
|
74
116
|
function ConversationListComponent_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
-
const
|
|
76
|
-
i0.ɵɵelementStart(0, "div",
|
|
77
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Template_div_click_0_listener() { const
|
|
78
|
-
i0.ɵɵtemplate(1, ConversationListComponent_Conditional_10_For_9_Conditional_1_Template, 2, 1, "div",
|
|
79
|
-
i0.ɵɵelementStart(2, "div",
|
|
80
|
-
i0.ɵɵtemplate(3, ConversationListComponent_Conditional_10_For_9_Conditional_3_Template, 2, 0, "div",
|
|
81
|
-
i0.ɵɵelementStart(4, "div",
|
|
82
|
-
i0.ɵɵelement(5, "mj-notification-badge",
|
|
117
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
118
|
+
i0.ɵɵelementStart(0, "div", 26);
|
|
119
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_For_9_Template_div_click_0_listener() { const conversation_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleConversationClick(conversation_r7)); });
|
|
120
|
+
i0.ɵɵtemplate(1, ConversationListComponent_Conditional_10_For_9_Conditional_1_Template, 2, 1, "div", 27);
|
|
121
|
+
i0.ɵɵelementStart(2, "div", 28);
|
|
122
|
+
i0.ɵɵtemplate(3, ConversationListComponent_Conditional_10_For_9_Conditional_3_Template, 2, 0, "div", 29);
|
|
123
|
+
i0.ɵɵelementStart(4, "div", 30);
|
|
124
|
+
i0.ɵɵelement(5, "mj-notification-badge", 31);
|
|
83
125
|
i0.ɵɵelementEnd()();
|
|
84
|
-
i0.ɵɵelementStart(6, "div",
|
|
126
|
+
i0.ɵɵelementStart(6, "div", 32)(7, "div", 33);
|
|
85
127
|
i0.ɵɵtext(8);
|
|
86
128
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵelementStart(9, "div",
|
|
129
|
+
i0.ɵɵelementStart(9, "div", 34);
|
|
88
130
|
i0.ɵɵtext(10);
|
|
89
131
|
i0.ɵɵelementEnd()();
|
|
90
|
-
i0.ɵɵtemplate(11, ConversationListComponent_Conditional_10_For_9_Conditional_11_Template, 4, 1, "div",
|
|
132
|
+
i0.ɵɵtemplate(11, ConversationListComponent_Conditional_10_For_9_Conditional_11_Template, 4, 1, "div", 35);
|
|
91
133
|
i0.ɵɵelementEnd();
|
|
92
134
|
} if (rf & 2) {
|
|
93
|
-
const
|
|
135
|
+
const conversation_r7 = ctx.$implicit;
|
|
94
136
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
95
|
-
i0.ɵɵclassProp("active",
|
|
137
|
+
i0.ɵɵclassProp("active", conversation_r7.ID === ctx_r1.selectedConversationId)("renamed", conversation_r7.ID === ctx_r1.renamedConversationId);
|
|
96
138
|
i0.ɵɵadvance();
|
|
97
139
|
i0.ɵɵconditional(ctx_r1.isSelectionMode ? 1 : -1);
|
|
98
140
|
i0.ɵɵadvance(2);
|
|
99
|
-
i0.ɵɵconditional(ctx_r1.hasActiveTasks(
|
|
141
|
+
i0.ɵɵconditional(ctx_r1.hasActiveTasks(conversation_r7.ID) ? 3 : -1);
|
|
100
142
|
i0.ɵɵadvance(2);
|
|
101
|
-
i0.ɵɵproperty("conversationId",
|
|
143
|
+
i0.ɵɵproperty("conversationId", conversation_r7.ID);
|
|
102
144
|
i0.ɵɵadvance();
|
|
103
|
-
i0.ɵɵproperty("title",
|
|
145
|
+
i0.ɵɵproperty("title", conversation_r7.Name + (conversation_r7.Description ? "\n" + conversation_r7.Description : ""));
|
|
104
146
|
i0.ɵɵadvance(2);
|
|
105
|
-
i0.ɵɵtextInterpolate(
|
|
147
|
+
i0.ɵɵtextInterpolate(conversation_r7.Name);
|
|
106
148
|
i0.ɵɵadvance(2);
|
|
107
|
-
i0.ɵɵtextInterpolate(
|
|
149
|
+
i0.ɵɵtextInterpolate(conversation_r7.Description);
|
|
108
150
|
i0.ɵɵadvance();
|
|
109
151
|
i0.ɵɵconditional(!ctx_r1.isSelectionMode ? 11 : -1);
|
|
110
152
|
} }
|
|
111
153
|
function ConversationListComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
112
|
-
const
|
|
154
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
113
155
|
i0.ɵɵelementStart(0, "div", 8)(1, "div", 10);
|
|
114
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_Template_div_click_1_listener() { i0.ɵɵrestoreView(
|
|
156
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_10_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.togglePinned()); });
|
|
115
157
|
i0.ɵɵelementStart(2, "div", 11);
|
|
116
|
-
i0.ɵɵelement(3, "i", 12)(4, "i",
|
|
158
|
+
i0.ɵɵelement(3, "i", 12)(4, "i", 25);
|
|
117
159
|
i0.ɵɵelementStart(5, "span");
|
|
118
160
|
i0.ɵɵtext(6, "Pinned");
|
|
119
161
|
i0.ɵɵelementEnd()()();
|
|
@@ -130,124 +172,124 @@ function ConversationListComponent_Conditional_10_Template(rf, ctx) { if (rf & 1
|
|
|
130
172
|
i0.ɵɵrepeater(ctx_r1.pinnedConversations);
|
|
131
173
|
} }
|
|
132
174
|
function ConversationListComponent_For_19_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
133
|
-
const
|
|
134
|
-
i0.ɵɵelementStart(0, "div",
|
|
135
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
175
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
176
|
+
i0.ɵɵelementStart(0, "div", 27)(1, "input", 36);
|
|
177
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(_r13); const conversation_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.toggleConversationSelection(conversation_r12.ID)); });
|
|
136
178
|
i0.ɵɵelementEnd()();
|
|
137
179
|
} if (rf & 2) {
|
|
138
|
-
const
|
|
180
|
+
const conversation_r12 = i0.ɵɵnextContext().$implicit;
|
|
139
181
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
140
182
|
i0.ɵɵadvance();
|
|
141
|
-
i0.ɵɵproperty("checked", ctx_r1.selectedConversationIds.has(
|
|
183
|
+
i0.ɵɵproperty("checked", ctx_r1.selectedConversationIds.has(conversation_r12.ID));
|
|
142
184
|
} }
|
|
143
185
|
function ConversationListComponent_For_19_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
-
i0.ɵɵelementStart(0, "div",
|
|
145
|
-
i0.ɵɵelement(1, "i",
|
|
186
|
+
i0.ɵɵelementStart(0, "div", 29);
|
|
187
|
+
i0.ɵɵelement(1, "i", 37);
|
|
146
188
|
i0.ɵɵelementEnd();
|
|
147
189
|
} }
|
|
148
190
|
function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
149
|
-
const
|
|
150
|
-
i0.ɵɵelementStart(0, "div",
|
|
151
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(
|
|
152
|
-
i0.ɵɵelementStart(1, "button",
|
|
153
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
154
|
-
i0.ɵɵelement(2, "i",
|
|
191
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
192
|
+
i0.ɵɵelementStart(0, "div", 41);
|
|
193
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r15); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
194
|
+
i0.ɵɵelementStart(1, "button", 42);
|
|
195
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r15); const conversation_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.togglePin(conversation_r12, $event)); });
|
|
196
|
+
i0.ɵɵelement(2, "i", 43);
|
|
155
197
|
i0.ɵɵelementStart(3, "span");
|
|
156
198
|
i0.ɵɵtext(4, "Pin");
|
|
157
199
|
i0.ɵɵelementEnd()();
|
|
158
|
-
i0.ɵɵelementStart(5, "button",
|
|
159
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(
|
|
160
|
-
i0.ɵɵelement(6, "i",
|
|
200
|
+
i0.ɵɵelementStart(5, "button", 42);
|
|
201
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r15); const conversation_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.renameConversation(conversation_r12); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
|
|
202
|
+
i0.ɵɵelement(6, "i", 44);
|
|
161
203
|
i0.ɵɵelementStart(7, "span");
|
|
162
204
|
i0.ɵɵtext(8, "Rename");
|
|
163
205
|
i0.ɵɵelementEnd()();
|
|
164
|
-
i0.ɵɵelement(9, "div",
|
|
165
|
-
i0.ɵɵelementStart(10, "button",
|
|
166
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(
|
|
167
|
-
i0.ɵɵelement(11, "i",
|
|
206
|
+
i0.ɵɵelement(9, "div", 45);
|
|
207
|
+
i0.ɵɵelementStart(10, "button", 46);
|
|
208
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Conditional_3_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r15); const conversation_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.deleteConversation(conversation_r12); return i0.ɵɵresetView(ctx_r1.closeMenu()); });
|
|
209
|
+
i0.ɵɵelement(11, "i", 47);
|
|
168
210
|
i0.ɵɵelementStart(12, "span");
|
|
169
211
|
i0.ɵɵtext(13, "Delete");
|
|
170
212
|
i0.ɵɵelementEnd()()();
|
|
171
213
|
} }
|
|
172
214
|
function ConversationListComponent_For_19_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
173
|
-
const
|
|
174
|
-
i0.ɵɵelementStart(0, "div",
|
|
175
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(
|
|
176
|
-
i0.ɵɵelement(2, "i",
|
|
215
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
216
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "button", 38);
|
|
217
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Conditional_11_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r14); const conversation_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleMenu(conversation_r12.ID, $event)); });
|
|
218
|
+
i0.ɵɵelement(2, "i", 39);
|
|
177
219
|
i0.ɵɵelementEnd();
|
|
178
|
-
i0.ɵɵtemplate(3, ConversationListComponent_For_19_Conditional_11_Conditional_3_Template, 14, 0, "div",
|
|
220
|
+
i0.ɵɵtemplate(3, ConversationListComponent_For_19_Conditional_11_Conditional_3_Template, 14, 0, "div", 40);
|
|
179
221
|
i0.ɵɵelementEnd();
|
|
180
222
|
} if (rf & 2) {
|
|
181
|
-
const
|
|
223
|
+
const conversation_r12 = i0.ɵɵnextContext().$implicit;
|
|
182
224
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
183
225
|
i0.ɵɵadvance(3);
|
|
184
|
-
i0.ɵɵconditional(ctx_r1.openMenuConversationId ===
|
|
226
|
+
i0.ɵɵconditional(ctx_r1.openMenuConversationId === conversation_r12.ID ? 3 : -1);
|
|
185
227
|
} }
|
|
186
228
|
function ConversationListComponent_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
187
|
-
const
|
|
188
|
-
i0.ɵɵelementStart(0, "div",
|
|
189
|
-
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Template_div_click_0_listener() { const
|
|
190
|
-
i0.ɵɵtemplate(1, ConversationListComponent_For_19_Conditional_1_Template, 2, 1, "div",
|
|
191
|
-
i0.ɵɵelementStart(2, "div",
|
|
192
|
-
i0.ɵɵtemplate(3, ConversationListComponent_For_19_Conditional_3_Template, 2, 0, "div",
|
|
193
|
-
i0.ɵɵelementStart(4, "div",
|
|
194
|
-
i0.ɵɵelement(5, "mj-notification-badge",
|
|
229
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
230
|
+
i0.ɵɵelementStart(0, "div", 26);
|
|
231
|
+
i0.ɵɵlistener("click", function ConversationListComponent_For_19_Template_div_click_0_listener() { const conversation_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleConversationClick(conversation_r12)); });
|
|
232
|
+
i0.ɵɵtemplate(1, ConversationListComponent_For_19_Conditional_1_Template, 2, 1, "div", 27);
|
|
233
|
+
i0.ɵɵelementStart(2, "div", 28);
|
|
234
|
+
i0.ɵɵtemplate(3, ConversationListComponent_For_19_Conditional_3_Template, 2, 0, "div", 29);
|
|
235
|
+
i0.ɵɵelementStart(4, "div", 30);
|
|
236
|
+
i0.ɵɵelement(5, "mj-notification-badge", 31);
|
|
195
237
|
i0.ɵɵelementEnd()();
|
|
196
|
-
i0.ɵɵelementStart(6, "div",
|
|
238
|
+
i0.ɵɵelementStart(6, "div", 32)(7, "div", 33);
|
|
197
239
|
i0.ɵɵtext(8);
|
|
198
240
|
i0.ɵɵelementEnd();
|
|
199
|
-
i0.ɵɵelementStart(9, "div",
|
|
241
|
+
i0.ɵɵelementStart(9, "div", 34);
|
|
200
242
|
i0.ɵɵtext(10);
|
|
201
243
|
i0.ɵɵelementEnd()();
|
|
202
|
-
i0.ɵɵtemplate(11, ConversationListComponent_For_19_Conditional_11_Template, 4, 1, "div",
|
|
244
|
+
i0.ɵɵtemplate(11, ConversationListComponent_For_19_Conditional_11_Template, 4, 1, "div", 35);
|
|
203
245
|
i0.ɵɵelementEnd();
|
|
204
246
|
} if (rf & 2) {
|
|
205
|
-
const
|
|
247
|
+
const conversation_r12 = ctx.$implicit;
|
|
206
248
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
207
|
-
i0.ɵɵclassProp("active",
|
|
249
|
+
i0.ɵɵclassProp("active", conversation_r12.ID === ctx_r1.selectedConversationId)("renamed", conversation_r12.ID === ctx_r1.renamedConversationId);
|
|
208
250
|
i0.ɵɵadvance();
|
|
209
251
|
i0.ɵɵconditional(ctx_r1.isSelectionMode ? 1 : -1);
|
|
210
252
|
i0.ɵɵadvance(2);
|
|
211
|
-
i0.ɵɵconditional(ctx_r1.hasActiveTasks(
|
|
253
|
+
i0.ɵɵconditional(ctx_r1.hasActiveTasks(conversation_r12.ID) ? 3 : -1);
|
|
212
254
|
i0.ɵɵadvance(2);
|
|
213
|
-
i0.ɵɵproperty("conversationId",
|
|
255
|
+
i0.ɵɵproperty("conversationId", conversation_r12.ID);
|
|
214
256
|
i0.ɵɵadvance();
|
|
215
|
-
i0.ɵɵproperty("title",
|
|
257
|
+
i0.ɵɵproperty("title", conversation_r12.Name + (conversation_r12.Description ? "\n" + conversation_r12.Description : ""));
|
|
216
258
|
i0.ɵɵadvance(2);
|
|
217
|
-
i0.ɵɵtextInterpolate(
|
|
259
|
+
i0.ɵɵtextInterpolate(conversation_r12.Name);
|
|
218
260
|
i0.ɵɵadvance(2);
|
|
219
|
-
i0.ɵɵtextInterpolate(
|
|
261
|
+
i0.ɵɵtextInterpolate(conversation_r12.Description);
|
|
220
262
|
i0.ɵɵadvance();
|
|
221
263
|
i0.ɵɵconditional(!ctx_r1.isSelectionMode ? 11 : -1);
|
|
222
264
|
} }
|
|
223
265
|
function ConversationListComponent_Conditional_20_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
224
|
-
const
|
|
225
|
-
i0.ɵɵelementStart(0, "button",
|
|
226
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
266
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
267
|
+
i0.ɵɵelementStart(0, "button", 54);
|
|
268
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectAll()); });
|
|
227
269
|
i0.ɵɵtext(1, "Select All");
|
|
228
270
|
i0.ɵɵelementEnd();
|
|
229
271
|
} }
|
|
230
272
|
function ConversationListComponent_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
231
|
-
const
|
|
232
|
-
i0.ɵɵelementStart(0, "button",
|
|
233
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
273
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
274
|
+
i0.ɵɵelementStart(0, "button", 54);
|
|
275
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.deselectAll()); });
|
|
234
276
|
i0.ɵɵtext(1, "Deselect All");
|
|
235
277
|
i0.ɵɵelementEnd();
|
|
236
278
|
} }
|
|
237
279
|
function ConversationListComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
-
const
|
|
239
|
-
i0.ɵɵelementStart(0, "div", 15)(1, "div",
|
|
280
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
281
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 48)(2, "span", 49);
|
|
240
282
|
i0.ɵɵtext(3);
|
|
241
283
|
i0.ɵɵelementEnd();
|
|
242
|
-
i0.ɵɵtemplate(4, ConversationListComponent_Conditional_20_Conditional_4_Template, 2, 0, "button",
|
|
284
|
+
i0.ɵɵtemplate(4, ConversationListComponent_Conditional_20_Conditional_4_Template, 2, 0, "button", 50)(5, ConversationListComponent_Conditional_20_Conditional_5_Template, 2, 0, "button", 50);
|
|
243
285
|
i0.ɵɵelementEnd();
|
|
244
|
-
i0.ɵɵelementStart(6, "div",
|
|
245
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Template_button_click_7_listener() { i0.ɵɵrestoreView(
|
|
246
|
-
i0.ɵɵelement(8, "i",
|
|
286
|
+
i0.ɵɵelementStart(6, "div", 51)(7, "button", 52);
|
|
287
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.bulkDeleteConversations()); });
|
|
288
|
+
i0.ɵɵelement(8, "i", 47);
|
|
247
289
|
i0.ɵɵtext(9);
|
|
248
290
|
i0.ɵɵelementEnd();
|
|
249
|
-
i0.ɵɵelementStart(10, "button",
|
|
250
|
-
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Template_button_click_10_listener() { i0.ɵɵrestoreView(
|
|
291
|
+
i0.ɵɵelementStart(10, "button", 53);
|
|
292
|
+
i0.ɵɵlistener("click", function ConversationListComponent_Conditional_20_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleSelectionMode()); });
|
|
251
293
|
i0.ɵɵtext(11, " Cancel ");
|
|
252
294
|
i0.ɵɵelementEnd()()();
|
|
253
295
|
} if (rf & 2) {
|
|
@@ -271,8 +313,12 @@ export class ConversationListComponent {
|
|
|
271
313
|
currentUser;
|
|
272
314
|
selectedConversationId = null;
|
|
273
315
|
renamedConversationId = null;
|
|
316
|
+
isSidebarPinned = true; // Whether sidebar is pinned (stays open after selection)
|
|
317
|
+
isMobileView = false; // Whether we're on mobile (no pin options)
|
|
274
318
|
conversationSelected = new EventEmitter();
|
|
275
319
|
newConversationRequested = new EventEmitter();
|
|
320
|
+
pinSidebarRequested = new EventEmitter(); // Request to pin sidebar
|
|
321
|
+
unpinSidebarRequested = new EventEmitter(); // Request to unpin (collapse) sidebar
|
|
276
322
|
directMessagesExpanded = true;
|
|
277
323
|
pinnedExpanded = true;
|
|
278
324
|
openMenuConversationId = null;
|
|
@@ -280,6 +326,8 @@ export class ConversationListComponent {
|
|
|
280
326
|
isSelectionMode = false;
|
|
281
327
|
selectedConversationIds = new Set();
|
|
282
328
|
searchQuery = '';
|
|
329
|
+
isHeaderMenuOpen = false;
|
|
330
|
+
isRefreshing = false;
|
|
283
331
|
destroy$ = new Subject();
|
|
284
332
|
constructor(conversationData, dialogService, notificationService, activeTasksService, cdr) {
|
|
285
333
|
this.conversationData = conversationData;
|
|
@@ -316,10 +364,52 @@ export class ConversationListComponent {
|
|
|
316
364
|
this.destroy$.complete();
|
|
317
365
|
}
|
|
318
366
|
onDocumentClick() {
|
|
319
|
-
// Close
|
|
367
|
+
// Close menus when clicking outside
|
|
320
368
|
if (this.openMenuConversationId) {
|
|
321
369
|
this.closeMenu();
|
|
322
370
|
}
|
|
371
|
+
if (this.isHeaderMenuOpen) {
|
|
372
|
+
this.closeHeaderMenu();
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
toggleHeaderMenu(event) {
|
|
376
|
+
event.stopPropagation();
|
|
377
|
+
this.isHeaderMenuOpen = !this.isHeaderMenuOpen;
|
|
378
|
+
}
|
|
379
|
+
closeHeaderMenu() {
|
|
380
|
+
this.isHeaderMenuOpen = false;
|
|
381
|
+
}
|
|
382
|
+
onSelectConversationsClick(event) {
|
|
383
|
+
event.stopPropagation();
|
|
384
|
+
this.toggleSelectionMode();
|
|
385
|
+
this.closeHeaderMenu();
|
|
386
|
+
}
|
|
387
|
+
async onRefreshConversationsClick(event) {
|
|
388
|
+
event.stopPropagation();
|
|
389
|
+
if (this.isRefreshing)
|
|
390
|
+
return;
|
|
391
|
+
this.isRefreshing = true;
|
|
392
|
+
try {
|
|
393
|
+
await this.conversationData.refreshConversations(this.environmentId, this.currentUser);
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
console.error('Error refreshing conversations:', error);
|
|
397
|
+
await this.dialogService.alert('Error', 'Failed to refresh conversations. Please try again.');
|
|
398
|
+
}
|
|
399
|
+
finally {
|
|
400
|
+
this.isRefreshing = false;
|
|
401
|
+
this.closeHeaderMenu();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
onPinSidebarClick(event) {
|
|
405
|
+
event.stopPropagation();
|
|
406
|
+
this.closeHeaderMenu();
|
|
407
|
+
this.pinSidebarRequested.emit();
|
|
408
|
+
}
|
|
409
|
+
onUnpinSidebarClick(event) {
|
|
410
|
+
event.stopPropagation();
|
|
411
|
+
this.closeHeaderMenu();
|
|
412
|
+
this.unpinSidebarRequested.emit();
|
|
323
413
|
}
|
|
324
414
|
toggleDirectMessages() {
|
|
325
415
|
this.directMessagesExpanded = !this.directMessagesExpanded;
|
|
@@ -464,11 +554,11 @@ export class ConversationListComponent {
|
|
|
464
554
|
static ɵfac = function ConversationListComponent_Factory(t) { return new (t || ConversationListComponent)(i0.ɵɵdirectiveInject(i1.ConversationDataService), i0.ɵɵdirectiveInject(i2.DialogService), i0.ɵɵdirectiveInject(i3.NotificationService), i0.ɵɵdirectiveInject(i4.ActiveTasksService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
465
555
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationListComponent, selectors: [["mj-conversation-list"]], hostBindings: function ConversationListComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
466
556
|
i0.ɵɵlistener("click", function ConversationListComponent_click_HostBindingHandler() { return ctx.onDocumentClick(); }, false, i0.ɵɵresolveDocument);
|
|
467
|
-
} }, inputs: { environmentId: "environmentId", currentUser: "currentUser", selectedConversationId: "selectedConversationId", renamedConversationId: "renamedConversationId" }, outputs: { conversationSelected: "conversationSelected", newConversationRequested: "newConversationRequested" }, decls: 21, vars: 8, consts: [["kendoDialogContainer", "", 1, "conversation-list"], [1, "list-header"], [1, "header-top"], ["type", "text", "placeholder", "Search conversations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [
|
|
557
|
+
} }, inputs: { environmentId: "environmentId", currentUser: "currentUser", selectedConversationId: "selectedConversationId", renamedConversationId: "renamedConversationId", isSidebarPinned: "isSidebarPinned", isMobileView: "isMobileView" }, outputs: { conversationSelected: "conversationSelected", newConversationRequested: "newConversationRequested", pinSidebarRequested: "pinSidebarRequested", unpinSidebarRequested: "unpinSidebarRequested" }, decls: 21, vars: 8, consts: [["kendoDialogContainer", "", 1, "conversation-list"], [1, "list-header"], [1, "header-top"], ["type", "text", "placeholder", "Search conversations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "header-menu-container"], ["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", "Options", 1, "btn-menu", 3, "click"], [1, "fas", "fa-ellipsis-v"], [1, "header-dropdown-menu"], [1, "dropdown-item", 3, "click", "disabled"], [1, "fas", "fa-sync-alt"], [1, "dropdown-item", 3, "click"], [1, "fas", "fa-check-square"], [1, "dropdown-item"], [1, "fas", "fa-table-columns"], [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-delete-bulk", 3, "click", "disabled"], [1, "btn-cancel", 3, "click"], [1, "link-btn", 3, "click"]], template: function ConversationListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
468
558
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "input", 3);
|
|
469
559
|
i0.ɵɵtwoWayListener("ngModelChange", function ConversationListComponent_Template_input_ngModelChange_3_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.searchQuery, $event) || (ctx.searchQuery = $event); return $event; });
|
|
470
560
|
i0.ɵɵelementEnd();
|
|
471
|
-
i0.ɵɵtemplate(4, ConversationListComponent_Conditional_4_Template,
|
|
561
|
+
i0.ɵɵtemplate(4, ConversationListComponent_Conditional_4_Template, 4, 1, "div", 4);
|
|
472
562
|
i0.ɵɵelementEnd()();
|
|
473
563
|
i0.ɵɵelementStart(5, "button", 5);
|
|
474
564
|
i0.ɵɵlistener("click", function ConversationListComponent_Template_button_click_5_listener() { return ctx.createNewConversation(); });
|
|
@@ -505,7 +595,7 @@ export class ConversationListComponent {
|
|
|
505
595
|
i0.ɵɵrepeater(ctx.unpinnedConversations);
|
|
506
596
|
i0.ɵɵadvance(2);
|
|
507
597
|
i0.ɵɵconditional(ctx.isSelectionMode ? 20 : -1);
|
|
508
|
-
} }, dependencies: [i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i6.DialogContainerDirective, i7.NotificationBadgeComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n .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; min-height: 0; 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 }"] });
|
|
598
|
+
} }, dependencies: [i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i6.DialogContainerDirective, i7.NotificationBadgeComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n .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; min-height: 0; 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 \n\n .header-menu-container[_ngcontent-%COMP%] {\n position: relative;\n flex-shrink: 0;\n }\n\n .btn-menu[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\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 transition: all 0.2s;\n }\n\n .btn-menu[_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 .header-dropdown-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n min-width: 200px;\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 padding: 4px 0;\n }\n\n .header-dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.85);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .header-dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%]:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .header-dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n font-size: 13px;\n color: rgba(255,255,255,0.6);\n }\n\n .header-dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: white;\n }\n\n .header-dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%] .shortcut[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 11px;\n color: rgba(255,255,255,0.4);\n font-family: system-ui, -apple-system, sans-serif;\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 }"] });
|
|
509
599
|
}
|
|
510
600
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationListComponent, [{
|
|
511
601
|
type: Component,
|
|
@@ -519,9 +609,29 @@ export class ConversationListComponent {
|
|
|
519
609
|
placeholder="Search conversations..."
|
|
520
610
|
[(ngModel)]="searchQuery">
|
|
521
611
|
@if (!isSelectionMode) {
|
|
522
|
-
<
|
|
523
|
-
<
|
|
524
|
-
|
|
612
|
+
<div class="header-menu-container">
|
|
613
|
+
<button class="btn-menu" (click)="toggleHeaderMenu($event)" title="Options">
|
|
614
|
+
<i class="fas fa-ellipsis-v"></i>
|
|
615
|
+
</button>
|
|
616
|
+
@if (isHeaderMenuOpen) {
|
|
617
|
+
<div class="header-dropdown-menu">
|
|
618
|
+
<button class="dropdown-item" (click)="onRefreshConversationsClick($event)" [disabled]="isRefreshing">
|
|
619
|
+
<i class="fas fa-sync-alt" [class.fa-spin]="isRefreshing"></i>
|
|
620
|
+
<span>{{ isRefreshing ? 'Refreshing...' : 'Refresh' }}</span>
|
|
621
|
+
</button>
|
|
622
|
+
<button class="dropdown-item" (click)="onSelectConversationsClick($event)">
|
|
623
|
+
<i class="fas fa-check-square"></i>
|
|
624
|
+
<span>Select Conversations</span>
|
|
625
|
+
</button>
|
|
626
|
+
@if (!isMobileView) {
|
|
627
|
+
<button class="dropdown-item" (click)="onUnpinSidebarClick($event)">
|
|
628
|
+
<i class="fas fa-table-columns"></i>
|
|
629
|
+
<span>Hide Sidebar</span>
|
|
630
|
+
</button>
|
|
631
|
+
}
|
|
632
|
+
</div>
|
|
633
|
+
}
|
|
634
|
+
</div>
|
|
525
635
|
}
|
|
526
636
|
</div>
|
|
527
637
|
</div>
|
|
@@ -687,7 +797,7 @@ export class ConversationListComponent {
|
|
|
687
797
|
</div>
|
|
688
798
|
}
|
|
689
799
|
</div>
|
|
690
|
-
`, styles: ["\n :host { display: block; height: 100%; }\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; min-height: 0; 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 "] }]
|
|
800
|
+
`, styles: ["\n :host { display: block; height: 100%; }\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; min-height: 0; 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 /* Header menu button and dropdown */\n .header-menu-container {\n position: relative;\n flex-shrink: 0;\n }\n\n .btn-menu {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\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 transition: all 0.2s;\n }\n\n .btn-menu:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n border-color: rgba(255,255,255,0.3);\n }\n\n .header-dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n min-width: 200px;\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 padding: 4px 0;\n }\n\n .header-dropdown-menu .dropdown-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background: transparent;\n border: none;\n color: rgba(255,255,255,0.85);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .header-dropdown-menu .dropdown-item:hover {\n background: rgba(255,255,255,0.1);\n color: white;\n }\n\n .header-dropdown-menu .dropdown-item i {\n width: 16px;\n font-size: 13px;\n color: rgba(255,255,255,0.6);\n }\n\n .header-dropdown-menu .dropdown-item:hover i {\n color: white;\n }\n\n .header-dropdown-menu .dropdown-item .shortcut {\n margin-left: auto;\n font-size: 11px;\n color: rgba(255,255,255,0.4);\n font-family: system-ui, -apple-system, sans-serif;\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 "] }]
|
|
691
801
|
}], () => [{ type: i1.ConversationDataService }, { type: i2.DialogService }, { type: i3.NotificationService }, { type: i4.ActiveTasksService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
|
|
692
802
|
type: Input
|
|
693
803
|
}], currentUser: [{
|
|
@@ -696,13 +806,21 @@ export class ConversationListComponent {
|
|
|
696
806
|
type: Input
|
|
697
807
|
}], renamedConversationId: [{
|
|
698
808
|
type: Input
|
|
809
|
+
}], isSidebarPinned: [{
|
|
810
|
+
type: Input
|
|
811
|
+
}], isMobileView: [{
|
|
812
|
+
type: Input
|
|
699
813
|
}], conversationSelected: [{
|
|
700
814
|
type: Output
|
|
701
815
|
}], newConversationRequested: [{
|
|
702
816
|
type: Output
|
|
817
|
+
}], pinSidebarRequested: [{
|
|
818
|
+
type: Output
|
|
819
|
+
}], unpinSidebarRequested: [{
|
|
820
|
+
type: Output
|
|
703
821
|
}], onDocumentClick: [{
|
|
704
822
|
type: HostListener,
|
|
705
823
|
args: ['document:click']
|
|
706
824
|
}] }); })();
|
|
707
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationListComponent, { className: "ConversationListComponent", filePath: "src/lib/components/conversation/conversation-list.component.ts", lineNumber:
|
|
825
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationListComponent, { className: "ConversationListComponent", filePath: "src/lib/components/conversation/conversation-list.component.ts", lineNumber: 718 }); })();
|
|
708
826
|
//# sourceMappingURL=conversation-list.component.js.map
|