@acorex-platform/module-conversation-client 0.0.32 → 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.
- package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs} +897 -234
- package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-CpMGuSU1.mjs → acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-CpMGuSU1.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Dgs6fpN3.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Dgs6fpN3.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs.map} +1 -1
- 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
- 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
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs +1607 -0
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs +92 -0
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-DLYtqFLi.mjs → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-DLYtqFLi.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-CE40xbl9.mjs → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-CE40xbl9.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs → acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +274 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +295 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +52 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs +242 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +263 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +2 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-emit-typing-indicator.command-BzsN1_ns.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +30 -0
- package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs → acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs} +5 -5
- package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs → acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs} +26 -13
- package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
- package/package.json +18 -2
- package/types/acorex-platform-module-conversation-client-contracts-entities-message.d.ts +5 -0
- package/types/acorex-platform-module-conversation-client-contracts-entities-room.d.ts +5 -0
- package/types/acorex-platform-module-conversation-client-contracts-entity-catalog.d.ts +10 -0
- package/types/acorex-platform-module-conversation-client-local-entities.d.ts +12 -0
- package/types/acorex-platform-module-conversation-client.d.ts +24 -1
- package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs +0 -1379
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs +0 -89
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs.map +0 -1
|
@@ -1,1379 +0,0 @@
|
|
|
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 { k as AXMChatUserApi, l as AXMChatEntityConversationApi, m as AXMChatConversationApi, n as AXMChatCallRtcService, o as AXMChatCallRtcSignalInboxService, p as AXMChatCallActiveSessionService, q as AXMChatCallEventsService, r as AXMConversationRealtimeBus, A as AXMConversationEntityStoreService, h as axmResolveConversationListAvatar, s as axmReadChatCallLog, t as axmBuildChatCallLogMessage, u as axmReadChatCallMediaContextIssue, v as AXM_CHAT_CALL_RTC_PROVIDERS } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.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.audioDevices = input([], /* @ts-ignore */
|
|
121
|
-
...(ngDevMode ? [{ debugName: "audioDevices" }] : /* istanbul ignore next */ []));
|
|
122
|
-
this.videoDevices = input([], /* @ts-ignore */
|
|
123
|
-
...(ngDevMode ? [{ debugName: "videoDevices" }] : /* istanbul ignore next */ []));
|
|
124
|
-
this.selectedAudioDeviceId = input(null, /* @ts-ignore */
|
|
125
|
-
...(ngDevMode ? [{ debugName: "selectedAudioDeviceId" }] : /* istanbul ignore next */ []));
|
|
126
|
-
this.selectedVideoDeviceId = input(null, /* @ts-ignore */
|
|
127
|
-
...(ngDevMode ? [{ debugName: "selectedVideoDeviceId" }] : /* istanbul ignore next */ []));
|
|
128
|
-
this.screencast = output();
|
|
129
|
-
this.openChat = output();
|
|
130
|
-
this.toggleVideo = output();
|
|
131
|
-
this.toggleMute = output();
|
|
132
|
-
this.endCall = output();
|
|
133
|
-
this.accept = output();
|
|
134
|
-
this.decline = output();
|
|
135
|
-
this.addPeople = output();
|
|
136
|
-
this.pickDevice = output();
|
|
137
|
-
this.requestDevices = output();
|
|
138
|
-
//#endregion
|
|
139
|
-
//#region ----- State Signals -----
|
|
140
|
-
this.openMenu = signal(null, /* @ts-ignore */
|
|
141
|
-
...(ngDevMode ? [{ debugName: "openMenu" }] : /* istanbul ignore next */ []));
|
|
142
|
-
//#endregion
|
|
143
|
-
//#region ----- Computed Properties -----
|
|
144
|
-
this.isIncoming = computed(() => this.phase() === 'incoming', /* @ts-ignore */
|
|
145
|
-
...(ngDevMode ? [{ debugName: "isIncoming" }] : /* istanbul ignore next */ []));
|
|
146
|
-
this.hangupLabelKey = computed(() => this.phase() === 'active'
|
|
147
|
-
? '@conversation:chat.call.end-call'
|
|
148
|
-
: '@conversation:chat.call.cancel', /* @ts-ignore */
|
|
149
|
-
...(ngDevMode ? [{ debugName: "hangupLabelKey" }] : /* istanbul ignore next */ []));
|
|
150
|
-
this.videoLabelKey = computed(() => this.videoEnabled()
|
|
151
|
-
? '@conversation:chat.call.stop-video'
|
|
152
|
-
: '@conversation:chat.call.start-video', /* @ts-ignore */
|
|
153
|
-
...(ngDevMode ? [{ debugName: "videoLabelKey" }] : /* istanbul ignore next */ []));
|
|
154
|
-
this.muteLabelKey = computed(() => this.micMuted() ? '@conversation:chat.call.unmute' : '@conversation:chat.call.mute', /* @ts-ignore */
|
|
155
|
-
...(ngDevMode ? [{ debugName: "muteLabelKey" }] : /* istanbul ignore next */ []));
|
|
156
|
-
this.menuDevices = computed(() => {
|
|
157
|
-
const kind = this.openMenu();
|
|
158
|
-
if (kind === 'audioinput') {
|
|
159
|
-
return this.audioDevices();
|
|
160
|
-
}
|
|
161
|
-
if (kind === 'videoinput') {
|
|
162
|
-
return this.videoDevices();
|
|
163
|
-
}
|
|
164
|
-
return [];
|
|
165
|
-
}, /* @ts-ignore */
|
|
166
|
-
...(ngDevMode ? [{ debugName: "menuDevices" }] : /* istanbul ignore next */ []));
|
|
167
|
-
}
|
|
168
|
-
//#endregion
|
|
169
|
-
//#region ----- Event Handlers -----
|
|
170
|
-
onOpenDeviceMenu(event, kind) {
|
|
171
|
-
event.preventDefault();
|
|
172
|
-
event.stopPropagation();
|
|
173
|
-
this.openMenu.set(this.openMenu() === kind ? null : kind);
|
|
174
|
-
this.requestDevices.emit(kind);
|
|
175
|
-
}
|
|
176
|
-
onCloseDeviceMenu() {
|
|
177
|
-
this.openMenu.set(null);
|
|
178
|
-
}
|
|
179
|
-
onSelectDevice(kind, deviceId) {
|
|
180
|
-
this.pickDevice.emit({ kind, deviceId });
|
|
181
|
-
this.openMenu.set(null);
|
|
182
|
-
}
|
|
183
|
-
selectedDeviceId(kind) {
|
|
184
|
-
return kind === 'audioinput' ? this.selectedAudioDeviceId() : this.selectedVideoDeviceId();
|
|
185
|
-
}
|
|
186
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallControlsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
187
|
-
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 }, 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 </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__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))}@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 }); }
|
|
188
|
-
}
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallControlsComponent, decorators: [{
|
|
190
|
-
type: Component,
|
|
191
|
-
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 </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__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))}@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"] }]
|
|
192
|
-
}], 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 }] }], 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"] }] } });
|
|
193
|
-
|
|
194
|
-
//#region ----- Imports -----
|
|
195
|
-
//#endregion
|
|
196
|
-
//#region ----- Constants -----
|
|
197
|
-
const CHAT_CALL_INCOMING_RING_SRC = 'assets/sounds/ring.mp3';
|
|
198
|
-
const CHAT_CALL_OUTGOING_RING_SRC = 'assets/sounds/phone-call.mp3';
|
|
199
|
-
const CHAT_CALL_OUTGOING_GAP_MS = 2500;
|
|
200
|
-
//#endregion
|
|
201
|
-
//#region ----- Service -----
|
|
202
|
-
/**
|
|
203
|
-
* Plays call audio: looping ringtone for the callee, spaced ringback for the caller.
|
|
204
|
-
*/
|
|
205
|
-
class AXMChatCallRingerService {
|
|
206
|
-
constructor() {
|
|
207
|
-
//#region ----- Private State -----
|
|
208
|
-
this.audio = null;
|
|
209
|
-
this.gapTimer = null;
|
|
210
|
-
this.playing = false;
|
|
211
|
-
}
|
|
212
|
-
//#endregion
|
|
213
|
-
//#region ----- Playback -----
|
|
214
|
-
playIncoming() {
|
|
215
|
-
this.#playLooped(CHAT_CALL_INCOMING_RING_SRC);
|
|
216
|
-
}
|
|
217
|
-
playOutgoing() {
|
|
218
|
-
this.#playWithGap(CHAT_CALL_OUTGOING_RING_SRC, CHAT_CALL_OUTGOING_GAP_MS);
|
|
219
|
-
}
|
|
220
|
-
stop() {
|
|
221
|
-
this.playing = false;
|
|
222
|
-
this.#clearGapTimer();
|
|
223
|
-
const audio = this.audio;
|
|
224
|
-
this.audio = null;
|
|
225
|
-
if (!audio) {
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
audio.pause();
|
|
229
|
-
audio.removeAttribute('src');
|
|
230
|
-
audio.load();
|
|
231
|
-
}
|
|
232
|
-
#playLooped(src) {
|
|
233
|
-
this.stop();
|
|
234
|
-
if (typeof Audio === 'undefined') {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
this.playing = true;
|
|
238
|
-
const audio = new Audio(src);
|
|
239
|
-
audio.loop = true;
|
|
240
|
-
void audio.play().catch(() => {
|
|
241
|
-
// Autoplay may be blocked until a user gesture; the call UI still shows.
|
|
242
|
-
});
|
|
243
|
-
this.audio = audio;
|
|
244
|
-
}
|
|
245
|
-
#playWithGap(src, gapMs) {
|
|
246
|
-
this.stop();
|
|
247
|
-
if (typeof Audio === 'undefined') {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
this.playing = true;
|
|
251
|
-
this.#playOutgoingClip(src, gapMs);
|
|
252
|
-
}
|
|
253
|
-
#playOutgoingClip(src, gapMs) {
|
|
254
|
-
if (!this.playing) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const previous = this.audio;
|
|
258
|
-
this.audio = null;
|
|
259
|
-
if (previous) {
|
|
260
|
-
previous.pause();
|
|
261
|
-
previous.removeAttribute('src');
|
|
262
|
-
previous.load();
|
|
263
|
-
}
|
|
264
|
-
const audio = new Audio(src);
|
|
265
|
-
audio.loop = false;
|
|
266
|
-
audio.addEventListener('ended', () => {
|
|
267
|
-
if (!this.playing) {
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
this.#clearGapTimer();
|
|
271
|
-
this.gapTimer = setTimeout(() => {
|
|
272
|
-
this.gapTimer = null;
|
|
273
|
-
this.#playOutgoingClip(src, gapMs);
|
|
274
|
-
}, gapMs);
|
|
275
|
-
}, { once: true });
|
|
276
|
-
void audio.play().catch(() => {
|
|
277
|
-
// Autoplay may be blocked until a user gesture; the call UI still shows.
|
|
278
|
-
});
|
|
279
|
-
this.audio = audio;
|
|
280
|
-
}
|
|
281
|
-
#clearGapTimer() {
|
|
282
|
-
if (this.gapTimer == null) {
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
clearTimeout(this.gapTimer);
|
|
286
|
-
this.gapTimer = null;
|
|
287
|
-
}
|
|
288
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallRingerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
289
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallRingerService, providedIn: 'root' }); }
|
|
290
|
-
}
|
|
291
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallRingerService, decorators: [{
|
|
292
|
-
type: Injectable,
|
|
293
|
-
args: [{ providedIn: 'root' }]
|
|
294
|
-
}] });
|
|
295
|
-
|
|
296
|
-
//#region ----- Imports -----
|
|
297
|
-
//#endregion
|
|
298
|
-
//#region ----- Client -----
|
|
299
|
-
/**
|
|
300
|
-
* Posts call signaling to the conversation API (built-in realtime fan-out on server).
|
|
301
|
-
*/
|
|
302
|
-
class AXMChatCallSignalClient {
|
|
303
|
-
constructor() {
|
|
304
|
-
this.http = inject(HttpClient);
|
|
305
|
-
this.rootConfig = inject(AXP_ROOT_CONFIG_TOKEN);
|
|
306
|
-
}
|
|
307
|
-
async signal(request) {
|
|
308
|
-
const conversationId = request.conversationId.trim();
|
|
309
|
-
const url = `${this.rootConfig.baseUrl}/v1/global/conversation/conversations/${encodeURIComponent(conversationId)}/calls/signal`;
|
|
310
|
-
return firstValueFrom(this.http.post(url, {
|
|
311
|
-
action: request.action,
|
|
312
|
-
media: request.media,
|
|
313
|
-
callId: request.callId,
|
|
314
|
-
targetUserIds: request.targetUserIds,
|
|
315
|
-
}, { withCredentials: true }));
|
|
316
|
-
}
|
|
317
|
-
async log(request) {
|
|
318
|
-
const conversationId = request.conversationId.trim();
|
|
319
|
-
const url = `${this.rootConfig.baseUrl}/v1/global/conversation/conversations/${encodeURIComponent(conversationId)}/calls/log`;
|
|
320
|
-
return firstValueFrom(this.http.post(url, {
|
|
321
|
-
outcome: request.outcome,
|
|
322
|
-
media: request.media,
|
|
323
|
-
callId: request.callId,
|
|
324
|
-
durationSec: request.durationSec,
|
|
325
|
-
initiatorUserId: request.initiatorUserId,
|
|
326
|
-
joinedUserIds: request.joinedUserIds,
|
|
327
|
-
absentUserIds: request.absentUserIds,
|
|
328
|
-
isGroup: request.isGroup,
|
|
329
|
-
}, { withCredentials: true }));
|
|
330
|
-
}
|
|
331
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSignalClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
332
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSignalClient, providedIn: 'root' }); }
|
|
333
|
-
}
|
|
334
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSignalClient, decorators: [{
|
|
335
|
-
type: Injectable,
|
|
336
|
-
args: [{ providedIn: 'root' }]
|
|
337
|
-
}] });
|
|
338
|
-
|
|
339
|
-
//#region ----- Constants -----
|
|
340
|
-
/** Same palette keys as `AXPAvatarComponent` (`avatar.component.ts`). */
|
|
341
|
-
const AXM_CHAT_CALL_AVATAR_COLOR_KEYS = [
|
|
342
|
-
'primary',
|
|
343
|
-
'secondary',
|
|
344
|
-
'danger',
|
|
345
|
-
'warning',
|
|
346
|
-
'success',
|
|
347
|
-
'accent1',
|
|
348
|
-
'accent2',
|
|
349
|
-
'accent3',
|
|
350
|
-
];
|
|
351
|
-
//#endregion
|
|
352
|
-
//#region ----- Helpers -----
|
|
353
|
-
function hashString(value) {
|
|
354
|
-
let hash = 0;
|
|
355
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
356
|
-
hash = (hash << 5) - hash + value.charCodeAt(index);
|
|
357
|
-
hash |= 0;
|
|
358
|
-
}
|
|
359
|
-
return Math.abs(hash);
|
|
360
|
-
}
|
|
361
|
-
/** Stable avatar accent key per participant name — aligned with `axp-avatar` color pick. */
|
|
362
|
-
function axmChatCallTileAvatarColor(participantName) {
|
|
363
|
-
const scoped = participantName.trim() || '?';
|
|
364
|
-
const index = hashString(scoped) % AXM_CHAT_CALL_AVATAR_COLOR_KEYS.length;
|
|
365
|
-
return AXM_CHAT_CALL_AVATAR_COLOR_KEYS[index];
|
|
366
|
-
}
|
|
367
|
-
//#endregion
|
|
368
|
-
|
|
369
|
-
//#region ----- Imports -----
|
|
370
|
-
/**
|
|
371
|
-
* Attaches a LiveKit track to the host media element.
|
|
372
|
-
*/
|
|
373
|
-
class AXMChatCallVideoAttachDirective {
|
|
374
|
-
//#endregion
|
|
375
|
-
//#region ----- Lifecycle -----
|
|
376
|
-
constructor() {
|
|
377
|
-
//#region ----- Inputs -----
|
|
378
|
-
this.axmChatCallTrack = input(null, /* @ts-ignore */
|
|
379
|
-
...(ngDevMode ? [{ debugName: "axmChatCallTrack" }] : /* istanbul ignore next */ []));
|
|
380
|
-
//#endregion
|
|
381
|
-
//#region ----- Services & Dependencies -----
|
|
382
|
-
this.host = inject((ElementRef));
|
|
383
|
-
effect((onCleanup) => {
|
|
384
|
-
const track = this.axmChatCallTrack();
|
|
385
|
-
const element = this.host.nativeElement;
|
|
386
|
-
if (!track) {
|
|
387
|
-
element.srcObject = null;
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
track.attach(element);
|
|
391
|
-
void element.play().catch(() => undefined);
|
|
392
|
-
onCleanup(() => {
|
|
393
|
-
track.detach(element);
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallVideoAttachDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
398
|
-
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 }); }
|
|
399
|
-
}
|
|
400
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallVideoAttachDirective, decorators: [{
|
|
401
|
-
type: Directive,
|
|
402
|
-
args: [{
|
|
403
|
-
selector: 'video[axmChatCallTrack]',
|
|
404
|
-
}]
|
|
405
|
-
}], ctorParameters: () => [], propDecorators: { axmChatCallTrack: [{ type: i0.Input, args: [{ isSignal: true, alias: "axmChatCallTrack", required: false }] }] } });
|
|
406
|
-
|
|
407
|
-
//#region ----- Imports -----
|
|
408
|
-
//#endregion
|
|
409
|
-
//#region ----- Component -----
|
|
410
|
-
class AXMChatCallParticipantTileComponent {
|
|
411
|
-
constructor() {
|
|
412
|
-
//#region ----- Inputs -----
|
|
413
|
-
this.tile = input.required(/* @ts-ignore */
|
|
414
|
-
...(ngDevMode ? [{ debugName: "tile" }] : /* istanbul ignore next */ []));
|
|
415
|
-
this.videoTrack = input(null, /* @ts-ignore */
|
|
416
|
-
...(ngDevMode ? [{ debugName: "videoTrack" }] : /* istanbul ignore next */ []));
|
|
417
|
-
/** Sidebar thumbnail size during screen-share presentation layout. */
|
|
418
|
-
this.compact = input(false, /* @ts-ignore */
|
|
419
|
-
...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
420
|
-
//#endregion
|
|
421
|
-
//#region ----- Computed Properties -----
|
|
422
|
-
this.hasVideo = computed(() => Boolean(this.videoTrack()), /* @ts-ignore */
|
|
423
|
-
...(ngDevMode ? [{ debugName: "hasVideo" }] : /* istanbul ignore next */ []));
|
|
424
|
-
this.hasAvatarImage = computed(() => Boolean((this.tile().avatar ?? '').trim()), /* @ts-ignore */
|
|
425
|
-
...(ngDevMode ? [{ debugName: "hasAvatarImage" }] : /* istanbul ignore next */ []));
|
|
426
|
-
this.avatarColorKey = computed(() => axmChatCallTileAvatarColor(this.tile().name), /* @ts-ignore */
|
|
427
|
-
...(ngDevMode ? [{ debugName: "avatarColorKey" }] : /* istanbul ignore next */ []));
|
|
428
|
-
this.avatarSize = computed(() => {
|
|
429
|
-
if (this.hasVideo()) {
|
|
430
|
-
return 0;
|
|
431
|
-
}
|
|
432
|
-
return this.compact() ? 40 : 88;
|
|
433
|
-
}, /* @ts-ignore */
|
|
434
|
-
...(ngDevMode ? [{ debugName: "avatarSize" }] : /* istanbul ignore next */ []));
|
|
435
|
-
this.showSpeakingRing = computed(() => {
|
|
436
|
-
const tile = this.tile();
|
|
437
|
-
return !this.hasVideo() && !tile.micMuted && tile.audioLevel > 0.02;
|
|
438
|
-
}, /* @ts-ignore */
|
|
439
|
-
...(ngDevMode ? [{ debugName: "showSpeakingRing" }] : /* istanbul ignore next */ []));
|
|
440
|
-
this.speakingRingLevel = computed(() => {
|
|
441
|
-
const tile = this.tile();
|
|
442
|
-
if (this.hasVideo() || tile.micMuted || tile.audioLevel <= 0.02) {
|
|
443
|
-
return 0;
|
|
444
|
-
}
|
|
445
|
-
return Math.min(10, Math.round(tile.audioLevel * 10));
|
|
446
|
-
}, /* @ts-ignore */
|
|
447
|
-
...(ngDevMode ? [{ debugName: "speakingRingLevel" }] : /* istanbul ignore next */ []));
|
|
448
|
-
}
|
|
449
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallParticipantTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
450
|
-
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__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))}@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 }); }
|
|
451
|
-
}
|
|
452
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallParticipantTileComponent, decorators: [{
|
|
453
|
-
type: Component,
|
|
454
|
-
args: [{ selector: 'axm-chat-call-participant-tile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
455
|
-
class: 'axm-chat-call-participant-tile',
|
|
456
|
-
'[class.axm-chat-call-participant-tile--rail]': 'compact()',
|
|
457
|
-
}, 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__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))}@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"] }]
|
|
458
|
-
}], 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 }] }] } });
|
|
459
|
-
|
|
460
|
-
//#region ----- Imports -----
|
|
461
|
-
//#endregion
|
|
462
|
-
//#region ----- Component -----
|
|
463
|
-
/**
|
|
464
|
-
* Message list + composer for the call-session chat drawer.
|
|
465
|
-
* The parent selects the call conversation in {@link AXConversationService} before rendering.
|
|
466
|
-
*/
|
|
467
|
-
class AXMChatCallInCallChatComponent {
|
|
468
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallInCallChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
469
|
-
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 <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__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))}@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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
470
|
-
}
|
|
471
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallInCallChatComponent, decorators: [{
|
|
472
|
-
type: Component,
|
|
473
|
-
args: [{ selector: 'axm-chat-call-in-call-chat', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
|
474
|
-
AXConversationContainerDirective,
|
|
475
|
-
AXConversationMessageListComponent,
|
|
476
|
-
AXConversationComposerComponent,
|
|
477
|
-
], 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 <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__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))}@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"] }]
|
|
478
|
-
}] });
|
|
479
|
-
|
|
480
|
-
//#region ----- Imports -----
|
|
481
|
-
//#endregion
|
|
482
|
-
//#region ----- Component -----
|
|
483
|
-
/**
|
|
484
|
-
* Call-session popup backed by RTC/LiveKit.
|
|
485
|
-
*/
|
|
486
|
-
class AXMChatCallSessionPageComponent extends AXBasePageComponent {
|
|
487
|
-
//#endregion
|
|
488
|
-
//#region ----- Stage Helpers -----
|
|
489
|
-
resolveVideoTrack(tile) {
|
|
490
|
-
if (!tile.videoEnabled) {
|
|
491
|
-
return null;
|
|
492
|
-
}
|
|
493
|
-
if (tile.isSelf) {
|
|
494
|
-
return this.localVideoTrack() ?? null;
|
|
495
|
-
}
|
|
496
|
-
const remote = this.remoteVideos().find((item) => item.participantId === tile.id);
|
|
497
|
-
return remote?.track ?? null;
|
|
498
|
-
}
|
|
499
|
-
//#endregion
|
|
500
|
-
//#region ----- Lifecycle -----
|
|
501
|
-
constructor() {
|
|
502
|
-
super();
|
|
503
|
-
this.sessionMedia = 'voice';
|
|
504
|
-
this.sessionPhase = 'outgoing-waiting';
|
|
505
|
-
//#endregion
|
|
506
|
-
//#region ----- Services & Dependencies -----
|
|
507
|
-
this.userApi = inject(AXMChatUserApi);
|
|
508
|
-
this.conversationApi = inject(AXMChatEntityConversationApi);
|
|
509
|
-
this.chatConversationApi = inject(AXMChatConversationApi);
|
|
510
|
-
this.conversationService = inject(AXConversationService);
|
|
511
|
-
this.layoutBuilder = inject(AXPLayoutBuilderService);
|
|
512
|
-
this.toastService = inject(AXToastService);
|
|
513
|
-
this.translationService = inject(AXTranslationService);
|
|
514
|
-
this.rtc = inject(AXMChatCallRtcService);
|
|
515
|
-
this.callSignal = inject(AXMChatCallSignalClient);
|
|
516
|
-
this.signalInbox = inject(AXMChatCallRtcSignalInboxService);
|
|
517
|
-
this.activeCallSessions = inject(AXMChatCallActiveSessionService);
|
|
518
|
-
this.callEvents = inject(AXMChatCallEventsService);
|
|
519
|
-
this.realtimeBus = inject(AXMConversationRealtimeBus);
|
|
520
|
-
this.conversationStore = inject(AXMConversationEntityStoreService);
|
|
521
|
-
this.ringer = inject(AXMChatCallRingerService);
|
|
522
|
-
//#endregion
|
|
523
|
-
//#region ----- State Signals -----
|
|
524
|
-
this.loading = signal(true, /* @ts-ignore */
|
|
525
|
-
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
526
|
-
this.error = signal(false, /* @ts-ignore */
|
|
527
|
-
...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
528
|
-
this.errorMessage = signal(null, /* @ts-ignore */
|
|
529
|
-
...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
530
|
-
this.conversation = signal(null, /* @ts-ignore */
|
|
531
|
-
...(ngDevMode ? [{ debugName: "conversation" }] : /* istanbul ignore next */ []));
|
|
532
|
-
this.phase = signal('outgoing-waiting', /* @ts-ignore */
|
|
533
|
-
...(ngDevMode ? [{ debugName: "phase" }] : /* istanbul ignore next */ []));
|
|
534
|
-
this.mediaType = signal('voice', /* @ts-ignore */
|
|
535
|
-
...(ngDevMode ? [{ debugName: "mediaType" }] : /* istanbul ignore next */ []));
|
|
536
|
-
this.videoEnabled = signal(false, /* @ts-ignore */
|
|
537
|
-
...(ngDevMode ? [{ debugName: "videoEnabled" }] : /* istanbul ignore next */ []));
|
|
538
|
-
this.micMuted = signal(false, /* @ts-ignore */
|
|
539
|
-
...(ngDevMode ? [{ debugName: "micMuted" }] : /* istanbul ignore next */ []));
|
|
540
|
-
this.currentUserId = signal(null, /* @ts-ignore */
|
|
541
|
-
...(ngDevMode ? [{ debugName: "currentUserId" }] : /* istanbul ignore next */ []));
|
|
542
|
-
this.callId = signal(null, /* @ts-ignore */
|
|
543
|
-
...(ngDevMode ? [{ debugName: "callId" }] : /* istanbul ignore next */ []));
|
|
544
|
-
this.ringTimeoutId = null;
|
|
545
|
-
this.outcomeSub = null;
|
|
546
|
-
this.callEventsSub = null;
|
|
547
|
-
this.closing = false;
|
|
548
|
-
this.accepting = false;
|
|
549
|
-
this.activeSince = null;
|
|
550
|
-
this.initiatorUserId = null;
|
|
551
|
-
this.audioDevices = signal([], /* @ts-ignore */
|
|
552
|
-
...(ngDevMode ? [{ debugName: "audioDevices" }] : /* istanbul ignore next */ []));
|
|
553
|
-
this.videoDevices = signal([], /* @ts-ignore */
|
|
554
|
-
...(ngDevMode ? [{ debugName: "videoDevices" }] : /* istanbul ignore next */ []));
|
|
555
|
-
this.selectedAudioDeviceId = signal(null, /* @ts-ignore */
|
|
556
|
-
...(ngDevMode ? [{ debugName: "selectedAudioDeviceId" }] : /* istanbul ignore next */ []));
|
|
557
|
-
this.selectedVideoDeviceId = signal(null, /* @ts-ignore */
|
|
558
|
-
...(ngDevMode ? [{ debugName: "selectedVideoDeviceId" }] : /* istanbul ignore next */ []));
|
|
559
|
-
this.chatDrawerOpen = signal(false, /* @ts-ignore */
|
|
560
|
-
...(ngDevMode ? [{ debugName: "chatDrawerOpen" }] : /* istanbul ignore next */ []));
|
|
561
|
-
this.savedActiveConversationId = undefined;
|
|
562
|
-
this.localVideoTrack = this.rtc.localVideoTrack;
|
|
563
|
-
this.remoteVideos = this.rtc.remoteVideos;
|
|
564
|
-
this.localScreenShareTrack = this.rtc.localScreenShareTrack;
|
|
565
|
-
this.remoteScreenShares = this.rtc.remoteScreenShares;
|
|
566
|
-
//#endregion
|
|
567
|
-
//#region ----- Computed Properties -----
|
|
568
|
-
this.peerDisplayName = computed(() => {
|
|
569
|
-
const conversation = this.conversation();
|
|
570
|
-
if (!conversation) {
|
|
571
|
-
return '';
|
|
572
|
-
}
|
|
573
|
-
return axmResolveConversationListAvatar(conversation).title;
|
|
574
|
-
}, /* @ts-ignore */
|
|
575
|
-
...(ngDevMode ? [{ debugName: "peerDisplayName" }] : /* istanbul ignore next */ []));
|
|
576
|
-
this.peerAvatarSrc = computed(() => {
|
|
577
|
-
const conversation = this.conversation();
|
|
578
|
-
if (!conversation) {
|
|
579
|
-
return '';
|
|
580
|
-
}
|
|
581
|
-
return axmResolveConversationListAvatar(conversation).avatar ?? '';
|
|
582
|
-
}, /* @ts-ignore */
|
|
583
|
-
...(ngDevMode ? [{ debugName: "peerAvatarSrc" }] : /* istanbul ignore next */ []));
|
|
584
|
-
this.showStage = computed(() => {
|
|
585
|
-
if (this.phase() === 'active' || this.mediaType() === 'video' || this.videoEnabled()) {
|
|
586
|
-
return true;
|
|
587
|
-
}
|
|
588
|
-
return (this.remoteVideos().length > 0 ||
|
|
589
|
-
this.remoteScreenShares().length > 0 ||
|
|
590
|
-
Boolean(this.localScreenShareTrack()));
|
|
591
|
-
}, /* @ts-ignore */
|
|
592
|
-
...(ngDevMode ? [{ debugName: "showStage" }] : /* istanbul ignore next */ []));
|
|
593
|
-
this.activeScreenShare = computed(() => {
|
|
594
|
-
const local = this.localScreenShareTrack();
|
|
595
|
-
const currentUserId = this.currentUserId();
|
|
596
|
-
const conversation = this.conversation();
|
|
597
|
-
if (local && currentUserId) {
|
|
598
|
-
const self = conversation?.participants?.find((participant) => participant.id === currentUserId);
|
|
599
|
-
return {
|
|
600
|
-
participantId: currentUserId,
|
|
601
|
-
participantName: self?.name ?? 'You',
|
|
602
|
-
isSelf: true,
|
|
603
|
-
track: local,
|
|
604
|
-
};
|
|
605
|
-
}
|
|
606
|
-
const remote = this.remoteScreenShares()[0];
|
|
607
|
-
if (!remote) {
|
|
608
|
-
return null;
|
|
609
|
-
}
|
|
610
|
-
return {
|
|
611
|
-
participantId: remote.participantId,
|
|
612
|
-
participantName: remote.participantName,
|
|
613
|
-
isSelf: false,
|
|
614
|
-
track: remote.track,
|
|
615
|
-
};
|
|
616
|
-
}, /* @ts-ignore */
|
|
617
|
-
...(ngDevMode ? [{ debugName: "activeScreenShare" }] : /* istanbul ignore next */ []));
|
|
618
|
-
this.showScreenShareLayout = computed(() => Boolean(this.activeScreenShare()), /* @ts-ignore */
|
|
619
|
-
...(ngDevMode ? [{ debugName: "showScreenShareLayout" }] : /* istanbul ignore next */ []));
|
|
620
|
-
this.showParticipantGrid = computed(() => {
|
|
621
|
-
if (!this.showStage()) {
|
|
622
|
-
return false;
|
|
623
|
-
}
|
|
624
|
-
if (this.phase() === 'active') {
|
|
625
|
-
return true;
|
|
626
|
-
}
|
|
627
|
-
const phase = this.phase();
|
|
628
|
-
return ((phase === 'connecting' || phase === 'outgoing-waiting') &&
|
|
629
|
-
(this.videoEnabled() || this.remoteVideos().length > 0));
|
|
630
|
-
}, /* @ts-ignore */
|
|
631
|
-
...(ngDevMode ? [{ debugName: "showParticipantGrid" }] : /* istanbul ignore next */ []));
|
|
632
|
-
/** Voice ring / waiting without a video stage — center the profile block. */
|
|
633
|
-
this.idleLayout = computed(() => {
|
|
634
|
-
if (this.showParticipantGrid()) {
|
|
635
|
-
return false;
|
|
636
|
-
}
|
|
637
|
-
if (this.showStage()) {
|
|
638
|
-
return false;
|
|
639
|
-
}
|
|
640
|
-
const phase = this.phase();
|
|
641
|
-
return phase === 'incoming' || phase === 'outgoing-waiting' || phase === 'connecting';
|
|
642
|
-
}, /* @ts-ignore */
|
|
643
|
-
...(ngDevMode ? [{ debugName: "idleLayout" }] : /* istanbul ignore next */ []));
|
|
644
|
-
this.headerAvatarSize = computed(() => 128, /* @ts-ignore */
|
|
645
|
-
...(ngDevMode ? [{ debugName: "headerAvatarSize" }] : /* istanbul ignore next */ []));
|
|
646
|
-
this.phaseTextKey = computed(() => {
|
|
647
|
-
switch (this.phase()) {
|
|
648
|
-
case 'incoming':
|
|
649
|
-
return '@conversation:chat.call.is-calling';
|
|
650
|
-
case 'connecting':
|
|
651
|
-
return '@conversation:chat.call.connecting';
|
|
652
|
-
case 'active':
|
|
653
|
-
return '@conversation:chat.call.connected';
|
|
654
|
-
default:
|
|
655
|
-
return '@conversation:chat.call.waiting';
|
|
656
|
-
}
|
|
657
|
-
}, /* @ts-ignore */
|
|
658
|
-
...(ngDevMode ? [{ debugName: "phaseTextKey" }] : /* istanbul ignore next */ []));
|
|
659
|
-
this.stageTiles = computed(() => {
|
|
660
|
-
const conversation = this.conversation();
|
|
661
|
-
const currentUserId = this.currentUserId();
|
|
662
|
-
if (!conversation || !currentUserId) {
|
|
663
|
-
return [];
|
|
664
|
-
}
|
|
665
|
-
const audioLevels = this.rtc.participantAudioLevels();
|
|
666
|
-
const remoteMicMuted = this.rtc.remoteMicMuted();
|
|
667
|
-
const remoteVideoIds = new Set(this.remoteVideos().map((item) => item.participantId));
|
|
668
|
-
const buildTile = (participant, isSelf) => {
|
|
669
|
-
const id = participant.id;
|
|
670
|
-
const micMuted = isSelf ? this.micMuted() : (remoteMicMuted[id] ?? false);
|
|
671
|
-
const videoEnabled = isSelf ? this.videoEnabled() : remoteVideoIds.has(id);
|
|
672
|
-
const audioLevel = micMuted ? 0 : Math.min(1, Math.max(0, audioLevels[id] ?? 0));
|
|
673
|
-
return {
|
|
674
|
-
id,
|
|
675
|
-
name: participant.name,
|
|
676
|
-
avatar: participant.avatar,
|
|
677
|
-
isSelf,
|
|
678
|
-
micMuted,
|
|
679
|
-
videoEnabled,
|
|
680
|
-
audioLevel,
|
|
681
|
-
};
|
|
682
|
-
};
|
|
683
|
-
const remotes = (conversation.participants ?? []).filter((participant) => participant.id !== currentUserId);
|
|
684
|
-
const self = conversation.participants?.find((participant) => participant.id === currentUserId);
|
|
685
|
-
const tiles = remotes.map((participant) => buildTile(participant, false));
|
|
686
|
-
tiles.push(buildTile({
|
|
687
|
-
id: currentUserId,
|
|
688
|
-
name: self?.name ?? 'You',
|
|
689
|
-
avatar: self?.avatar,
|
|
690
|
-
}, true));
|
|
691
|
-
return tiles;
|
|
692
|
-
}, /* @ts-ignore */
|
|
693
|
-
...(ngDevMode ? [{ debugName: "stageTiles" }] : /* istanbul ignore next */ []));
|
|
694
|
-
effect(() => {
|
|
695
|
-
const remoteCount = this.rtc.remoteParticipantCount();
|
|
696
|
-
const connectionState = this.rtc.connectionState();
|
|
697
|
-
const phase = this.phase();
|
|
698
|
-
if (connectionState === ConnectionState.Connected &&
|
|
699
|
-
remoteCount > 0 &&
|
|
700
|
-
(phase === 'outgoing-waiting' || phase === 'connecting')) {
|
|
701
|
-
this.#clearRingTimeout();
|
|
702
|
-
this.ringer.stop();
|
|
703
|
-
this.phase.set('active');
|
|
704
|
-
this.activeSince = Date.now();
|
|
705
|
-
void this.rtc.ensureAudioPlayback();
|
|
706
|
-
}
|
|
707
|
-
});
|
|
708
|
-
effect(() => {
|
|
709
|
-
if (this.phase() === 'active' && this.activeSince == null) {
|
|
710
|
-
this.activeSince = Date.now();
|
|
711
|
-
}
|
|
712
|
-
});
|
|
713
|
-
}
|
|
714
|
-
ngOnInit() {
|
|
715
|
-
this.outcomeSub = this.realtimeBus.messageStream$.subscribe((message) => {
|
|
716
|
-
const log = axmReadChatCallLog(message);
|
|
717
|
-
const currentCallId = this.callId();
|
|
718
|
-
if (!log || !currentCallId || log.callId !== currentCallId) {
|
|
719
|
-
return;
|
|
720
|
-
}
|
|
721
|
-
void this.#closeFromRemoteLog();
|
|
722
|
-
});
|
|
723
|
-
this.callEventsSub = this.callEvents.events$.subscribe((payload) => {
|
|
724
|
-
const currentCallId = this.callId();
|
|
725
|
-
if (!currentCallId || payload.callId !== currentCallId) {
|
|
726
|
-
return;
|
|
727
|
-
}
|
|
728
|
-
const selfId = this.currentUserId();
|
|
729
|
-
const fromSelf = Boolean(selfId && payload.fromUserId === selfId);
|
|
730
|
-
if (fromSelf) {
|
|
731
|
-
if (payload.action === 'accept' ||
|
|
732
|
-
payload.action === 'decline' ||
|
|
733
|
-
payload.action === 'cancel' ||
|
|
734
|
-
payload.action === 'end') {
|
|
735
|
-
const phase = this.phase();
|
|
736
|
-
if (phase === 'incoming' || phase === 'outgoing-waiting') {
|
|
737
|
-
void this.#closeFromSiblingDevice();
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
return;
|
|
741
|
-
}
|
|
742
|
-
if (payload.action === 'accept') {
|
|
743
|
-
this.activeCallSessions.addParticipant(currentCallId, payload.fromUserId);
|
|
744
|
-
void this.#onPeerAccepted();
|
|
745
|
-
return;
|
|
746
|
-
}
|
|
747
|
-
if (payload.action === 'end') {
|
|
748
|
-
void this.#closeFromRemoteEnd();
|
|
749
|
-
return;
|
|
750
|
-
}
|
|
751
|
-
if (payload.action === 'decline' || payload.action === 'cancel') {
|
|
752
|
-
void this.#closeFromRemoteLog();
|
|
753
|
-
}
|
|
754
|
-
});
|
|
755
|
-
void this.#bootstrap();
|
|
756
|
-
}
|
|
757
|
-
ngOnDestroy() {
|
|
758
|
-
this.ringer.stop();
|
|
759
|
-
this.#clearRingTimeout();
|
|
760
|
-
this.outcomeSub?.unsubscribe();
|
|
761
|
-
this.callEventsSub?.unsubscribe();
|
|
762
|
-
this.#restoreCallConversation();
|
|
763
|
-
if (!this.closing) {
|
|
764
|
-
const phase = this.phase();
|
|
765
|
-
if (phase === 'incoming') {
|
|
766
|
-
void this.#logOutcome('declined');
|
|
767
|
-
}
|
|
768
|
-
else if (phase === 'outgoing-waiting') {
|
|
769
|
-
void this.#logOutcome('cancelled');
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
this.signalInbox.releaseCall(this.callId());
|
|
773
|
-
this.activeCallSessions.release(this.callId());
|
|
774
|
-
void this.rtc.disconnect();
|
|
775
|
-
super.ngOnDestroy();
|
|
776
|
-
}
|
|
777
|
-
//#endregion
|
|
778
|
-
//#region ----- Event Handlers -----
|
|
779
|
-
onToggleVideo() {
|
|
780
|
-
void this.#setVideoEnabled(!this.videoEnabled());
|
|
781
|
-
}
|
|
782
|
-
onToggleMute() {
|
|
783
|
-
const nextMuted = !this.micMuted();
|
|
784
|
-
this.micMuted.set(nextMuted);
|
|
785
|
-
void this.rtc.setMicrophoneEnabled(!nextMuted);
|
|
786
|
-
if (!nextMuted) {
|
|
787
|
-
void this.rtc.ensureAudioPlayback();
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
async onScreencast() {
|
|
791
|
-
try {
|
|
792
|
-
await this.rtc.toggleScreenShare(!this.rtc.isScreenSharing());
|
|
793
|
-
}
|
|
794
|
-
catch {
|
|
795
|
-
const message = await this.translationService.translateAsync('@conversation:chat.call.media-error');
|
|
796
|
-
this.#toast(message, 'danger');
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
onEndCall() {
|
|
800
|
-
if (this.phase() === 'outgoing-waiting') {
|
|
801
|
-
void this.#finishWithLog('cancelled');
|
|
802
|
-
return;
|
|
803
|
-
}
|
|
804
|
-
void this.#endActiveCall();
|
|
805
|
-
}
|
|
806
|
-
onAccept() {
|
|
807
|
-
void this.#acceptIncoming();
|
|
808
|
-
}
|
|
809
|
-
onDecline() {
|
|
810
|
-
void this.#finishWithLog('declined');
|
|
811
|
-
}
|
|
812
|
-
onToggleChatDrawer() {
|
|
813
|
-
this.chatDrawerOpen.update((open) => !open);
|
|
814
|
-
}
|
|
815
|
-
async onAddPeople() {
|
|
816
|
-
const conversation = this.conversation();
|
|
817
|
-
const callId = this.callId();
|
|
818
|
-
const currentUserId = this.currentUserId();
|
|
819
|
-
if (!conversation?.id || !callId || !currentUserId || this.phase() !== 'active') {
|
|
820
|
-
return;
|
|
821
|
-
}
|
|
822
|
-
const conversationId = conversation.id.trim();
|
|
823
|
-
const picked = await axmOpenChatCallAddPeopleDialog(this.layoutBuilder, this.translationService);
|
|
824
|
-
if (!picked) {
|
|
825
|
-
return;
|
|
826
|
-
}
|
|
827
|
-
const inCallIds = new Set([currentUserId, ...this.rtc.getConnectedParticipantIds()]);
|
|
828
|
-
const targetUserIds = picked.filter((userId) => !inCallIds.has(userId));
|
|
829
|
-
if (!targetUserIds.length) {
|
|
830
|
-
const message = await this.translationService.translateAsync('@conversation:chat.call.add-people-all-in-call');
|
|
831
|
-
this.#toast(message, 'default');
|
|
832
|
-
return;
|
|
833
|
-
}
|
|
834
|
-
try {
|
|
835
|
-
const participantIds = new Set((conversation.participants ?? []).map((participant) => participant.id));
|
|
836
|
-
const toAddToConversation = targetUserIds.filter((userId) => !participantIds.has(userId));
|
|
837
|
-
if (toAddToConversation.length) {
|
|
838
|
-
const updated = await this.conversationApi.addParticipants(conversationId, toAddToConversation);
|
|
839
|
-
this.conversation.set(updated);
|
|
840
|
-
}
|
|
841
|
-
await this.callSignal.signal({
|
|
842
|
-
conversationId,
|
|
843
|
-
action: 'invite',
|
|
844
|
-
media: this.mediaType(),
|
|
845
|
-
callId,
|
|
846
|
-
targetUserIds,
|
|
847
|
-
});
|
|
848
|
-
this.#trackCallParticipants(targetUserIds);
|
|
849
|
-
const message = await this.translationService.translateAsync('@conversation:chat.call.add-people-success');
|
|
850
|
-
this.#toast(message, 'success');
|
|
851
|
-
}
|
|
852
|
-
catch (error) {
|
|
853
|
-
const fallback = await this.translationService.translateAsync('@conversation:chat.call.add-people-error');
|
|
854
|
-
this.#toast(error instanceof Error && error.message ? error.message : fallback, 'danger');
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
onRequestDevices(kind) {
|
|
858
|
-
void this.#refreshDevices(kind);
|
|
859
|
-
}
|
|
860
|
-
onPickDevice(choice) {
|
|
861
|
-
if (choice.kind === 'audioinput') {
|
|
862
|
-
this.selectedAudioDeviceId.set(choice.deviceId);
|
|
863
|
-
}
|
|
864
|
-
else {
|
|
865
|
-
this.selectedVideoDeviceId.set(choice.deviceId);
|
|
866
|
-
}
|
|
867
|
-
void this.rtc.switchInputDevice(choice.kind, choice.deviceId);
|
|
868
|
-
}
|
|
869
|
-
//#endregion
|
|
870
|
-
//#region ----- Bootstrap -----
|
|
871
|
-
async #bootstrap() {
|
|
872
|
-
const conversation = this.sessionConversation;
|
|
873
|
-
const conversationId = conversation?.id?.trim();
|
|
874
|
-
const media = this.sessionMedia === 'video' ? 'video' : 'voice';
|
|
875
|
-
const phase = this.sessionPhase === 'incoming' ||
|
|
876
|
-
this.sessionPhase === 'active' ||
|
|
877
|
-
this.sessionPhase === 'connecting' ||
|
|
878
|
-
this.sessionPhase === 'outgoing-waiting'
|
|
879
|
-
? this.sessionPhase
|
|
880
|
-
: 'outgoing-waiting';
|
|
881
|
-
this.mediaType.set(media);
|
|
882
|
-
this.phase.set(phase);
|
|
883
|
-
this.videoEnabled.set(media === 'video');
|
|
884
|
-
this.callId.set(this.sessionCallId?.trim() || createRandomUuid());
|
|
885
|
-
this.activeCallSessions.engage(this.callId());
|
|
886
|
-
if (!conversation || !conversationId) {
|
|
887
|
-
this.loading.set(false);
|
|
888
|
-
this.error.set(true);
|
|
889
|
-
return;
|
|
890
|
-
}
|
|
891
|
-
this.loading.set(true);
|
|
892
|
-
this.error.set(false);
|
|
893
|
-
this.errorMessage.set(null);
|
|
894
|
-
this.conversation.set(conversation);
|
|
895
|
-
try {
|
|
896
|
-
await this.#bindCallConversation();
|
|
897
|
-
const currentUser = await this.userApi.getCurrentUser();
|
|
898
|
-
this.currentUserId.set(currentUser.id);
|
|
899
|
-
this.initiatorUserId =
|
|
900
|
-
phase === 'incoming'
|
|
901
|
-
? this.sessionInitiatorUserId?.trim() || null
|
|
902
|
-
: currentUser.id;
|
|
903
|
-
this.videoEnabled.set(media === 'video');
|
|
904
|
-
this.micMuted.set(false);
|
|
905
|
-
if (phase === 'incoming') {
|
|
906
|
-
this.#trackCallParticipants((conversation.participants ?? []).map((participant) => participant.id));
|
|
907
|
-
this.ringer.playIncoming();
|
|
908
|
-
void this.#refreshDevices();
|
|
909
|
-
return;
|
|
910
|
-
}
|
|
911
|
-
this.phase.set('outgoing-waiting');
|
|
912
|
-
this.ringer.playOutgoing();
|
|
913
|
-
await this.#ringPeers(currentUser.id);
|
|
914
|
-
this.#armRingTimeout();
|
|
915
|
-
void this.#connectMedia(currentUser.id, currentUser.name, conversationId, media).catch(async (error) => {
|
|
916
|
-
const message = await this.#resolveCallConnectErrorMessage(error);
|
|
917
|
-
this.errorMessage.set(message);
|
|
918
|
-
this.error.set(true);
|
|
919
|
-
this.ringer.stop();
|
|
920
|
-
this.#clearRingTimeout();
|
|
921
|
-
this.signalInbox.suppressCall(this.callId());
|
|
922
|
-
void this.#signalCallAction('cancel');
|
|
923
|
-
});
|
|
924
|
-
void this.#refreshDevices();
|
|
925
|
-
}
|
|
926
|
-
catch (error) {
|
|
927
|
-
this.error.set(true);
|
|
928
|
-
this.errorMessage.set(await this.#resolveCallConnectErrorMessage(error));
|
|
929
|
-
}
|
|
930
|
-
finally {
|
|
931
|
-
this.loading.set(false);
|
|
932
|
-
}
|
|
933
|
-
}
|
|
934
|
-
//#endregion
|
|
935
|
-
//#region ----- Call Signaling -----
|
|
936
|
-
async #connectMedia(participantIdentity, participantName, conversationId, media) {
|
|
937
|
-
await this.rtc.connect({
|
|
938
|
-
conversationId,
|
|
939
|
-
participantIdentity,
|
|
940
|
-
participantName,
|
|
941
|
-
media,
|
|
942
|
-
});
|
|
943
|
-
}
|
|
944
|
-
async #ringPeers(fromUserId) {
|
|
945
|
-
const conversation = this.conversation();
|
|
946
|
-
const callId = this.callId();
|
|
947
|
-
if (!conversation?.id || !callId) {
|
|
948
|
-
return;
|
|
949
|
-
}
|
|
950
|
-
const targetUserIds = this.#resolveInitialRingTargetUserIds(conversation, fromUserId);
|
|
951
|
-
if (!targetUserIds.length) {
|
|
952
|
-
return;
|
|
953
|
-
}
|
|
954
|
-
this.#trackCallParticipants(targetUserIds);
|
|
955
|
-
try {
|
|
956
|
-
await this.callSignal.signal({
|
|
957
|
-
conversationId: conversation.id,
|
|
958
|
-
action: 'invite',
|
|
959
|
-
media: this.mediaType(),
|
|
960
|
-
callId,
|
|
961
|
-
targetUserIds,
|
|
962
|
-
});
|
|
963
|
-
}
|
|
964
|
-
catch {
|
|
965
|
-
// Built-in realtime is the primary ring path.
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
/**
|
|
969
|
-
* Private chats ring only the peer; group chats ring every participant except self.
|
|
970
|
-
*/
|
|
971
|
-
#resolveInitialRingTargetUserIds(conversation, fromUserId) {
|
|
972
|
-
const scopedFrom = fromUserId.trim();
|
|
973
|
-
const participantIds = (conversation.participants ?? [])
|
|
974
|
-
.map((participant) => participant.id?.trim())
|
|
975
|
-
.filter((id) => Boolean(id) && id !== scopedFrom);
|
|
976
|
-
if (conversation.type === 'private') {
|
|
977
|
-
return participantIds.slice(0, 1);
|
|
978
|
-
}
|
|
979
|
-
return participantIds;
|
|
980
|
-
}
|
|
981
|
-
async #acceptIncoming() {
|
|
982
|
-
if (this.accepting || this.closing) {
|
|
983
|
-
return;
|
|
984
|
-
}
|
|
985
|
-
const conversationId = this.conversation()?.id?.trim();
|
|
986
|
-
const currentUserId = this.currentUserId();
|
|
987
|
-
const callId = this.callId();
|
|
988
|
-
if (!conversationId || !currentUserId) {
|
|
989
|
-
return;
|
|
990
|
-
}
|
|
991
|
-
this.signalInbox.suppressCall(callId);
|
|
992
|
-
this.accepting = true;
|
|
993
|
-
this.#clearRingTimeout();
|
|
994
|
-
this.ringer.stop();
|
|
995
|
-
this.phase.set('connecting');
|
|
996
|
-
void this.#signalCallAction('accept');
|
|
997
|
-
try {
|
|
998
|
-
await this.#connectMedia(currentUserId, this.#selfDisplayName(currentUserId), conversationId, this.mediaType());
|
|
999
|
-
this.phase.set('active');
|
|
1000
|
-
this.activeSince = Date.now();
|
|
1001
|
-
void this.rtc.ensureAudioPlayback();
|
|
1002
|
-
if (this.mediaType() === 'video') {
|
|
1003
|
-
void this.#setVideoEnabled(true);
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
catch (error) {
|
|
1007
|
-
this.accepting = false;
|
|
1008
|
-
this.ringer.stop();
|
|
1009
|
-
this.errorMessage.set(await this.#resolveCallConnectErrorMessage(error));
|
|
1010
|
-
this.error.set(true);
|
|
1011
|
-
void this.#signalCallAction('end');
|
|
1012
|
-
}
|
|
1013
|
-
}
|
|
1014
|
-
async #onPeerAccepted() {
|
|
1015
|
-
if (this.closing) {
|
|
1016
|
-
return;
|
|
1017
|
-
}
|
|
1018
|
-
this.#clearRingTimeout();
|
|
1019
|
-
this.ringer.stop();
|
|
1020
|
-
this.phase.set(this.rtc.connectionState() === ConnectionState.Connected ? 'active' : 'connecting');
|
|
1021
|
-
if (this.phase() === 'active') {
|
|
1022
|
-
this.activeSince = Date.now();
|
|
1023
|
-
}
|
|
1024
|
-
void this.rtc.ensureAudioPlayback();
|
|
1025
|
-
}
|
|
1026
|
-
async #signalCallAction(action) {
|
|
1027
|
-
const conversation = this.conversation();
|
|
1028
|
-
const callId = this.callId();
|
|
1029
|
-
const fromUserId = this.currentUserId();
|
|
1030
|
-
if (!conversation?.id || !callId || !fromUserId) {
|
|
1031
|
-
return;
|
|
1032
|
-
}
|
|
1033
|
-
const targetUserIds = this.#resolveCallSignalTargetUserIds(conversation, fromUserId, action);
|
|
1034
|
-
if (!targetUserIds.length) {
|
|
1035
|
-
return;
|
|
1036
|
-
}
|
|
1037
|
-
try {
|
|
1038
|
-
await this.callSignal.signal({
|
|
1039
|
-
conversationId: conversation.id,
|
|
1040
|
-
action,
|
|
1041
|
-
media: this.mediaType(),
|
|
1042
|
-
callId,
|
|
1043
|
-
targetUserIds,
|
|
1044
|
-
});
|
|
1045
|
-
}
|
|
1046
|
-
catch {
|
|
1047
|
-
// Media join is the source of truth; signaling is best-effort.
|
|
1048
|
-
}
|
|
1049
|
-
}
|
|
1050
|
-
/** During an active call, signal everyone who joined or was invited — not only local conversation.participants. */
|
|
1051
|
-
#resolveCallSignalTargetUserIds(conversation, fromUserId, action) {
|
|
1052
|
-
const scopedFrom = fromUserId.trim();
|
|
1053
|
-
const connectedIds = this.rtc
|
|
1054
|
-
.getConnectedParticipantIds()
|
|
1055
|
-
.map((id) => id.trim())
|
|
1056
|
-
.filter(Boolean);
|
|
1057
|
-
const participantIds = (conversation.participants ?? [])
|
|
1058
|
-
.map((participant) => participant.id?.trim())
|
|
1059
|
-
.filter((id) => Boolean(id) && id !== scopedFrom);
|
|
1060
|
-
const trackedIds = this.activeCallSessions.getParticipantIds(this.callId());
|
|
1061
|
-
if (action === 'end') {
|
|
1062
|
-
return this.#unionCallTargetUserIds(scopedFrom, participantIds, connectedIds, trackedIds);
|
|
1063
|
-
}
|
|
1064
|
-
if (action === 'accept') {
|
|
1065
|
-
const union = this.#unionCallTargetUserIds(scopedFrom, participantIds, connectedIds, trackedIds);
|
|
1066
|
-
if (union.length) {
|
|
1067
|
-
return union;
|
|
1068
|
-
}
|
|
1069
|
-
if (conversation.type === 'private') {
|
|
1070
|
-
return participantIds.slice(0, 1);
|
|
1071
|
-
}
|
|
1072
|
-
return participantIds;
|
|
1073
|
-
}
|
|
1074
|
-
if (action === 'decline' || action === 'cancel') {
|
|
1075
|
-
const union = this.#unionCallTargetUserIds(scopedFrom, participantIds, trackedIds, []);
|
|
1076
|
-
if (union.length) {
|
|
1077
|
-
return union;
|
|
1078
|
-
}
|
|
1079
|
-
if (conversation.type === 'private') {
|
|
1080
|
-
return participantIds.slice(0, 1);
|
|
1081
|
-
}
|
|
1082
|
-
return participantIds;
|
|
1083
|
-
}
|
|
1084
|
-
return participantIds;
|
|
1085
|
-
}
|
|
1086
|
-
#unionCallTargetUserIds(fromUserId, participantIds, connectedIds, trackedIds) {
|
|
1087
|
-
const targets = new Set();
|
|
1088
|
-
for (const id of participantIds) {
|
|
1089
|
-
targets.add(id);
|
|
1090
|
-
}
|
|
1091
|
-
for (const id of connectedIds) {
|
|
1092
|
-
if (id !== fromUserId) {
|
|
1093
|
-
targets.add(id);
|
|
1094
|
-
}
|
|
1095
|
-
}
|
|
1096
|
-
for (const id of trackedIds) {
|
|
1097
|
-
if (id !== fromUserId) {
|
|
1098
|
-
targets.add(id);
|
|
1099
|
-
}
|
|
1100
|
-
}
|
|
1101
|
-
return [...targets];
|
|
1102
|
-
}
|
|
1103
|
-
#trackCallParticipants(userIds) {
|
|
1104
|
-
const callId = this.callId();
|
|
1105
|
-
const selfId = this.currentUserId();
|
|
1106
|
-
if (!callId) {
|
|
1107
|
-
return;
|
|
1108
|
-
}
|
|
1109
|
-
for (const userId of userIds) {
|
|
1110
|
-
const scoped = userId?.trim();
|
|
1111
|
-
if (scoped && scoped !== selfId) {
|
|
1112
|
-
this.activeCallSessions.addParticipant(callId, scoped);
|
|
1113
|
-
}
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
#selfDisplayName(currentUserId) {
|
|
1117
|
-
return this.conversation()?.participants?.find((participant) => participant.id === currentUserId)?.name;
|
|
1118
|
-
}
|
|
1119
|
-
#armRingTimeout() {
|
|
1120
|
-
this.#clearRingTimeout();
|
|
1121
|
-
this.ringTimeoutId = setTimeout(() => {
|
|
1122
|
-
if (this.phase() === 'outgoing-waiting') {
|
|
1123
|
-
this.ringer.stop();
|
|
1124
|
-
void this.translationService
|
|
1125
|
-
.translateAsync('@conversation:chat.call.no-answer')
|
|
1126
|
-
.then((message) => this.#toast(message, 'default'));
|
|
1127
|
-
void this.#finishWithLog('missed');
|
|
1128
|
-
}
|
|
1129
|
-
}, 45_000);
|
|
1130
|
-
}
|
|
1131
|
-
#clearRingTimeout() {
|
|
1132
|
-
if (this.ringTimeoutId != null) {
|
|
1133
|
-
clearTimeout(this.ringTimeoutId);
|
|
1134
|
-
this.ringTimeoutId = null;
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
async #finishWithLog(outcome) {
|
|
1138
|
-
if (this.closing) {
|
|
1139
|
-
return;
|
|
1140
|
-
}
|
|
1141
|
-
this.closing = true;
|
|
1142
|
-
this.signalInbox.suppressCall(this.callId());
|
|
1143
|
-
this.ringer.stop();
|
|
1144
|
-
this.#clearRingTimeout();
|
|
1145
|
-
await this.#signalCallAction(outcome === 'declined' ? 'decline' : 'cancel');
|
|
1146
|
-
await this.#logOutcome(outcome);
|
|
1147
|
-
await this.#closeLocal();
|
|
1148
|
-
}
|
|
1149
|
-
async #endActiveCall() {
|
|
1150
|
-
if (this.closing) {
|
|
1151
|
-
return;
|
|
1152
|
-
}
|
|
1153
|
-
this.closing = true;
|
|
1154
|
-
this.signalInbox.suppressCall(this.callId());
|
|
1155
|
-
this.#trackCallParticipants(this.rtc.getConnectedParticipantIds());
|
|
1156
|
-
this.ringer.stop();
|
|
1157
|
-
this.#clearRingTimeout();
|
|
1158
|
-
await this.#logCompletedIfActive();
|
|
1159
|
-
if (this.activeSince == null && this.phase() === 'connecting') {
|
|
1160
|
-
await this.#logOutcome('cancelled');
|
|
1161
|
-
}
|
|
1162
|
-
await this.#signalCallAction('end');
|
|
1163
|
-
await this.#closeLocal();
|
|
1164
|
-
}
|
|
1165
|
-
async #logCompletedIfActive() {
|
|
1166
|
-
if (this.activeSince == null) {
|
|
1167
|
-
return;
|
|
1168
|
-
}
|
|
1169
|
-
const conversation = this.conversation();
|
|
1170
|
-
if (!conversation) {
|
|
1171
|
-
return;
|
|
1172
|
-
}
|
|
1173
|
-
const conversationId = conversation.id?.trim();
|
|
1174
|
-
const callId = this.callId();
|
|
1175
|
-
const currentUserId = this.currentUserId();
|
|
1176
|
-
if (!conversationId || !callId || !currentUserId) {
|
|
1177
|
-
return;
|
|
1178
|
-
}
|
|
1179
|
-
const durationSec = Math.max(1, Math.round((Date.now() - this.activeSince) / 1000));
|
|
1180
|
-
const joinedUserIds = [
|
|
1181
|
-
...new Set([currentUserId, ...this.rtc.getConnectedParticipantIds().map((id) => id.trim()).filter(Boolean)]),
|
|
1182
|
-
];
|
|
1183
|
-
const allParticipantIds = (conversation.participants ?? [])
|
|
1184
|
-
.map((participant) => participant.id?.trim())
|
|
1185
|
-
.filter((id) => Boolean(id));
|
|
1186
|
-
const absentUserIds = allParticipantIds.filter((id) => !joinedUserIds.includes(id));
|
|
1187
|
-
await this.#logOutcome('completed', {
|
|
1188
|
-
durationSec,
|
|
1189
|
-
joinedUserIds,
|
|
1190
|
-
absentUserIds,
|
|
1191
|
-
});
|
|
1192
|
-
}
|
|
1193
|
-
async #logOutcome(outcome, extras) {
|
|
1194
|
-
const conversation = this.conversation();
|
|
1195
|
-
const conversationId = conversation?.id?.trim();
|
|
1196
|
-
const callId = this.callId();
|
|
1197
|
-
const currentUserId = this.currentUserId();
|
|
1198
|
-
if (!conversationId || !callId) {
|
|
1199
|
-
return;
|
|
1200
|
-
}
|
|
1201
|
-
try {
|
|
1202
|
-
const result = await this.callSignal.log({
|
|
1203
|
-
conversationId,
|
|
1204
|
-
outcome,
|
|
1205
|
-
media: this.mediaType(),
|
|
1206
|
-
callId,
|
|
1207
|
-
initiatorUserId: this.initiatorUserId ?? currentUserId ?? undefined,
|
|
1208
|
-
isGroup: conversation?.type !== 'private',
|
|
1209
|
-
...extras,
|
|
1210
|
-
});
|
|
1211
|
-
const peerUserId = (conversation?.participants ?? [])
|
|
1212
|
-
.map((participant) => participant.id?.trim())
|
|
1213
|
-
.find((id) => id && id !== currentUserId) ?? null;
|
|
1214
|
-
const peerUserName = peerUserId
|
|
1215
|
-
? conversation?.participants?.find((participant) => participant.id === peerUserId)?.name
|
|
1216
|
-
: null;
|
|
1217
|
-
const fallback = axmBuildChatCallLogMessage({
|
|
1218
|
-
messageId: result.messageId,
|
|
1219
|
-
conversationId,
|
|
1220
|
-
senderId: currentUserId ?? '',
|
|
1221
|
-
outcome,
|
|
1222
|
-
media: this.mediaType(),
|
|
1223
|
-
callId,
|
|
1224
|
-
initiatorUserId: this.initiatorUserId ?? currentUserId ?? undefined,
|
|
1225
|
-
isGroup: conversation?.type !== 'private',
|
|
1226
|
-
actorUserId: currentUserId ?? undefined,
|
|
1227
|
-
peerUserId,
|
|
1228
|
-
peerUserName,
|
|
1229
|
-
durationSec: extras?.durationSec,
|
|
1230
|
-
joinedUserIds: extras?.joinedUserIds,
|
|
1231
|
-
absentUserIds: extras?.absentUserIds,
|
|
1232
|
-
});
|
|
1233
|
-
const logged = (await this.conversationStore.getMessage(result.messageId)) ?? fallback;
|
|
1234
|
-
this.conversationStore.publishNewMessage(logged);
|
|
1235
|
-
void this.conversationStore.touchLastMessage(conversationId, logged);
|
|
1236
|
-
}
|
|
1237
|
-
catch (error) {
|
|
1238
|
-
console.warn('[chat-call] Failed to persist call log message', error);
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
async #closeFromRemoteLog() {
|
|
1242
|
-
if (this.closing || this.phase() === 'active') {
|
|
1243
|
-
return;
|
|
1244
|
-
}
|
|
1245
|
-
this.closing = true;
|
|
1246
|
-
this.ringer.stop();
|
|
1247
|
-
this.#clearRingTimeout();
|
|
1248
|
-
await this.#closeLocal();
|
|
1249
|
-
}
|
|
1250
|
-
async #closeFromRemoteEnd() {
|
|
1251
|
-
if (this.closing) {
|
|
1252
|
-
return;
|
|
1253
|
-
}
|
|
1254
|
-
this.closing = true;
|
|
1255
|
-
this.ringer.stop();
|
|
1256
|
-
this.#clearRingTimeout();
|
|
1257
|
-
await this.#closeLocal();
|
|
1258
|
-
}
|
|
1259
|
-
/** Another device of this user answered/declined — dismiss ringing UI without logging again. */
|
|
1260
|
-
async #closeFromSiblingDevice() {
|
|
1261
|
-
if (this.closing) {
|
|
1262
|
-
return;
|
|
1263
|
-
}
|
|
1264
|
-
this.closing = true;
|
|
1265
|
-
this.signalInbox.suppressCall(this.callId());
|
|
1266
|
-
this.ringer.stop();
|
|
1267
|
-
this.#clearRingTimeout();
|
|
1268
|
-
await this.#closeLocal();
|
|
1269
|
-
}
|
|
1270
|
-
async #closeLocal() {
|
|
1271
|
-
this.ringer.stop();
|
|
1272
|
-
this.#restoreCallConversation();
|
|
1273
|
-
this.signalInbox.releaseCall(this.callId());
|
|
1274
|
-
await this.rtc.disconnect();
|
|
1275
|
-
this.close();
|
|
1276
|
-
}
|
|
1277
|
-
//#endregion
|
|
1278
|
-
//#region ----- Conversation Focus -----
|
|
1279
|
-
async #bindCallConversation() {
|
|
1280
|
-
const conversationId = this.conversation()?.id?.trim();
|
|
1281
|
-
if (!conversationId) {
|
|
1282
|
-
return;
|
|
1283
|
-
}
|
|
1284
|
-
if (this.savedActiveConversationId === undefined) {
|
|
1285
|
-
this.savedActiveConversationId = this.conversationService.activeConversationId();
|
|
1286
|
-
}
|
|
1287
|
-
await this.conversationService.selectConversation(conversationId);
|
|
1288
|
-
this.chatConversationApi.reportFocusedConversation(conversationId);
|
|
1289
|
-
}
|
|
1290
|
-
#restoreCallConversation() {
|
|
1291
|
-
if (this.savedActiveConversationId === undefined) {
|
|
1292
|
-
return;
|
|
1293
|
-
}
|
|
1294
|
-
const conversationId = this.savedActiveConversationId;
|
|
1295
|
-
this.savedActiveConversationId = undefined;
|
|
1296
|
-
this.chatConversationApi.reportFocusedConversation(typeof conversationId === 'string' ? conversationId : null);
|
|
1297
|
-
void this.conversationService.selectConversation(conversationId);
|
|
1298
|
-
}
|
|
1299
|
-
//#endregion
|
|
1300
|
-
//#region ----- Media Helpers -----
|
|
1301
|
-
async #refreshDevices(kind) {
|
|
1302
|
-
try {
|
|
1303
|
-
if (!kind || kind === 'audioinput') {
|
|
1304
|
-
this.audioDevices.set(await this.rtc.listInputDevices('audioinput'));
|
|
1305
|
-
}
|
|
1306
|
-
if (!kind || kind === 'videoinput') {
|
|
1307
|
-
this.videoDevices.set(await this.rtc.listInputDevices('videoinput'));
|
|
1308
|
-
}
|
|
1309
|
-
}
|
|
1310
|
-
catch {
|
|
1311
|
-
// Device lists stay empty until the browser grants media permission.
|
|
1312
|
-
}
|
|
1313
|
-
}
|
|
1314
|
-
async #setVideoEnabled(enabled) {
|
|
1315
|
-
this.videoEnabled.set(enabled);
|
|
1316
|
-
if (enabled) {
|
|
1317
|
-
this.mediaType.set('video');
|
|
1318
|
-
}
|
|
1319
|
-
try {
|
|
1320
|
-
await this.rtc.setCameraEnabled(enabled);
|
|
1321
|
-
}
|
|
1322
|
-
catch (error) {
|
|
1323
|
-
this.videoEnabled.set(false);
|
|
1324
|
-
const message = await this.#resolveCallMediaErrorMessage(error);
|
|
1325
|
-
this.#toast(message, 'danger');
|
|
1326
|
-
}
|
|
1327
|
-
}
|
|
1328
|
-
async #resolveCallConnectErrorMessage(error) {
|
|
1329
|
-
const mediaIssue = axmReadChatCallMediaContextIssue(error);
|
|
1330
|
-
if (mediaIssue === 'secure-context') {
|
|
1331
|
-
return this.translationService.translateAsync('@conversation:chat.call.media-secure-context-required');
|
|
1332
|
-
}
|
|
1333
|
-
if (mediaIssue === 'unsupported') {
|
|
1334
|
-
return this.translationService.translateAsync('@conversation:chat.call.media-unavailable');
|
|
1335
|
-
}
|
|
1336
|
-
const fallback = await this.translationService.translateAsync('@conversation:chat.call.connect-error');
|
|
1337
|
-
return error instanceof Error && error.message ? error.message : fallback;
|
|
1338
|
-
}
|
|
1339
|
-
async #resolveCallMediaErrorMessage(error) {
|
|
1340
|
-
const mediaIssue = axmReadChatCallMediaContextIssue(error);
|
|
1341
|
-
if (mediaIssue === 'secure-context') {
|
|
1342
|
-
return this.translationService.translateAsync('@conversation:chat.call.media-secure-context-required');
|
|
1343
|
-
}
|
|
1344
|
-
if (mediaIssue === 'unsupported') {
|
|
1345
|
-
return this.translationService.translateAsync('@conversation:chat.call.media-unavailable');
|
|
1346
|
-
}
|
|
1347
|
-
return this.translationService.translateAsync('@conversation:chat.call.media-error');
|
|
1348
|
-
}
|
|
1349
|
-
#toast(content, color) {
|
|
1350
|
-
this.toastService.show({
|
|
1351
|
-
color,
|
|
1352
|
-
content,
|
|
1353
|
-
location: 'bottom-center',
|
|
1354
|
-
timeOut: 3000,
|
|
1355
|
-
});
|
|
1356
|
-
}
|
|
1357
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSessionPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1358
|
-
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 [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__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))}@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", "size", "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", "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 }); }
|
|
1359
|
-
}
|
|
1360
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallSessionPageComponent, decorators: [{
|
|
1361
|
-
type: Component,
|
|
1362
|
-
args: [{ selector: 'axm-chat-call-session-page', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
1363
|
-
class: 'ax-dark axm-chat-call-session-page',
|
|
1364
|
-
}, providers: [...AXM_CHAT_CALL_RTC_PROVIDERS], imports: [
|
|
1365
|
-
AXPAvatarComponent,
|
|
1366
|
-
AXTranslationModule,
|
|
1367
|
-
AsyncPipe,
|
|
1368
|
-
AXButtonModule,
|
|
1369
|
-
AXDecoratorModule,
|
|
1370
|
-
AXDrawerModule,
|
|
1371
|
-
AXMChatCallControlsComponent,
|
|
1372
|
-
AXMChatCallParticipantTileComponent,
|
|
1373
|
-
AXMChatCallVideoAttachDirective,
|
|
1374
|
-
AXMChatCallInCallChatComponent,
|
|
1375
|
-
], 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 [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__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))}@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"] }]
|
|
1376
|
-
}], ctorParameters: () => [] });
|
|
1377
|
-
|
|
1378
|
-
export { AXMChatCallSessionPageComponent };
|
|
1379
|
-
//# sourceMappingURL=acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs.map
|