@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.
Files changed (73) hide show
  1. 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
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs.map +1 -0
  3. 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
  4. 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
  5. 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
  6. 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
  7. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs +1756 -0
  8. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs +120 -0
  10. 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
  11. 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
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs.map +1 -0
  13. 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
  14. 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
  15. 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
  16. 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
  17. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs +497 -0
  18. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs.map +1 -0
  19. 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
  20. 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
  21. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs +277 -0
  22. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs +530 -0
  24. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs +206 -0
  26. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +65 -17
  28. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +231 -59
  30. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs +87 -0
  32. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs +213 -0
  34. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs +466 -0
  36. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs +142 -0
  38. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs.map +1 -0
  39. 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
  40. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs +403 -0
  42. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +1 -1
  44. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs +846 -4
  45. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
  46. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +3 -0
  47. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -1
  48. 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
  49. 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
  50. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BgJ0Z36e.mjs → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs} +2 -2
  51. 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
  52. 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
  53. 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
  54. 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
  55. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  57. package/package.json +14 -2
  58. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-audience.d.ts +5 -0
  59. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-post.d.ts +5 -0
  60. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.d.ts +5 -0
  61. package/types/acorex-platform-module-conversation-client-contracts.d.ts +432 -2
  62. package/types/acorex-platform-module-conversation-client.d.ts +676 -161
  63. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.mjs.map +0 -1
  64. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs +0 -120
  65. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-nE7xP4bF.mjs.map +0 -1
  66. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs +0 -482
  67. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs.map +0 -1
  68. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +0 -52
  69. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +0 -1
  70. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +0 -1
  71. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +0 -263
  72. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +0 -1
  73. 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