@acorex-platform/module-conversation-client 0.0.38 → 0.0.46
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/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs} +9727 -8104
- package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-BMGagKtP.mjs → acorex-platform-module-conversation-client-after-message-sent.command-qTWATpgC.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-BMGagKtP.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-qTWATpgC.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D1SDsHvl.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DQWhOmBE.mjs} +8 -7
- package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D1SDsHvl.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DQWhOmBE.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs +1756 -0
- package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs +120 -0
- package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs.map → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-nE7xP4bF.mjs → acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs} +747 -25
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-DXkqkS50.mjs → acorex-platform-module-conversation-client-chat-call-start-popup.component-BbEhkLLh.mjs} +4 -4
- package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-DXkqkS50.mjs.map → acorex-platform-module-conversation-client-chat-call-start-popup.component-BbEhkLLh.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-SYCtAqcV.mjs → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-Bnbj0e6M.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-SYCtAqcV.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-Bnbj0e6M.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs +497 -0
- package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Dv_x3ztZ.mjs → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Dv_x3ztZ.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs +277 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs +530 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs +206 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +65 -17
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +231 -59
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs +87 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs +213 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs +466 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs +142 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs → acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs} +35 -19
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs +403 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs +846 -4
- package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +3 -0
- package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-8NoSuUwe.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-juoWxu7I.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-8NoSuUwe.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-juoWxu7I.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BgJ0Z36e.mjs → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BgJ0Z36e.mjs.map → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-lcNz4Hpu.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BsYxaH3g.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-lcNz4Hpu.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BsYxaH3g.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-DxccFsD9.mjs → acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs} +7 -2
- package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
- package/package.json +14 -2
- package/types/acorex-platform-module-conversation-client-contracts-entities-channel-audience.d.ts +5 -0
- package/types/acorex-platform-module-conversation-client-contracts-entities-channel-post.d.ts +5 -0
- package/types/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.d.ts +5 -0
- package/types/acorex-platform-module-conversation-client-contracts.d.ts +432 -2
- package/types/acorex-platform-module-conversation-client.d.ts +676 -161
- package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs +0 -120
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-nE7xP4bF.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs +0 -482
- package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +0 -52
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +0 -263
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DxccFsD9.mjs.map +0 -1
|
@@ -1,482 +0,0 @@
|
|
|
1
|
-
import { AXClosableComponent, AXComponentCloseEvent } from '@acorex/cdk/common';
|
|
2
|
-
import { AXButtonComponent } from '@acorex/components/button';
|
|
3
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
4
|
-
import { AXLabelComponent } from '@acorex/components/label';
|
|
5
|
-
import { AXSearchBoxComponent } from '@acorex/components/search-box';
|
|
6
|
-
import * as i2 from '@acorex/components/switch';
|
|
7
|
-
import { AXSwitchModule } from '@acorex/components/switch';
|
|
8
|
-
import { AXTextBoxComponent } from '@acorex/components/text-box';
|
|
9
|
-
import { AXToastService } from '@acorex/components/toast';
|
|
10
|
-
import { AXConversationService, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AXConversationMessageUtilsService, getConversationProfileFields, getConversationMediaCategories, fetchConversationMediaPage, filterSupplementalInfoPanelMessages, mergeInfoPanelMessages, isMessageListThemeBackground, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, isSameMessageListBackground, resolveMessageListBackgroundRaw, normalizeMessageListBackgroundValue, AXConversationAvatarPickerComponent, AXConversationAvatarComponent, AXConversationRegistryComponentOutletComponent } from '@acorex/components/conversation';
|
|
11
|
-
import * as i3 from '@acorex/core/translation';
|
|
12
|
-
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
13
|
-
import { AXPlatform } from '@acorex/core/platform';
|
|
14
|
-
import { AsyncPipe } from '@angular/common';
|
|
15
|
-
import * as i0 from '@angular/core';
|
|
16
|
-
import { inject, ChangeDetectorRef, output, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
17
|
-
import * as i1 from '@angular/forms';
|
|
18
|
-
import { FormsModule } from '@angular/forms';
|
|
19
|
-
|
|
20
|
-
//#region ----- Imports -----
|
|
21
|
-
//#endregion
|
|
22
|
-
//#region ----- Component -----
|
|
23
|
-
class AXMChatConversationInfoPanelComponent extends AXClosableComponent {
|
|
24
|
-
constructor() {
|
|
25
|
-
super(...arguments);
|
|
26
|
-
//#region ----- Services -----
|
|
27
|
-
this.toastService = inject(AXToastService);
|
|
28
|
-
this.translation = inject(AXTranslationService);
|
|
29
|
-
this.platform = inject(AXPlatform);
|
|
30
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
31
|
-
/**
|
|
32
|
-
* Optional fallback only. Popup content is created on the root view container;
|
|
33
|
-
* the chat instance is assigned via {@link AXPopupService} `data`.
|
|
34
|
-
*/
|
|
35
|
-
this.injectedConversationService = inject(AXConversationService, { optional: true });
|
|
36
|
-
//#endregion
|
|
37
|
-
//#region ----- Popup State -----
|
|
38
|
-
this.onClosed = output();
|
|
39
|
-
this.activeTab = signal('profile', /* @ts-ignore */
|
|
40
|
-
...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
|
|
41
|
-
this.showMemberSearch = signal(false, /* @ts-ignore */
|
|
42
|
-
...(ngDevMode ? [{ debugName: "showMemberSearch" }] : /* istanbul ignore next */ []));
|
|
43
|
-
this.panelView = signal('main', /* @ts-ignore */
|
|
44
|
-
...(ngDevMode ? [{ debugName: "panelView" }] : /* istanbul ignore next */ []));
|
|
45
|
-
this.selectedMediaCategory = signal(null, /* @ts-ignore */
|
|
46
|
-
...(ngDevMode ? [{ debugName: "selectedMediaCategory" }] : /* istanbul ignore next */ []));
|
|
47
|
-
this.mediaViewLoader = () => import('./acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-SYCtAqcV.mjs').then((m) => m.AXMChatConversationInfoMediaViewComponent);
|
|
48
|
-
this.conversationMessages = signal([], /* @ts-ignore */
|
|
49
|
-
...(ngDevMode ? [{ debugName: "conversationMessages" }] : /* istanbul ignore next */ []));
|
|
50
|
-
this.loadingMessages = signal(false, /* @ts-ignore */
|
|
51
|
-
...(ngDevMode ? [{ debugName: "loadingMessages" }] : /* istanbul ignore next */ []));
|
|
52
|
-
this.loadingMoreMedia = signal(false, /* @ts-ignore */
|
|
53
|
-
...(ngDevMode ? [{ debugName: "loadingMoreMedia" }] : /* istanbul ignore next */ []));
|
|
54
|
-
this.mediaHasMore = signal(false, /* @ts-ignore */
|
|
55
|
-
...(ngDevMode ? [{ debugName: "mediaHasMore" }] : /* istanbul ignore next */ []));
|
|
56
|
-
this.mediaNextPage = 1;
|
|
57
|
-
this.memberSearchQuery = signal('', /* @ts-ignore */
|
|
58
|
-
...(ngDevMode ? [{ debugName: "memberSearchQuery" }] : /* istanbul ignore next */ []));
|
|
59
|
-
this.archived = false;
|
|
60
|
-
this.initialNotifications = false;
|
|
61
|
-
this.initialArchived = false;
|
|
62
|
-
this.notificationsEnabled = signal(true, /* @ts-ignore */
|
|
63
|
-
...(ngDevMode ? [{ debugName: "notificationsEnabled" }] : /* istanbul ignore next */ []));
|
|
64
|
-
this.editTitle = '';
|
|
65
|
-
this.editAvatar = '';
|
|
66
|
-
this.groupDetailsSaveInFlight = false;
|
|
67
|
-
this.backgroundPresets = AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS.map((preset) => ({
|
|
68
|
-
...preset,
|
|
69
|
-
label: this.translateBackgroundPresetLabel(preset.id),
|
|
70
|
-
}));
|
|
71
|
-
//#endregion
|
|
72
|
-
//#region ----- Derived State -----
|
|
73
|
-
this.heroSubtitle = computed(() => {
|
|
74
|
-
const conversation = this.liveConversation();
|
|
75
|
-
if (!conversation)
|
|
76
|
-
return '';
|
|
77
|
-
this.conversationService?.typingRevision();
|
|
78
|
-
this.conversationService?.presenceTimeTick();
|
|
79
|
-
return AXConversationMessageUtilsService.getConversationSubtitle(conversation, {
|
|
80
|
-
typingUserIds: this.conversationService?.getActiveTypingUserIds(conversation.id) ?? [],
|
|
81
|
-
peerPresence: this.conversationService?.getPeerPresence(conversation),
|
|
82
|
-
currentUserId: this.conversationService?.currentUser()?.id,
|
|
83
|
-
});
|
|
84
|
-
}, /* @ts-ignore */
|
|
85
|
-
...(ngDevMode ? [{ debugName: "heroSubtitle" }] : /* istanbul ignore next */ []));
|
|
86
|
-
this.liveConversation = computed(() => {
|
|
87
|
-
const conversation = this.conversation;
|
|
88
|
-
if (!conversation?.id)
|
|
89
|
-
return conversation;
|
|
90
|
-
const fromStore = this.conversationService?.conversations().find((c) => c.id === conversation.id);
|
|
91
|
-
return fromStore ?? conversation;
|
|
92
|
-
}, /* @ts-ignore */
|
|
93
|
-
...(ngDevMode ? [{ debugName: "liveConversation" }] : /* istanbul ignore next */ []));
|
|
94
|
-
this.isConversationMuted = computed(() => this.notificationsEnabled() === false, /* @ts-ignore */
|
|
95
|
-
...(ngDevMode ? [{ debugName: "isConversationMuted" }] : /* istanbul ignore next */ []));
|
|
96
|
-
this.profileFields = computed(() => {
|
|
97
|
-
const conversation = this.liveConversation();
|
|
98
|
-
if (!conversation)
|
|
99
|
-
return [];
|
|
100
|
-
return getConversationProfileFields(conversation, this.conversationService?.currentUser()?.id);
|
|
101
|
-
}, /* @ts-ignore */
|
|
102
|
-
...(ngDevMode ? [{ debugName: "profileFields" }] : /* istanbul ignore next */ []));
|
|
103
|
-
this.mediaCategories = computed(() => {
|
|
104
|
-
if (!this.conversation)
|
|
105
|
-
return [];
|
|
106
|
-
return getConversationMediaCategories(this.conversationMessages());
|
|
107
|
-
}, /* @ts-ignore */
|
|
108
|
-
...(ngDevMode ? [{ debugName: "mediaCategories" }] : /* istanbul ignore next */ []));
|
|
109
|
-
this.quickActions = computed(() => {
|
|
110
|
-
if (!this.conversation)
|
|
111
|
-
return [];
|
|
112
|
-
const muted = this.isConversationMuted();
|
|
113
|
-
const actions = [
|
|
114
|
-
{
|
|
115
|
-
id: 'mute',
|
|
116
|
-
labelKey: muted ? '@acorex:chat.actions.unmute' : '@acorex:chat.actions.mute',
|
|
117
|
-
icon: muted ? 'fa-light fa-bell-slash' : 'fa-light fa-bell',
|
|
118
|
-
},
|
|
119
|
-
];
|
|
120
|
-
if (!this.isPrivateConversation()) {
|
|
121
|
-
actions.push({
|
|
122
|
-
id: 'leave',
|
|
123
|
-
labelKey: '@acorex:chat.actions.leave-and-delete',
|
|
124
|
-
icon: 'fa-light fa-door-open',
|
|
125
|
-
danger: true,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
return actions;
|
|
129
|
-
}, /* @ts-ignore */
|
|
130
|
-
...(ngDevMode ? [{ debugName: "quickActions" }] : /* istanbul ignore next */ []));
|
|
131
|
-
this.filteredMembers = computed(() => {
|
|
132
|
-
if (!this.conversation)
|
|
133
|
-
return [];
|
|
134
|
-
const query = this.memberSearchQuery().toLowerCase().trim();
|
|
135
|
-
const members = this.conversation?.participants ?? [];
|
|
136
|
-
if (!query)
|
|
137
|
-
return members;
|
|
138
|
-
return members.filter((p) => p.name.toLowerCase().includes(query) ||
|
|
139
|
-
(p.description ?? '').toLowerCase().includes(query) ||
|
|
140
|
-
(p.role ?? '').toLowerCase().includes(query));
|
|
141
|
-
}, /* @ts-ignore */
|
|
142
|
-
...(ngDevMode ? [{ debugName: "filteredMembers" }] : /* istanbul ignore next */ []));
|
|
143
|
-
}
|
|
144
|
-
//#endregion
|
|
145
|
-
//#region ----- Lifecycle -----
|
|
146
|
-
ngOnInit() {
|
|
147
|
-
// Popup assigns `data` after createComponent, so ngOnInit runs before those fields exist.
|
|
148
|
-
queueMicrotask(() => this.initializeFromPopupData());
|
|
149
|
-
}
|
|
150
|
-
initializeFromPopupData() {
|
|
151
|
-
const resolvedService = this.conversationService ?? this.injectedConversationService;
|
|
152
|
-
if (!resolvedService) {
|
|
153
|
-
console.warn('AXMChatConversationInfoPanelComponent opened without conversationService.');
|
|
154
|
-
this.close();
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
this.conversationService = resolvedService;
|
|
158
|
-
if (!this.conversation) {
|
|
159
|
-
const activeConversation = this.conversationService.activeConversation();
|
|
160
|
-
if (activeConversation) {
|
|
161
|
-
this.conversation = activeConversation;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
console.warn('AXMChatConversationInfoPanelComponent opened without conversation context.');
|
|
165
|
-
this.close();
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
this.initialNotifications = this.conversationService.getRoomPreferences(this.conversation.id).notifications;
|
|
170
|
-
this.notificationsEnabled.set(this.initialNotifications);
|
|
171
|
-
this.archived = this.conversation.archived ?? false;
|
|
172
|
-
this.initialArchived = this.archived;
|
|
173
|
-
this.editTitle = this.conversation.title || '';
|
|
174
|
-
this.editAvatar = this.conversation.avatar || '';
|
|
175
|
-
this.cdr.markForCheck();
|
|
176
|
-
void this.loadConversationMessages();
|
|
177
|
-
}
|
|
178
|
-
ngOnDestroy() {
|
|
179
|
-
if (this.groupTitleSaveTimer) {
|
|
180
|
-
clearTimeout(this.groupTitleSaveTimer);
|
|
181
|
-
this.groupTitleSaveTimer = undefined;
|
|
182
|
-
void this.persistGroupDetails();
|
|
183
|
-
}
|
|
184
|
-
const currentNotifications = this.notificationsEnabled();
|
|
185
|
-
const hasChanges = currentNotifications !== this.initialNotifications || this.archived !== this.initialArchived;
|
|
186
|
-
if (hasChanges) {
|
|
187
|
-
this.toastService.success(this.translation.translateSync('@acorex:chat.info-panel.toasts.settings-saved'));
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
//#endregion
|
|
191
|
-
//#region ----- Data Loading -----
|
|
192
|
-
async loadConversationMessages() {
|
|
193
|
-
this.loadingMessages.set(true);
|
|
194
|
-
this.mediaNextPage = 1;
|
|
195
|
-
this.mediaNextCursor = undefined;
|
|
196
|
-
this.mediaHasMore.set(false);
|
|
197
|
-
try {
|
|
198
|
-
const page = await fetchConversationMediaPage(this.conversationService.conversationApi, this.conversation.id, 0);
|
|
199
|
-
this.mediaHasMore.set(page.hasMore);
|
|
200
|
-
this.mediaNextCursor = page.nextCursor;
|
|
201
|
-
const supplemental = this.conversationService.activeConversationId() === this.conversation.id
|
|
202
|
-
? filterSupplementalInfoPanelMessages(this.conversationService.activeMessages())
|
|
203
|
-
: [];
|
|
204
|
-
this.conversationMessages.set(mergeInfoPanelMessages(page.items, supplemental));
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
console.error('Failed to load conversation media messages:', error);
|
|
208
|
-
}
|
|
209
|
-
finally {
|
|
210
|
-
this.loadingMessages.set(false);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
async loadMoreMedia() {
|
|
214
|
-
if (!this.mediaHasMore() || this.loadingMoreMedia() || this.loadingMessages()) {
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
this.loadingMoreMedia.set(true);
|
|
218
|
-
try {
|
|
219
|
-
const page = await fetchConversationMediaPage(this.conversationService.conversationApi, this.conversation.id, this.mediaNextPage, undefined, this.mediaNextCursor);
|
|
220
|
-
this.mediaHasMore.set(page.hasMore);
|
|
221
|
-
this.mediaNextCursor = page.nextCursor;
|
|
222
|
-
this.mediaNextPage += 1;
|
|
223
|
-
this.conversationMessages.set(mergeInfoPanelMessages(page.items, this.conversationMessages()));
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
console.error('Failed to load more conversation media:', error);
|
|
227
|
-
}
|
|
228
|
-
finally {
|
|
229
|
-
this.loadingMoreMedia.set(false);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
//#endregion
|
|
233
|
-
//#region ----- UI Helpers -----
|
|
234
|
-
isPrivateConversation() {
|
|
235
|
-
return this.conversation.type === 'private';
|
|
236
|
-
}
|
|
237
|
-
isGroupConversation() {
|
|
238
|
-
return this.conversation.type === 'group' || this.conversation.type === 'channel';
|
|
239
|
-
}
|
|
240
|
-
membersSectionTitle() {
|
|
241
|
-
return this.translation.translateSync('@acorex:chat.info-panel.tabs.members-count-upper', {
|
|
242
|
-
params: { count: this.conversation.participants.length },
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
getMemberRoleLabel(participant) {
|
|
246
|
-
switch (participant.role) {
|
|
247
|
-
case 'admin':
|
|
248
|
-
return '@acorex:chat.info-panel.member-role.admin';
|
|
249
|
-
case 'owner':
|
|
250
|
-
return '@acorex:chat.info-panel.member-role.admin';
|
|
251
|
-
case 'moderator':
|
|
252
|
-
return '@acorex:chat.info-panel.member-role.moderator';
|
|
253
|
-
default:
|
|
254
|
-
return null;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
onMemberSearchChange(value) {
|
|
258
|
-
this.memberSearchQuery.set(value ?? '');
|
|
259
|
-
}
|
|
260
|
-
setActiveTab(tab) {
|
|
261
|
-
this.activeTab.set(tab);
|
|
262
|
-
}
|
|
263
|
-
toggleMemberSearch() {
|
|
264
|
-
this.showMemberSearch.update((value) => !value);
|
|
265
|
-
if (!this.showMemberSearch()) {
|
|
266
|
-
this.memberSearchQuery.set('');
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
openMediaCategory(category) {
|
|
270
|
-
this.selectedMediaCategory.set(category);
|
|
271
|
-
this.panelView.set('media');
|
|
272
|
-
}
|
|
273
|
-
closeMediaView() {
|
|
274
|
-
this.panelView.set('main');
|
|
275
|
-
this.selectedMediaCategory.set(null);
|
|
276
|
-
}
|
|
277
|
-
getMediaViewInputs(category) {
|
|
278
|
-
return {
|
|
279
|
-
category,
|
|
280
|
-
messages: this.conversationMessages(),
|
|
281
|
-
conversation: this.conversation,
|
|
282
|
-
conversationService: this.conversationService,
|
|
283
|
-
hasMoreMedia: this.mediaHasMore(),
|
|
284
|
-
loadingMoreMedia: this.loadingMoreMedia(),
|
|
285
|
-
onLoadMoreMedia: () => this.loadMoreMedia(),
|
|
286
|
-
onBack: () => this.closeMediaView(),
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
getMediaRowLabel(category) {
|
|
290
|
-
return this.translation.translateSync(category.countLabelKey, {
|
|
291
|
-
params: { count: category.count },
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
getMemberSubtitle(participant) {
|
|
295
|
-
const presence = this.conversationService?.getUserPresence(participant.id);
|
|
296
|
-
this.conversationService?.presenceTimeTick();
|
|
297
|
-
if (presence?.status === 'online') {
|
|
298
|
-
return this.translation.translateSync('@acorex:chat.status.online');
|
|
299
|
-
}
|
|
300
|
-
if (participant.description?.trim())
|
|
301
|
-
return participant.description.trim();
|
|
302
|
-
if (participant.role && participant.role !== 'member')
|
|
303
|
-
return participant.role;
|
|
304
|
-
return '';
|
|
305
|
-
}
|
|
306
|
-
isMemberOnline(participant) {
|
|
307
|
-
this.conversationService?.presenceTimeTick();
|
|
308
|
-
return this.conversationService?.getUserPresence(participant.id)?.status === 'online';
|
|
309
|
-
}
|
|
310
|
-
//#endregion
|
|
311
|
-
//#region ----- Actions -----
|
|
312
|
-
onQuickAction(actionId) {
|
|
313
|
-
switch (actionId) {
|
|
314
|
-
case 'mute':
|
|
315
|
-
void this.toggleConversationMute();
|
|
316
|
-
break;
|
|
317
|
-
case 'leave':
|
|
318
|
-
void this.onLeave();
|
|
319
|
-
break;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
async toggleConversationMute() {
|
|
323
|
-
await this.onNotificationsChange(!this.notificationsEnabled());
|
|
324
|
-
}
|
|
325
|
-
async onNotificationsChange(value) {
|
|
326
|
-
try {
|
|
327
|
-
await this.conversationService.updateConversationSettings(this.conversation.id, {
|
|
328
|
-
notifications: value,
|
|
329
|
-
});
|
|
330
|
-
this.notificationsEnabled.set(value);
|
|
331
|
-
}
|
|
332
|
-
catch (error) {
|
|
333
|
-
console.error('Failed to update notifications:', error);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
async onArchivedChange(value) {
|
|
337
|
-
const previous = this.archived;
|
|
338
|
-
this.archived = value;
|
|
339
|
-
try {
|
|
340
|
-
await this.conversationService.updateConversation(this.conversation.id, { archived: value });
|
|
341
|
-
this.conversation.archived = value;
|
|
342
|
-
this.initialArchived = value;
|
|
343
|
-
}
|
|
344
|
-
catch {
|
|
345
|
-
this.archived = previous;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
close(data) {
|
|
349
|
-
const event = new AXComponentCloseEvent();
|
|
350
|
-
event.component = this;
|
|
351
|
-
event.data = data;
|
|
352
|
-
this.onClosed.emit(event);
|
|
353
|
-
}
|
|
354
|
-
closeAll() {
|
|
355
|
-
this.close();
|
|
356
|
-
}
|
|
357
|
-
async onLeave() {
|
|
358
|
-
const isGroup = this.isGroupConversation();
|
|
359
|
-
await this.conversationService.deleteConversation(this.conversation.id);
|
|
360
|
-
if (this.conversationService.activeConversation()?.id === this.conversation.id) {
|
|
361
|
-
this.conversationService.closeActiveConversation();
|
|
362
|
-
}
|
|
363
|
-
this.toastService.success(isGroup
|
|
364
|
-
? this.translation.translateSync('@acorex:chat.info-panel.toasts.left-conversation')
|
|
365
|
-
: this.translation.translateSync('@acorex:chat.info-panel.toasts.deleted-conversation'));
|
|
366
|
-
this.close();
|
|
367
|
-
}
|
|
368
|
-
onGroupTitleChange(value) {
|
|
369
|
-
this.editTitle = value;
|
|
370
|
-
clearTimeout(this.groupTitleSaveTimer);
|
|
371
|
-
this.groupTitleSaveTimer = setTimeout(() => void this.persistGroupDetails(), 400);
|
|
372
|
-
}
|
|
373
|
-
onGroupAvatarChange(value) {
|
|
374
|
-
this.editAvatar = value;
|
|
375
|
-
void this.persistGroupDetails();
|
|
376
|
-
}
|
|
377
|
-
async persistGroupDetails() {
|
|
378
|
-
if (this.isPrivateConversation() || this.groupDetailsSaveInFlight) {
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
const title = this.editTitle.trim();
|
|
382
|
-
if (!title) {
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
|
-
const nextAvatar = this.editAvatar.trim() || undefined;
|
|
386
|
-
const currentTitle = this.conversation.title || '';
|
|
387
|
-
const currentAvatar = this.conversation.avatar || undefined;
|
|
388
|
-
if (title === currentTitle && nextAvatar === currentAvatar) {
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
this.groupDetailsSaveInFlight = true;
|
|
392
|
-
try {
|
|
393
|
-
await this.conversationService.updateConversation(this.conversation.id, {
|
|
394
|
-
title,
|
|
395
|
-
avatar: nextAvatar,
|
|
396
|
-
});
|
|
397
|
-
this.conversation.title = title;
|
|
398
|
-
this.conversation.avatar = nextAvatar;
|
|
399
|
-
}
|
|
400
|
-
catch (error) {
|
|
401
|
-
console.error('Failed to update group details:', error);
|
|
402
|
-
this.toastService.danger(this.translation.translateSync('@acorex:chat.info-panel.toasts.failed-group-update'));
|
|
403
|
-
}
|
|
404
|
-
finally {
|
|
405
|
-
this.groupDetailsSaveInFlight = false;
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
isBackgroundSelected(preset) {
|
|
409
|
-
this.platform.themeMode();
|
|
410
|
-
const bg = this.conversation?.metadata?.['messageListBackground'];
|
|
411
|
-
if (bg === undefined ||
|
|
412
|
-
bg === '' ||
|
|
413
|
-
(isMessageListThemeBackground(bg) && !bg.light.trim() && !bg.dark.trim())) {
|
|
414
|
-
return preset.id === AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID;
|
|
415
|
-
}
|
|
416
|
-
return isSameMessageListBackground(bg, preset.value, this.platform.isDark());
|
|
417
|
-
}
|
|
418
|
-
presetBackgroundPreview(preset) {
|
|
419
|
-
this.platform.themeMode();
|
|
420
|
-
const raw = resolveMessageListBackgroundRaw(preset, this.platform.isDark()) ?? '';
|
|
421
|
-
return normalizeMessageListBackgroundValue(raw);
|
|
422
|
-
}
|
|
423
|
-
async applyMessageListBackground(value) {
|
|
424
|
-
const isReset = value === '' || (isMessageListThemeBackground(value) && !value.light.trim() && !value.dark.trim());
|
|
425
|
-
try {
|
|
426
|
-
const metadata = { ...(this.conversation.metadata ?? {}) };
|
|
427
|
-
if (isReset) {
|
|
428
|
-
delete metadata.messageListBackground;
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
431
|
-
metadata.messageListBackground = value;
|
|
432
|
-
}
|
|
433
|
-
await this.conversationService.updateConversationMetadata(this.conversation.id, metadata);
|
|
434
|
-
this.conversation.metadata = metadata;
|
|
435
|
-
this.toastService.success(isReset
|
|
436
|
-
? this.translation.translateSync('@acorex:chat.info-panel.toasts.background-reset')
|
|
437
|
-
: this.translation.translateSync('@acorex:chat.info-panel.toasts.background-updated'));
|
|
438
|
-
}
|
|
439
|
-
catch (error) {
|
|
440
|
-
console.error('Failed to update message list background:', error);
|
|
441
|
-
this.toastService.danger(this.translation.translateSync('@acorex:chat.info-panel.toasts.failed-background-update'));
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
getBackgroundAriaLabel(label) {
|
|
445
|
-
return this.translation.translateSync('@acorex:chat.info-panel.background.set-label', {
|
|
446
|
-
params: { label },
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
translateBackgroundPresetLabel(id) {
|
|
450
|
-
const labelKeys = {
|
|
451
|
-
'solid-default': '@acorex:chat.info-panel.background.presets.default',
|
|
452
|
-
'solid-graphite': '@acorex:chat.info-panel.background.presets.graphite',
|
|
453
|
-
'solid-olive': '@acorex:chat.info-panel.background.presets.olive',
|
|
454
|
-
'solid-sky': '@acorex:chat.info-panel.background.presets.sky',
|
|
455
|
-
'grad-aurora': '@acorex:chat.info-panel.background.presets.aurora',
|
|
456
|
-
'grad-sunset': '@acorex:chat.info-panel.background.presets.sunset',
|
|
457
|
-
};
|
|
458
|
-
return this.translation.translateSync(labelKeys[id] ?? id);
|
|
459
|
-
}
|
|
460
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatConversationInfoPanelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
461
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatConversationInfoPanelComponent, isStandalone: true, selector: "axm-chat-conversation-info-panel", outputs: { onClosed: "onClosed" }, providers: [{ provide: AXClosableComponent, useExisting: AXMChatConversationInfoPanelComponent }], usesInheritance: true, ngImport: i0, template: "@if (conversation) {\n <div class=\"tg-info-panel\">\n @if (panelView() === 'media' && selectedMediaCategory(); as category) {\n <ax-conversation-registry-component-outlet\n [componentLoader]=\"mediaViewLoader\"\n [inputs]=\"getMediaViewInputs(category)\"\n />\n } @else {\n <div class=\"tg-info-panel__scroll\">\n <section class=\"tg-hero\">\n <ax-conversation-avatar kind=\"auto\" [conversation]=\"conversation\" [size]=\"96\" />\n <h2 class=\"tg-hero__title\">{{ conversation.title }}</h2>\n <p class=\"tg-hero__subtitle\">{{ heroSubtitle() }}</p>\n </section>\n\n <section class=\"tg-quick-actions\">\n @for (action of quickActions(); track action.id) {\n <button\n type=\"button\"\n class=\"tg-quick-action\"\n [class.tg-quick-action--danger]=\"action.danger\"\n [class.tg-quick-action--active]=\"action.id === 'mute' && isConversationMuted()\"\n (click)=\"onQuickAction(action.id)\"\n >\n <span class=\"tg-quick-action__icon\"><i [class]=\"action.icon\"></i></span>\n <span class=\"tg-quick-action__label\">{{ action.labelKey | translate | async }}</span>\n </button>\n }\n </section>\n\n <nav class=\"tg-tabs\" role=\"tablist\">\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'profile'\"\n [attr.aria-selected]=\"activeTab() === 'profile'\"\n (click)=\"setActiveTab('profile')\"\n >\n {{ '@acorex:chat.info-panel.tabs.profile' | translate | async }}\n </button>\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'manage'\"\n [attr.aria-selected]=\"activeTab() === 'manage'\"\n (click)=\"setActiveTab('manage')\"\n >\n {{ '@acorex:chat.info-panel.tabs.manage' | translate | async }}\n </button>\n </nav>\n\n @if (activeTab() === 'profile') {\n @if (profileFields().length > 0) {\n <section class=\"tg-section tg-details\">\n @for (field of profileFields(); track field.id) {\n <div class=\"tg-detail-row\">\n <span class=\"tg-detail-row__icon\"><i [class]=\"field.icon\"></i></span>\n <div class=\"tg-detail-row__content\">\n <span class=\"tg-detail-row__value\">{{ field.value }}</span>\n <span class=\"tg-detail-row__label\">{{ field.labelKey | translate | async }}</span>\n </div>\n </div>\n }\n </section>\n }\n\n @if (loadingMessages()) {\n <div class=\"tg-loading\">{{ '@acorex:chat.info-panel.media.loading' | translate | async }}</div>\n } @else if (mediaCategories().length > 0) {\n <section class=\"tg-section tg-media\">\n @for (category of mediaCategories(); track category.id) {\n <button type=\"button\" class=\"tg-media-row\" (click)=\"openMediaCategory(category)\">\n <span class=\"tg-media-row__icon\"><i [class]=\"category.icon\"></i></span>\n <span class=\"tg-media-row__label\">{{ getMediaRowLabel(category) }}</span>\n <i class=\"fa-light fa-chevron-right tg-media-row__chevron\"></i>\n </button>\n }\n </section>\n }\n\n @if (isGroupConversation()) {\n <section class=\"tg-section tg-members\">\n <div class=\"tg-section-header tg-section-header--row\">\n <span class=\"tg-section-header__title\">{{ membersSectionTitle() }}</span>\n <div class=\"tg-section-header__actions\">\n <button\n type=\"button\"\n class=\"tg-icon-btn\"\n (click)=\"toggleMemberSearch()\"\n [attr.aria-label]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n >\n <i class=\"fa-light fa-magnifying-glass\"></i>\n </button>\n </div>\n </div>\n @if (showMemberSearch()) {\n <div class=\"tg-members-search-wrap\">\n <ax-search-box\n class=\"tg-members-search\"\n [value]=\"memberSearchQuery()\"\n (valueChange)=\"onMemberSearchChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n ></ax-search-box>\n </div>\n }\n @for (participant of filteredMembers(); track participant.id) {\n <div class=\"tg-member-row\">\n <ax-conversation-avatar\n kind=\"user\"\n [userId]=\"participant.id\"\n [conversation]=\"conversation\"\n [size]=\"42\"\n />\n <div class=\"tg-member-row__content\">\n <span class=\"tg-member-row__name\">{{ participant.name }}</span>\n <span\n class=\"tg-member-row__meta\"\n [class.tg-member-row__meta--online]=\"isMemberOnline(participant)\"\n >\n {{ getMemberSubtitle(participant) }}\n </span>\n </div>\n @if (getMemberRoleLabel(participant); as roleLabel) {\n <span class=\"tg-member-row__badge\">{{ roleLabel | translate | async }}</span>\n }\n </div>\n }\n </section>\n }\n }\n\n @if (activeTab() === 'manage') {\n <section class=\"tg-section tg-manage\">\n @if (!isPrivateConversation()) {\n <div class=\"tg-manage-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.group-details.title' | translate | async\n }}</ax-label>\n <ax-text-box\n [value]=\"editTitle\"\n (valueChange)=\"onGroupTitleChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.enter-group-title' | translate | async\"\n ></ax-text-box>\n <div class=\"tg-manage-avatar\">\n <ax-conversation-avatar-picker\n [(avatarUrl)]=\"editAvatar\"\n (avatarUrlChange)=\"onGroupAvatarChange($event)\"\n ></ax-conversation-avatar-picker>\n </div>\n </div>\n }\n\n <div class=\"tg-setting-row\">\n <div class=\"tg-setting-row__info\">\n <span class=\"tg-setting-row__title\">{{\n '@acorex:chat.info-panel.settings.archived' | translate | async\n }}</span>\n <span class=\"tg-setting-row__desc\">{{\n '@acorex:chat.info-panel.settings.archived-description' | translate | async\n }}</span>\n </div>\n <ax-switch [(ngModel)]=\"archived\" (ngModelChange)=\"onArchivedChange($event)\"></ax-switch>\n </div>\n\n <div class=\"tg-manage-block tg-background-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.background.title' | translate | async\n }}</ax-label>\n <p class=\"tg-background-desc\">\n {{ '@acorex:chat.info-panel.background.description' | translate | async }}\n </p>\n <div class=\"tg-background-grid\">\n @for (preset of backgroundPresets; track preset.id) {\n <button\n type=\"button\"\n class=\"tg-background-swatch\"\n [class.tg-background-swatch--active]=\"isBackgroundSelected(preset)\"\n [style.background]=\"presetBackgroundPreview(preset.value)\"\n (click)=\"applyMessageListBackground(preset.value)\"\n [attr.aria-label]=\"getBackgroundAriaLabel(preset.label)\"\n >\n <span class=\"tg-background-swatch__label\">{{ preset.label }}</span>\n </button>\n }\n </div>\n <ax-button\n [text]=\"'@acorex:chat.info-panel.actions.reset-to-default' | translate | async\"\n [look]=\"'ghost'\"\n (onClick)=\"applyMessageListBackground('')\"\n ></ax-button>\n </div>\n </section>\n }\n </div>\n }\n </div>\n}\n", styles: ["@layer properties;@layer components{axm-chat-conversation-info-panel{display:block;height:100%;width:100%}axm-chat-conversation-info-panel .tg-info-panel{display:flex;flex-direction:column;max-height:min(85vh,40rem)}axm-chat-conversation-info-panel .tg-info-panel__scroll{overflow-y:auto;overscroll-behavior:contain}axm-chat-conversation-info-panel .tg-hero{display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 6);padding-block:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 4);text-align:center}axm-chat-conversation-info-panel .tg-hero__title{margin-top:var(--spacing, .25rem);margin-bottom:0;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: 1.35;line-height:1.35;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);overflow-wrap:break-word;color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-hero__subtitle{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);color:rgba(var(--ax-sys-color-on-surface));opacity:.65}axm-chat-conversation-info-panel .tg-quick-actions{display:flex;flex-wrap:nowrap;justify-content:center;gap:calc(var(--spacing, .25rem) * 1.5);padding-inline:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 4)}axm-chat-conversation-info-panel .tg-quick-action{display:flex;max-width:5.5rem;min-width:0px;flex:1;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 1.5);border-radius:var(--radius-xl, .75rem);--tw-border-style: none;border-style:none;background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * 2.5);color:rgba(var(--ax-sys-color-primary-500));transition:background-color .15s ease}axm-chat-conversation-info-panel .tg-quick-action:hover{background-color:rgba(var(--ax-sys-color-border-light-surface))}axm-chat-conversation-info-panel .tg-quick-action--danger{color:rgba(var(--ax-sys-color-danger-500))}axm-chat-conversation-info-panel .tg-quick-action--active{color:rgba(var(--ax-sys-color-warning-500));background:rgba(var(--ax-sys-color-warning-500),.14)}axm-chat-conversation-info-panel .tg-quick-action--active .tg-quick-action__label{color:rgba(var(--ax-sys-color-warning-500));opacity:100%}axm-chat-conversation-info-panel .tg-quick-action__icon{font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));--tw-leading: 1;line-height:1}axm-chat-conversation-info-panel .tg-quick-action__label{text-align:center;font-size:.6875rem;--tw-leading: 1.1;line-height:1.1;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-surface));opacity:85%}axm-chat-conversation-info-panel .tg-tabs{margin-inline:calc(var(--spacing, .25rem) * 3);display:flex;gap:0px;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}axm-chat-conversation-info-panel .tg-tab{flex:1;cursor:pointer;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;--tw-border-style: none;border-style:none;border-color:transparent;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface));opacity:55%;transition:opacity .15s ease,color .15s ease,border-color .15s ease}axm-chat-conversation-info-panel .tg-tab:hover{opacity:80%}axm-chat-conversation-info-panel .tg-tab--active{color:rgba(var(--ax-sys-color-primary-500));opacity:100%;border-bottom-color:rgb(var(--ax-sys-color-primary-500))}axm-chat-conversation-info-panel .tg-section{padding-block:var(--spacing, .25rem)}axm-chat-conversation-info-panel .tg-detail-row,axm-chat-conversation-info-panel .tg-member-row{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 3.5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2.5)}axm-chat-conversation-info-panel .tg-media-row{display:flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3.5);--tw-border-style: none;border-style:none;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2.5);text-align:start;transition:background-color .15s ease}axm-chat-conversation-info-panel .tg-media-row:hover{background-color:rgba(var(--ax-sys-color-lighter-surface))}axm-chat-conversation-info-panel .tg-media-row__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0;text-align:center;color:rgba(var(--ax-sys-color-on-surface));opacity:75%}axm-chat-conversation-info-panel .tg-media-row__label{min-width:0px;flex:1;font-size:.9375rem;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-media-row__chevron{flex-shrink:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));opacity:.45}axm-chat-conversation-info-panel .tg-loading{padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 4);text-align:center;font-size:.8125rem;color:rgba(var(--ax-sys-color-on-surface));opacity:60%}axm-chat-conversation-info-panel .tg-detail-row__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0;text-align:center;color:rgba(var(--ax-sys-color-primary-500));opacity:90%}axm-chat-conversation-info-panel .tg-detail-row__content,axm-chat-conversation-info-panel .tg-member-row__content{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}axm-chat-conversation-info-panel .tg-detail-row__value,axm-chat-conversation-info-panel .tg-member-row__name{overflow:hidden;font-size:.9375rem;--tw-leading: 1.3;line-height:1.3;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap;color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-detail-row__label,axm-chat-conversation-info-panel .tg-member-row__meta{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1.2;line-height:1.2;color:rgba(var(--ax-sys-color-on-surface));opacity:60%}axm-chat-conversation-info-panel .tg-member-row__meta--online{color:rgba(var(--ax-sys-color-primary-500));opacity:100%}axm-chat-conversation-info-panel .tg-section-header{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 1.5)}axm-chat-conversation-info-panel .tg-section-header--row{flex-direction:row;align-items:center;justify-content:space-between}axm-chat-conversation-info-panel .tg-section-header__actions{display:flex;align-items:center;gap:var(--spacing, .25rem)}axm-chat-conversation-info-panel .tg-icon-btn{display:inline-flex;height:calc(var(--spacing, .25rem) * 8);width:calc(var(--spacing, .25rem) * 8);cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);--tw-border-style: none;border-style:none;background-color:transparent;color:rgba(var(--ax-sys-color-primary-500))}axm-chat-conversation-info-panel .tg-icon-btn:hover{background-color:rgba(var(--ax-sys-color-lighter-surface))}axm-chat-conversation-info-panel .tg-members-search-wrap{padding-inline:calc(var(--spacing, .25rem) * 4);padding-bottom:calc(var(--spacing, .25rem) * 2)}axm-chat-conversation-info-panel .tg-section-header__title{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);--tw-tracking: .06em;letter-spacing:.06em;color:rgba(var(--ax-sys-color-on-surface));text-transform:uppercase;opacity:55%}axm-chat-conversation-info-panel .tg-members-search{width:100%}axm-chat-conversation-info-panel .tg-member-row__badge{flex-shrink:0;border-radius:calc(infinity * 1px);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-primary-500));background:rgba(var(--ax-sys-color-primary-500),.14)}axm-chat-conversation-info-panel .tg-manage{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 4)}axm-chat-conversation-info-panel .tg-manage-block{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}axm-chat-conversation-info-panel .tg-manage-label{font-size:.8125rem;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-setting-row{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}axm-chat-conversation-info-panel .tg-setting-row__info{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}axm-chat-conversation-info-panel .tg-setting-row__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-setting-row__desc{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgba(var(--ax-sys-color-on-surface));opacity:.65}axm-chat-conversation-info-panel .tg-background-desc{margin:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));opacity:70%}axm-chat-conversation-info-panel .tg-background-grid{display:grid;gap:calc(var(--spacing, .25rem) * 2);grid-template-columns:repeat(3,minmax(0,1fr))}axm-chat-conversation-info-panel .tg-background-swatch{position:relative;height:calc(var(--spacing, .25rem) * 11);cursor:pointer;overflow:hidden;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:2px;border-color:transparent}axm-chat-conversation-info-panel .tg-background-swatch--active{border-color:rgba(var(--ax-sys-color-primary-500))}axm-chat-conversation-info-panel .tg-background-swatch__label{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * .5);font-size:.65rem;--tw-font-weight: var(--font-weight-light, 300);font-weight:var(--font-weight-light, 300);--tw-tracking: .1rem;letter-spacing:.1rem;color:var(--color-white, #fff);mix-blend-mode:difference}axm-chat-conversation-info-panel .tg-danger{padding-top:var(--spacing, .25rem);padding-bottom:calc(var(--spacing, .25rem) * 3)}axm-chat-conversation-info-panel .tg-danger-row{display:flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3);--tw-border-style: none;border-style:none;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);text-align:start;font-size:.9375rem;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-danger-500))}axm-chat-conversation-info-panel .tg-danger-row:hover{background:rgba(var(--ax-sys-color-danger-500),.06)}}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid;--tw-tracking: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "component", type: i2.AXSwitchComponent, selector: "ax-switch", inputs: ["disabled", "readonly", "color", "tabIndex", "value", "name", "isLoading"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "component", type: AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "maskPattern", "customTokens", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onMaskChanged"] }, { kind: "component", type: AXConversationAvatarPickerComponent, selector: "ax-conversation-avatar-picker", inputs: ["showClearButton", "avatarUrl"], outputs: ["avatarUrlChange", "onFileSelected"] }, { kind: "component", type: AXConversationAvatarComponent, selector: "ax-conversation-avatar", inputs: ["kind", "userId", "conversation", "message", "size", "showStatus", "name", "avatar", "icon"] }, { kind: "component", type: AXConversationRegistryComponentOutletComponent, selector: "ax-conversation-registry-component-outlet", inputs: ["component", "componentLoader", "inputs", "skeleton"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
462
|
-
}
|
|
463
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatConversationInfoPanelComponent, decorators: [{
|
|
464
|
-
type: Component,
|
|
465
|
-
args: [{ selector: 'axm-chat-conversation-info-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
|
466
|
-
AsyncPipe,
|
|
467
|
-
FormsModule,
|
|
468
|
-
AXButtonComponent,
|
|
469
|
-
AXDecoratorModule,
|
|
470
|
-
AXLabelComponent,
|
|
471
|
-
AXSearchBoxComponent,
|
|
472
|
-
AXSwitchModule,
|
|
473
|
-
AXTextBoxComponent,
|
|
474
|
-
AXConversationAvatarPickerComponent,
|
|
475
|
-
AXConversationAvatarComponent,
|
|
476
|
-
AXConversationRegistryComponentOutletComponent,
|
|
477
|
-
AXTranslationModule,
|
|
478
|
-
], providers: [{ provide: AXClosableComponent, useExisting: AXMChatConversationInfoPanelComponent }], template: "@if (conversation) {\n <div class=\"tg-info-panel\">\n @if (panelView() === 'media' && selectedMediaCategory(); as category) {\n <ax-conversation-registry-component-outlet\n [componentLoader]=\"mediaViewLoader\"\n [inputs]=\"getMediaViewInputs(category)\"\n />\n } @else {\n <div class=\"tg-info-panel__scroll\">\n <section class=\"tg-hero\">\n <ax-conversation-avatar kind=\"auto\" [conversation]=\"conversation\" [size]=\"96\" />\n <h2 class=\"tg-hero__title\">{{ conversation.title }}</h2>\n <p class=\"tg-hero__subtitle\">{{ heroSubtitle() }}</p>\n </section>\n\n <section class=\"tg-quick-actions\">\n @for (action of quickActions(); track action.id) {\n <button\n type=\"button\"\n class=\"tg-quick-action\"\n [class.tg-quick-action--danger]=\"action.danger\"\n [class.tg-quick-action--active]=\"action.id === 'mute' && isConversationMuted()\"\n (click)=\"onQuickAction(action.id)\"\n >\n <span class=\"tg-quick-action__icon\"><i [class]=\"action.icon\"></i></span>\n <span class=\"tg-quick-action__label\">{{ action.labelKey | translate | async }}</span>\n </button>\n }\n </section>\n\n <nav class=\"tg-tabs\" role=\"tablist\">\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'profile'\"\n [attr.aria-selected]=\"activeTab() === 'profile'\"\n (click)=\"setActiveTab('profile')\"\n >\n {{ '@acorex:chat.info-panel.tabs.profile' | translate | async }}\n </button>\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'manage'\"\n [attr.aria-selected]=\"activeTab() === 'manage'\"\n (click)=\"setActiveTab('manage')\"\n >\n {{ '@acorex:chat.info-panel.tabs.manage' | translate | async }}\n </button>\n </nav>\n\n @if (activeTab() === 'profile') {\n @if (profileFields().length > 0) {\n <section class=\"tg-section tg-details\">\n @for (field of profileFields(); track field.id) {\n <div class=\"tg-detail-row\">\n <span class=\"tg-detail-row__icon\"><i [class]=\"field.icon\"></i></span>\n <div class=\"tg-detail-row__content\">\n <span class=\"tg-detail-row__value\">{{ field.value }}</span>\n <span class=\"tg-detail-row__label\">{{ field.labelKey | translate | async }}</span>\n </div>\n </div>\n }\n </section>\n }\n\n @if (loadingMessages()) {\n <div class=\"tg-loading\">{{ '@acorex:chat.info-panel.media.loading' | translate | async }}</div>\n } @else if (mediaCategories().length > 0) {\n <section class=\"tg-section tg-media\">\n @for (category of mediaCategories(); track category.id) {\n <button type=\"button\" class=\"tg-media-row\" (click)=\"openMediaCategory(category)\">\n <span class=\"tg-media-row__icon\"><i [class]=\"category.icon\"></i></span>\n <span class=\"tg-media-row__label\">{{ getMediaRowLabel(category) }}</span>\n <i class=\"fa-light fa-chevron-right tg-media-row__chevron\"></i>\n </button>\n }\n </section>\n }\n\n @if (isGroupConversation()) {\n <section class=\"tg-section tg-members\">\n <div class=\"tg-section-header tg-section-header--row\">\n <span class=\"tg-section-header__title\">{{ membersSectionTitle() }}</span>\n <div class=\"tg-section-header__actions\">\n <button\n type=\"button\"\n class=\"tg-icon-btn\"\n (click)=\"toggleMemberSearch()\"\n [attr.aria-label]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n >\n <i class=\"fa-light fa-magnifying-glass\"></i>\n </button>\n </div>\n </div>\n @if (showMemberSearch()) {\n <div class=\"tg-members-search-wrap\">\n <ax-search-box\n class=\"tg-members-search\"\n [value]=\"memberSearchQuery()\"\n (valueChange)=\"onMemberSearchChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n ></ax-search-box>\n </div>\n }\n @for (participant of filteredMembers(); track participant.id) {\n <div class=\"tg-member-row\">\n <ax-conversation-avatar\n kind=\"user\"\n [userId]=\"participant.id\"\n [conversation]=\"conversation\"\n [size]=\"42\"\n />\n <div class=\"tg-member-row__content\">\n <span class=\"tg-member-row__name\">{{ participant.name }}</span>\n <span\n class=\"tg-member-row__meta\"\n [class.tg-member-row__meta--online]=\"isMemberOnline(participant)\"\n >\n {{ getMemberSubtitle(participant) }}\n </span>\n </div>\n @if (getMemberRoleLabel(participant); as roleLabel) {\n <span class=\"tg-member-row__badge\">{{ roleLabel | translate | async }}</span>\n }\n </div>\n }\n </section>\n }\n }\n\n @if (activeTab() === 'manage') {\n <section class=\"tg-section tg-manage\">\n @if (!isPrivateConversation()) {\n <div class=\"tg-manage-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.group-details.title' | translate | async\n }}</ax-label>\n <ax-text-box\n [value]=\"editTitle\"\n (valueChange)=\"onGroupTitleChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.enter-group-title' | translate | async\"\n ></ax-text-box>\n <div class=\"tg-manage-avatar\">\n <ax-conversation-avatar-picker\n [(avatarUrl)]=\"editAvatar\"\n (avatarUrlChange)=\"onGroupAvatarChange($event)\"\n ></ax-conversation-avatar-picker>\n </div>\n </div>\n }\n\n <div class=\"tg-setting-row\">\n <div class=\"tg-setting-row__info\">\n <span class=\"tg-setting-row__title\">{{\n '@acorex:chat.info-panel.settings.archived' | translate | async\n }}</span>\n <span class=\"tg-setting-row__desc\">{{\n '@acorex:chat.info-panel.settings.archived-description' | translate | async\n }}</span>\n </div>\n <ax-switch [(ngModel)]=\"archived\" (ngModelChange)=\"onArchivedChange($event)\"></ax-switch>\n </div>\n\n <div class=\"tg-manage-block tg-background-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.background.title' | translate | async\n }}</ax-label>\n <p class=\"tg-background-desc\">\n {{ '@acorex:chat.info-panel.background.description' | translate | async }}\n </p>\n <div class=\"tg-background-grid\">\n @for (preset of backgroundPresets; track preset.id) {\n <button\n type=\"button\"\n class=\"tg-background-swatch\"\n [class.tg-background-swatch--active]=\"isBackgroundSelected(preset)\"\n [style.background]=\"presetBackgroundPreview(preset.value)\"\n (click)=\"applyMessageListBackground(preset.value)\"\n [attr.aria-label]=\"getBackgroundAriaLabel(preset.label)\"\n >\n <span class=\"tg-background-swatch__label\">{{ preset.label }}</span>\n </button>\n }\n </div>\n <ax-button\n [text]=\"'@acorex:chat.info-panel.actions.reset-to-default' | translate | async\"\n [look]=\"'ghost'\"\n (onClick)=\"applyMessageListBackground('')\"\n ></ax-button>\n </div>\n </section>\n }\n </div>\n }\n </div>\n}\n", styles: ["@layer properties;@layer components{axm-chat-conversation-info-panel{display:block;height:100%;width:100%}axm-chat-conversation-info-panel .tg-info-panel{display:flex;flex-direction:column;max-height:min(85vh,40rem)}axm-chat-conversation-info-panel .tg-info-panel__scroll{overflow-y:auto;overscroll-behavior:contain}axm-chat-conversation-info-panel .tg-hero{display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 6);padding-block:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 4);text-align:center}axm-chat-conversation-info-panel .tg-hero__title{margin-top:var(--spacing, .25rem);margin-bottom:0;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: 1.35;line-height:1.35;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);overflow-wrap:break-word;color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-hero__subtitle{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);color:rgba(var(--ax-sys-color-on-surface));opacity:.65}axm-chat-conversation-info-panel .tg-quick-actions{display:flex;flex-wrap:nowrap;justify-content:center;gap:calc(var(--spacing, .25rem) * 1.5);padding-inline:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 4)}axm-chat-conversation-info-panel .tg-quick-action{display:flex;max-width:5.5rem;min-width:0px;flex:1;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 1.5);border-radius:var(--radius-xl, .75rem);--tw-border-style: none;border-style:none;background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * 2.5);color:rgba(var(--ax-sys-color-primary-500));transition:background-color .15s ease}axm-chat-conversation-info-panel .tg-quick-action:hover{background-color:rgba(var(--ax-sys-color-border-light-surface))}axm-chat-conversation-info-panel .tg-quick-action--danger{color:rgba(var(--ax-sys-color-danger-500))}axm-chat-conversation-info-panel .tg-quick-action--active{color:rgba(var(--ax-sys-color-warning-500));background:rgba(var(--ax-sys-color-warning-500),.14)}axm-chat-conversation-info-panel .tg-quick-action--active .tg-quick-action__label{color:rgba(var(--ax-sys-color-warning-500));opacity:100%}axm-chat-conversation-info-panel .tg-quick-action__icon{font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));--tw-leading: 1;line-height:1}axm-chat-conversation-info-panel .tg-quick-action__label{text-align:center;font-size:.6875rem;--tw-leading: 1.1;line-height:1.1;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-surface));opacity:85%}axm-chat-conversation-info-panel .tg-tabs{margin-inline:calc(var(--spacing, .25rem) * 3);display:flex;gap:0px;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}axm-chat-conversation-info-panel .tg-tab{flex:1;cursor:pointer;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;--tw-border-style: none;border-style:none;border-color:transparent;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface));opacity:55%;transition:opacity .15s ease,color .15s ease,border-color .15s ease}axm-chat-conversation-info-panel .tg-tab:hover{opacity:80%}axm-chat-conversation-info-panel .tg-tab--active{color:rgba(var(--ax-sys-color-primary-500));opacity:100%;border-bottom-color:rgb(var(--ax-sys-color-primary-500))}axm-chat-conversation-info-panel .tg-section{padding-block:var(--spacing, .25rem)}axm-chat-conversation-info-panel .tg-detail-row,axm-chat-conversation-info-panel .tg-member-row{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 3.5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2.5)}axm-chat-conversation-info-panel .tg-media-row{display:flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3.5);--tw-border-style: none;border-style:none;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2.5);text-align:start;transition:background-color .15s ease}axm-chat-conversation-info-panel .tg-media-row:hover{background-color:rgba(var(--ax-sys-color-lighter-surface))}axm-chat-conversation-info-panel .tg-media-row__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0;text-align:center;color:rgba(var(--ax-sys-color-on-surface));opacity:75%}axm-chat-conversation-info-panel .tg-media-row__label{min-width:0px;flex:1;font-size:.9375rem;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-media-row__chevron{flex-shrink:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));opacity:.45}axm-chat-conversation-info-panel .tg-loading{padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 4);text-align:center;font-size:.8125rem;color:rgba(var(--ax-sys-color-on-surface));opacity:60%}axm-chat-conversation-info-panel .tg-detail-row__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0;text-align:center;color:rgba(var(--ax-sys-color-primary-500));opacity:90%}axm-chat-conversation-info-panel .tg-detail-row__content,axm-chat-conversation-info-panel .tg-member-row__content{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}axm-chat-conversation-info-panel .tg-detail-row__value,axm-chat-conversation-info-panel .tg-member-row__name{overflow:hidden;font-size:.9375rem;--tw-leading: 1.3;line-height:1.3;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap;color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-detail-row__label,axm-chat-conversation-info-panel .tg-member-row__meta{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1.2;line-height:1.2;color:rgba(var(--ax-sys-color-on-surface));opacity:60%}axm-chat-conversation-info-panel .tg-member-row__meta--online{color:rgba(var(--ax-sys-color-primary-500));opacity:100%}axm-chat-conversation-info-panel .tg-section-header{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 1.5)}axm-chat-conversation-info-panel .tg-section-header--row{flex-direction:row;align-items:center;justify-content:space-between}axm-chat-conversation-info-panel .tg-section-header__actions{display:flex;align-items:center;gap:var(--spacing, .25rem)}axm-chat-conversation-info-panel .tg-icon-btn{display:inline-flex;height:calc(var(--spacing, .25rem) * 8);width:calc(var(--spacing, .25rem) * 8);cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);--tw-border-style: none;border-style:none;background-color:transparent;color:rgba(var(--ax-sys-color-primary-500))}axm-chat-conversation-info-panel .tg-icon-btn:hover{background-color:rgba(var(--ax-sys-color-lighter-surface))}axm-chat-conversation-info-panel .tg-members-search-wrap{padding-inline:calc(var(--spacing, .25rem) * 4);padding-bottom:calc(var(--spacing, .25rem) * 2)}axm-chat-conversation-info-panel .tg-section-header__title{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);--tw-tracking: .06em;letter-spacing:.06em;color:rgba(var(--ax-sys-color-on-surface));text-transform:uppercase;opacity:55%}axm-chat-conversation-info-panel .tg-members-search{width:100%}axm-chat-conversation-info-panel .tg-member-row__badge{flex-shrink:0;border-radius:calc(infinity * 1px);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-primary-500));background:rgba(var(--ax-sys-color-primary-500),.14)}axm-chat-conversation-info-panel .tg-manage{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 4)}axm-chat-conversation-info-panel .tg-manage-block{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}axm-chat-conversation-info-panel .tg-manage-label{font-size:.8125rem;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-setting-row{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}axm-chat-conversation-info-panel .tg-setting-row__info{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}axm-chat-conversation-info-panel .tg-setting-row__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-surface))}axm-chat-conversation-info-panel .tg-setting-row__desc{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgba(var(--ax-sys-color-on-surface));opacity:.65}axm-chat-conversation-info-panel .tg-background-desc{margin:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));opacity:70%}axm-chat-conversation-info-panel .tg-background-grid{display:grid;gap:calc(var(--spacing, .25rem) * 2);grid-template-columns:repeat(3,minmax(0,1fr))}axm-chat-conversation-info-panel .tg-background-swatch{position:relative;height:calc(var(--spacing, .25rem) * 11);cursor:pointer;overflow:hidden;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:2px;border-color:transparent}axm-chat-conversation-info-panel .tg-background-swatch--active{border-color:rgba(var(--ax-sys-color-primary-500))}axm-chat-conversation-info-panel .tg-background-swatch__label{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * .5);font-size:.65rem;--tw-font-weight: var(--font-weight-light, 300);font-weight:var(--font-weight-light, 300);--tw-tracking: .1rem;letter-spacing:.1rem;color:var(--color-white, #fff);mix-blend-mode:difference}axm-chat-conversation-info-panel .tg-danger{padding-top:var(--spacing, .25rem);padding-bottom:calc(var(--spacing, .25rem) * 3)}axm-chat-conversation-info-panel .tg-danger-row{display:flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3);--tw-border-style: none;border-style:none;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);text-align:start;font-size:.9375rem;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-danger-500))}axm-chat-conversation-info-panel .tg-danger-row:hover{background:rgba(var(--ax-sys-color-danger-500),.06)}}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid;--tw-tracking: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
479
|
-
}], propDecorators: { onClosed: [{ type: i0.Output, args: ["onClosed"] }] } });
|
|
480
|
-
|
|
481
|
-
export { AXMChatConversationInfoPanelComponent };
|
|
482
|
-
//# sourceMappingURL=acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs.map
|