@acorex-platform/module-conversation-client 0.0.33 → 0.0.37

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 (44) hide show
  1. package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CDlDFzbl.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs} +698 -186
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-yzW01skh.mjs → acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-yzW01skh.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DhRvuCex.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs} +3 -3
  6. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DhRvuCex.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BRW1cHN6.mjs → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BRW1cHN6.mjs.map → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs.map} +1 -1
  9. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs +1607 -0
  10. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs +92 -0
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs.map +1 -1
  14. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-BBL8iEqc.mjs → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs} +2 -2
  15. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-BBL8iEqc.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs.map} +1 -1
  16. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Djn8EikR.mjs → acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs} +2 -2
  17. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Djn8EikR.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs.map} +1 -1
  18. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
  24. package/fesm2022/acorex-platform-module-conversation-client-emit-typing-indicator.command-BzsN1_ns.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -1
  26. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-BoTNaBxS.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs} +2 -2
  27. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-BoTNaBxS.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs.map} +1 -1
  28. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-VgeGqj-z.mjs → acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs} +5 -5
  29. package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs.map +1 -0
  30. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DYIpLKDB.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs} +2 -2
  31. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DYIpLKDB.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs.map} +1 -1
  32. package/fesm2022/acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs.map +1 -1
  33. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-D97E8VvL.mjs → acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs} +26 -13
  34. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  36. package/package.json +2 -2
  37. package/types/acorex-platform-module-conversation-client.d.ts +24 -1
  38. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CDlDFzbl.mjs.map +0 -1
  39. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-C47tt1me.mjs +0 -1386
  40. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-C47tt1me.mjs.map +0 -1
  41. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-EZjVSlhm.mjs +0 -89
  42. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-EZjVSlhm.mjs.map +0 -1
  43. package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-VgeGqj-z.mjs.map +0 -1
  44. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-D97E8VvL.mjs.map +0 -1
@@ -0,0 +1,1607 @@
1
+ import { createRandomUuid } from '@acorex-platform/framework-shared/core';
2
+ import { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';
3
+ import { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';
4
+ import { AXConversationContainerDirective, AXConversationMessageListComponent, AXConversationComposerComponent, AXConversationService } from '@acorex/components/conversation';
5
+ import { AXBasePageComponent } from '@acorex/components/page';
6
+ import * as i1 from '@acorex/components/button';
7
+ import { AXButtonModule } from '@acorex/components/button';
8
+ import * as i2 from '@acorex/components/decorators';
9
+ import { AXDecoratorModule } from '@acorex/components/decorators';
10
+ import * as i3$1 from '@acorex/components/drawer';
11
+ import { AXDrawerModule } from '@acorex/components/drawer';
12
+ import { AXToastService } from '@acorex/components/toast';
13
+ import * as i3 from '@acorex/core/translation';
14
+ import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
15
+ import { AsyncPipe } from '@angular/common';
16
+ import * as i0 from '@angular/core';
17
+ import { input, output, signal, computed, ChangeDetectionStrategy, Component, Injectable, inject, ElementRef, effect, Directive, ViewEncapsulation } from '@angular/core';
18
+ import { ConnectionState } from 'livekit-client';
19
+ import { m as AXMChatEmptyStateHostComponent, n as AXMChatUserApi, o as AXMChatEntityConversationApi, p as AXMChatConversationApi, q as AXMChatCallRtcService, r as AXMChatCallRtcSignalInboxService, i as AXMChatCallActiveSessionService, s as AXMChatCallEventsService, t as AXMConversationRealtimeBus, A as AXMConversationEntityStoreService, j as axmResolveConversationListAvatar, u as axmReadChatCallLog, v as axmShouldForkPrivateToGroup, w as axmIsConversationParticipant, x as axmBuildChatCallLogMessage, y as axmMatchesForkedGroupForCall, z as axmReadChatCallMediaContextIssue, B as AXM_CHAT_CALL_RTC_PROVIDERS } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs';
20
+ import { AXP_ROOT_CONFIG_TOKEN } from '@acorex-platform/framework-client/common';
21
+ import { HttpClient } from '@angular/common/http';
22
+ import { firstValueFrom } from 'rxjs';
23
+
24
+ //#region ----- Imports -----
25
+ //#endregion
26
+ //#region ----- Helpers -----
27
+ function axmCoerceLookupUserIds(value) {
28
+ if (!value) {
29
+ return [];
30
+ }
31
+ if (Array.isArray(value)) {
32
+ return value
33
+ .map((entry) => {
34
+ if (typeof entry === 'string') {
35
+ return entry.trim();
36
+ }
37
+ if (entry && typeof entry === 'object' && 'id' in entry) {
38
+ return String(entry.id ?? '').trim();
39
+ }
40
+ return String(entry ?? '').trim();
41
+ })
42
+ .filter(Boolean);
43
+ }
44
+ if (typeof value === 'string') {
45
+ const trimmed = value.trim();
46
+ return trimmed ? [trimmed] : [];
47
+ }
48
+ return [];
49
+ }
50
+ //#endregion
51
+ //#region ----- Dialog -----
52
+ /**
53
+ * Opens a user picker for adding participants to an active call.
54
+ */
55
+ async function axmOpenChatCallAddPeopleDialog(layoutBuilder, translationService) {
56
+ const [dialogTitle, fieldLabel, cancelLabel, submitLabel] = await Promise.all([
57
+ translationService.translateAsync('@conversation:chat.call.add-people-dialog.title'),
58
+ translationService.translateAsync('@conversation:chat.call.add-people-dialog.field.users'),
59
+ translationService.translateAsync('@conversation:comments.actions.cancel.title'),
60
+ translationService.translateAsync('@conversation:chat.call.add-people-dialog.actions.invite'),
61
+ ]);
62
+ const dialogRef = await layoutBuilder
63
+ .create()
64
+ .dialog((dialog) => {
65
+ dialog
66
+ .setTitle(dialogTitle ?? 'Add People')
67
+ .setSize('md')
68
+ .setCloseButton(true)
69
+ .setContext({ userIds: null })
70
+ .content((flex) => {
71
+ flex.setDirection('column').setGap('10px');
72
+ flex.formField(fieldLabel ?? 'People', (field) => {
73
+ field.path('userIds');
74
+ field.lookupBox({
75
+ entity: 'SecurityManagement.User',
76
+ multiple: true,
77
+ searchable: true,
78
+ allowClear: true,
79
+ validations: [{ rule: 'required' }],
80
+ });
81
+ });
82
+ })
83
+ .setActions((actions) => {
84
+ actions.cancel(cancelLabel ?? 'Cancel');
85
+ actions.submit(submitLabel ?? 'Invite');
86
+ });
87
+ })
88
+ .show();
89
+ if (dialogRef.action() === 'cancel') {
90
+ dialogRef.close();
91
+ return false;
92
+ }
93
+ const context = dialogRef.context();
94
+ const userIds = axmCoerceLookupUserIds(context.userIds);
95
+ dialogRef.close();
96
+ return userIds.length ? userIds : false;
97
+ }
98
+ //#endregion
99
+
100
+ //#region ----- Imports -----
101
+ //#endregion
102
+ //#region ----- Component -----
103
+ class AXMChatCallControlsComponent {
104
+ constructor() {
105
+ //#region ----- Inputs / Outputs -----
106
+ this.phase = input('outgoing-waiting', /* @ts-ignore */
107
+ ...(ngDevMode ? [{ debugName: "phase" }] : /* istanbul ignore next */ []));
108
+ this.videoEnabled = input(false, /* @ts-ignore */
109
+ ...(ngDevMode ? [{ debugName: "videoEnabled" }] : /* istanbul ignore next */ []));
110
+ this.micMuted = input(false, /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "micMuted" }] : /* istanbul ignore next */ []));
112
+ this.showAddPeople = input(false, /* @ts-ignore */
113
+ ...(ngDevMode ? [{ debugName: "showAddPeople" }] : /* istanbul ignore next */ []));
114
+ this.showScreencast = input(true, /* @ts-ignore */
115
+ ...(ngDevMode ? [{ debugName: "showScreencast" }] : /* istanbul ignore next */ []));
116
+ this.showChat = input(false, /* @ts-ignore */
117
+ ...(ngDevMode ? [{ debugName: "showChat" }] : /* istanbul ignore next */ []));
118
+ this.chatOpen = input(false, /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "chatOpen" }] : /* istanbul ignore next */ []));
120
+ this.chatUnread = input(false, /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "chatUnread" }] : /* istanbul ignore next */ []));
122
+ this.audioDevices = input([], /* @ts-ignore */
123
+ ...(ngDevMode ? [{ debugName: "audioDevices" }] : /* istanbul ignore next */ []));
124
+ this.videoDevices = input([], /* @ts-ignore */
125
+ ...(ngDevMode ? [{ debugName: "videoDevices" }] : /* istanbul ignore next */ []));
126
+ this.selectedAudioDeviceId = input(null, /* @ts-ignore */
127
+ ...(ngDevMode ? [{ debugName: "selectedAudioDeviceId" }] : /* istanbul ignore next */ []));
128
+ this.selectedVideoDeviceId = input(null, /* @ts-ignore */
129
+ ...(ngDevMode ? [{ debugName: "selectedVideoDeviceId" }] : /* istanbul ignore next */ []));
130
+ this.screencast = output();
131
+ this.openChat = output();
132
+ this.toggleVideo = output();
133
+ this.toggleMute = output();
134
+ this.endCall = output();
135
+ this.accept = output();
136
+ this.decline = output();
137
+ this.addPeople = output();
138
+ this.pickDevice = output();
139
+ this.requestDevices = output();
140
+ //#endregion
141
+ //#region ----- State Signals -----
142
+ this.openMenu = signal(null, /* @ts-ignore */
143
+ ...(ngDevMode ? [{ debugName: "openMenu" }] : /* istanbul ignore next */ []));
144
+ //#endregion
145
+ //#region ----- Computed Properties -----
146
+ this.isIncoming = computed(() => this.phase() === 'incoming', /* @ts-ignore */
147
+ ...(ngDevMode ? [{ debugName: "isIncoming" }] : /* istanbul ignore next */ []));
148
+ this.hangupLabelKey = computed(() => this.phase() === 'active'
149
+ ? '@conversation:chat.call.end-call'
150
+ : '@conversation:chat.call.cancel', /* @ts-ignore */
151
+ ...(ngDevMode ? [{ debugName: "hangupLabelKey" }] : /* istanbul ignore next */ []));
152
+ this.videoLabelKey = computed(() => this.videoEnabled()
153
+ ? '@conversation:chat.call.stop-video'
154
+ : '@conversation:chat.call.start-video', /* @ts-ignore */
155
+ ...(ngDevMode ? [{ debugName: "videoLabelKey" }] : /* istanbul ignore next */ []));
156
+ this.muteLabelKey = computed(() => this.micMuted() ? '@conversation:chat.call.unmute' : '@conversation:chat.call.mute', /* @ts-ignore */
157
+ ...(ngDevMode ? [{ debugName: "muteLabelKey" }] : /* istanbul ignore next */ []));
158
+ this.menuDevices = computed(() => {
159
+ const kind = this.openMenu();
160
+ if (kind === 'audioinput') {
161
+ return this.audioDevices();
162
+ }
163
+ if (kind === 'videoinput') {
164
+ return this.videoDevices();
165
+ }
166
+ return [];
167
+ }, /* @ts-ignore */
168
+ ...(ngDevMode ? [{ debugName: "menuDevices" }] : /* istanbul ignore next */ []));
169
+ }
170
+ //#endregion
171
+ //#region ----- Event Handlers -----
172
+ onOpenDeviceMenu(event, kind) {
173
+ event.preventDefault();
174
+ event.stopPropagation();
175
+ this.openMenu.set(this.openMenu() === kind ? null : kind);
176
+ this.requestDevices.emit(kind);
177
+ }
178
+ onCloseDeviceMenu() {
179
+ this.openMenu.set(null);
180
+ }
181
+ onSelectDevice(kind, deviceId) {
182
+ this.pickDevice.emit({ kind, deviceId });
183
+ this.openMenu.set(null);
184
+ }
185
+ selectedDeviceId(kind) {
186
+ return kind === 'audioinput' ? this.selectedAudioDeviceId() : this.selectedVideoDeviceId();
187
+ }
188
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallControlsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
189
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatCallControlsComponent, isStandalone: true, selector: "axm-chat-call-controls", inputs: { phase: { classPropertyName: "phase", publicName: "phase", isSignal: true, isRequired: false, transformFunction: null }, videoEnabled: { classPropertyName: "videoEnabled", publicName: "videoEnabled", isSignal: true, isRequired: false, transformFunction: null }, micMuted: { classPropertyName: "micMuted", publicName: "micMuted", isSignal: true, isRequired: false, transformFunction: null }, showAddPeople: { classPropertyName: "showAddPeople", publicName: "showAddPeople", isSignal: true, isRequired: false, transformFunction: null }, showScreencast: { classPropertyName: "showScreencast", publicName: "showScreencast", isSignal: true, isRequired: false, transformFunction: null }, showChat: { classPropertyName: "showChat", publicName: "showChat", isSignal: true, isRequired: false, transformFunction: null }, chatOpen: { classPropertyName: "chatOpen", publicName: "chatOpen", isSignal: true, isRequired: false, transformFunction: null }, chatUnread: { classPropertyName: "chatUnread", publicName: "chatUnread", isSignal: true, isRequired: false, transformFunction: null }, audioDevices: { classPropertyName: "audioDevices", publicName: "audioDevices", isSignal: true, isRequired: false, transformFunction: null }, videoDevices: { classPropertyName: "videoDevices", publicName: "videoDevices", isSignal: true, isRequired: false, transformFunction: null }, selectedAudioDeviceId: { classPropertyName: "selectedAudioDeviceId", publicName: "selectedAudioDeviceId", isSignal: true, isRequired: false, transformFunction: null }, selectedVideoDeviceId: { classPropertyName: "selectedVideoDeviceId", publicName: "selectedVideoDeviceId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { screencast: "screencast", openChat: "openChat", toggleVideo: "toggleVideo", toggleMute: "toggleMute", endCall: "endCall", accept: "accept", decline: "decline", addPeople: "addPeople", pickDevice: "pickDevice", requestDevices: "requestDevices" }, ngImport: i0, template: "<div class=\"axm-chat-call-controls\">\n <!-- ----- Incoming: camera before decline/accept ----- -->\n @if (isIncoming()) {\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleVideo.emit()\"\n [attr.aria-label]=\"videoLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"videoEnabled()\">\n <i class=\"fa-solid\" [class.fa-video]=\"videoEnabled()\" [class.fa-video-slash]=\"!videoEnabled()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'videoinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.camera' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"decline.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.decline' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--danger\">\n <i class=\"fa-solid fa-phone axm-chat-call-controls__hangup\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"accept.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.accept' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--success\">\n <i class=\"fa-solid fa-phone\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleMute.emit()\"\n [attr.aria-label]=\"muteLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"!micMuted()\">\n <i class=\"fa-solid\" [class.fa-microphone]=\"!micMuted()\" [class.fa-microphone-slash]=\"micMuted()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'audioinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.microphone' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n <!-- ----- Outgoing / active controls ----- -->\n @else {\n <!-- ----- In-call chat drawer ----- -->\n @if (showChat()) {\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"openChat.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.open-chat' | translate | async\"\n >\n <span\n class=\"axm-chat-call-controls__circle\"\n [class.axm-chat-call-controls__circle--light]=\"chatOpen()\"\n >\n <i class=\"fa-solid fa-message\" aria-hidden=\"true\"></i>\n @if (chatUnread()) {\n <span class=\"axm-chat-call-controls__unread\" aria-hidden=\"true\"></span>\n }\n </span>\n </button>\n }\n\n <!-- ----- Screencast only during an active call ----- -->\n @if (showScreencast()) {\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"screencast.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.screencast' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--light\">\n <i class=\"fa-solid fa-desktop\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleVideo.emit()\"\n [attr.aria-label]=\"videoLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"videoEnabled()\">\n <i class=\"fa-solid\" [class.fa-video]=\"videoEnabled()\" [class.fa-video-slash]=\"!videoEnabled()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'videoinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.camera' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"endCall.emit()\"\n [attr.aria-label]=\"hangupLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--danger\">\n <i class=\"fa-solid fa-phone axm-chat-call-controls__hangup\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleMute.emit()\"\n [attr.aria-label]=\"muteLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"!micMuted()\">\n <i class=\"fa-solid\" [class.fa-microphone]=\"!micMuted()\" [class.fa-microphone-slash]=\"micMuted()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'audioinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.microphone' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- ----- Add people on an active group call ----- -->\n @if (showAddPeople()) {\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"addPeople.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.add-people' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--light\">\n <i class=\"fa-solid fa-user-plus\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n }\n\n <!-- ----- Device switcher ----- -->\n @if (openMenu(); as kind) {\n <button type=\"button\" class=\"axm-chat-call-controls__menu-backdrop\" (click)=\"onCloseDeviceMenu()\"></button>\n <ul class=\"axm-chat-call-controls__menu\" role=\"listbox\">\n @if (menuDevices().length === 0) {\n <li class=\"axm-chat-call-controls__menu-empty\">\n {{ '@conversation:chat.call.devices.empty' | translate | async }}\n </li>\n }\n @for (device of menuDevices(); track device.deviceId) {\n <li>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__menu-item\"\n [class.axm-chat-call-controls__menu-item--active]=\"device.deviceId === selectedDeviceId(kind)\"\n (click)=\"onSelectDevice(kind, device.deviceId)\"\n >\n {{ device.label || device.deviceId }}\n </button>\n </li>\n }\n </ul>\n }\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
190
+ }
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallControlsComponent, decorators: [{
192
+ type: Component,
193
+ args: [{ selector: 'axm-chat-call-controls', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXTranslationModule, AsyncPipe], template: "<div class=\"axm-chat-call-controls\">\n <!-- ----- Incoming: camera before decline/accept ----- -->\n @if (isIncoming()) {\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleVideo.emit()\"\n [attr.aria-label]=\"videoLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"videoEnabled()\">\n <i class=\"fa-solid\" [class.fa-video]=\"videoEnabled()\" [class.fa-video-slash]=\"!videoEnabled()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'videoinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.camera' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"decline.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.decline' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--danger\">\n <i class=\"fa-solid fa-phone axm-chat-call-controls__hangup\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"accept.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.accept' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--success\">\n <i class=\"fa-solid fa-phone\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleMute.emit()\"\n [attr.aria-label]=\"muteLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"!micMuted()\">\n <i class=\"fa-solid\" [class.fa-microphone]=\"!micMuted()\" [class.fa-microphone-slash]=\"micMuted()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'audioinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.microphone' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n <!-- ----- Outgoing / active controls ----- -->\n @else {\n <!-- ----- In-call chat drawer ----- -->\n @if (showChat()) {\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"openChat.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.open-chat' | translate | async\"\n >\n <span\n class=\"axm-chat-call-controls__circle\"\n [class.axm-chat-call-controls__circle--light]=\"chatOpen()\"\n >\n <i class=\"fa-solid fa-message\" aria-hidden=\"true\"></i>\n @if (chatUnread()) {\n <span class=\"axm-chat-call-controls__unread\" aria-hidden=\"true\"></span>\n }\n </span>\n </button>\n }\n\n <!-- ----- Screencast only during an active call ----- -->\n @if (showScreencast()) {\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"screencast.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.screencast' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--light\">\n <i class=\"fa-solid fa-desktop\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleVideo.emit()\"\n [attr.aria-label]=\"videoLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"videoEnabled()\">\n <i class=\"fa-solid\" [class.fa-video]=\"videoEnabled()\" [class.fa-video-slash]=\"!videoEnabled()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'videoinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.camera' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"endCall.emit()\"\n [attr.aria-label]=\"hangupLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--danger\">\n <i class=\"fa-solid fa-phone axm-chat-call-controls__hangup\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n <div class=\"axm-chat-call-controls__item\">\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"toggleMute.emit()\"\n [attr.aria-label]=\"muteLabelKey() | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle\" [class.axm-chat-call-controls__circle--light]=\"!micMuted()\">\n <i class=\"fa-solid\" [class.fa-microphone]=\"!micMuted()\" [class.fa-microphone-slash]=\"micMuted()\" aria-hidden=\"true\"></i>\n </span>\n </button>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__chevron\"\n (click)=\"onOpenDeviceMenu($event, 'audioinput')\"\n [attr.aria-label]=\"'@conversation:chat.call.devices.microphone' | translate | async\"\n >\n <i class=\"fa-solid fa-chevron-up\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- ----- Add people on an active group call ----- -->\n @if (showAddPeople()) {\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__action\"\n (click)=\"addPeople.emit()\"\n [attr.aria-label]=\"'@conversation:chat.call.add-people' | translate | async\"\n >\n <span class=\"axm-chat-call-controls__circle axm-chat-call-controls__circle--light\">\n <i class=\"fa-solid fa-user-plus\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n }\n\n <!-- ----- Device switcher ----- -->\n @if (openMenu(); as kind) {\n <button type=\"button\" class=\"axm-chat-call-controls__menu-backdrop\" (click)=\"onCloseDeviceMenu()\"></button>\n <ul class=\"axm-chat-call-controls__menu\" role=\"listbox\">\n @if (menuDevices().length === 0) {\n <li class=\"axm-chat-call-controls__menu-empty\">\n {{ '@conversation:chat.call.devices.empty' | translate | async }}\n </li>\n }\n @for (device of menuDevices(); track device.deviceId) {\n <li>\n <button\n type=\"button\"\n class=\"axm-chat-call-controls__menu-item\"\n [class.axm-chat-call-controls__menu-item--active]=\"device.deviceId === selectedDeviceId(kind)\"\n (click)=\"onSelectDevice(kind, device.deviceId)\"\n >\n {{ device.label || device.deviceId }}\n </button>\n </li>\n }\n </ul>\n }\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
194
+ }], propDecorators: { phase: [{ type: i0.Input, args: [{ isSignal: true, alias: "phase", required: false }] }], videoEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoEnabled", required: false }] }], micMuted: [{ type: i0.Input, args: [{ isSignal: true, alias: "micMuted", required: false }] }], showAddPeople: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAddPeople", required: false }] }], showScreencast: [{ type: i0.Input, args: [{ isSignal: true, alias: "showScreencast", required: false }] }], showChat: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChat", required: false }] }], chatOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatOpen", required: false }] }], chatUnread: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatUnread", required: false }] }], audioDevices: [{ type: i0.Input, args: [{ isSignal: true, alias: "audioDevices", required: false }] }], videoDevices: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoDevices", required: false }] }], selectedAudioDeviceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedAudioDeviceId", required: false }] }], selectedVideoDeviceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedVideoDeviceId", required: false }] }], screencast: [{ type: i0.Output, args: ["screencast"] }], openChat: [{ type: i0.Output, args: ["openChat"] }], toggleVideo: [{ type: i0.Output, args: ["toggleVideo"] }], toggleMute: [{ type: i0.Output, args: ["toggleMute"] }], endCall: [{ type: i0.Output, args: ["endCall"] }], accept: [{ type: i0.Output, args: ["accept"] }], decline: [{ type: i0.Output, args: ["decline"] }], addPeople: [{ type: i0.Output, args: ["addPeople"] }], pickDevice: [{ type: i0.Output, args: ["pickDevice"] }], requestDevices: [{ type: i0.Output, args: ["requestDevices"] }] } });
195
+
196
+ //#region ----- Imports -----
197
+ //#endregion
198
+ //#region ----- Constants -----
199
+ const CHAT_CALL_INCOMING_RING_SRC = 'assets/sounds/ring.mp3';
200
+ const CHAT_CALL_OUTGOING_RING_SRC = 'assets/sounds/phone-call.mp3';
201
+ const CHAT_CALL_OUTGOING_GAP_MS = 2500;
202
+ //#endregion
203
+ //#region ----- Service -----
204
+ /**
205
+ * Plays call audio: looping ringtone for the callee, spaced ringback for the caller.
206
+ */
207
+ class AXMChatCallRingerService {
208
+ constructor() {
209
+ //#region ----- Private State -----
210
+ this.audio = null;
211
+ this.gapTimer = null;
212
+ this.playing = false;
213
+ }
214
+ //#endregion
215
+ //#region ----- Playback -----
216
+ playIncoming() {
217
+ this.#playLooped(CHAT_CALL_INCOMING_RING_SRC);
218
+ }
219
+ playOutgoing() {
220
+ this.#playWithGap(CHAT_CALL_OUTGOING_RING_SRC, CHAT_CALL_OUTGOING_GAP_MS);
221
+ }
222
+ stop() {
223
+ this.playing = false;
224
+ this.#clearGapTimer();
225
+ const audio = this.audio;
226
+ this.audio = null;
227
+ if (!audio) {
228
+ return;
229
+ }
230
+ audio.pause();
231
+ audio.removeAttribute('src');
232
+ audio.load();
233
+ }
234
+ #playLooped(src) {
235
+ this.stop();
236
+ if (typeof Audio === 'undefined') {
237
+ return;
238
+ }
239
+ this.playing = true;
240
+ const audio = new Audio(src);
241
+ audio.loop = true;
242
+ void audio.play().catch(() => {
243
+ // Autoplay may be blocked until a user gesture; the call UI still shows.
244
+ });
245
+ this.audio = audio;
246
+ }
247
+ #playWithGap(src, gapMs) {
248
+ this.stop();
249
+ if (typeof Audio === 'undefined') {
250
+ return;
251
+ }
252
+ this.playing = true;
253
+ this.#playOutgoingClip(src, gapMs);
254
+ }
255
+ #playOutgoingClip(src, gapMs) {
256
+ if (!this.playing) {
257
+ return;
258
+ }
259
+ const previous = this.audio;
260
+ this.audio = null;
261
+ if (previous) {
262
+ previous.pause();
263
+ previous.removeAttribute('src');
264
+ previous.load();
265
+ }
266
+ const audio = new Audio(src);
267
+ audio.loop = false;
268
+ audio.addEventListener('ended', () => {
269
+ if (!this.playing) {
270
+ return;
271
+ }
272
+ this.#clearGapTimer();
273
+ this.gapTimer = setTimeout(() => {
274
+ this.gapTimer = null;
275
+ this.#playOutgoingClip(src, gapMs);
276
+ }, gapMs);
277
+ }, { once: true });
278
+ void audio.play().catch(() => {
279
+ // Autoplay may be blocked until a user gesture; the call UI still shows.
280
+ });
281
+ this.audio = audio;
282
+ }
283
+ #clearGapTimer() {
284
+ if (this.gapTimer == null) {
285
+ return;
286
+ }
287
+ clearTimeout(this.gapTimer);
288
+ this.gapTimer = null;
289
+ }
290
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallRingerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
291
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallRingerService, providedIn: 'root' }); }
292
+ }
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallRingerService, decorators: [{
294
+ type: Injectable,
295
+ args: [{ providedIn: 'root' }]
296
+ }] });
297
+
298
+ //#region ----- Imports -----
299
+ //#endregion
300
+ //#region ----- Client -----
301
+ /**
302
+ * Posts call signaling to the conversation API (built-in realtime fan-out on server).
303
+ */
304
+ class AXMChatCallSignalClient {
305
+ constructor() {
306
+ this.http = inject(HttpClient);
307
+ this.rootConfig = inject(AXP_ROOT_CONFIG_TOKEN);
308
+ }
309
+ async signal(request) {
310
+ const conversationId = request.conversationId.trim();
311
+ const url = `${this.rootConfig.baseUrl}/v1/global/conversation/conversations/${encodeURIComponent(conversationId)}/calls/signal`;
312
+ return firstValueFrom(this.http.post(url, {
313
+ action: request.action,
314
+ media: request.media,
315
+ callId: request.callId,
316
+ targetUserIds: request.targetUserIds,
317
+ }, { withCredentials: true }));
318
+ }
319
+ async log(request) {
320
+ const conversationId = request.conversationId.trim();
321
+ const url = `${this.rootConfig.baseUrl}/v1/global/conversation/conversations/${encodeURIComponent(conversationId)}/calls/log`;
322
+ return firstValueFrom(this.http.post(url, {
323
+ outcome: request.outcome,
324
+ media: request.media,
325
+ callId: request.callId,
326
+ durationSec: request.durationSec,
327
+ initiatorUserId: request.initiatorUserId,
328
+ joinedUserIds: request.joinedUserIds,
329
+ absentUserIds: request.absentUserIds,
330
+ isGroup: request.isGroup,
331
+ }, { withCredentials: true }));
332
+ }
333
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSignalClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
334
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSignalClient, providedIn: 'root' }); }
335
+ }
336
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSignalClient, decorators: [{
337
+ type: Injectable,
338
+ args: [{ providedIn: 'root' }]
339
+ }] });
340
+
341
+ //#region ----- Constants -----
342
+ /** Same palette keys as `AXPAvatarComponent` (`avatar.component.ts`). */
343
+ const AXM_CHAT_CALL_AVATAR_COLOR_KEYS = [
344
+ 'primary',
345
+ 'secondary',
346
+ 'danger',
347
+ 'warning',
348
+ 'success',
349
+ 'accent1',
350
+ 'accent2',
351
+ 'accent3',
352
+ ];
353
+ //#endregion
354
+ //#region ----- Helpers -----
355
+ function hashString(value) {
356
+ let hash = 0;
357
+ for (let index = 0; index < value.length; index += 1) {
358
+ hash = (hash << 5) - hash + value.charCodeAt(index);
359
+ hash |= 0;
360
+ }
361
+ return Math.abs(hash);
362
+ }
363
+ /** Stable avatar accent key per participant name — aligned with `axp-avatar` color pick. */
364
+ function axmChatCallTileAvatarColor(participantName) {
365
+ const scoped = participantName.trim() || '?';
366
+ const index = hashString(scoped) % AXM_CHAT_CALL_AVATAR_COLOR_KEYS.length;
367
+ return AXM_CHAT_CALL_AVATAR_COLOR_KEYS[index];
368
+ }
369
+ //#endregion
370
+
371
+ //#region ----- Imports -----
372
+ /**
373
+ * Attaches a LiveKit track to the host media element.
374
+ */
375
+ class AXMChatCallVideoAttachDirective {
376
+ //#endregion
377
+ //#region ----- Lifecycle -----
378
+ constructor() {
379
+ //#region ----- Inputs -----
380
+ this.axmChatCallTrack = input(null, /* @ts-ignore */
381
+ ...(ngDevMode ? [{ debugName: "axmChatCallTrack" }] : /* istanbul ignore next */ []));
382
+ //#endregion
383
+ //#region ----- Services & Dependencies -----
384
+ this.host = inject((ElementRef));
385
+ effect((onCleanup) => {
386
+ const track = this.axmChatCallTrack();
387
+ const element = this.host.nativeElement;
388
+ if (!track) {
389
+ element.srcObject = null;
390
+ return;
391
+ }
392
+ track.attach(element);
393
+ void element.play().catch(() => undefined);
394
+ onCleanup(() => {
395
+ track.detach(element);
396
+ });
397
+ });
398
+ }
399
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallVideoAttachDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
400
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: AXMChatCallVideoAttachDirective, isStandalone: true, selector: "video[axmChatCallTrack]", inputs: { axmChatCallTrack: { classPropertyName: "axmChatCallTrack", publicName: "axmChatCallTrack", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
401
+ }
402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallVideoAttachDirective, decorators: [{
403
+ type: Directive,
404
+ args: [{
405
+ selector: 'video[axmChatCallTrack]',
406
+ }]
407
+ }], ctorParameters: () => [], propDecorators: { axmChatCallTrack: [{ type: i0.Input, args: [{ isSignal: true, alias: "axmChatCallTrack", required: false }] }] } });
408
+
409
+ //#region ----- Imports -----
410
+ //#endregion
411
+ //#region ----- Component -----
412
+ class AXMChatCallParticipantTileComponent {
413
+ constructor() {
414
+ //#region ----- Inputs -----
415
+ this.tile = input.required(/* @ts-ignore */
416
+ ...(ngDevMode ? [{ debugName: "tile" }] : /* istanbul ignore next */ []));
417
+ this.videoTrack = input(null, /* @ts-ignore */
418
+ ...(ngDevMode ? [{ debugName: "videoTrack" }] : /* istanbul ignore next */ []));
419
+ /** Sidebar thumbnail size during screen-share presentation layout. */
420
+ this.compact = input(false, /* @ts-ignore */
421
+ ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
422
+ //#endregion
423
+ //#region ----- Computed Properties -----
424
+ this.hasVideo = computed(() => Boolean(this.videoTrack()), /* @ts-ignore */
425
+ ...(ngDevMode ? [{ debugName: "hasVideo" }] : /* istanbul ignore next */ []));
426
+ this.hasAvatarImage = computed(() => Boolean((this.tile().avatar ?? '').trim()), /* @ts-ignore */
427
+ ...(ngDevMode ? [{ debugName: "hasAvatarImage" }] : /* istanbul ignore next */ []));
428
+ this.avatarColorKey = computed(() => axmChatCallTileAvatarColor(this.tile().name), /* @ts-ignore */
429
+ ...(ngDevMode ? [{ debugName: "avatarColorKey" }] : /* istanbul ignore next */ []));
430
+ this.avatarSize = computed(() => {
431
+ if (this.hasVideo()) {
432
+ return 0;
433
+ }
434
+ return this.compact() ? 40 : 88;
435
+ }, /* @ts-ignore */
436
+ ...(ngDevMode ? [{ debugName: "avatarSize" }] : /* istanbul ignore next */ []));
437
+ this.showSpeakingRing = computed(() => {
438
+ const tile = this.tile();
439
+ return !this.hasVideo() && !tile.micMuted && tile.audioLevel > 0.02;
440
+ }, /* @ts-ignore */
441
+ ...(ngDevMode ? [{ debugName: "showSpeakingRing" }] : /* istanbul ignore next */ []));
442
+ this.speakingRingLevel = computed(() => {
443
+ const tile = this.tile();
444
+ if (this.hasVideo() || tile.micMuted || tile.audioLevel <= 0.02) {
445
+ return 0;
446
+ }
447
+ return Math.min(10, Math.round(tile.audioLevel * 10));
448
+ }, /* @ts-ignore */
449
+ ...(ngDevMode ? [{ debugName: "speakingRingLevel" }] : /* istanbul ignore next */ []));
450
+ }
451
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallParticipantTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
452
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatCallParticipantTileComponent, isStandalone: true, selector: "axm-chat-call-participant-tile", inputs: { tile: { classPropertyName: "tile", publicName: "tile", isSignal: true, isRequired: true, transformFunction: null }, videoTrack: { classPropertyName: "videoTrack", publicName: "videoTrack", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.axm-chat-call-participant-tile--rail": "compact()" }, classAttribute: "axm-chat-call-participant-tile" }, ngImport: i0, template: "<div\n class=\"axm-chat-call-tile\"\n [class.axm-chat-call-tile--video]=\"hasVideo()\"\n [class.axm-chat-call-tile--speaking]=\"showSpeakingRing()\"\n [class.axm-chat-call-tile--compact]=\"compact()\"\n>\n <!-- ----- Blurred profile image background (camera off) ----- -->\n @if (!hasVideo() && hasAvatarImage()) {\n <img class=\"axm-chat-call-tile__bg-blur\" [src]=\"tile().avatar\" alt=\"\" />\n }\n <!-- ----- Accent gradient when no profile image ----- -->\n @else if (!hasVideo()) {\n <div\n class=\"axm-chat-call-tile__bg-color\"\n [attr.data-avatar-color]=\"avatarColorKey()\"\n ></div>\n }\n\n <!-- ----- Live camera feed ----- -->\n @if (videoTrack(); as track) {\n <video\n class=\"axm-chat-call-tile__video\"\n autoplay\n playsinline\n [muted]=\"tile().isSelf\"\n [axmChatCallTrack]=\"track\"\n ></video>\n }\n <!-- ----- Centered avatar when camera is off ----- -->\n @else {\n <div class=\"axm-chat-call-tile__avatar-stack\">\n @if (showSpeakingRing()) {\n <div class=\"axm-chat-call-tile__speaking-ring\" [attr.data-level]=\"speakingRingLevel()\"></div>\n }\n <axp-avatar [size]=\"avatarSize()\" [fullName]=\"tile().name\" [src]=\"tile().avatar ?? ''\" />\n </div>\n }\n\n <!-- ----- Camera off badge ----- -->\n @if (!tile().videoEnabled) {\n <span class=\"axm-chat-call-tile__badge axm-chat-call-tile__badge--camera\" aria-hidden=\"true\">\n <i class=\"fa-solid fa-video-slash\"></i>\n </span>\n }\n\n <span class=\"axm-chat-call-tile__name\">\n {{ tile().name }}\n @if (tile().isSelf) {\n ({{ '@conversation:chat.call.you' | translate | async }})\n }\n </span>\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "directive", type: AXMChatCallVideoAttachDirective, selector: "video[axmChatCallTrack]", inputs: ["axmChatCallTrack"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
453
+ }
454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallParticipantTileComponent, decorators: [{
455
+ type: Component,
456
+ args: [{ selector: 'axm-chat-call-participant-tile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
457
+ class: 'axm-chat-call-participant-tile',
458
+ '[class.axm-chat-call-participant-tile--rail]': 'compact()',
459
+ }, imports: [AXPAvatarComponent, AXDecoratorModule, AXMChatCallVideoAttachDirective, AXTranslationModule, AsyncPipe], template: "<div\n class=\"axm-chat-call-tile\"\n [class.axm-chat-call-tile--video]=\"hasVideo()\"\n [class.axm-chat-call-tile--speaking]=\"showSpeakingRing()\"\n [class.axm-chat-call-tile--compact]=\"compact()\"\n>\n <!-- ----- Blurred profile image background (camera off) ----- -->\n @if (!hasVideo() && hasAvatarImage()) {\n <img class=\"axm-chat-call-tile__bg-blur\" [src]=\"tile().avatar\" alt=\"\" />\n }\n <!-- ----- Accent gradient when no profile image ----- -->\n @else if (!hasVideo()) {\n <div\n class=\"axm-chat-call-tile__bg-color\"\n [attr.data-avatar-color]=\"avatarColorKey()\"\n ></div>\n }\n\n <!-- ----- Live camera feed ----- -->\n @if (videoTrack(); as track) {\n <video\n class=\"axm-chat-call-tile__video\"\n autoplay\n playsinline\n [muted]=\"tile().isSelf\"\n [axmChatCallTrack]=\"track\"\n ></video>\n }\n <!-- ----- Centered avatar when camera is off ----- -->\n @else {\n <div class=\"axm-chat-call-tile__avatar-stack\">\n @if (showSpeakingRing()) {\n <div class=\"axm-chat-call-tile__speaking-ring\" [attr.data-level]=\"speakingRingLevel()\"></div>\n }\n <axp-avatar [size]=\"avatarSize()\" [fullName]=\"tile().name\" [src]=\"tile().avatar ?? ''\" />\n </div>\n }\n\n <!-- ----- Camera off badge ----- -->\n @if (!tile().videoEnabled) {\n <span class=\"axm-chat-call-tile__badge axm-chat-call-tile__badge--camera\" aria-hidden=\"true\">\n <i class=\"fa-solid fa-video-slash\"></i>\n </span>\n }\n\n <span class=\"axm-chat-call-tile__name\">\n {{ tile().name }}\n @if (tile().isSelf) {\n ({{ '@conversation:chat.call.you' | translate | async }})\n }\n </span>\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
460
+ }], propDecorators: { tile: [{ type: i0.Input, args: [{ isSignal: true, alias: "tile", required: true }] }], videoTrack: [{ type: i0.Input, args: [{ isSignal: true, alias: "videoTrack", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }] } });
461
+
462
+ //#region ----- Imports -----
463
+ //#endregion
464
+ //#region ----- Component -----
465
+ /**
466
+ * Message list + composer for the call-session chat drawer.
467
+ * The parent selects the call conversation in {@link AXConversationService} before rendering.
468
+ */
469
+ class AXMChatCallInCallChatComponent {
470
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallInCallChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
471
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXMChatCallInCallChatComponent, isStandalone: true, selector: "axm-chat-call-in-call-chat", ngImport: i0, template: "<div axConversationContainer class=\"axm-chat-call-in-call-chat\">\n <ax-conversation-message-list class=\"axm-chat-call-in-call-chat__messages\" style=\"direction: ltr\">\n <div ax-conversation-message-list-no-active class=\"axm-chat-call-in-call-chat__no-active\">\n <axm-chat-empty-state-host [compact]=\"true\" />\n </div>\n <axm-chat-empty-state-host ax-conversation-message-list-empty [compact]=\"true\" />\n </ax-conversation-message-list>\n <ax-conversation-composer class=\"axm-chat-call-in-call-chat__composer\" />\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: AXConversationContainerDirective, selector: "[axConversationContainer]" }, { kind: "component", type: AXConversationMessageListComponent, selector: "ax-conversation-message-list", outputs: ["messageAction"] }, { kind: "component", type: AXConversationComposerComponent, selector: "ax-conversation-composer", outputs: ["messageSent", "generationCancelled", "emojiClick", "attachClick", "voiceClick"] }, { kind: "component", type: AXMChatEmptyStateHostComponent, selector: "axm-chat-empty-state-host", inputs: ["compact", "initialAssistId", "entityId", "entityType", "sendStarterPromptsInPlace"], outputs: ["conversationCreated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
472
+ }
473
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallInCallChatComponent, decorators: [{
474
+ type: Component,
475
+ args: [{ selector: 'axm-chat-call-in-call-chat', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
476
+ AXConversationContainerDirective,
477
+ AXConversationMessageListComponent,
478
+ AXConversationComposerComponent,
479
+ AXMChatEmptyStateHostComponent,
480
+ ], template: "<div axConversationContainer class=\"axm-chat-call-in-call-chat\">\n <ax-conversation-message-list class=\"axm-chat-call-in-call-chat__messages\" style=\"direction: ltr\">\n <div ax-conversation-message-list-no-active class=\"axm-chat-call-in-call-chat__no-active\">\n <axm-chat-empty-state-host [compact]=\"true\" />\n </div>\n <axm-chat-empty-state-host ax-conversation-message-list-empty [compact]=\"true\" />\n </ax-conversation-message-list>\n <ax-conversation-composer class=\"axm-chat-call-in-call-chat__composer\" />\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
481
+ }] });
482
+
483
+ //#region ----- Imports -----
484
+ //#endregion
485
+ //#region ----- Component -----
486
+ /**
487
+ * Call-session popup backed by RTC/LiveKit.
488
+ */
489
+ class AXMChatCallSessionPageComponent extends AXBasePageComponent {
490
+ //#endregion
491
+ //#region ----- Stage Helpers -----
492
+ resolveVideoTrack(tile) {
493
+ if (!tile.videoEnabled) {
494
+ return null;
495
+ }
496
+ if (tile.isSelf) {
497
+ return this.localVideoTrack() ?? null;
498
+ }
499
+ const remote = this.remoteVideos().find((item) => item.participantId === tile.id);
500
+ return remote?.track ?? null;
501
+ }
502
+ //#endregion
503
+ //#region ----- Lifecycle -----
504
+ constructor() {
505
+ super();
506
+ this.sessionMedia = 'voice';
507
+ this.sessionPhase = 'outgoing-waiting';
508
+ //#endregion
509
+ //#region ----- Services & Dependencies -----
510
+ this.userApi = inject(AXMChatUserApi);
511
+ this.conversationApi = inject(AXMChatEntityConversationApi);
512
+ this.chatConversationApi = inject(AXMChatConversationApi);
513
+ this.conversationService = inject(AXConversationService);
514
+ this.layoutBuilder = inject(AXPLayoutBuilderService);
515
+ this.toastService = inject(AXToastService);
516
+ this.translationService = inject(AXTranslationService);
517
+ this.rtc = inject(AXMChatCallRtcService);
518
+ this.callSignal = inject(AXMChatCallSignalClient);
519
+ this.signalInbox = inject(AXMChatCallRtcSignalInboxService);
520
+ this.activeCallSessions = inject(AXMChatCallActiveSessionService);
521
+ this.callEvents = inject(AXMChatCallEventsService);
522
+ this.realtimeBus = inject(AXMConversationRealtimeBus);
523
+ this.conversationStore = inject(AXMConversationEntityStoreService);
524
+ this.ringer = inject(AXMChatCallRingerService);
525
+ //#endregion
526
+ //#region ----- State Signals -----
527
+ this.loading = signal(true, /* @ts-ignore */
528
+ ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
529
+ this.error = signal(false, /* @ts-ignore */
530
+ ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
531
+ this.errorMessage = signal(null, /* @ts-ignore */
532
+ ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
533
+ this.conversation = signal(null, /* @ts-ignore */
534
+ ...(ngDevMode ? [{ debugName: "conversation" }] : /* istanbul ignore next */ []));
535
+ this.phase = signal('outgoing-waiting', /* @ts-ignore */
536
+ ...(ngDevMode ? [{ debugName: "phase" }] : /* istanbul ignore next */ []));
537
+ this.mediaType = signal('voice', /* @ts-ignore */
538
+ ...(ngDevMode ? [{ debugName: "mediaType" }] : /* istanbul ignore next */ []));
539
+ this.videoEnabled = signal(false, /* @ts-ignore */
540
+ ...(ngDevMode ? [{ debugName: "videoEnabled" }] : /* istanbul ignore next */ []));
541
+ this.micMuted = signal(false, /* @ts-ignore */
542
+ ...(ngDevMode ? [{ debugName: "micMuted" }] : /* istanbul ignore next */ []));
543
+ this.currentUserId = signal(null, /* @ts-ignore */
544
+ ...(ngDevMode ? [{ debugName: "currentUserId" }] : /* istanbul ignore next */ []));
545
+ this.callId = signal(null, /* @ts-ignore */
546
+ ...(ngDevMode ? [{ debugName: "callId" }] : /* istanbul ignore next */ []));
547
+ this.ringTimeoutId = null;
548
+ this.outcomeSub = null;
549
+ this.callEventsSub = null;
550
+ this.closing = false;
551
+ this.accepting = false;
552
+ this.activeSince = null;
553
+ /** Wall-clock when this session UI opened — used for ring duration on cancelled/missed/declined. */
554
+ this.sessionOpenedAt = Date.now();
555
+ this.initiatorUserId = null;
556
+ this.audioDevices = signal([], /* @ts-ignore */
557
+ ...(ngDevMode ? [{ debugName: "audioDevices" }] : /* istanbul ignore next */ []));
558
+ this.videoDevices = signal([], /* @ts-ignore */
559
+ ...(ngDevMode ? [{ debugName: "videoDevices" }] : /* istanbul ignore next */ []));
560
+ this.selectedAudioDeviceId = signal(null, /* @ts-ignore */
561
+ ...(ngDevMode ? [{ debugName: "selectedAudioDeviceId" }] : /* istanbul ignore next */ []));
562
+ this.selectedVideoDeviceId = signal(null, /* @ts-ignore */
563
+ ...(ngDevMode ? [{ debugName: "selectedVideoDeviceId" }] : /* istanbul ignore next */ []));
564
+ this.chatDrawerOpen = signal(false, /* @ts-ignore */
565
+ ...(ngDevMode ? [{ debugName: "chatDrawerOpen" }] : /* istanbul ignore next */ []));
566
+ this.chatUnread = signal(false, /* @ts-ignore */
567
+ ...(ngDevMode ? [{ debugName: "chatUnread" }] : /* istanbul ignore next */ []));
568
+ this.savedActiveConversationId = undefined;
569
+ this.pendingGroupInviteUserIds = new Set();
570
+ this.groupUpgradeInviterUserId = null;
571
+ this.forkConversationSub = null;
572
+ this.localVideoTrack = this.rtc.localVideoTrack;
573
+ this.remoteVideos = this.rtc.remoteVideos;
574
+ this.localScreenShareTrack = this.rtc.localScreenShareTrack;
575
+ this.remoteScreenShares = this.rtc.remoteScreenShares;
576
+ //#endregion
577
+ //#region ----- Computed Properties -----
578
+ this.peerDisplayName = computed(() => {
579
+ const conversation = this.conversation();
580
+ if (!conversation) {
581
+ return '';
582
+ }
583
+ return axmResolveConversationListAvatar(conversation).title;
584
+ }, /* @ts-ignore */
585
+ ...(ngDevMode ? [{ debugName: "peerDisplayName" }] : /* istanbul ignore next */ []));
586
+ this.peerAvatarSrc = computed(() => {
587
+ const conversation = this.conversation();
588
+ if (!conversation) {
589
+ return '';
590
+ }
591
+ return axmResolveConversationListAvatar(conversation).avatar ?? '';
592
+ }, /* @ts-ignore */
593
+ ...(ngDevMode ? [{ debugName: "peerAvatarSrc" }] : /* istanbul ignore next */ []));
594
+ this.showStage = computed(() => {
595
+ if (this.phase() === 'active' || this.mediaType() === 'video' || this.videoEnabled()) {
596
+ return true;
597
+ }
598
+ return (this.remoteVideos().length > 0 ||
599
+ this.remoteScreenShares().length > 0 ||
600
+ Boolean(this.localScreenShareTrack()));
601
+ }, /* @ts-ignore */
602
+ ...(ngDevMode ? [{ debugName: "showStage" }] : /* istanbul ignore next */ []));
603
+ this.activeScreenShare = computed(() => {
604
+ const local = this.localScreenShareTrack();
605
+ const currentUserId = this.currentUserId();
606
+ const conversation = this.conversation();
607
+ if (local && currentUserId) {
608
+ const self = conversation?.participants?.find((participant) => participant.id === currentUserId);
609
+ return {
610
+ participantId: currentUserId,
611
+ participantName: self?.name ?? 'You',
612
+ isSelf: true,
613
+ track: local,
614
+ };
615
+ }
616
+ const remote = this.remoteScreenShares()[0];
617
+ if (!remote) {
618
+ return null;
619
+ }
620
+ return {
621
+ participantId: remote.participantId,
622
+ participantName: remote.participantName,
623
+ isSelf: false,
624
+ track: remote.track,
625
+ };
626
+ }, /* @ts-ignore */
627
+ ...(ngDevMode ? [{ debugName: "activeScreenShare" }] : /* istanbul ignore next */ []));
628
+ this.showScreenShareLayout = computed(() => Boolean(this.activeScreenShare()), /* @ts-ignore */
629
+ ...(ngDevMode ? [{ debugName: "showScreenShareLayout" }] : /* istanbul ignore next */ []));
630
+ this.showParticipantGrid = computed(() => {
631
+ if (!this.showStage()) {
632
+ return false;
633
+ }
634
+ if (this.phase() === 'active') {
635
+ return true;
636
+ }
637
+ const phase = this.phase();
638
+ return ((phase === 'connecting' || phase === 'outgoing-waiting') &&
639
+ (this.videoEnabled() || this.remoteVideos().length > 0));
640
+ }, /* @ts-ignore */
641
+ ...(ngDevMode ? [{ debugName: "showParticipantGrid" }] : /* istanbul ignore next */ []));
642
+ /** Voice ring / waiting without a video stage — center the profile block. */
643
+ this.idleLayout = computed(() => {
644
+ if (this.showParticipantGrid()) {
645
+ return false;
646
+ }
647
+ if (this.showStage()) {
648
+ return false;
649
+ }
650
+ const phase = this.phase();
651
+ return phase === 'incoming' || phase === 'outgoing-waiting' || phase === 'connecting';
652
+ }, /* @ts-ignore */
653
+ ...(ngDevMode ? [{ debugName: "idleLayout" }] : /* istanbul ignore next */ []));
654
+ this.headerAvatarSize = computed(() => 128, /* @ts-ignore */
655
+ ...(ngDevMode ? [{ debugName: "headerAvatarSize" }] : /* istanbul ignore next */ []));
656
+ this.phaseTextKey = computed(() => {
657
+ switch (this.phase()) {
658
+ case 'incoming':
659
+ return '@conversation:chat.call.is-calling';
660
+ case 'connecting':
661
+ return '@conversation:chat.call.connecting';
662
+ case 'active':
663
+ return '@conversation:chat.call.connected';
664
+ default:
665
+ return '@conversation:chat.call.waiting';
666
+ }
667
+ }, /* @ts-ignore */
668
+ ...(ngDevMode ? [{ debugName: "phaseTextKey" }] : /* istanbul ignore next */ []));
669
+ this.stageTiles = computed(() => {
670
+ const conversation = this.conversation();
671
+ const currentUserId = this.currentUserId();
672
+ if (!conversation || !currentUserId) {
673
+ return [];
674
+ }
675
+ const audioLevels = this.rtc.participantAudioLevels();
676
+ const remoteMicMuted = this.rtc.remoteMicMuted();
677
+ const remoteVideoIds = new Set(this.remoteVideos().map((item) => item.participantId));
678
+ const buildTile = (participant, isSelf) => {
679
+ const id = participant.id;
680
+ const micMuted = isSelf ? this.micMuted() : (remoteMicMuted[id] ?? false);
681
+ const videoEnabled = isSelf ? this.videoEnabled() : remoteVideoIds.has(id);
682
+ const audioLevel = micMuted ? 0 : Math.min(1, Math.max(0, audioLevels[id] ?? 0));
683
+ return {
684
+ id,
685
+ name: participant.name,
686
+ avatar: participant.avatar,
687
+ isSelf,
688
+ micMuted,
689
+ videoEnabled,
690
+ audioLevel,
691
+ };
692
+ };
693
+ const remotes = (conversation.participants ?? []).filter((participant) => participant.id !== currentUserId);
694
+ const self = conversation.participants?.find((participant) => participant.id === currentUserId);
695
+ const tiles = remotes.map((participant) => buildTile(participant, false));
696
+ tiles.push(buildTile({
697
+ id: currentUserId,
698
+ name: self?.name ?? 'You',
699
+ avatar: self?.avatar,
700
+ }, true));
701
+ return tiles;
702
+ }, /* @ts-ignore */
703
+ ...(ngDevMode ? [{ debugName: "stageTiles" }] : /* istanbul ignore next */ []));
704
+ effect(() => {
705
+ const remoteCount = this.rtc.remoteParticipantCount();
706
+ const connectionState = this.rtc.connectionState();
707
+ const phase = this.phase();
708
+ if (connectionState === ConnectionState.Connected &&
709
+ remoteCount > 0 &&
710
+ (phase === 'outgoing-waiting' || phase === 'connecting')) {
711
+ this.#clearRingTimeout();
712
+ this.ringer.stop();
713
+ this.phase.set('active');
714
+ this.activeSince = Date.now();
715
+ void this.rtc.ensureAudioPlayback();
716
+ }
717
+ });
718
+ effect(() => {
719
+ if (this.phase() === 'active' && this.activeSince == null) {
720
+ this.activeSince = Date.now();
721
+ }
722
+ });
723
+ }
724
+ ngOnInit() {
725
+ this.outcomeSub = this.realtimeBus.messageStream$.subscribe((message) => {
726
+ const log = axmReadChatCallLog(message);
727
+ const currentCallId = this.callId();
728
+ if (!log || !currentCallId || log.callId !== currentCallId) {
729
+ const conversationId = this.conversation()?.id?.trim();
730
+ const selfId = this.currentUserId();
731
+ if (conversationId &&
732
+ message.conversationId === conversationId &&
733
+ message.senderId !== selfId &&
734
+ !this.chatDrawerOpen()) {
735
+ this.chatUnread.set(true);
736
+ }
737
+ return;
738
+ }
739
+ void this.#closeFromRemoteLog();
740
+ });
741
+ this.forkConversationSub = this.realtimeBus.conversationCreated$.subscribe((conversation) => {
742
+ void this.#trySwitchToForkedGroupConversation(conversation);
743
+ });
744
+ this.callEventsSub = this.callEvents.events$.subscribe((payload) => {
745
+ const currentCallId = this.callId();
746
+ if (!currentCallId || payload.callId !== currentCallId) {
747
+ return;
748
+ }
749
+ const selfId = this.currentUserId();
750
+ const fromSelf = Boolean(selfId && payload.fromUserId === selfId);
751
+ if (fromSelf) {
752
+ if (payload.action === 'accept' ||
753
+ payload.action === 'decline' ||
754
+ payload.action === 'cancel' ||
755
+ payload.action === 'end') {
756
+ const phase = this.phase();
757
+ if (phase === 'incoming' || phase === 'outgoing-waiting') {
758
+ void this.#closeFromSiblingDevice();
759
+ }
760
+ }
761
+ return;
762
+ }
763
+ if (payload.action === 'accept') {
764
+ this.activeCallSessions.addParticipant(currentCallId, payload.fromUserId);
765
+ void this.#onPeerAcceptedGroupUpgrade(payload.fromUserId);
766
+ void this.#joinForkedGroupAfterPeerAccept(payload.fromUserId);
767
+ void this.#onPeerAccepted();
768
+ return;
769
+ }
770
+ if (payload.action === 'end') {
771
+ void this.#closeFromRemoteEnd();
772
+ return;
773
+ }
774
+ if (payload.action === 'decline' || payload.action === 'cancel') {
775
+ void this.#closeFromRemoteLog();
776
+ }
777
+ });
778
+ void this.#bootstrap();
779
+ }
780
+ ngOnDestroy() {
781
+ this.ringer.stop();
782
+ this.#clearRingTimeout();
783
+ this.outcomeSub?.unsubscribe();
784
+ this.forkConversationSub?.unsubscribe();
785
+ this.callEventsSub?.unsubscribe();
786
+ this.#restoreCallConversation();
787
+ if (!this.closing) {
788
+ const phase = this.phase();
789
+ if (phase === 'incoming') {
790
+ void this.#logOutcome('declined', { durationSec: this.#elapsedDurationSec() });
791
+ }
792
+ else if (phase === 'outgoing-waiting') {
793
+ void this.#logOutcome('cancelled', { durationSec: this.#elapsedDurationSec() });
794
+ }
795
+ }
796
+ this.signalInbox.releaseCall(this.callId());
797
+ this.activeCallSessions.release(this.callId());
798
+ void this.rtc.disconnect();
799
+ super.ngOnDestroy();
800
+ }
801
+ //#endregion
802
+ //#region ----- Event Handlers -----
803
+ onToggleVideo() {
804
+ void this.#setVideoEnabled(!this.videoEnabled());
805
+ }
806
+ onToggleMute() {
807
+ const nextMuted = !this.micMuted();
808
+ this.micMuted.set(nextMuted);
809
+ void this.rtc.setMicrophoneEnabled(!nextMuted);
810
+ if (!nextMuted) {
811
+ void this.rtc.ensureAudioPlayback();
812
+ }
813
+ }
814
+ async onScreencast() {
815
+ try {
816
+ await this.rtc.toggleScreenShare(!this.rtc.isScreenSharing());
817
+ }
818
+ catch {
819
+ const message = await this.translationService.translateAsync('@conversation:chat.call.media-error');
820
+ this.#toast(message, 'danger');
821
+ }
822
+ }
823
+ onEndCall() {
824
+ if (this.phase() === 'outgoing-waiting') {
825
+ void this.#finishWithLog('cancelled');
826
+ return;
827
+ }
828
+ void this.#endActiveCall();
829
+ }
830
+ onAccept() {
831
+ void this.#acceptIncoming();
832
+ }
833
+ onDecline() {
834
+ void this.#finishWithLog('declined');
835
+ }
836
+ onToggleChatDrawer() {
837
+ this.chatDrawerOpen.update((open) => {
838
+ const next = !open;
839
+ if (next) {
840
+ this.chatUnread.set(false);
841
+ void this.#openCallChatDrawer();
842
+ }
843
+ return next;
844
+ });
845
+ }
846
+ async onAddPeople() {
847
+ const conversation = this.conversation();
848
+ const callId = this.callId();
849
+ const currentUserId = this.currentUserId();
850
+ if (!conversation?.id || !callId || !currentUserId || this.phase() !== 'active') {
851
+ return;
852
+ }
853
+ const conversationId = conversation.id.trim();
854
+ const picked = await axmOpenChatCallAddPeopleDialog(this.layoutBuilder, this.translationService);
855
+ if (!picked) {
856
+ return;
857
+ }
858
+ const inCallIds = new Set([currentUserId, ...this.rtc.getConnectedParticipantIds()]);
859
+ const targetUserIds = picked.filter((userId) => !inCallIds.has(userId));
860
+ if (!targetUserIds.length) {
861
+ const message = await this.translationService.translateAsync('@conversation:chat.call.add-people-all-in-call');
862
+ this.#toast(message, 'default');
863
+ return;
864
+ }
865
+ try {
866
+ const participantIds = new Set((conversation.participants ?? []).map((participant) => participant.id));
867
+ const toAddToConversation = targetUserIds.filter((userId) => !participantIds.has(userId));
868
+ const shouldDeferGroupUpgrade = axmShouldForkPrivateToGroup(conversation.type, conversation.participants?.length ?? 0, toAddToConversation);
869
+ if (shouldDeferGroupUpgrade) {
870
+ for (const userId of targetUserIds) {
871
+ this.pendingGroupInviteUserIds.add(userId);
872
+ }
873
+ this.groupUpgradeInviterUserId = currentUserId;
874
+ }
875
+ else if (toAddToConversation.length) {
876
+ const updated = await this.conversationApi.addParticipants(conversationId, toAddToConversation);
877
+ this.conversation.set(updated);
878
+ }
879
+ await this.callSignal.signal({
880
+ conversationId,
881
+ action: 'invite',
882
+ media: this.mediaType(),
883
+ callId,
884
+ targetUserIds,
885
+ });
886
+ this.#trackCallParticipants(targetUserIds);
887
+ const message = await this.translationService.translateAsync('@conversation:chat.call.add-people-success');
888
+ this.#toast(message, 'success');
889
+ }
890
+ catch (error) {
891
+ const fallback = await this.translationService.translateAsync('@conversation:chat.call.add-people-error');
892
+ this.#toast(error instanceof Error && error.message ? error.message : fallback, 'danger');
893
+ }
894
+ }
895
+ onRequestDevices(kind) {
896
+ void this.#refreshDevices(kind);
897
+ }
898
+ onPickDevice(choice) {
899
+ if (choice.kind === 'audioinput') {
900
+ this.selectedAudioDeviceId.set(choice.deviceId);
901
+ }
902
+ else {
903
+ this.selectedVideoDeviceId.set(choice.deviceId);
904
+ }
905
+ void this.rtc.switchInputDevice(choice.kind, choice.deviceId);
906
+ }
907
+ //#endregion
908
+ //#region ----- Bootstrap -----
909
+ async #bootstrap() {
910
+ const conversation = this.sessionConversation;
911
+ const conversationId = conversation?.id?.trim();
912
+ const media = this.sessionMedia === 'video' ? 'video' : 'voice';
913
+ const phase = this.sessionPhase === 'incoming' ||
914
+ this.sessionPhase === 'active' ||
915
+ this.sessionPhase === 'connecting' ||
916
+ this.sessionPhase === 'outgoing-waiting'
917
+ ? this.sessionPhase
918
+ : 'outgoing-waiting';
919
+ this.mediaType.set(media);
920
+ this.phase.set(phase);
921
+ this.videoEnabled.set(media === 'video');
922
+ this.callId.set(this.sessionCallId?.trim() || createRandomUuid());
923
+ this.activeCallSessions.engage(this.callId());
924
+ if (!conversation || !conversationId) {
925
+ this.loading.set(false);
926
+ this.error.set(true);
927
+ return;
928
+ }
929
+ this.loading.set(true);
930
+ this.error.set(false);
931
+ this.errorMessage.set(null);
932
+ this.conversation.set(conversation);
933
+ try {
934
+ const currentUser = await this.userApi.getCurrentUser();
935
+ this.currentUserId.set(currentUser.id);
936
+ this.initiatorUserId =
937
+ phase === 'incoming'
938
+ ? this.sessionInitiatorUserId?.trim() || null
939
+ : currentUser.id;
940
+ const hydrated = await this.#hydrateCallConversation(conversation, currentUser.id);
941
+ this.conversation.set(hydrated);
942
+ await this.#bindCallConversation();
943
+ this.videoEnabled.set(media === 'video');
944
+ this.micMuted.set(false);
945
+ if (phase === 'incoming') {
946
+ this.#trackCallParticipants((conversation.participants ?? []).map((participant) => participant.id));
947
+ this.ringer.playIncoming();
948
+ void this.#refreshDevices();
949
+ return;
950
+ }
951
+ this.phase.set('outgoing-waiting');
952
+ this.ringer.playOutgoing();
953
+ await this.#ringPeers(currentUser.id);
954
+ this.#armRingTimeout();
955
+ void this.#connectMedia(currentUser.id, currentUser.name, conversationId, media).catch(async (error) => {
956
+ const message = await this.#resolveCallConnectErrorMessage(error);
957
+ this.errorMessage.set(message);
958
+ this.error.set(true);
959
+ this.ringer.stop();
960
+ this.#clearRingTimeout();
961
+ this.signalInbox.suppressCall(this.callId());
962
+ void this.#signalCallAction('cancel');
963
+ });
964
+ void this.#refreshDevices();
965
+ }
966
+ catch (error) {
967
+ this.error.set(true);
968
+ this.errorMessage.set(await this.#resolveCallConnectErrorMessage(error));
969
+ }
970
+ finally {
971
+ this.loading.set(false);
972
+ }
973
+ }
974
+ //#endregion
975
+ //#region ----- Call Signaling -----
976
+ async #connectMedia(participantIdentity, participantName, conversationId, media) {
977
+ await this.rtc.connect({
978
+ conversationId,
979
+ participantIdentity,
980
+ participantName,
981
+ media,
982
+ });
983
+ }
984
+ async #ringPeers(fromUserId) {
985
+ const conversation = this.conversation();
986
+ const callId = this.callId();
987
+ if (!conversation?.id || !callId) {
988
+ return;
989
+ }
990
+ const targetUserIds = this.#resolveInitialRingTargetUserIds(conversation, fromUserId);
991
+ if (!targetUserIds.length) {
992
+ return;
993
+ }
994
+ this.#trackCallParticipants(targetUserIds);
995
+ try {
996
+ await this.callSignal.signal({
997
+ conversationId: conversation.id,
998
+ action: 'invite',
999
+ media: this.mediaType(),
1000
+ callId,
1001
+ targetUserIds,
1002
+ });
1003
+ }
1004
+ catch {
1005
+ // Built-in realtime is the primary ring path.
1006
+ }
1007
+ }
1008
+ /**
1009
+ * Private chats ring only the peer; group chats ring every participant except self.
1010
+ */
1011
+ #resolveInitialRingTargetUserIds(conversation, fromUserId) {
1012
+ const scopedFrom = fromUserId.trim();
1013
+ const participantIds = (conversation.participants ?? [])
1014
+ .map((participant) => participant.id?.trim())
1015
+ .filter((id) => Boolean(id) && id !== scopedFrom);
1016
+ if (conversation.type === 'private') {
1017
+ return participantIds.slice(0, 1);
1018
+ }
1019
+ return participantIds;
1020
+ }
1021
+ async #acceptIncoming() {
1022
+ if (this.accepting || this.closing) {
1023
+ return;
1024
+ }
1025
+ const conversationId = this.conversation()?.id?.trim();
1026
+ const currentUserId = this.currentUserId();
1027
+ const callId = this.callId();
1028
+ if (!conversationId || !currentUserId) {
1029
+ return;
1030
+ }
1031
+ this.signalInbox.suppressCall(callId);
1032
+ this.accepting = true;
1033
+ this.#clearRingTimeout();
1034
+ this.ringer.stop();
1035
+ this.phase.set('connecting');
1036
+ void this.#signalCallAction('accept');
1037
+ let targetConversationId = conversationId;
1038
+ const scopedConversation = this.conversation();
1039
+ if (scopedConversation?.type === 'private' &&
1040
+ !axmIsConversationParticipant(scopedConversation.participants ?? [], currentUserId)) {
1041
+ const forkedGroup = await this.#waitForForkedGroupConversation(conversationId);
1042
+ if (forkedGroup?.id) {
1043
+ targetConversationId = forkedGroup.id.trim();
1044
+ await this.#switchCallToGroupConversation(forkedGroup, { reconnectRtc: false });
1045
+ }
1046
+ }
1047
+ const conversationForHydrate = this.conversation() ?? scopedConversation;
1048
+ if (!conversationForHydrate?.id?.trim()) {
1049
+ this.accepting = false;
1050
+ return;
1051
+ }
1052
+ const hydrated = await this.#hydrateCallConversation(conversationForHydrate, currentUserId);
1053
+ this.conversation.set(hydrated);
1054
+ targetConversationId = hydrated.id?.trim() || targetConversationId;
1055
+ await this.#bindCallConversation();
1056
+ try {
1057
+ await this.#connectMedia(currentUserId, this.#selfDisplayName(currentUserId), targetConversationId, this.mediaType());
1058
+ this.phase.set('active');
1059
+ this.activeSince = Date.now();
1060
+ void this.rtc.ensureAudioPlayback();
1061
+ if (this.mediaType() === 'video') {
1062
+ void this.#setVideoEnabled(true);
1063
+ }
1064
+ }
1065
+ catch (error) {
1066
+ this.accepting = false;
1067
+ this.ringer.stop();
1068
+ this.errorMessage.set(await this.#resolveCallConnectErrorMessage(error));
1069
+ this.error.set(true);
1070
+ void this.#signalCallAction('end');
1071
+ }
1072
+ }
1073
+ async #onPeerAccepted() {
1074
+ if (this.closing) {
1075
+ return;
1076
+ }
1077
+ this.#clearRingTimeout();
1078
+ this.ringer.stop();
1079
+ this.phase.set(this.rtc.connectionState() === ConnectionState.Connected ? 'active' : 'connecting');
1080
+ if (this.phase() === 'active') {
1081
+ this.activeSince = Date.now();
1082
+ }
1083
+ void this.rtc.ensureAudioPlayback();
1084
+ }
1085
+ async #signalCallAction(action) {
1086
+ const conversation = this.conversation();
1087
+ const callId = this.callId();
1088
+ const fromUserId = this.currentUserId();
1089
+ if (!conversation?.id || !callId || !fromUserId) {
1090
+ return;
1091
+ }
1092
+ const targetUserIds = this.#resolveCallSignalTargetUserIds(conversation, fromUserId, action);
1093
+ if (!targetUserIds.length) {
1094
+ return;
1095
+ }
1096
+ try {
1097
+ await this.callSignal.signal({
1098
+ conversationId: conversation.id,
1099
+ action,
1100
+ media: this.mediaType(),
1101
+ callId,
1102
+ targetUserIds,
1103
+ });
1104
+ }
1105
+ catch {
1106
+ // Media join is the source of truth; signaling is best-effort.
1107
+ }
1108
+ }
1109
+ /** During an active call, signal everyone who joined or was invited — not only local conversation.participants. */
1110
+ #resolveCallSignalTargetUserIds(conversation, fromUserId, action) {
1111
+ const scopedFrom = fromUserId.trim();
1112
+ const connectedIds = this.rtc
1113
+ .getConnectedParticipantIds()
1114
+ .map((id) => id.trim())
1115
+ .filter(Boolean);
1116
+ const participantIds = (conversation.participants ?? [])
1117
+ .map((participant) => participant.id?.trim())
1118
+ .filter((id) => Boolean(id) && id !== scopedFrom);
1119
+ const trackedIds = this.activeCallSessions.getParticipantIds(this.callId());
1120
+ if (action === 'end') {
1121
+ return this.#unionCallTargetUserIds(scopedFrom, participantIds, connectedIds, trackedIds);
1122
+ }
1123
+ if (action === 'accept') {
1124
+ const union = this.#unionCallTargetUserIds(scopedFrom, participantIds, connectedIds, trackedIds);
1125
+ if (union.length) {
1126
+ return union;
1127
+ }
1128
+ if (conversation.type === 'private') {
1129
+ return participantIds.slice(0, 1);
1130
+ }
1131
+ return participantIds;
1132
+ }
1133
+ if (action === 'decline' || action === 'cancel') {
1134
+ const union = this.#unionCallTargetUserIds(scopedFrom, participantIds, trackedIds, []);
1135
+ if (union.length) {
1136
+ return union;
1137
+ }
1138
+ if (conversation.type === 'private') {
1139
+ return participantIds.slice(0, 1);
1140
+ }
1141
+ return participantIds;
1142
+ }
1143
+ return participantIds;
1144
+ }
1145
+ #unionCallTargetUserIds(fromUserId, participantIds, connectedIds, trackedIds) {
1146
+ const targets = new Set();
1147
+ for (const id of participantIds) {
1148
+ targets.add(id);
1149
+ }
1150
+ for (const id of connectedIds) {
1151
+ if (id !== fromUserId) {
1152
+ targets.add(id);
1153
+ }
1154
+ }
1155
+ for (const id of trackedIds) {
1156
+ if (id !== fromUserId) {
1157
+ targets.add(id);
1158
+ }
1159
+ }
1160
+ return [...targets];
1161
+ }
1162
+ #trackCallParticipants(userIds) {
1163
+ const callId = this.callId();
1164
+ const selfId = this.currentUserId();
1165
+ if (!callId) {
1166
+ return;
1167
+ }
1168
+ for (const userId of userIds) {
1169
+ const scoped = userId?.trim();
1170
+ if (scoped && scoped !== selfId) {
1171
+ this.activeCallSessions.addParticipant(callId, scoped);
1172
+ }
1173
+ }
1174
+ }
1175
+ #selfDisplayName(currentUserId) {
1176
+ return this.conversation()?.participants?.find((participant) => participant.id === currentUserId)?.name;
1177
+ }
1178
+ #armRingTimeout() {
1179
+ this.#clearRingTimeout();
1180
+ this.ringTimeoutId = setTimeout(() => {
1181
+ if (this.phase() === 'outgoing-waiting') {
1182
+ this.ringer.stop();
1183
+ void this.translationService
1184
+ .translateAsync('@conversation:chat.call.no-answer')
1185
+ .then((message) => this.#toast(message, 'default'));
1186
+ void this.#finishWithLog('missed');
1187
+ }
1188
+ }, 45_000);
1189
+ }
1190
+ #clearRingTimeout() {
1191
+ if (this.ringTimeoutId != null) {
1192
+ clearTimeout(this.ringTimeoutId);
1193
+ this.ringTimeoutId = null;
1194
+ }
1195
+ }
1196
+ async #finishWithLog(outcome) {
1197
+ if (this.closing) {
1198
+ return;
1199
+ }
1200
+ this.closing = true;
1201
+ this.signalInbox.suppressCall(this.callId());
1202
+ this.ringer.stop();
1203
+ this.#clearRingTimeout();
1204
+ await this.#signalCallAction(outcome === 'declined' ? 'decline' : 'cancel');
1205
+ await this.#logOutcome(outcome, { durationSec: this.#elapsedDurationSec() });
1206
+ await this.#closeLocal();
1207
+ }
1208
+ async #endActiveCall() {
1209
+ if (this.closing) {
1210
+ return;
1211
+ }
1212
+ this.closing = true;
1213
+ this.signalInbox.suppressCall(this.callId());
1214
+ this.#trackCallParticipants(this.rtc.getConnectedParticipantIds());
1215
+ this.ringer.stop();
1216
+ this.#clearRingTimeout();
1217
+ await this.#logCompletedIfActive();
1218
+ if (this.activeSince == null && this.phase() === 'connecting') {
1219
+ await this.#logOutcome('cancelled', { durationSec: this.#elapsedDurationSec() });
1220
+ }
1221
+ await this.#signalCallAction('end');
1222
+ await this.#closeLocal();
1223
+ }
1224
+ async #logCompletedIfActive() {
1225
+ if (this.activeSince == null) {
1226
+ return;
1227
+ }
1228
+ const conversation = this.conversation();
1229
+ if (!conversation) {
1230
+ return;
1231
+ }
1232
+ const conversationId = conversation.id?.trim();
1233
+ const callId = this.callId();
1234
+ const currentUserId = this.currentUserId();
1235
+ if (!conversationId || !callId || !currentUserId) {
1236
+ return;
1237
+ }
1238
+ const durationSec = Math.max(1, Math.round((Date.now() - this.activeSince) / 1000));
1239
+ const joinedUserIds = [
1240
+ ...new Set([currentUserId, ...this.rtc.getConnectedParticipantIds().map((id) => id.trim()).filter(Boolean)]),
1241
+ ];
1242
+ const allParticipantIds = (conversation.participants ?? [])
1243
+ .map((participant) => participant.id?.trim())
1244
+ .filter((id) => Boolean(id));
1245
+ const absentUserIds = allParticipantIds.filter((id) => !joinedUserIds.includes(id));
1246
+ await this.#logOutcome('completed', {
1247
+ durationSec,
1248
+ joinedUserIds,
1249
+ absentUserIds,
1250
+ });
1251
+ }
1252
+ /** Talk time when connected; otherwise ring/wait time since the session opened. */
1253
+ #elapsedDurationSec() {
1254
+ const startedAt = this.activeSince ?? this.sessionOpenedAt;
1255
+ return Math.max(1, Math.round((Date.now() - startedAt) / 1000));
1256
+ }
1257
+ async #logOutcome(outcome, extras) {
1258
+ const conversation = this.conversation();
1259
+ const conversationId = conversation?.id?.trim();
1260
+ const callId = this.callId();
1261
+ const currentUserId = this.currentUserId();
1262
+ if (!conversationId || !callId) {
1263
+ return;
1264
+ }
1265
+ try {
1266
+ const result = await this.callSignal.log({
1267
+ conversationId,
1268
+ outcome,
1269
+ media: this.mediaType(),
1270
+ callId,
1271
+ initiatorUserId: this.initiatorUserId ?? currentUserId ?? undefined,
1272
+ isGroup: conversation?.type !== 'private',
1273
+ ...extras,
1274
+ });
1275
+ const peerUserId = (conversation?.participants ?? [])
1276
+ .map((participant) => participant.id?.trim())
1277
+ .find((id) => id && id !== currentUserId) ?? null;
1278
+ const peerUserName = peerUserId
1279
+ ? conversation?.participants?.find((participant) => participant.id === peerUserId)?.name
1280
+ : null;
1281
+ const fallback = axmBuildChatCallLogMessage({
1282
+ messageId: result.messageId,
1283
+ conversationId,
1284
+ senderId: currentUserId ?? '',
1285
+ outcome,
1286
+ media: this.mediaType(),
1287
+ callId,
1288
+ initiatorUserId: this.initiatorUserId ?? currentUserId ?? undefined,
1289
+ isGroup: conversation?.type !== 'private',
1290
+ actorUserId: currentUserId ?? undefined,
1291
+ peerUserId,
1292
+ peerUserName,
1293
+ durationSec: extras?.durationSec,
1294
+ joinedUserIds: extras?.joinedUserIds,
1295
+ absentUserIds: extras?.absentUserIds,
1296
+ });
1297
+ const logged = (await this.conversationStore.getMessage(result.messageId)) ?? fallback;
1298
+ this.conversationStore.publishNewMessage(logged);
1299
+ void this.conversationStore.touchLastMessage(conversationId, logged);
1300
+ }
1301
+ catch (error) {
1302
+ console.warn('[chat-call] Failed to persist call log message', error);
1303
+ }
1304
+ }
1305
+ async #closeFromRemoteLog() {
1306
+ if (this.closing || this.phase() === 'active') {
1307
+ return;
1308
+ }
1309
+ this.closing = true;
1310
+ this.ringer.stop();
1311
+ this.#clearRingTimeout();
1312
+ await this.#closeLocal();
1313
+ }
1314
+ async #closeFromRemoteEnd() {
1315
+ if (this.closing) {
1316
+ return;
1317
+ }
1318
+ this.closing = true;
1319
+ this.ringer.stop();
1320
+ this.#clearRingTimeout();
1321
+ await this.#closeLocal();
1322
+ }
1323
+ /** Another device of this user answered/declined — dismiss ringing UI without logging again. */
1324
+ async #closeFromSiblingDevice() {
1325
+ if (this.closing) {
1326
+ return;
1327
+ }
1328
+ this.closing = true;
1329
+ this.signalInbox.suppressCall(this.callId());
1330
+ this.ringer.stop();
1331
+ this.#clearRingTimeout();
1332
+ await this.#closeLocal();
1333
+ }
1334
+ async #closeLocal() {
1335
+ this.ringer.stop();
1336
+ this.#restoreCallConversation();
1337
+ this.signalInbox.releaseCall(this.callId());
1338
+ await this.rtc.disconnect();
1339
+ this.close();
1340
+ }
1341
+ //#endregion
1342
+ //#region ----- Group upgrade (private → group on accept) -----
1343
+ async #joinForkedGroupAfterPeerAccept(accepterUserId) {
1344
+ const selfId = this.currentUserId()?.trim();
1345
+ const scopedAccepter = accepterUserId.trim();
1346
+ if (!selfId || !scopedAccepter || scopedAccepter === selfId || this.#isGroupUpgradeInviter()) {
1347
+ return;
1348
+ }
1349
+ const current = this.conversation();
1350
+ const sourceId = current?.id?.trim();
1351
+ if (!current || current.type !== 'private' || !sourceId) {
1352
+ return;
1353
+ }
1354
+ const phase = this.phase();
1355
+ if (phase !== 'active' && phase !== 'connecting') {
1356
+ return;
1357
+ }
1358
+ const existing = await this.conversationApi.findForkedGroupFromPrivateChat(sourceId, this.callId() ?? undefined);
1359
+ if (existing) {
1360
+ await this.#switchCallToGroupConversation(existing);
1361
+ return;
1362
+ }
1363
+ const group = await this.#waitForForkedGroupConversation(sourceId);
1364
+ if (group) {
1365
+ await this.#switchCallToGroupConversation(group);
1366
+ }
1367
+ }
1368
+ async #onPeerAcceptedGroupUpgrade(accepterUserId) {
1369
+ const scopedAccepter = accepterUserId.trim();
1370
+ if (!scopedAccepter || !this.#isGroupUpgradeInviter() || !this.pendingGroupInviteUserIds.has(scopedAccepter)) {
1371
+ return;
1372
+ }
1373
+ await this.#ensureGroupUpgradeOnAccept(scopedAccepter);
1374
+ }
1375
+ #isGroupUpgradeInviter() {
1376
+ const selfId = this.currentUserId()?.trim();
1377
+ return Boolean(selfId && this.groupUpgradeInviterUserId === selfId && this.pendingGroupInviteUserIds.size > 0);
1378
+ }
1379
+ async #ensureGroupUpgradeOnAccept(accepterUserId) {
1380
+ const sourceConversation = this.conversation();
1381
+ const sourceId = sourceConversation?.id?.trim();
1382
+ if (!sourceConversation || sourceConversation.type !== 'private' || !sourceId) {
1383
+ return;
1384
+ }
1385
+ this.pendingGroupInviteUserIds.delete(accepterUserId);
1386
+ const existing = await this.conversationApi.findForkedGroupFromPrivateChat(sourceId, this.callId() ?? undefined);
1387
+ if (existing) {
1388
+ await this.#switchCallToGroupConversation(existing);
1389
+ return;
1390
+ }
1391
+ const group = await this.conversationApi.forkPrivateToGroupForCall(sourceId, [accepterUserId], {
1392
+ callId: this.callId() ?? undefined,
1393
+ });
1394
+ await this.#switchCallToGroupConversation(group);
1395
+ }
1396
+ async #trySwitchToForkedGroupConversation(group) {
1397
+ const current = this.conversation();
1398
+ const phase = this.phase();
1399
+ const sourceId = current?.id?.trim();
1400
+ const groupId = group.id?.trim();
1401
+ if (!current || current.type !== 'private' || !sourceId || !groupId) {
1402
+ return;
1403
+ }
1404
+ if (phase !== 'active' && phase !== 'connecting' && phase !== 'outgoing-waiting') {
1405
+ return;
1406
+ }
1407
+ const refreshed = (await this.conversationStore.refreshConversation(groupId)) ?? group;
1408
+ if (!axmMatchesForkedGroupForCall(refreshed.metadata, sourceId, this.callId())) {
1409
+ return;
1410
+ }
1411
+ if (current.id === refreshed.id) {
1412
+ return;
1413
+ }
1414
+ await this.#switchCallToGroupConversation(refreshed);
1415
+ }
1416
+ async #switchCallToGroupConversation(group, options) {
1417
+ const groupId = group.id?.trim();
1418
+ if (!groupId || this.conversation()?.id === groupId) {
1419
+ return;
1420
+ }
1421
+ const hydrated = (await this.conversationApi.getConversation(groupId).catch(() => null)) ??
1422
+ (await this.conversationStore.refreshConversation(groupId)) ??
1423
+ group;
1424
+ this.conversationStore.cacheConversation(hydrated);
1425
+ this.conversationStore.cacheEmptyMessageList(groupId);
1426
+ await this.conversationStore.loadConversationMessages(groupId, { force: true }).catch(() => []);
1427
+ this.conversation.set(hydrated);
1428
+ this.chatUnread.set(false);
1429
+ await this.#bindCallConversation();
1430
+ const reconnectRtc = options?.reconnectRtc !== false;
1431
+ const currentUserId = this.currentUserId()?.trim();
1432
+ const phase = this.phase();
1433
+ if (!reconnectRtc || !currentUserId || (phase !== 'active' && phase !== 'connecting')) {
1434
+ return;
1435
+ }
1436
+ await this.rtc.connect({
1437
+ conversationId: groupId,
1438
+ participantIdentity: currentUserId,
1439
+ participantName: this.#selfDisplayName(currentUserId),
1440
+ media: this.mediaType(),
1441
+ });
1442
+ }
1443
+ async #waitForForkedGroupConversation(sourceConversationId) {
1444
+ const scopedCallId = this.callId() ?? undefined;
1445
+ const scopedSource = sourceConversationId.trim();
1446
+ const deadline = Date.now() + 12_000;
1447
+ return new Promise((resolve) => {
1448
+ let settled = false;
1449
+ let pollTimer = null;
1450
+ const finish = (group) => {
1451
+ if (settled) {
1452
+ return;
1453
+ }
1454
+ settled = true;
1455
+ forkSub.unsubscribe();
1456
+ if (pollTimer != null) {
1457
+ clearInterval(pollTimer);
1458
+ }
1459
+ resolve(group);
1460
+ };
1461
+ const forkSub = this.realtimeBus.conversationCreated$.subscribe((conversation) => {
1462
+ if (!axmMatchesForkedGroupForCall(conversation.metadata, scopedSource, scopedCallId)) {
1463
+ return;
1464
+ }
1465
+ finish(conversation);
1466
+ });
1467
+ const poll = async () => {
1468
+ const group = await this.conversationApi.findForkedGroupFromPrivateChat(scopedSource, scopedCallId);
1469
+ if (group) {
1470
+ finish(group);
1471
+ return;
1472
+ }
1473
+ if (Date.now() >= deadline) {
1474
+ finish(null);
1475
+ }
1476
+ };
1477
+ void poll();
1478
+ pollTimer = setInterval(() => void poll(), 300);
1479
+ });
1480
+ }
1481
+ //#endregion
1482
+ //#region ----- Conversation Focus -----
1483
+ async #hydrateCallConversation(conversation, _currentUserId) {
1484
+ const conversationId = conversation.id?.trim();
1485
+ if (!conversationId) {
1486
+ return conversation;
1487
+ }
1488
+ const refreshed = (await this.conversationStore.refreshConversation(conversationId)) ??
1489
+ (await this.conversationStore.getConversation(conversationId, { force: true }));
1490
+ const resolved = refreshed ?? conversation;
1491
+ this.conversationStore.cacheConversation(resolved);
1492
+ this.conversationStore.cacheEmptyMessageList(conversationId);
1493
+ await this.conversationStore.loadConversationMessages(conversationId, { force: false }).catch(() => []);
1494
+ return resolved;
1495
+ }
1496
+ async #openCallChatDrawer() {
1497
+ const conversation = this.conversation();
1498
+ const currentUserId = this.currentUserId();
1499
+ if (!conversation?.id?.trim() || !currentUserId) {
1500
+ await this.#bindCallConversation();
1501
+ return;
1502
+ }
1503
+ const hydrated = await this.#hydrateCallConversation(conversation, currentUserId);
1504
+ this.conversation.set(hydrated);
1505
+ await this.#bindCallConversation();
1506
+ }
1507
+ async #bindCallConversation() {
1508
+ const conversationId = this.conversation()?.id?.trim();
1509
+ if (!conversationId) {
1510
+ return;
1511
+ }
1512
+ if (this.savedActiveConversationId === undefined) {
1513
+ this.savedActiveConversationId = this.conversationService.activeConversationId();
1514
+ }
1515
+ await this.conversationService.selectConversation(conversationId);
1516
+ this.chatConversationApi.reportFocusedConversation(conversationId);
1517
+ }
1518
+ #restoreCallConversation() {
1519
+ if (this.savedActiveConversationId === undefined) {
1520
+ return;
1521
+ }
1522
+ const conversationId = this.savedActiveConversationId;
1523
+ this.savedActiveConversationId = undefined;
1524
+ this.chatConversationApi.reportFocusedConversation(typeof conversationId === 'string' ? conversationId : null);
1525
+ void this.conversationService.selectConversation(conversationId);
1526
+ }
1527
+ //#endregion
1528
+ //#region ----- Media Helpers -----
1529
+ async #refreshDevices(kind) {
1530
+ try {
1531
+ if (!kind || kind === 'audioinput') {
1532
+ this.audioDevices.set(await this.rtc.listInputDevices('audioinput'));
1533
+ }
1534
+ if (!kind || kind === 'videoinput') {
1535
+ this.videoDevices.set(await this.rtc.listInputDevices('videoinput'));
1536
+ }
1537
+ }
1538
+ catch {
1539
+ // Device lists stay empty until the browser grants media permission.
1540
+ }
1541
+ }
1542
+ async #setVideoEnabled(enabled) {
1543
+ this.videoEnabled.set(enabled);
1544
+ if (enabled) {
1545
+ this.mediaType.set('video');
1546
+ }
1547
+ try {
1548
+ await this.rtc.setCameraEnabled(enabled);
1549
+ }
1550
+ catch (error) {
1551
+ this.videoEnabled.set(false);
1552
+ const message = await this.#resolveCallMediaErrorMessage(error);
1553
+ this.#toast(message, 'danger');
1554
+ }
1555
+ }
1556
+ async #resolveCallConnectErrorMessage(error) {
1557
+ const mediaIssue = axmReadChatCallMediaContextIssue(error);
1558
+ if (mediaIssue === 'secure-context') {
1559
+ return this.translationService.translateAsync('@conversation:chat.call.media-secure-context-required');
1560
+ }
1561
+ if (mediaIssue === 'unsupported') {
1562
+ return this.translationService.translateAsync('@conversation:chat.call.media-unavailable');
1563
+ }
1564
+ const fallback = await this.translationService.translateAsync('@conversation:chat.call.connect-error');
1565
+ return error instanceof Error && error.message ? error.message : fallback;
1566
+ }
1567
+ async #resolveCallMediaErrorMessage(error) {
1568
+ const mediaIssue = axmReadChatCallMediaContextIssue(error);
1569
+ if (mediaIssue === 'secure-context') {
1570
+ return this.translationService.translateAsync('@conversation:chat.call.media-secure-context-required');
1571
+ }
1572
+ if (mediaIssue === 'unsupported') {
1573
+ return this.translationService.translateAsync('@conversation:chat.call.media-unavailable');
1574
+ }
1575
+ return this.translationService.translateAsync('@conversation:chat.call.media-error');
1576
+ }
1577
+ #toast(content, color) {
1578
+ this.toastService.show({
1579
+ color,
1580
+ content,
1581
+ location: 'bottom-center',
1582
+ timeOut: 3000,
1583
+ });
1584
+ }
1585
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSessionPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1586
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatCallSessionPageComponent, isStandalone: true, selector: "axm-chat-call-session-page", host: { classAttribute: "ax-dark axm-chat-call-session-page" }, providers: [...AXM_CHAT_CALL_RTC_PROVIDERS], usesInheritance: true, ngImport: i0, template: "<div class=\"axm-chat-call-session\">\n <!-- ----- Loading conversation / connecting RTC ----- -->\n @if (loading()) {\n <div class=\"axm-chat-call-session__status-block\">\n {{ '@conversation:chat.call.loading' | translate | async }}\n </div>\n }\n <!-- ----- Load / connect error ----- -->\n @else if (error()) {\n <div class=\"axm-chat-call-session__status-block axm-chat-call-session__status-block--error\">\n <p>{{ errorMessage() || ('@conversation:chat.call.load-error' | translate | async) }}</p>\n <button type=\"button\" class=\"axm-chat-call-session__text-button\" (click)=\"onEndCall()\">\n {{ '@conversation:chat.call.cancel' | translate | async }}\n </button>\n </div>\n }\n <!-- ----- Call session ----- -->\n @else {\n <ax-drawer-container class=\"axm-chat-call-session__drawer-host\" dir=\"ltr\">\n <ax-content class=\"axm-chat-call-session__drawer-main\">\n <div\n class=\"axm-chat-call-session__main\"\n [class.axm-chat-call-session__main--idle]=\"idleLayout()\"\n [class.axm-chat-call-session__main--grid]=\"showParticipantGrid() && !showScreenShareLayout()\"\n [class.axm-chat-call-session__main--present]=\"showScreenShareLayout()\"\n >\n <div\n class=\"axm-chat-call-session__body\"\n [class.axm-chat-call-session__body--grid]=\"showParticipantGrid()\"\n >\n <!-- ----- Centered profile (ringing / incoming voice) ----- -->\n @if (!showParticipantGrid()) {\n <div class=\"axm-chat-call-session__header\">\n <axp-avatar\n [size]=\"headerAvatarSize()\"\n [fullName]=\"peerDisplayName()\"\n [src]=\"peerAvatarSrc()\"\n />\n <h1 class=\"axm-chat-call-session__name\">{{ peerDisplayName() }}</h1>\n <p class=\"axm-chat-call-session__phase-text\">{{ phaseTextKey() | translate | async }}</p>\n </div>\n }\n\n <!-- ----- Participant grid (active / video preview) ----- -->\n @if (showParticipantGrid()) {\n <!-- ----- Screen share: large present + compact participant rail ----- -->\n @if (showScreenShareLayout()) {\n @if (activeScreenShare(); as share) {\n <div class=\"axm-chat-call-session__stage axm-chat-call-session__stage--present\">\n <div class=\"axm-chat-call-session__present-main\">\n <div class=\"axm-chat-call-session__present-screen\">\n <video\n class=\"axm-chat-call-session__present-video\"\n autoplay\n playsinline\n [muted]=\"share.isSelf\"\n [axmChatCallTrack]=\"share.track\"\n ></video>\n <span class=\"axm-chat-call-session__present-label\">\n {{ share.participantName }}\n \u00B7\n {{ '@conversation:chat.call.presenting' | translate | async }}\n </span>\n </div>\n </div>\n <div class=\"axm-chat-call-session__present-rail\">\n @for (tile of stageTiles(); track tile.id) {\n <axm-chat-call-participant-tile\n [tile]=\"tile\"\n [videoTrack]=\"resolveVideoTrack(tile)\"\n [compact]=\"true\"\n />\n }\n </div>\n </div>\n }\n }\n <!-- ----- Default equal-width participant grid ----- -->\n @else {\n <div class=\"axm-chat-call-session__stage axm-chat-call-session__stage--grid\">\n <div\n class=\"axm-chat-call-session__grid\"\n [attr.data-tile-count]=\"stageTiles().length\"\n >\n @for (tile of stageTiles(); track tile.id) {\n <axm-chat-call-participant-tile\n [tile]=\"tile\"\n [videoTrack]=\"resolveVideoTrack(tile)\"\n />\n }\n </div>\n </div>\n }\n }\n </div>\n\n <axm-chat-call-controls\n [phase]=\"phase()\"\n [videoEnabled]=\"videoEnabled()\"\n [micMuted]=\"micMuted()\"\n [showAddPeople]=\"phase() === 'active'\"\n [showScreencast]=\"phase() === 'active'\"\n [showChat]=\"phase() === 'active'\"\n [chatOpen]=\"chatDrawerOpen()\"\n [chatUnread]=\"chatUnread()\"\n [audioDevices]=\"audioDevices()\"\n [videoDevices]=\"videoDevices()\"\n [selectedAudioDeviceId]=\"selectedAudioDeviceId()\"\n [selectedVideoDeviceId]=\"selectedVideoDeviceId()\"\n (screencast)=\"onScreencast()\"\n (openChat)=\"onToggleChatDrawer()\"\n (toggleVideo)=\"onToggleVideo()\"\n (toggleMute)=\"onToggleMute()\"\n (endCall)=\"onEndCall()\"\n (accept)=\"onAccept()\"\n (decline)=\"onDecline()\"\n (addPeople)=\"onAddPeople()\"\n (requestDevices)=\"onRequestDevices($event)\"\n (pickDevice)=\"onPickDevice($event)\"\n />\n </div>\n </ax-content>\n\n <!-- ----- In-call chat (push drawer) ----- -->\n <ax-drawer\n class=\"axm-chat-call-session__chat-drawer\"\n location=\"end\"\n mode=\"push\"\n [collapsed]=\"!chatDrawerOpen()\"\n >\n <ax-content class=\"axm-chat-call-session__chat-drawer-content\">\n <header class=\"axm-chat-call-session__chat-drawer-header\">\n <h2 class=\"axm-chat-call-session__chat-drawer-title\">{{ peerDisplayName() }}</h2>\n <ax-button\n look=\"blank\"\n (onClick)=\"onToggleChatDrawer()\"\n [attr.aria-label]=\"('@conversation:chat.call.close-chat' | translate | async) ?? ''\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-xmark\" />\n </ax-prefix>\n </ax-button>\n </header>\n @if (chatDrawerOpen()) {\n <axm-chat-call-in-call-chat class=\"axm-chat-call-session__chat-drawer-body\" />\n }\n </ax-content>\n </ax-drawer>\n </ax-drawer-container>\n }\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "showTitle", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$1.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "transition", "closeOnBackdropClick", "backdropClass", "collapsed", "singleOpenMode"], outputs: ["onBackdropClick", "collapsedStateChanged"] }, { kind: "component", type: i3$1.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "component", type: AXMChatCallControlsComponent, selector: "axm-chat-call-controls", inputs: ["phase", "videoEnabled", "micMuted", "showAddPeople", "showScreencast", "showChat", "chatOpen", "chatUnread", "audioDevices", "videoDevices", "selectedAudioDeviceId", "selectedVideoDeviceId"], outputs: ["screencast", "openChat", "toggleVideo", "toggleMute", "endCall", "accept", "decline", "addPeople", "pickDevice", "requestDevices"] }, { kind: "component", type: AXMChatCallParticipantTileComponent, selector: "axm-chat-call-participant-tile", inputs: ["tile", "videoTrack", "compact"] }, { kind: "directive", type: AXMChatCallVideoAttachDirective, selector: "video[axmChatCallTrack]", inputs: ["axmChatCallTrack"] }, { kind: "component", type: AXMChatCallInCallChatComponent, selector: "axm-chat-call-in-call-chat" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1587
+ }
1588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSessionPageComponent, decorators: [{
1589
+ type: Component,
1590
+ args: [{ selector: 'axm-chat-call-session-page', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1591
+ class: 'ax-dark axm-chat-call-session-page',
1592
+ }, providers: [...AXM_CHAT_CALL_RTC_PROVIDERS], imports: [
1593
+ AXPAvatarComponent,
1594
+ AXTranslationModule,
1595
+ AsyncPipe,
1596
+ AXButtonModule,
1597
+ AXDecoratorModule,
1598
+ AXDrawerModule,
1599
+ AXMChatCallControlsComponent,
1600
+ AXMChatCallParticipantTileComponent,
1601
+ AXMChatCallVideoAttachDirective,
1602
+ AXMChatCallInCallChatComponent,
1603
+ ], template: "<div class=\"axm-chat-call-session\">\n <!-- ----- Loading conversation / connecting RTC ----- -->\n @if (loading()) {\n <div class=\"axm-chat-call-session__status-block\">\n {{ '@conversation:chat.call.loading' | translate | async }}\n </div>\n }\n <!-- ----- Load / connect error ----- -->\n @else if (error()) {\n <div class=\"axm-chat-call-session__status-block axm-chat-call-session__status-block--error\">\n <p>{{ errorMessage() || ('@conversation:chat.call.load-error' | translate | async) }}</p>\n <button type=\"button\" class=\"axm-chat-call-session__text-button\" (click)=\"onEndCall()\">\n {{ '@conversation:chat.call.cancel' | translate | async }}\n </button>\n </div>\n }\n <!-- ----- Call session ----- -->\n @else {\n <ax-drawer-container class=\"axm-chat-call-session__drawer-host\" dir=\"ltr\">\n <ax-content class=\"axm-chat-call-session__drawer-main\">\n <div\n class=\"axm-chat-call-session__main\"\n [class.axm-chat-call-session__main--idle]=\"idleLayout()\"\n [class.axm-chat-call-session__main--grid]=\"showParticipantGrid() && !showScreenShareLayout()\"\n [class.axm-chat-call-session__main--present]=\"showScreenShareLayout()\"\n >\n <div\n class=\"axm-chat-call-session__body\"\n [class.axm-chat-call-session__body--grid]=\"showParticipantGrid()\"\n >\n <!-- ----- Centered profile (ringing / incoming voice) ----- -->\n @if (!showParticipantGrid()) {\n <div class=\"axm-chat-call-session__header\">\n <axp-avatar\n [size]=\"headerAvatarSize()\"\n [fullName]=\"peerDisplayName()\"\n [src]=\"peerAvatarSrc()\"\n />\n <h1 class=\"axm-chat-call-session__name\">{{ peerDisplayName() }}</h1>\n <p class=\"axm-chat-call-session__phase-text\">{{ phaseTextKey() | translate | async }}</p>\n </div>\n }\n\n <!-- ----- Participant grid (active / video preview) ----- -->\n @if (showParticipantGrid()) {\n <!-- ----- Screen share: large present + compact participant rail ----- -->\n @if (showScreenShareLayout()) {\n @if (activeScreenShare(); as share) {\n <div class=\"axm-chat-call-session__stage axm-chat-call-session__stage--present\">\n <div class=\"axm-chat-call-session__present-main\">\n <div class=\"axm-chat-call-session__present-screen\">\n <video\n class=\"axm-chat-call-session__present-video\"\n autoplay\n playsinline\n [muted]=\"share.isSelf\"\n [axmChatCallTrack]=\"share.track\"\n ></video>\n <span class=\"axm-chat-call-session__present-label\">\n {{ share.participantName }}\n \u00B7\n {{ '@conversation:chat.call.presenting' | translate | async }}\n </span>\n </div>\n </div>\n <div class=\"axm-chat-call-session__present-rail\">\n @for (tile of stageTiles(); track tile.id) {\n <axm-chat-call-participant-tile\n [tile]=\"tile\"\n [videoTrack]=\"resolveVideoTrack(tile)\"\n [compact]=\"true\"\n />\n }\n </div>\n </div>\n }\n }\n <!-- ----- Default equal-width participant grid ----- -->\n @else {\n <div class=\"axm-chat-call-session__stage axm-chat-call-session__stage--grid\">\n <div\n class=\"axm-chat-call-session__grid\"\n [attr.data-tile-count]=\"stageTiles().length\"\n >\n @for (tile of stageTiles(); track tile.id) {\n <axm-chat-call-participant-tile\n [tile]=\"tile\"\n [videoTrack]=\"resolveVideoTrack(tile)\"\n />\n }\n </div>\n </div>\n }\n }\n </div>\n\n <axm-chat-call-controls\n [phase]=\"phase()\"\n [videoEnabled]=\"videoEnabled()\"\n [micMuted]=\"micMuted()\"\n [showAddPeople]=\"phase() === 'active'\"\n [showScreencast]=\"phase() === 'active'\"\n [showChat]=\"phase() === 'active'\"\n [chatOpen]=\"chatDrawerOpen()\"\n [chatUnread]=\"chatUnread()\"\n [audioDevices]=\"audioDevices()\"\n [videoDevices]=\"videoDevices()\"\n [selectedAudioDeviceId]=\"selectedAudioDeviceId()\"\n [selectedVideoDeviceId]=\"selectedVideoDeviceId()\"\n (screencast)=\"onScreencast()\"\n (openChat)=\"onToggleChatDrawer()\"\n (toggleVideo)=\"onToggleVideo()\"\n (toggleMute)=\"onToggleMute()\"\n (endCall)=\"onEndCall()\"\n (accept)=\"onAccept()\"\n (decline)=\"onDecline()\"\n (addPeople)=\"onAddPeople()\"\n (requestDevices)=\"onRequestDevices($event)\"\n (pickDevice)=\"onPickDevice($event)\"\n />\n </div>\n </ax-content>\n\n <!-- ----- In-call chat (push drawer) ----- -->\n <ax-drawer\n class=\"axm-chat-call-session__chat-drawer\"\n location=\"end\"\n mode=\"push\"\n [collapsed]=\"!chatDrawerOpen()\"\n >\n <ax-content class=\"axm-chat-call-session__chat-drawer-content\">\n <header class=\"axm-chat-call-session__chat-drawer-header\">\n <h2 class=\"axm-chat-call-session__chat-drawer-title\">{{ peerDisplayName() }}</h2>\n <ax-button\n look=\"blank\"\n (onClick)=\"onToggleChatDrawer()\"\n [attr.aria-label]=\"('@conversation:chat.call.close-chat' | translate | async) ?? ''\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-xmark\" />\n </ax-prefix>\n </ax-button>\n </header>\n @if (chatDrawerOpen()) {\n <axm-chat-call-in-call-chat class=\"axm-chat-call-session__chat-drawer-body\" />\n }\n </ax-content>\n </ax-drawer>\n </ax-drawer-container>\n }\n</div>\n", styles: ["@layer properties;axm-chat-call-session-page{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column}.axm-chat-call-session{box-sizing:border-box;display:flex;height:100%;min-height:0px;width:100%;flex:1}.axm-chat-call-session__drawer-host{display:flex;height:100%;min-height:0px;width:100%;flex:1;direction:ltr}.axm-chat-call-session__drawer-main{display:flex;height:100%;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__chat-drawer{width:min(22rem,100%);max-width:100%;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-content{display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;background-color:#1a1c1e}.axm-chat-call-session__chat-drawer-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-session__chat-drawer-header{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-session__chat-drawer-title{margin:0;min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9375rem;--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-chat-call-session__chat-drawer-body{min-height:0px;flex:1}.axm-chat-call-session__main{display:flex;min-height:0px;min-width:0px;flex:1;flex-direction:column;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 5);padding-top:calc(var(--spacing, .25rem) * 5);padding-bottom:calc(var(--spacing, .25rem) * 2)}.axm-chat-call-session__main--grid,.axm-chat-call-session__main--present{align-items:stretch;padding:calc(var(--spacing, .25rem) * 2);padding-bottom:var(--spacing, .25rem)}.axm-chat-call-session__body{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center}.axm-chat-call-session__main--idle .axm-chat-call-session__body{justify-content:center}.axm-chat-call-session__header{margin-top:calc(var(--spacing, .25rem) * 6);display:flex;flex-direction:column;align-items:center;gap:calc(var(--spacing, .25rem) * 2);text-align:center}.axm-chat-call-session__main--idle .axm-chat-call-session__header{margin-top:0}.axm-chat-call-session__name{margin: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: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axm-chat-call-session__phase-text{margin:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));opacity:65%}.axm-chat-call-session__body--grid{flex:1;align-items:stretch}.axm-chat-call-session__stage{margin-block:calc(var(--spacing, .25rem) * 3);display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;overflow:hidden}.axm-chat-call-session__stage--grid{margin:0;min-height:0px;flex:1;align-items:stretch;justify-content:stretch;padding:0}.axm-chat-call-session__grid{display:grid;height:100%;min-height:0px;width:100%;flex:1;gap:calc(var(--spacing, .25rem) * 2);grid-auto-rows:minmax(0,1fr)}.axm-chat-call-session__grid[data-tile-count=\"1\"]{grid-template-columns:repeat(1,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"2\"]{grid-template-columns:repeat(2,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"3\"]{grid-template-columns:repeat(3,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"4\"]{grid-template-columns:repeat(4,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"5\"]{grid-template-columns:repeat(5,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"6\"]{grid-template-columns:repeat(6,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"7\"]{grid-template-columns:repeat(7,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"8\"]{grid-template-columns:repeat(8,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"9\"]{grid-template-columns:repeat(9,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"10\"]{grid-template-columns:repeat(10,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"11\"]{grid-template-columns:repeat(11,minmax(0,1fr))}.axm-chat-call-session__grid[data-tile-count=\"12\"]{grid-template-columns:repeat(12,minmax(0,1fr))}.axm-chat-call-session__stage--present{margin:0;display:flex;min-height:0px;width:100%;flex:1;flex-direction:row;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);padding:0}.axm-chat-call-session__present-main{display:flex;min-height:0px;min-width:0px;flex:1}.axm-chat-call-session__present-screen{position:relative;box-sizing:border-box;min-height:0px;flex:1;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:var(--color-black, #000);border:3px solid #f9ab00;box-shadow:0 0 0 1px #f9ab0059}.axm-chat-call-session__present-video{height:100%;width:100%;background-color:var(--color-black, #000);object-fit:contain}.axm-chat-call-session__present-label{position:absolute;bottom:calc(var(--spacing, .25rem) * 2.5);left:calc(var(--spacing, .25rem) * 2.5);z-index:1;max-width:calc(100% - 1.3rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-session__present-rail{display:flex;height:100%;min-height:0px;width:calc(var(--spacing, .25rem) * 44);flex-shrink:0;flex-direction:column;align-content:flex-start;align-items:stretch;justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 2);overflow-x:hidden;overflow-y:auto}.axm-chat-call-session__present-rail axm-chat-call-participant-tile{height:5.75rem;max-height:5.75rem;min-height:5.75rem;flex-shrink:0;flex:0 0 5.75rem}.axm-chat-call-session__status-block{display:flex;min-height:0px;width:100%;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 4);padding:calc(var(--spacing, .25rem) * 8);text-align:center}.axm-chat-call-session__status-block--error{color:#ff8a80}.axm-chat-call-session__text-button{cursor:pointer;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:currentcolor;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2);opacity:85%}axm-chat-call-controls{margin-top:auto;display:block;width:100%;flex-shrink:0}.axm-chat-call-controls{position:relative;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;gap:calc(var(--spacing, .25rem) * 5);padding-inline:calc(var(--spacing, .25rem) * 4);padding-top:calc(var(--spacing, .25rem) * 3);padding-bottom:calc(var(--spacing, .25rem) * 5)}.axm-chat-call-controls__item{position:relative;display:flex;flex-direction:column;align-items:center}.axm-chat-call-controls__action{position:relative;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:var(--color-white, #fff)}.axm-chat-call-controls__action:focus-visible{border-radius:var(--radius-lg, .5rem);outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:4px;outline-color:#ffffff73}.axm-chat-call-controls__circle{position:relative;display:inline-flex;height:3.25rem;width:3.25rem;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);background-color:#3a3d41;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-white, #fff)}.axm-chat-call-controls__circle--danger{background-color:#e53935}.axm-chat-call-controls__circle--success{background-color:#4caf50}.axm-chat-call-controls__circle--light{background-color:#f2f2f2;color:#1a1c1e}.axm-chat-call-controls__unread{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1);top:var(--spacing, .25rem);height:calc(var(--spacing, .25rem) * 2.5);width:calc(var(--spacing, .25rem) * 2.5);border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:#3a3d41;background-color:#e53935}.axm-chat-call-controls__circle--light .axm-chat-call-controls__unread{border-color:#f2f2f2}.axm-chat-call-controls__chevron{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 1.5);top:calc(var(--spacing, .25rem) * -.5);z-index:2;display:inline-flex;height:1.15rem;width:1.15rem;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 20%,transparent);background-color:#2b2e32;padding:0;font-size:.55rem;color:var(--color-white, #fff)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__chevron{border-color:color-mix(in oklab,var(--color-white, #fff) 20%,transparent)}}.axm-chat-call-controls__hangup{rotate:135deg}.axm-chat-call-controls__menu-backdrop{position:fixed;inset:0;z-index:20;cursor:default;border-style:var(--tw-border-style);border-width:0px;background-color:transparent}.axm-chat-call-controls__menu{position:absolute;inset-inline-start:50%;bottom:calc(100% + .5rem);z-index:21;margin:0;max-width:calc(var(--spacing, .25rem) * 72);min-width:calc(var(--spacing, .25rem) * 48);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);list-style-type:none;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in srgb,#fff 10%,transparent);background-color:#2b2e32;padding:calc(var(--spacing, .25rem) * 1.5);box-shadow:0 10px 28px #0006}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu{border-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}.axm-chat-call-controls__menu-empty,.axm-chat-call-controls__menu-item{display:block;width:100%;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);text-align:start;font-size:.8125rem;color:var(--color-white, #fff)}.axm-chat-call-controls__menu-item{cursor:pointer}.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in srgb,#fff 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-controls__menu-item:hover,.axm-chat-call-controls__menu-item--active{background-color:color-mix(in oklab,var(--color-white, #fff) 10%,transparent)}}axm-chat-call-participant-tile{display:block;min-height:0px;width:100%}axm-chat-call-participant-tile:not(.axm-chat-call-participant-tile--rail){height:100%}.axm-chat-call-tile{position:relative;display:flex;height:100%;min-height:0px;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xl, .75rem);background-color:#101113}.axm-chat-call-tile__bg-blur,.axm-chat-call-tile__bg-color{pointer-events:none;position:absolute;inset:0}.axm-chat-call-tile__bg-blur{scale:1.15;object-fit:cover;opacity:90%;filter:blur(28px)}.axm-chat-call-tile__bg-color{opacity:100%}.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-primary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=primary]{background:radial-gradient(circle at 42% 38%,var(--color-primary-lightest) 0%,color-mix(in srgb,var(--color-primary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-secondary-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=secondary]{background:radial-gradient(circle at 42% 38%,var(--color-secondary-lightest) 0%,color-mix(in srgb,var(--color-secondary) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-danger-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=danger]{background:radial-gradient(circle at 42% 38%,var(--color-danger-lightest) 0%,color-mix(in srgb,var(--color-danger) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-warning-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=warning]{background:radial-gradient(circle at 42% 38%,var(--color-warning-lightest) 0%,color-mix(in srgb,var(--color-warning) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-success-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=success]{background:radial-gradient(circle at 42% 38%,var(--color-success-lightest) 0%,color-mix(in srgb,var(--color-success) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent1-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent1]{background:radial-gradient(circle at 42% 38%,var(--color-accent1-lightest) 0%,color-mix(in srgb,var(--color-accent1) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent2-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent2]{background:radial-gradient(circle at 42% 38%,var(--color-accent2-lightest) 0%,color-mix(in srgb,var(--color-accent2) 70%,black) 100%)}}.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,rgba(var(--ax-sys-color-accent3-surface)) 70%,black) 100%)}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__bg-color[data-avatar-color=accent3]{background:radial-gradient(circle at 42% 38%,var(--color-accent3-lightest) 0%,color-mix(in srgb,var(--color-accent3) 70%,black) 100%)}}.axm-chat-call-tile__video{position:absolute;inset:0;height:100%;width:100%;background-color:var(--color-black, #000);object-fit:cover}.axm-chat-call-tile__avatar-stack{position:relative;z-index:1;display:flex;height:5.5rem;width:5.5rem;align-items:center;justify-content:center}.axm-chat-call-tile__speaking-ring{pointer-events:none;position:absolute;inset:0;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:.22rem;border-color:color-mix(in srgb,#fff 75%,transparent);box-shadow:0 0 0 .12rem #ffffff2e;transition:transform .12s ease-out,opacity .12s ease-out}@supports (color: color-mix(in lab,red,red)){.axm-chat-call-tile__speaking-ring{border-color:color-mix(in oklab,var(--color-white, #fff) 75%,transparent)}}.axm-chat-call-tile__speaking-ring[data-level=\"0\"]{transform:scale(1);opacity:.35}.axm-chat-call-tile__speaking-ring[data-level=\"1\"]{transform:scale(1.055);opacity:.395}.axm-chat-call-tile__speaking-ring[data-level=\"2\"]{transform:scale(1.11);opacity:.44}.axm-chat-call-tile__speaking-ring[data-level=\"3\"]{transform:scale(1.165);opacity:.485}.axm-chat-call-tile__speaking-ring[data-level=\"4\"]{transform:scale(1.22);opacity:.53}.axm-chat-call-tile__speaking-ring[data-level=\"5\"]{transform:scale(1.275);opacity:.575}.axm-chat-call-tile__speaking-ring[data-level=\"6\"]{transform:scale(1.33);opacity:.62}.axm-chat-call-tile__speaking-ring[data-level=\"7\"]{transform:scale(1.385);opacity:.665}.axm-chat-call-tile__speaking-ring[data-level=\"8\"]{transform:scale(1.44);opacity:.71}.axm-chat-call-tile__speaking-ring[data-level=\"9\"]{transform:scale(1.495);opacity:.755}.axm-chat-call-tile__speaking-ring[data-level=\"10\"]{transform:scale(1.55);opacity:.8}.axm-chat-call-tile__badge{position:absolute;top:calc(var(--spacing, .25rem) * 2.5);right:calc(var(--spacing, .25rem) * 2.5);z-index:2;display:flex;height:calc(var(--spacing, .25rem) * 7);width:calc(var(--spacing, .25rem) * 7);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-white, #fff);background:#202124d1}.axm-chat-call-tile__name{position:absolute;right:calc(var(--spacing, .25rem) * 2.5);bottom:calc(var(--spacing, .25rem) * 2.5);z-index:2;max-width:calc(100% - 1.1rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.8125rem;--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);color:var(--color-white, #fff);background:#202124c7}.axm-chat-call-tile--compact .axm-chat-call-tile__avatar-stack{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12)}.axm-chat-call-tile--compact .axm-chat-call-tile__badge{top:calc(var(--spacing, .25rem) * 1.5);right:calc(var(--spacing, .25rem) * 1.5);height:1.35rem;width:1.35rem;font-size:.625rem}.axm-chat-call-tile--compact .axm-chat-call-tile__name{right:calc(var(--spacing, .25rem) * 1.5);bottom:calc(var(--spacing, .25rem) * 1.5);max-width:calc(100% - .7rem);padding-inline:calc(var(--spacing, .25rem) * 1.5);padding-block:calc(var(--spacing, .25rem) * .5);font-size:.6875rem}.axm-chat-call-tile--compact .axm-chat-call-tile__speaking-ring{border-style:var(--tw-border-style);border-width:.16rem}.axm-chat-call-in-call-chat{display:flex;height:100%;min-height:0px;width:100%;flex:1;flex-direction:column;background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}.axm-chat-call-in-call-chat__messages{min-height:0px;flex:1;overflow:hidden;direction:ltr}.axm-chat-call-in-call-chat__composer{flex-shrink:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-border-light-surface))}.axm-chat-call-in-call-chat__no-active{display:flex;min-height:0px;width:100%;flex:1;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@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-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-outline-style: solid;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
1604
+ }], ctorParameters: () => [] });
1605
+
1606
+ export { AXMChatCallSessionPageComponent };
1607
+ //# sourceMappingURL=acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs.map