mirror of
https://github.com/danog/telegram-tt.git
synced 2024-12-12 09:09:45 +01:00
1 line
178 KiB
Plaintext
1 line
178 KiB
Plaintext
{"version":3,"file":"9954.0f4f1ace563a0362bd45.js","mappings":"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AAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,KAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MACxF,MAAQ,MAAQ,M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","sources":["webpack://telegram-t/./src/global/actions/api/calls.async.ts","webpack://telegram-t/./src/util/phoneCallEmojiConstants.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/calls.async.ts","webpack://telegram-t/./src/util/vibrate.ts","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.tsx","webpack://telegram-t/./src/hooks/useThrottledCallback.ts","webpack://telegram-t/./src/hooks/useRunThrottled.ts","webpack://telegram-t/./src/components/calls/group/OutlinedMicrophoneIcon.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantList.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantStreams.tsx","webpack://telegram-t/./src/components/calls/group/GroupCall.tsx","webpack://telegram-t/./src/components/calls/ActiveCallHeader.tsx","webpack://telegram-t/./src/components/calls/phone/PhoneCallButton.module.scss?9dea","webpack://telegram-t/./src/components/calls/phone/PhoneCallButton.tsx","webpack://telegram-t/./src/components/calls/phone/PhoneCall.module.scss?a250","webpack://telegram-t/./src/components/calls/phone/PhoneCall.tsx","webpack://telegram-t/./src/components/calls/phone/RatePhoneCallModal.module.scss?64f6","webpack://telegram-t/./src/components/calls/phone/RatePhoneCallModal.tsx","webpack://telegram-t/./src/lib/secret-sauce/index.js"],"sourcesContent":["import { addActionHandler, getGlobal, setGlobal } from '../../index';\nimport {\n joinGroupCall,\n startSharingScreen,\n leaveGroupCall,\n toggleStream,\n isStreamEnabled,\n setVolume, stopPhoneCall,\n} from '../../../lib/secret-sauce';\n\nimport { GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectUser } from '../../selectors';\nimport {\n selectActiveGroupCall, selectPhoneCallUser,\n} from '../../selectors/calls';\nimport {\n removeGroupCall,\n updateActiveGroupCall,\n} from '../../reducers/calls';\nimport { getGroupCallAudioContext, getGroupCallAudioElement, removeGroupCallAudioElement } from '../ui/calls';\nimport { loadFullChat } from './chats';\n\naddActionHandler('leaveGroupCall', async (global, actions, payload) => {\n const {\n isFromLibrary, shouldDiscard, shouldRemove, rejoin,\n } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) {\n return;\n }\n\n setGlobal(updateActiveGroupCall(global, { connectionState: 'disconnected' }, groupCall.participantsCount - 1));\n\n await callApi('leaveGroupCall', {\n call: groupCall,\n });\n\n if (shouldDiscard) {\n await callApi('discardGroupCall', {\n call: groupCall,\n });\n }\n\n global = getGlobal();\n if (shouldRemove) {\n global = removeGroupCall(global, groupCall.id);\n }\n\n removeGroupCallAudioElement();\n\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n activeGroupCallId: undefined,\n },\n isCallPanelVisible: undefined,\n });\n\n if (!isFromLibrary) {\n leaveGroupCall();\n }\n\n if (rejoin) {\n actions.joinGroupCall(rejoin);\n }\n});\n\naddActionHandler('toggleGroupCallVideo', async (global) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n await toggleStream('video');\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n videoStopped: !isStreamEnabled('video'),\n participant: user,\n });\n});\n\naddActionHandler('requestToSpeak', (global, actions, payload) => {\n const { value } = payload || { value: true };\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n raiseHand: value,\n participant: user,\n });\n});\n\naddActionHandler('setGroupCallParticipantVolume', (global, actions, payload) => {\n const { participantId, volume } = payload!;\n\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId);\n if (!user || !groupCall) {\n return;\n }\n\n setVolume(participantId, Math.floor(volume / GROUP_CALL_VOLUME_MULTIPLIER) / 100);\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n volume: Number(volume),\n participant: user,\n });\n});\n\naddActionHandler('toggleGroupCallMute', async (global, actions, payload) => {\n const { participantId, value } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId || global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n const muted = value === undefined ? isStreamEnabled('audio', user.id) : value;\n\n if (!participantId) {\n await toggleStream('audio');\n } else {\n setVolume(participantId, muted ? 0 : 1);\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n muted,\n participant: user,\n });\n});\n\naddActionHandler('toggleGroupCallPresentation', async (global, actions, payload) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n const value = payload?.value !== undefined ? payload?.value : !isStreamEnabled('presentation');\n if (value) {\n const params = await startSharingScreen();\n if (!params) {\n return;\n }\n\n await callApi('joinGroupCallPresentation', {\n call: groupCall,\n params,\n });\n } else {\n await toggleStream('presentation', false);\n await callApi('leaveGroupCallPresentation', {\n call: groupCall,\n });\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n presentationPaused: !isStreamEnabled('presentation'),\n participant: user,\n });\n});\n\naddActionHandler('connectToActiveGroupCall', async (global, actions) => {\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) return;\n\n if (groupCall.connectionState === 'discarded') {\n actions.showNotification({ message: 'This voice chat is not active' });\n return;\n }\n\n const audioElement = getGroupCallAudioElement();\n const audioContext = getGroupCallAudioContext();\n\n if (!audioElement || !audioContext) {\n return;\n }\n\n const {\n currentUserId,\n } = global;\n\n if (!currentUserId) return;\n\n const params = await joinGroupCall(currentUserId, audioContext, audioElement, actions.apiUpdate);\n\n const result = await callApi('joinGroupCall', {\n call: groupCall,\n params,\n inviteHash: groupCall.inviteHash,\n });\n\n if (!result) return;\n\n actions.loadMoreGroupCallParticipants();\n\n if (groupCall.chatId) {\n const chat = selectChat(getGlobal(), groupCall.chatId);\n if (!chat) return;\n await loadFullChat(chat);\n }\n});\n\naddActionHandler('connectToActivePhoneCall', async (global) => {\n const { phoneCall } = global;\n\n if (!phoneCall) return;\n\n const user = selectPhoneCallUser(global);\n\n if (!user) return;\n\n const dhConfig = await callApi('getDhConfig');\n\n if (!dhConfig) return;\n\n await callApi('createPhoneCallState', [true]);\n\n const gAHash = await callApi('requestPhoneCall', [dhConfig])!;\n\n await callApi('requestCall', { user, gAHash, isVideo: phoneCall.isVideo });\n});\n\naddActionHandler('acceptCall', async (global) => {\n const { phoneCall } = global;\n\n if (!phoneCall) return;\n\n const dhConfig = await callApi('getDhConfig');\n if (!dhConfig) return;\n\n await callApi('createPhoneCallState', [false]);\n\n const gB = await callApi('acceptPhoneCall', [dhConfig])!;\n callApi('acceptCall', { call: phoneCall, gB });\n});\n\naddActionHandler('sendSignalingData', (global, actions, payload) => {\n const { phoneCall } = global;\n if (!phoneCall) {\n return;\n }\n\n const data = JSON.stringify(payload);\n\n (async () => {\n const encodedData = await callApi('encodePhoneCallData', [data]);\n\n if (!encodedData) return;\n\n callApi('sendSignalingData', { data: encodedData, call: phoneCall });\n })();\n});\n\naddActionHandler('closeCallRatingModal', (global) => {\n return {\n ...global,\n ratingPhoneCall: undefined,\n };\n});\n\naddActionHandler('setCallRating', (global, actions, payload) => {\n const { ratingPhoneCall } = global;\n if (!ratingPhoneCall) {\n return undefined;\n }\n\n const { rating, comment } = payload;\n\n callApi('setCallRating', { call: ratingPhoneCall, rating, comment });\n\n return {\n ...global,\n ratingPhoneCall: undefined,\n };\n});\n\naddActionHandler('hangUp', (global) => {\n const { phoneCall } = global;\n\n if (!phoneCall) return undefined;\n\n if (phoneCall.state === 'discarded') {\n callApi('destroyPhoneCallState');\n stopPhoneCall();\n return {\n ...global,\n phoneCall: undefined,\n isCallPanelVisible: undefined,\n };\n }\n\n callApi('destroyPhoneCallState');\n stopPhoneCall();\n callApi('discardCall', { call: phoneCall });\n\n if (phoneCall.state === 'requesting') {\n return {\n ...global,\n phoneCall: undefined,\n isCallPanelVisible: undefined,\n };\n }\n\n return undefined;\n});\n","export const EMOJI_DATA = new Uint16Array([\n 0xd83d, 0xde09, 0xd83d, 0xde0d, 0xd83d, 0xde1b, 0xd83d, 0xde2d, 0xd83d, 0xde31, 0xd83d, 0xde21,\n 0xd83d, 0xde0e, 0xd83d, 0xde34, 0xd83d, 0xde35, 0xd83d, 0xde08, 0xd83d, 0xde2c, 0xd83d, 0xde07,\n 0xd83d, 0xde0f, 0xd83d, 0xdc6e, 0xd83d, 0xdc77, 0xd83d, 0xdc82, 0xd83d, 0xdc76, 0xd83d, 0xdc68,\n 0xd83d, 0xdc69, 0xd83d, 0xdc74, 0xd83d, 0xdc75, 0xd83d, 0xde3b, 0xd83d, 0xde3d, 0xd83d, 0xde40,\n 0xd83d, 0xdc7a, 0xd83d, 0xde48, 0xd83d, 0xde49, 0xd83d, 0xde4a, 0xd83d, 0xdc80, 0xd83d, 0xdc7d,\n 0xd83d, 0xdca9, 0xd83d, 0xdd25, 0xd83d, 0xdca5, 0xd83d, 0xdca4, 0xd83d, 0xdc42, 0xd83d, 0xdc40,\n 0xd83d, 0xdc43, 0xd83d, 0xdc45, 0xd83d, 0xdc44, 0xd83d, 0xdc4d, 0xd83d, 0xdc4e, 0xd83d, 0xdc4c,\n 0xd83d, 0xdc4a, 0x270c, 0x270b, 0xd83d, 0xdc50, 0xd83d, 0xdc46, 0xd83d, 0xdc47, 0xd83d, 0xdc49,\n 0xd83d, 0xdc48, 0xd83d, 0xde4f, 0xd83d, 0xdc4f, 0xd83d, 0xdcaa, 0xd83d, 0xdeb6, 0xd83c, 0xdfc3,\n 0xd83d, 0xdc83, 0xd83d, 0xdc6b, 0xd83d, 0xdc6a, 0xd83d, 0xdc6c, 0xd83d, 0xdc6d, 0xd83d, 0xdc85,\n 0xd83c, 0xdfa9, 0xd83d, 0xdc51, 0xd83d, 0xdc52, 0xd83d, 0xdc5f, 0xd83d, 0xdc5e, 0xd83d, 0xdc60,\n 0xd83d, 0xdc55, 0xd83d, 0xdc57, 0xd83d, 0xdc56, 0xd83d, 0xdc59, 0xd83d, 0xdc5c, 0xd83d, 0xdc53,\n 0xd83c, 0xdf80, 0xd83d, 0xdc84, 0xd83d, 0xdc9b, 0xd83d, 0xdc99, 0xd83d, 0xdc9c, 0xd83d, 0xdc9a,\n 0xd83d, 0xdc8d, 0xd83d, 0xdc8e, 0xd83d, 0xdc36, 0xd83d, 0xdc3a, 0xd83d, 0xdc31, 0xd83d, 0xdc2d,\n 0xd83d, 0xdc39, 0xd83d, 0xdc30, 0xd83d, 0xdc38, 0xd83d, 0xdc2f, 0xd83d, 0xdc28, 0xd83d, 0xdc3b,\n 0xd83d, 0xdc37, 0xd83d, 0xdc2e, 0xd83d, 0xdc17, 0xd83d, 0xdc34, 0xd83d, 0xdc11, 0xd83d, 0xdc18,\n 0xd83d, 0xdc3c, 0xd83d, 0xdc27, 0xd83d, 0xdc25, 0xd83d, 0xdc14, 0xd83d, 0xdc0d, 0xd83d, 0xdc22,\n 0xd83d, 0xdc1b, 0xd83d, 0xdc1d, 0xd83d, 0xdc1c, 0xd83d, 0xdc1e, 0xd83d, 0xdc0c, 0xd83d, 0xdc19,\n 0xd83d, 0xdc1a, 0xd83d, 0xdc1f, 0xd83d, 0xdc2c, 0xd83d, 0xdc0b, 0xd83d, 0xdc10, 0xd83d, 0xdc0a,\n 0xd83d, 0xdc2b, 0xd83c, 0xdf40, 0xd83c, 0xdf39, 0xd83c, 0xdf3b, 0xd83c, 0xdf41, 0xd83c, 0xdf3e,\n 0xd83c, 0xdf44, 0xd83c, 0xdf35, 0xd83c, 0xdf34, 0xd83c, 0xdf33, 0xd83c, 0xdf1e, 0xd83c, 0xdf1a,\n 0xd83c, 0xdf19, 0xd83c, 0xdf0e, 0xd83c, 0xdf0b, 0x26a1, 0x2614, 0x2744, 0x26c4, 0xd83c, 0xdf00,\n 0xd83c, 0xdf08, 0xd83c, 0xdf0a, 0xd83c, 0xdf93, 0xd83c, 0xdf86, 0xd83c, 0xdf83, 0xd83d, 0xdc7b,\n 0xd83c, 0xdf85, 0xd83c, 0xdf84, 0xd83c, 0xdf81, 0xd83c, 0xdf88, 0xd83d, 0xdd2e, 0xd83c, 0xdfa5,\n 0xd83d, 0xdcf7, 0xd83d, 0xdcbf, 0xd83d, 0xdcbb, 0x260e, 0xd83d, 0xdce1, 0xd83d, 0xdcfa, 0xd83d,\n 0xdcfb, 0xd83d, 0xdd09, 0xd83d, 0xdd14, 0x23f3, 0x23f0, 0x231a, 0xd83d, 0xdd12, 0xd83d, 0xdd11,\n 0xd83d, 0xdd0e, 0xd83d, 0xdca1, 0xd83d, 0xdd26, 0xd83d, 0xdd0c, 0xd83d, 0xdd0b, 0xd83d, 0xdebf,\n 0xd83d, 0xdebd, 0xd83d, 0xdd27, 0xd83d, 0xdd28, 0xd83d, 0xdeaa, 0xd83d, 0xdeac, 0xd83d, 0xdca3,\n 0xd83d, 0xdd2b, 0xd83d, 0xdd2a, 0xd83d, 0xdc8a, 0xd83d, 0xdc89, 0xd83d, 0xdcb0, 0xd83d, 0xdcb5,\n 0xd83d, 0xdcb3, 0x2709, 0xd83d, 0xdceb, 0xd83d, 0xdce6, 0xd83d, 0xdcc5, 0xd83d, 0xdcc1, 0x2702,\n 0xd83d, 0xdccc, 0xd83d, 0xdcce, 0x2712, 0x270f, 0xd83d, 0xdcd0, 0xd83d, 0xdcda, 0xd83d, 0xdd2c,\n 0xd83d, 0xdd2d, 0xd83c, 0xdfa8, 0xd83c, 0xdfac, 0xd83c, 0xdfa4, 0xd83c, 0xdfa7, 0xd83c, 0xdfb5,\n 0xd83c, 0xdfb9, 0xd83c, 0xdfbb, 0xd83c, 0xdfba, 0xd83c, 0xdfb8, 0xd83d, 0xdc7e, 0xd83c, 0xdfae,\n 0xd83c, 0xdccf, 0xd83c, 0xdfb2, 0xd83c, 0xdfaf, 0xd83c, 0xdfc8, 0xd83c, 0xdfc0, 0x26bd, 0x26be,\n 0xd83c, 0xdfbe, 0xd83c, 0xdfb1, 0xd83c, 0xdfc9, 0xd83c, 0xdfb3, 0xd83c, 0xdfc1, 0xd83c, 0xdfc7,\n 0xd83c, 0xdfc6, 0xd83c, 0xdfca, 0xd83c, 0xdfc4, 0x2615, 0xd83c, 0xdf7c, 0xd83c, 0xdf7a, 0xd83c,\n 0xdf77, 0xd83c, 0xdf74, 0xd83c, 0xdf55, 0xd83c, 0xdf54, 0xd83c, 0xdf5f, 0xd83c, 0xdf57, 0xd83c,\n 0xdf71, 0xd83c, 0xdf5a, 0xd83c, 0xdf5c, 0xd83c, 0xdf61, 0xd83c, 0xdf73, 0xd83c, 0xdf5e, 0xd83c,\n 0xdf69, 0xd83c, 0xdf66, 0xd83c, 0xdf82, 0xd83c, 0xdf70, 0xd83c, 0xdf6a, 0xd83c, 0xdf6b, 0xd83c,\n 0xdf6d, 0xd83c, 0xdf6f, 0xd83c, 0xdf4e, 0xd83c, 0xdf4f, 0xd83c, 0xdf4a, 0xd83c, 0xdf4b, 0xd83c,\n 0xdf52, 0xd83c, 0xdf47, 0xd83c, 0xdf49, 0xd83c, 0xdf53, 0xd83c, 0xdf51, 0xd83c, 0xdf4c, 0xd83c,\n 0xdf50, 0xd83c, 0xdf4d, 0xd83c, 0xdf46, 0xd83c, 0xdf45, 0xd83c, 0xdf3d, 0xd83c, 0xdfe1, 0xd83c,\n 0xdfe5, 0xd83c, 0xdfe6, 0x26ea, 0xd83c, 0xdff0, 0x26fa, 0xd83c, 0xdfed, 0xd83d, 0xddfb, 0xd83d,\n 0xddfd, 0xd83c, 0xdfa0, 0xd83c, 0xdfa1, 0x26f2, 0xd83c, 0xdfa2, 0xd83d, 0xdea2, 0xd83d, 0xdea4,\n 0x2693, 0xd83d, 0xde80, 0x2708, 0xd83d, 0xde81, 0xd83d, 0xde82, 0xd83d, 0xde8b, 0xd83d, 0xde8e,\n 0xd83d, 0xde8c, 0xd83d, 0xde99, 0xd83d, 0xde97, 0xd83d, 0xde95, 0xd83d, 0xde9b, 0xd83d, 0xdea8,\n 0xd83d, 0xde94, 0xd83d, 0xde92, 0xd83d, 0xde91, 0xd83d, 0xdeb2, 0xd83d, 0xdea0, 0xd83d, 0xde9c,\n 0xd83d, 0xdea6, 0x26a0, 0xd83d, 0xdea7, 0x26fd, 0xd83c, 0xdfb0, 0xd83d, 0xddff, 0xd83c, 0xdfaa,\n 0xd83c, 0xdfad, 0xd83c, 0xddef, 0xd83c, 0xddf5, 0xd83c, 0xddf0, 0xd83c, 0xddf7, 0xd83c, 0xdde9,\n 0xd83c, 0xddea, 0xd83c, 0xdde8, 0xd83c, 0xddf3, 0xd83c, 0xddfa, 0xd83c, 0xddf8, 0xd83c, 0xddeb,\n 0xd83c, 0xddf7, 0xd83c, 0xddea, 0xd83c, 0xddf8, 0xd83c, 0xddee, 0xd83c, 0xddf9, 0xd83c, 0xddf7,\n 0xd83c, 0xddfa, 0xd83c, 0xddec, 0xd83c, 0xdde7, 0x0031, 0x20e3, 0x0032, 0x20e3, 0x0033, 0x20e3,\n 0x0034, 0x20e3, 0x0035, 0x20e3, 0x0036, 0x20e3, 0x0037, 0x20e3, 0x0038, 0x20e3, 0x0039, 0x20e3,\n 0x0030, 0x20e3, 0xd83d, 0xdd1f, 0x2757, 0x2753, 0x2665, 0x2666, 0xd83d, 0xdcaf, 0xd83d, 0xdd17,\n 0xd83d, 0xdd31, 0xd83d, 0xdd34, 0xd83d, 0xdd35, 0xd83d, 0xdd36, 0xd83d, 0xdd37,\n]);\n\nexport const EMOJI_OFFSETS = [\n 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22,\n 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46,\n 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70,\n 72, 74, 76, 78, 80, 82, 84, 86, 87, 88, 90, 92,\n 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116,\n 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140,\n 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164,\n 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188,\n 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212,\n 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236,\n 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 259,\n 260, 261, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280,\n 282, 284, 286, 288, 290, 292, 294, 295, 297, 299, 301, 303,\n 305, 306, 307, 308, 310, 312, 314, 316, 318, 320, 322, 324,\n 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348,\n 350, 351, 353, 355, 357, 359, 360, 362, 364, 365, 366, 368,\n 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392,\n 394, 396, 398, 400, 402, 404, 406, 407, 408, 410, 412, 414,\n 416, 418, 420, 422, 424, 426, 427, 429, 431, 433, 435, 437,\n 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461,\n 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485,\n 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507, 508,\n 510, 511, 513, 515, 517, 519, 521, 522, 524, 526, 528, 529,\n 531, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552,\n 554, 556, 558, 560, 562, 564, 566, 567, 569, 570, 572, 574,\n 576, 578, 582, 586, 590, 594, 598, 602, 606, 610, 614, 618,\n 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 641,\n 642, 643, 644, 646, 648, 650, 652, 654, 656, 658,\n];\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\nimport { selectActiveGroupCall, selectGroupCallParticipant, selectPhoneCallUser } from '../../selectors/calls';\nimport { updateGroupCall, updateGroupCallParticipant } from '../../reducers/calls';\nimport { omit } from '../../../util/iteratees';\nimport type { ApiCallProtocol } from '../../../lib/secret-sauce';\nimport {\n handleUpdateGroupCallConnection,\n handleUpdateGroupCallParticipants,\n joinPhoneCall, processSignalingMessage,\n} from '../../../lib/secret-sauce';\nimport type { ApiPhoneCall } from '../../../api/types';\nimport { ARE_CALLS_SUPPORTED } from '../../../util/environment';\nimport { callApi } from '../../../api/gramjs';\nimport * as langProvider from '../../../util/langProvider';\nimport { EMOJI_DATA, EMOJI_OFFSETS } from '../../../util/phoneCallEmojiConstants';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n const { activeGroupCallId } = global.groupCalls;\n\n switch (update['@type']) {\n case 'updateGroupCallLeavePresentation': {\n actions.toggleGroupCallPresentation({ value: false });\n break;\n }\n case 'updateGroupCallStreams': {\n if (!update.userId || !activeGroupCallId) break;\n if (!selectGroupCallParticipant(global, activeGroupCallId, update.userId)) break;\n\n return updateGroupCallParticipant(global, activeGroupCallId, update.userId, omit(update, ['@type', 'userId']));\n }\n case 'updateGroupCallConnectionState': {\n if (!activeGroupCallId) break;\n\n if (update.connectionState === 'disconnected') {\n actions.leaveGroupCall({ isFromLibrary: true });\n break;\n }\n\n return updateGroupCall(global, activeGroupCallId, {\n connectionState: update.connectionState,\n isSpeakerDisabled: update.isSpeakerDisabled,\n });\n }\n case 'updateGroupCallParticipants': {\n const { groupCallId, participants } = update;\n if (activeGroupCallId === groupCallId) {\n void handleUpdateGroupCallParticipants(participants);\n }\n break;\n }\n case 'updateGroupCallConnection': {\n if (update.data.stream) {\n actions.showNotification({ message: 'Big live streams are not yet supported' });\n actions.leaveGroupCall();\n break;\n }\n void handleUpdateGroupCallConnection(update.data, update.presentation);\n\n const groupCall = selectActiveGroupCall(global);\n if (groupCall?.participants && Object.keys(groupCall.participants).length > 0) {\n void handleUpdateGroupCallParticipants(Object.values(groupCall.participants));\n }\n break;\n }\n case 'updatePhoneCallMediaState':\n return {\n ...global,\n phoneCall: {\n ...global.phoneCall,\n ...omit(update, ['@type']),\n } as ApiPhoneCall,\n };\n case 'updatePhoneCall': {\n if (!ARE_CALLS_SUPPORTED) return undefined;\n const { phoneCall, currentUserId } = global;\n\n const call: ApiPhoneCall = {\n ...phoneCall,\n ...update.call,\n };\n\n const isOutgoing = phoneCall?.adminId === currentUserId;\n\n global = {\n ...global,\n phoneCall: call,\n };\n\n if (phoneCall && phoneCall.id && call.id !== phoneCall.id) {\n if (call.state !== 'discarded') {\n callApi('discardCall', {\n call,\n isBusy: true,\n });\n }\n return undefined;\n }\n\n const {\n accessHash, state, connections, gB,\n } = call;\n\n if (state === 'active' || state === 'accepted') {\n if (!verifyPhoneCallProtocol(call.protocol)) {\n const user = selectPhoneCallUser(global);\n actions.hangUp();\n actions.showNotification({ message: langProvider.getTranslation('VoipPeerIncompatible', user?.firstName) });\n return undefined;\n }\n }\n\n if (state === 'discarded') {\n // Discarded from other device\n if (!phoneCall) return undefined;\n\n return {\n ...global,\n ...(call.needRating && { ratingPhoneCall: call }),\n isCallPanelVisible: undefined,\n };\n } else if (state === 'accepted' && accessHash && gB) {\n (async () => {\n const { gA, keyFingerprint, emojis } = await callApi('confirmPhoneCall', [gB, EMOJI_DATA, EMOJI_OFFSETS])!;\n\n global = getGlobal();\n const newCall = {\n ...global.phoneCall,\n emojis,\n } as ApiPhoneCall;\n\n setGlobal({\n ...global,\n phoneCall: newCall,\n });\n\n callApi('confirmCall', {\n call, gA, keyFingerprint,\n });\n })();\n } else if (state === 'active' && connections && phoneCall?.state !== 'active') {\n if (!isOutgoing) {\n callApi('receivedCall', { call });\n (async () => {\n const { emojis } = await callApi('confirmPhoneCall', [call!.gAOrB!, EMOJI_DATA, EMOJI_OFFSETS])!;\n\n global = getGlobal();\n const newCall = {\n ...global.phoneCall,\n emojis,\n } as ApiPhoneCall;\n\n setGlobal({\n ...global,\n phoneCall: newCall,\n });\n })();\n }\n void joinPhoneCall(\n connections, actions.sendSignalingData, isOutgoing, Boolean(call?.isVideo), actions.apiUpdate,\n );\n }\n\n return global;\n }\n case 'updatePhoneCallConnectionState': {\n const { connectionState } = update;\n\n if (!global.phoneCall) return global;\n\n if (connectionState === 'closed' || connectionState === 'disconnected' || connectionState === 'failed') {\n actions.hangUp();\n return undefined;\n }\n\n return {\n ...global,\n phoneCall: {\n ...global.phoneCall,\n isConnected: connectionState === 'connected',\n },\n };\n }\n case 'updatePhoneCallSignalingData': {\n const { phoneCall } = global;\n\n if (!phoneCall) {\n break;\n }\n\n callApi('decodePhoneCallData', [update.data])?.then(processSignalingMessage);\n break;\n }\n }\n\n return undefined;\n});\n\nfunction verifyPhoneCallProtocol(protocol?: ApiCallProtocol) {\n return protocol?.libraryVersions.some((version) => {\n return version === '4.0.0' || version === '4.0.1';\n });\n}\n","export const vibrateShort = () => {\n navigator.vibrate?.(50);\n};\n","import type { GroupCallConnectionState } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, {\n memo, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';\nimport buildClassName from '../../../util/buildClassName';\nimport { vibrateShort } from '../../../util/vibrate';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../../global/selectors/calls';\nimport useLang from '../../../hooks/useLang';\n\nimport AnimatedIcon from '../../common/AnimatedIcon';\n\nimport './MicrophoneButton.scss';\n\nconst CONNECTION_STATE_DEFAULT = 'discarded';\n\ntype StateProps = {\n connectionState?: GroupCallConnectionState;\n hasRequestedToSpeak: boolean;\n isMuted?: boolean;\n canSelfUnmute?: boolean;\n noAudioStream: boolean;\n};\n\nconst REQUEST_TO_SPEAK_THROTTLE = 3000;\nconst HOLD_TO_SPEAK_TIME = 200;\nconst ICON_SIZE = 48;\n\nconst MicrophoneButton: FC<StateProps> = ({\n noAudioStream,\n canSelfUnmute,\n isMuted,\n hasRequestedToSpeak,\n connectionState,\n}) => {\n const {\n toggleGroupCallMute,\n requestToSpeak,\n playGroupCallSound,\n } = getActions();\n\n const lang = useLang();\n const muteMouseDownState = useRef('up');\n\n const [isRequestingToSpeak, setIsRequestingToSpeak] = useState(false);\n const isConnecting = connectionState !== 'connected';\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevShouldRaiseHand = usePrevious(shouldRaiseHand);\n\n useEffect(() => {\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n playGroupCallSound({ sound: 'allowTalk' });\n }\n }, [playGroupCallSound, prevShouldRaiseHand, shouldRaiseHand]);\n\n // Voice mini\n // unmuted -> muted [69, 99]\n // muted -> unmuted [36, 69]\n // raise -> muted [0, 36]\n // muted -> raise [99, 136]\n // unmuted -> raise [136, 172]\n // TODO should probably move to other component\n const playSegment: [number, number] = useMemo(() => {\n if (isRequestingToSpeak) {\n const r = Math.floor(Math.random() * 100);\n return (r < 32 ? [0, 120]\n : (r < 64 ? [120, 240]\n : (r < 97 ? [240, 420]\n : [420, 540]\n )\n )\n );\n }\n if (!prevShouldRaiseHand && shouldRaiseHand) {\n return noAudioStream ? [99, 135] : [136, 172];\n }\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n return [0, 36];\n }\n if (!shouldRaiseHand) {\n return noAudioStream ? [69, 99] : [36, 69];\n }\n return [0, 0];\n }, [prevShouldRaiseHand, isRequestingToSpeak, noAudioStream, shouldRaiseHand]);\n\n const animatedIconName = isRequestingToSpeak ? 'HandFilled' : 'VoiceMini';\n\n const toggleMute = () => {\n vibrateShort();\n toggleGroupCallMute();\n };\n\n const handleMouseDownMute = () => {\n if (shouldRaiseHand) {\n if (isRequestingToSpeak) return;\n vibrateShort();\n requestToSpeak();\n setIsRequestingToSpeak(true);\n setTimeout(() => {\n setIsRequestingToSpeak(false);\n }, REQUEST_TO_SPEAK_THROTTLE);\n return;\n }\n muteMouseDownState.current = 'down';\n if (noAudioStream) {\n setTimeout(() => {\n if (muteMouseDownState.current === 'down') {\n muteMouseDownState.current = 'hold';\n toggleMute();\n }\n }, HOLD_TO_SPEAK_TIME);\n }\n };\n\n const handleMouseUpMute = () => {\n if (shouldRaiseHand) {\n return;\n }\n toggleMute();\n muteMouseDownState.current = 'up';\n };\n\n const buttonText = useMemo(() => {\n return lang(\n hasRequestedToSpeak ? 'VoipMutedTapedForSpeak' : (\n shouldRaiseHand ? 'VoipMutedByAdmin' : (\n noAudioStream ? 'VoipUnmute' : 'VoipTapToMute'\n )\n ),\n );\n }, [hasRequestedToSpeak, noAudioStream, lang, shouldRaiseHand]);\n\n return (\n <div className=\"button-wrapper microphone-wrapper\">\n <button\n className={buildClassName(\n 'MicrophoneButton',\n noAudioStream && 'crossed',\n canSelfUnmute && 'can-self-unmute',\n isConnecting && 'is-connecting',\n shouldRaiseHand && 'muted-by-admin',\n )}\n onMouseDown={handleMouseDownMute}\n onMouseUp={handleMouseUpMute}\n >\n <AnimatedIcon\n tgsUrl={LOCAL_TGS_URLS[animatedIconName]}\n size={ICON_SIZE}\n playSegment={playSegment}\n />\n </button>\n <div className=\"button-text\">\n {buttonText}\n </div>\n </div>\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const groupCall = selectActiveGroupCall(global);\n\n const { connectionState } = groupCall || {};\n const meParticipant = groupCall && selectGroupCallParticipant(global, groupCall.id, global.currentUserId!);\n\n const {\n raiseHandRating, hasAudioStream, canSelfUnmute, isMuted,\n } = meParticipant || {};\n\n return {\n connectionState: connectionState || CONNECTION_STATE_DEFAULT,\n hasRequestedToSpeak: Boolean(raiseHandRating),\n noAudioStream: !hasAudioStream,\n canSelfUnmute,\n isMuted,\n };\n },\n)(MicrophoneButton));\n","import type { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, {\n memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport type { IAnchorPosition } from '../../../types';\n\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';\nimport buildClassName from '../../../util/buildClassName';\nimport buildStyle from '../../../util/buildStyle';\nimport useRunThrottled from '../../../hooks/useRunThrottled';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport { selectIsAdminInActiveGroupCall } from '../../../global/selectors/calls';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport DeleteMemberModal from '../../right/DeleteMemberModal';\n\nimport './GroupCallParticipantMenu.scss';\n\nconst SPEAKER_ICON_DISABLED_SEGMENT: [number, number] = [0, 17];\nconst SPEAKER_ICON_ENABLED_SEGMENT: [number, number] = [17, 34];\n\ntype OwnProps = {\n participant?: GroupCallParticipant;\n closeDropdown: VoidFunction;\n isDropdownOpen: boolean;\n anchor?: IAnchorPosition;\n};\n\ntype StateProps = {\n isAdmin: boolean;\n};\n\nconst VOLUME_ZERO = 0;\nconst VOLUME_LOW = 50;\nconst VOLUME_MEDIUM = 100;\nconst VOLUME_NORMAL = 150;\n\nconst VOLUME_CHANGE_THROTTLE = 500;\n\nconst SPEAKER_ICON_SIZE = 24;\n\nconst GroupCallParticipantMenu: FC<OwnProps & StateProps> = ({\n participant,\n closeDropdown,\n isDropdownOpen,\n anchor,\n isAdmin,\n}) => {\n const {\n toggleGroupCallMute,\n setGroupCallParticipantVolume,\n toggleGroupCallPanel,\n openChat,\n requestToSpeak,\n } = getActions();\n\n const lang = useLang();\n const [isDeleteUserModalOpen, openDeleteUserModal, closeDeleteUserModal] = useFlag();\n\n const id = participant?.id;\n const {\n isMutedByMe, isMuted, isSelf, canSelfUnmute,\n } = participant || {};\n const isRaiseHand = Boolean(participant?.raiseHandRating);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n\n const [localVolume, setLocalVolume] = useState(\n isMutedByMe ? VOLUME_ZERO : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER),\n );\n\n useEffect(() => {\n setLocalVolume(isMutedByMe\n ? VOLUME_ZERO\n : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER));\n // We only want to initialize local volume when switching participants and ignore following updates from server\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const runThrottled = useRunThrottled(VOLUME_CHANGE_THROTTLE);\n\n const handleRemove = useCallback((e: React.SyntheticEvent<any>) => {\n e.stopPropagation();\n openDeleteUserModal();\n closeDropdown();\n }, [openDeleteUserModal, closeDropdown]);\n\n const handleCancelRequestToSpeak = useCallback((e: React.SyntheticEvent<any>) => {\n e.stopPropagation();\n requestToSpeak({\n value: false,\n });\n closeDropdown();\n }, [requestToSpeak, closeDropdown]);\n\n const handleMute = useCallback((e: React.SyntheticEvent<any>) => {\n e.stopPropagation();\n closeDropdown();\n\n if (!isAdmin) {\n setLocalVolume(isMutedByMe ? GROUP_CALL_DEFAULT_VOLUME / GROUP_CALL_VOLUME_MULTIPLIER : VOLUME_ZERO);\n }\n\n toggleGroupCallMute({\n participantId: id,\n value: isAdmin ? !shouldRaiseHand : !isMutedByMe,\n });\n }, [closeDropdown, toggleGroupCallMute, id, isAdmin, shouldRaiseHand, isMutedByMe]);\n\n const handleOpenProfile = useCallback((e: React.SyntheticEvent<any>) => {\n e.stopPropagation();\n toggleGroupCallPanel();\n openChat({\n id,\n });\n closeDropdown();\n }, [toggleGroupCallPanel, closeDropdown, openChat, id]);\n\n const isLocalVolumeZero = localVolume === VOLUME_ZERO;\n const speakerIconPlaySegment = isLocalVolumeZero ? SPEAKER_ICON_DISABLED_SEGMENT : SPEAKER_ICON_ENABLED_SEGMENT;\n\n const handleChangeVolume = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = Number(e.target.value);\n setLocalVolume(value);\n runThrottled(() => {\n if (value === VOLUME_ZERO) {\n toggleGroupCallMute({\n participantId: id,\n value: true,\n });\n } else {\n setGroupCallParticipantVolume({\n participantId: id,\n volume: Math.floor(value * GROUP_CALL_VOLUME_MULTIPLIER),\n });\n }\n });\n };\n\n return (\n <div>\n <Menu\n isOpen={isDropdownOpen}\n positionX=\"right\"\n autoClose\n style={buildStyle(anchor && `right: 1rem; top: ${anchor.y}px`)}\n onClose={closeDropdown}\n className=\"participant-menu\"\n >\n {!isSelf && !shouldRaiseHand && (\n <div className=\"group\">\n <div className={buildClassName(\n 'volume-control',\n localVolume < VOLUME_LOW && 'low',\n localVolume >= VOLUME_LOW && localVolume < VOLUME_MEDIUM && 'medium',\n localVolume >= VOLUME_MEDIUM && localVolume < VOLUME_NORMAL && 'normal',\n localVolume >= VOLUME_NORMAL && 'high',\n )}\n >\n <input\n type=\"range\"\n min=\"0\"\n max=\"200\"\n value={localVolume}\n onChange={handleChangeVolume}\n />\n <div className=\"info\">\n <AnimatedIcon\n tgsUrl={LOCAL_TGS_URLS.Speaker}\n playSegment={speakerIconPlaySegment}\n size={SPEAKER_ICON_SIZE}\n />\n <span>{localVolume}%</span>\n </div>\n </div>\n </div>\n )}\n <div className=\"group\">\n {(isRaiseHand && isSelf) && (\n <MenuItem\n icon=\"stop-raising-hand\"\n onClick={handleCancelRequestToSpeak}\n >\n {lang('VoipGroupCancelRaiseHand')}\n </MenuItem>\n )}\n {!isSelf && <MenuItem icon=\"user\" onClick={handleOpenProfile}>{lang('VoipGroupOpenProfile')}</MenuItem>}\n {!isSelf && (\n // TODO cross mic\n <MenuItem\n icon={isMuted ? (isAdmin ? 'allow-speak' : 'microphone-alt') : 'microphone-alt'}\n onClick={handleMute}\n >\n {isAdmin\n ? lang(shouldRaiseHand ? 'VoipGroupAllowToSpeak' : 'VoipMute')\n : lang(isMutedByMe ? 'VoipGroupUnmuteForMe' : 'VoipGroupMuteForMe')}\n </MenuItem>\n )}\n {!isSelf && isAdmin && (\n // TODO replace with hand\n <MenuItem icon=\"delete-user\" destructive onClick={handleRemove}>\n {lang('VoipGroupUserRemove')}\n </MenuItem>\n )}\n </div>\n </Menu>\n\n {!isSelf && isAdmin && (\n <DeleteMemberModal\n isOpen={isDeleteUserModalOpen}\n userId={id}\n onClose={closeDeleteUserModal}\n />\n )}\n </div>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global): StateProps => {\n return {\n isAdmin: selectIsAdminInActiveGroupCall(global),\n };\n },\n)(GroupCallParticipantMenu));\n","import { useCallback, useMemo } from '../lib/teact/teact';\n\nimport { throttle } from '../util/schedulers';\n\nexport default function useThrottledCallback<T extends AnyToVoidFunction>(\n fn: T,\n deps: any[],\n ms: number,\n noFirst?: boolean,\n) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const fnMemo = useCallback(fn, deps);\n\n return useMemo(() => {\n return throttle(fnMemo, ms, !noFirst);\n }, [fnMemo, ms, noFirst]);\n}\n","import useThrottledCallback from './useThrottledCallback';\n\nexport default function useRunThrottled(ms: number, noFirst?: boolean) {\n return useThrottledCallback((cb: NoneToVoidFunction) => {\n cb();\n }, [], ms, noFirst);\n}\n","import type { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport { THRESHOLD } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, { memo, useMemo } from '../../../lib/teact/teact';\n\nimport { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';\nimport usePrevious from '../../../hooks/usePrevious';\n\nimport AnimatedIcon from '../../common/AnimatedIcon';\n\ntype OwnProps = {\n participant: GroupCallParticipant;\n noColor?: boolean;\n};\n\nconst OutlinedMicrophoneIcon: FC<OwnProps> = ({\n participant,\n noColor,\n}) => {\n const { isMuted, isMutedByMe } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n const prevIsRaiseHand = usePrevious(isRaiseHand);\n const canSelfUnmute = Boolean(participant?.canSelfUnmute);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevIsMuted = usePrevious(isMuted);\n\n const playSegment: [number, number] = useMemo(() => {\n if (isMuted && !prevIsMuted) {\n return [43, 64];\n }\n\n if (!isMuted && prevIsMuted) {\n return [22, 42];\n }\n\n if (isRaiseHand && !prevIsRaiseHand) {\n return [65, 84];\n }\n\n if (!shouldRaiseHand && prevIsRaiseHand) {\n return [0, 21];\n }\n\n // TODO cancel request to speak should play in reverse\n // if (!isRaiseHand && prevIsRaiseHand) {\n // return [84, 65];\n // }\n\n return isMuted ? [22, 23] : [43, 44];\n // eslint-disable-next-line\n }, [isMuted, shouldRaiseHand, isRaiseHand]);\n\n const microphoneColor: [number, number, number] | undefined = useMemo(() => {\n return noColor ? [0xff, 0xff, 0xff] : (\n isRaiseHand ? [0x4d, 0xa6, 0xe0]\n : (shouldRaiseHand || isMutedByMe ? [0xFF, 0x70, 0x6F] : (\n isSpeaking ? [0x57, 0xBC, 0x6C] : [0x84, 0x8D, 0x94]\n ))\n );\n }, [noColor, isRaiseHand, shouldRaiseHand, isMutedByMe, isSpeaking]);\n\n return (\n <AnimatedIcon\n tgsUrl={LOCAL_TGS_URLS.VoiceOutlined}\n playSegment={playSegment}\n size={28}\n color={microphoneColor}\n />\n );\n};\n\nexport default memo(OutlinedMicrophoneIcon);\n","import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport { THRESHOLD } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, { memo, useMemo, useRef } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport type { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\nimport OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';\n\nimport './GroupCallParticipant.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n};\n\nconst GroupCallParticipant: FC<OwnProps & StateProps> = ({\n openParticipantMenu,\n participant,\n user,\n chat,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const anchorRef = useRef<HTMLDivElement>(null);\n const lang = useLang();\n\n const { isSelf, isMutedByMe, isMuted } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n\n const handleOnClick = () => {\n if (isSelf) return;\n openParticipantMenu(anchorRef.current!, participant);\n };\n\n const [aboutText, aboutColor] = useMemo(() => {\n if (isSelf) {\n return [lang('ThisIsYou'), 'blue'];\n }\n if (isMutedByMe) {\n return [lang('VoipGroupMutedForMe'), 'red'];\n }\n return isRaiseHand\n ? [lang('WantsToSpeak'), 'blue']\n : (!isMuted && isSpeaking ? [\n participant.volume && participant.volume !== GROUP_CALL_DEFAULT_VOLUME\n ? lang('SpeakingWithVolume',\n (participant.volume / GROUP_CALL_VOLUME_MULTIPLIER).toString())\n .replace('%%', '%') : lang('Speaking'),\n 'green',\n ]\n : (participant.about ? [participant.about, ''] : [lang('Listening'), 'blue']));\n }, [isSpeaking, participant.volume, lang, isSelf, isMutedByMe, isRaiseHand, isMuted, participant.about]);\n\n if (!user && !chat) {\n return undefined;\n }\n\n const name = user ? `${user.firstName || ''} ${user.lastName || ''}` : chat?.title;\n\n return (\n <div\n className={buildClassName(\n 'GroupCallParticipant',\n participant.canSelfUnmute && 'can-self-unmute',\n )}\n onClick={handleOnClick}\n ref={anchorRef}\n >\n <Avatar user={user} chat={chat} size=\"medium\" />\n <div className=\"info\">\n <span className=\"name\">{name}</span>\n <span className={buildClassName('about', aboutColor)}>{aboutText}</span>\n </div>\n <div className=\"microphone\">\n <OutlinedMicrophoneIcon participant={participant} />\n </div>\n </div>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global, { participant }): StateProps => {\n return {\n user: participant.isUser ? selectUser(global, participant.id) : undefined,\n chat: !participant.isUser ? selectChat(global, participant.id) : undefined,\n };\n },\n)(GroupCallParticipant));\n","import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, { memo, useMemo } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectActiveGroupCall } from '../../../global/selectors/calls';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\n\nimport GroupCallParticipant from './GroupCallParticipant';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\ntype OwnProps = {\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n participantsCount: number;\n participants?: Record<string, TypeGroupCallParticipant>;\n canInvite?: boolean;\n};\n\nconst GroupCallParticipantList: FC<OwnProps & StateProps> = ({\n participants,\n participantsCount,\n openParticipantMenu,\n}) => {\n const {\n createGroupCallInviteLink,\n loadMoreGroupCallParticipants,\n } = getActions();\n\n const lang = useLang();\n\n const participantsIds = useMemo(() => {\n return Object.keys(participants || {});\n }, [participants]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n loadMoreGroupCallParticipants,\n participantsIds,\n participantsIds.length >= participantsCount,\n );\n\n return (\n <div className=\"participants\">\n <div className=\"invite-btn\" onClick={createGroupCallInviteLink}>\n <div className=\"icon\">\n <i className=\"icon-add-user\" />\n </div>\n <div className=\"text\">{lang('VoipGroupInviteMember')}</div>\n </div>\n\n <InfiniteScroll\n items={viewportIds}\n onLoadMore={getMore}\n >\n {viewportIds?.map(\n (participantId) => (\n participants![participantId] && (\n <GroupCallParticipant\n key={participantId}\n openParticipantMenu={openParticipantMenu}\n participant={participants![participantId]}\n />\n )\n ),\n )}\n </InfiniteScroll>\n\n </div>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global): StateProps => {\n const { participantsCount, participants } = selectActiveGroupCall(global) || {};\n\n return {\n participants,\n participantsCount: participantsCount || 0,\n };\n },\n)(GroupCallParticipantList));\n","import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport { getUserStreams, THRESHOLD } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, { memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport type { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { ENABLE_THUMBNAIL_VIDEO } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\n\nimport './GroupCallParticipantVideo.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n type: 'video' | 'presentation';\n onClick?: (id: string, type: 'video' | 'presentation') => void;\n isFullscreen?: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n currentUserId?: string;\n isActive?: boolean;\n};\n\nconst GroupCallParticipantVideo: FC<OwnProps & StateProps> = ({\n type,\n onClick,\n user,\n chat,\n isActive,\n isFullscreen,\n}) => {\n const lang = useLang();\n\n const handleClick = useCallback(() => {\n if (onClick) {\n onClick(user?.id || chat!.id, type);\n }\n }, [chat, onClick, type, user?.id]);\n\n if (!user && !chat) return undefined;\n\n const streams = getUserStreams(user?.id || chat!.id);\n\n return (\n <div\n className={buildClassName('GroupCallParticipantVideo', isActive && 'active')}\n onClick={handleClick}\n >\n {isFullscreen && (\n <button className=\"back-button\">\n <i className=\"icon-arrow-left\" />\n {lang('Back')}\n </button>\n )}\n <Avatar user={user} chat={chat} className=\"thumbnail-avatar\" />\n {ENABLE_THUMBNAIL_VIDEO && (\n <div className=\"thumbnail-wrapper\">\n <video className=\"thumbnail\" muted autoPlay playsInline srcObject={streams?.[type]} />\n </div>\n )}\n <video className=\"video\" muted autoPlay playsInline srcObject={streams?.[type]} />\n <div className=\"info\">\n <i className=\"icon-microphone-alt\" />\n <span className=\"name\">{user?.firstName || chat?.title}</span>\n {type === 'presentation' && <i className=\"last-icon icon-active-sessions\" />}\n </div>\n </div>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global, { participant }): StateProps => {\n return {\n currentUserId: global.currentUserId,\n user: participant.isUser ? selectUser(global, participant.id) : undefined,\n chat: !participant.isUser ? selectChat(global, participant.id) : undefined,\n isActive: (participant.amplitude || 0) > THRESHOLD,\n };\n },\n)(GroupCallParticipantVideo));\n","import type { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, {\n memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\nimport GroupCallParticipantVideo from './GroupCallParticipantVideo';\nimport { selectActiveGroupCall } from '../../../global/selectors/calls';\nimport buildClassName from '../../../util/buildClassName';\n\ntype OwnProps = {\n onDoubleClick?: VoidFunction;\n};\n\ntype StateProps = {\n participants?: Record<string, GroupCallParticipant>;\n};\n\ntype SelectedVideo = {\n type: 'video' | 'presentation';\n id: string;\n};\n\nconst GroupCallParticipantStreams: FC<OwnProps & StateProps> = ({\n participants,\n onDoubleClick,\n}) => {\n const [selectedVideo, setSelectedVideo] = useState<SelectedVideo | undefined>(undefined);\n const presentationParticipants = useMemo(() => {\n return Object.values(participants || {}).filter((l) => l.hasPresentationStream);\n }, [participants]);\n const videoParticipants = useMemo(() => {\n return Object.values(participants || {}).filter((l) => l.hasVideoStream);\n }, [participants]);\n\n const totalVideoCount = videoParticipants.length + presentationParticipants.length;\n // TODO replace with more adequate solution.\n // There's a max of 30 videos or so right now\n const columnCount = totalVideoCount <= 2 ? 1 : (\n totalVideoCount <= 6 ? 2 : (\n totalVideoCount <= 9 ? 3 : 4\n )\n );\n\n const shouldSpanLastVideo = totalVideoCount === 3 || (columnCount === 2 && totalVideoCount % 2 !== 0);\n\n const handleClickVideo = useCallback((id: string, type: 'video' | 'presentation') => {\n if (!selectedVideo || (id !== selectedVideo.id || type !== selectedVideo.type)) {\n setSelectedVideo({\n id,\n type,\n });\n } else {\n setSelectedVideo(undefined);\n }\n }, [selectedVideo]);\n\n return (\n <div className=\"streams\" onDoubleClick={onDoubleClick}>\n <div\n className={buildClassName(\n 'videos',\n shouldSpanLastVideo && 'span-last-video',\n )}\n style={`--column-count: ${selectedVideo ? 1 : columnCount}`}\n >\n {selectedVideo && (\n <GroupCallParticipantVideo\n key={selectedVideo.id}\n isFullscreen\n onClick={handleClickVideo}\n participant={participants![selectedVideo.id]}\n type={selectedVideo.type}\n />\n )}\n\n {!selectedVideo ? presentationParticipants.map((participant) => (\n <GroupCallParticipantVideo\n key={participant.id}\n onClick={handleClickVideo}\n participant={participant}\n type=\"presentation\"\n />\n )) : undefined}\n {!selectedVideo ? videoParticipants.map((participant) => (\n <GroupCallParticipantVideo\n key={participant.id}\n onClick={handleClickVideo}\n participant={participant}\n type=\"video\"\n />\n )) : undefined}\n </div>\n </div>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global): StateProps => {\n const { participants } = selectActiveGroupCall(global) || {};\n return {\n participants,\n };\n },\n)(GroupCallParticipantStreams));\n","import type {\n GroupCallConnectionState, GroupCallParticipant as TypeGroupCallParticipant,\n} from '../../../lib/secret-sauce';\nimport {\n IS_SCREENSHARE_SUPPORTED, switchCameraInput, toggleSpeaker,\n} from '../../../lib/secret-sauce';\nimport type { FC } from '../../../lib/teact/teact';\nimport React, {\n memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\nimport '../../../global/actions/calls';\n\nimport type { IAnchorPosition } from '../../../types';\n\nimport {\n IS_ANDROID,\n IS_IOS,\n IS_REQUEST_FULLSCREEN_SUPPORTED,\n IS_SINGLE_COLUMN_LAYOUT,\n} from '../../../util/environment';\nimport { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';\nimport buildClassName from '../../../util/buildClassName';\nimport {\n selectGroupCall,\n selectGroupCallParticipant,\n selectIsAdminInActiveGroupCall,\n} from '../../../global/selectors/calls';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\n\nimport Loading from '../../ui/Loading';\nimport Button from '../../ui/Button';\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Modal from '../../ui/Modal';\nimport MicrophoneButton from './MicrophoneButton';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport Checkbox from '../../ui/Checkbox';\nimport GroupCallParticipantMenu from './GroupCallParticipantMenu';\nimport GroupCallParticipantList from './GroupCallParticipantList';\nimport GroupCallParticipantStreams from './GroupCallParticipantStreams';\n\nimport './GroupCall.scss';\n\nconst CAMERA_FLIP_PLAY_SEGMENT: [number, number] = [0, 10];\nconst PARTICIPANT_HEIGHT = 60;\n\nexport type OwnProps = {\n groupCallId: string;\n};\n\ntype StateProps = {\n isCallPanelVisible: boolean;\n connectionState: GroupCallConnectionState;\n title?: string;\n meParticipant?: TypeGroupCallParticipant;\n participantsCount?: number;\n isSpeakerEnabled?: boolean;\n isAdmin: boolean;\n participants: Record<string, TypeGroupCallParticipant>;\n};\n\nconst GroupCall: FC<OwnProps & StateProps> = ({\n groupCallId,\n isCallPanelVisible,\n connectionState,\n isSpeakerEnabled,\n title,\n meParticipant,\n isAdmin,\n participants,\n\n}) => {\n const {\n toggleGroupCallVideo,\n toggleGroupCallPresentation,\n leaveGroupCall,\n toggleGroupCallPanel,\n connectToActiveGroupCall,\n playGroupCallSound,\n } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [isLeaving, setIsLeaving] = useState(false);\n const [isFullscreen, openFullscreen, closeFullscreen] = useFlag();\n const [isSidebarOpen, openSidebar, closeSidebar] = useFlag(true);\n const hasVideoParticipants = participants && Object.values(participants).some((l) => l.video || l.presentation);\n const isLandscape = isFullscreen && !IS_SINGLE_COLUMN_LAYOUT && hasVideoParticipants;\n\n const [participantMenu, setParticipantMenu] = useState<{\n participant: TypeGroupCallParticipant;\n anchor: IAnchorPosition;\n } | undefined>();\n const [isParticipantMenuOpen, openParticipantMenu, closeParticipantMenu] = useFlag();\n\n const [isConfirmLeaveModalOpen, openConfirmLeaveModal, closeConfirmLeaveModal] = useFlag();\n const [isEndGroupCallModal, setIsEndGroupCallModal] = useState(false);\n const [shouldEndGroupCall, setShouldEndGroupCall] = useState(false);\n\n const hasVideo = meParticipant?.hasVideoStream;\n const hasPresentation = meParticipant?.hasPresentationStream;\n const isConnecting = connectionState !== 'connected';\n const canSelfUnmute = meParticipant?.canSelfUnmute;\n const shouldRaiseHand = !canSelfUnmute && meParticipant?.isMuted;\n\n const handleOpenParticipantMenu = useCallback((anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => {\n const rect = anchor.getBoundingClientRect();\n const container = containerRef.current!;\n\n setParticipantMenu({\n anchor: { x: rect.left, y: rect.top - container.offsetTop + PARTICIPANT_HEIGHT },\n participant,\n });\n\n openParticipantMenu();\n }, [openParticipantMenu]);\n\n useEffect(() => {\n if (connectionState === 'connected') {\n playGroupCallSound({ sound: 'join' });\n } else if (connectionState === 'reconnecting') {\n playGroupCallSound({ sound: 'connecting' });\n }\n }, [connectionState, playGroupCallSound]);\n\n const handleCloseConfirmLeaveModal = useCallback(() => {\n closeConfirmLeaveModal();\n setIsEndGroupCallModal(false);\n }, [closeConfirmLeaveModal]);\n\n const MainButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n <Button\n round\n size=\"smaller\"\n color=\"translucent\"\n className={isOpen ? 'active' : undefined}\n onClick={onTrigger}\n ariaLabel={lang('AccDescrMoreOptions')}\n >\n <i className=\"icon-more\" />\n </Button>\n );\n }, [lang]);\n\n const handleToggleFullscreen = useCallback(() => {\n if (!containerRef.current) return;\n\n if (isFullscreen) {\n document.exitFullscreen().then(closeFullscreen);\n } else {\n containerRef.current.requestFullscreen().then(openFullscreen);\n }\n }, [closeFullscreen, isFullscreen, openFullscreen]);\n\n const handleToggleSidebar = useCallback(() => {\n if (isSidebarOpen) {\n closeSidebar();\n } else {\n openSidebar();\n }\n }, [closeSidebar, isSidebarOpen, openSidebar]);\n\n const handleStreamsDoubleClick = useCallback(() => {\n if (!IS_REQUEST_FULLSCREEN_SUPPORTED) return;\n\n if (!isFullscreen) {\n closeSidebar();\n handleToggleFullscreen();\n } else {\n handleToggleFullscreen();\n }\n }, [closeSidebar, handleToggleFullscreen, isFullscreen]);\n\n const toggleFullscreen = useCallback(() => {\n if (isFullscreen) {\n closeFullscreen();\n } else {\n openFullscreen();\n }\n }, [closeFullscreen, isFullscreen, openFullscreen]);\n\n const handleClose = useCallback(() => {\n toggleGroupCallPanel();\n if (isFullscreen) {\n closeFullscreen();\n }\n }, [closeFullscreen, isFullscreen, toggleGroupCallPanel]);\n\n useEffect(() => {\n if (!IS_REQUEST_FULLSCREEN_SUPPORTED) return undefined;\n const container = containerRef.current;\n if (!container) return undefined;\n\n container.addEventListener('fullscreenchange', toggleFullscreen);\n\n return () => {\n container.removeEventListener('fullscreenchange', toggleFullscreen);\n };\n }, [toggleFullscreen]);\n\n const handleClickVideoOrSpeaker = () => {\n if (shouldRaiseHand) {\n toggleSpeaker();\n } else {\n toggleGroupCallVideo();\n }\n };\n\n useEffect(() => {\n connectToActiveGroupCall();\n }, [connectToActiveGroupCall, groupCallId]);\n\n const endGroupCall = useCallback(() => {\n setIsEndGroupCallModal(true);\n setShouldEndGroupCall(true);\n openConfirmLeaveModal();\n if (isFullscreen) {\n handleToggleFullscreen();\n }\n }, [handleToggleFullscreen, isFullscreen, openConfirmLeaveModal]);\n\n const handleLeaveGroupCall = useCallback(() => {\n if (isAdmin && !isConfirmLeaveModalOpen) {\n openConfirmLeaveModal();\n if (isFullscreen) {\n handleToggleFullscreen();\n }\n return;\n }\n playGroupCallSound({ sound: 'leave' });\n setIsLeaving(true);\n closeConfirmLeaveModal();\n }, [\n closeConfirmLeaveModal, handleToggleFullscreen, isAdmin, isConfirmLeaveModalOpen, isFullscreen,\n openConfirmLeaveModal, playGroupCallSound,\n ]);\n\n const handleCloseAnimationEnd = useCallback(() => {\n if (isLeaving) {\n leaveGroupCall({\n shouldDiscard: shouldEndGroupCall,\n });\n }\n }, [isLeaving, leaveGroupCall, shouldEndGroupCall]);\n\n return (\n <Modal\n isOpen={!isCallPanelVisible && !isLeaving}\n onClose={toggleGroupCallPanel}\n className={buildClassName(\n 'GroupCall',\n IS_SINGLE_COLUMN_LAYOUT && 'single-column',\n isLandscape && 'landscape',\n !isSidebarOpen && 'no-sidebar',\n )}\n dialogRef={containerRef}\n onCloseAnimationEnd={handleCloseAnimationEnd}\n >\n <div className=\"header\">\n <h3>{title || lang('VoipGroupVoiceChat')}</h3>\n {IS_REQUEST_FULLSCREEN_SUPPORTED && (\n <Button\n round\n size=\"smaller\"\n color=\"translucent\"\n onClick={handleToggleFullscreen}\n ariaLabel={lang(isFullscreen ? 'AccExitFullscreen' : 'AccSwitchToFullscreen')}\n >\n <i className={isFullscreen ? 'icon-smallscreen' : 'icon-fullscreen'} />\n </Button>\n )}\n {isLandscape && (\n <Button\n round\n size=\"smaller\"\n color=\"translucent\"\n onClick={handleToggleSidebar}\n >\n <i className=\"icon-sidebar\" />\n </Button>\n )}\n {((IS_SCREENSHARE_SUPPORTED && !shouldRaiseHand) || isAdmin) && (\n <DropdownMenu\n positionX=\"right\"\n trigger={MainButton}\n >\n {IS_SCREENSHARE_SUPPORTED && !shouldRaiseHand && (\n <MenuItem\n icon=\"share-screen-outlined\"\n onClick={toggleGroupCallPresentation}\n >\n {lang(hasPresentation ? 'VoipChatStopScreenCapture' : 'VoipChatStartScreenCapture')}\n </MenuItem>\n )}\n {isAdmin && (\n <MenuItem\n icon=\"phone-discard-outline\"\n onClick={endGroupCall}\n destructive\n >\n {lang('VoipGroupLeaveAlertEndChat')}\n </MenuItem>\n )}\n </DropdownMenu>\n )}\n <Button\n round\n size=\"smaller\"\n color=\"translucent\"\n onClick={handleClose}\n >\n <i className=\"icon-close\" />\n </Button>\n </div>\n\n <div className=\"scrollable custom-scroll\">\n <GroupCallParticipantStreams onDoubleClick={handleStreamsDoubleClick} />\n\n {(!isLandscape || isSidebarOpen)\n && <GroupCallParticipantList openParticipantMenu={handleOpenParticipantMenu} />}\n </div>\n\n <GroupCallParticipantMenu\n participant={participantMenu?.participant}\n anchor={participantMenu?.anchor}\n isDropdownOpen={isParticipantMenuOpen}\n closeDropdown={closeParticipantMenu}\n />\n\n <div className=\"buttons\">\n {isConnecting && <Loading />}\n\n <div className=\"button-wrapper\">\n <div className=\"video-buttons\">\n {hasVideo && (IS_ANDROID || IS_IOS) && (\n <button className=\"smaller-button\" onClick={switchCameraInput}>\n <AnimatedIcon\n tgsUrl={LOCAL_TGS_URLS.CameraFlip}\n playSegment={CAMERA_FLIP_PLAY_SEGMENT}\n size={24}\n />\n </button>\n )}\n <button\n className={buildClassName(\n 'small-button',\n shouldRaiseHand ? 'speaker' : 'camera',\n (hasVideo || (shouldRaiseHand && isSpeakerEnabled)) && 'active',\n )}\n onClick={handleClickVideoOrSpeaker}\n >\n <i className={shouldRaiseHand ? 'icon-speaker' : (hasVideo ? 'icon-video-stop' : 'icon-video')} />\n </button>\n </div>\n\n <div className=\"button-text\">\n {lang(shouldRaiseHand ? 'VoipSpeaker' : 'VoipCamera')}\n </div>\n </div>\n\n <MicrophoneButton />\n\n <div className=\"button-wrapper\">\n <button className=\"small-button leave\" onClick={handleLeaveGroupCall}>\n <i className=\"icon-phone-discard\" />\n </button>\n\n <div className=\"button-text\">\n {lang('VoipGroupLeave')}\n </div>\n </div>\n </div>\n\n <Modal\n isOpen={isConfirmLeaveModalOpen}\n onClose={handleCloseConfirmLeaveModal}\n className=\"error\"\n title={lang(isEndGroupCallModal ? 'VoipGroupEndAlertTitle' : 'VoipGroupLeaveAlertTitle')}\n >\n <p>{lang(isEndGroupCallModal ? 'VoipGroupEndAlertText' : 'VoipGroupLeaveAlertText')}</p>\n {!isEndGroupCallModal && (\n <Checkbox\n label={lang('VoipGroupEndChat')}\n checked={shouldEndGroupCall}\n onCheck={setShouldEndGroupCall}\n />\n )}\n <Button isText className=\"confirm-dialog-button\" onClick={handleLeaveGroupCall}>\n {lang(isEndGroupCallModal ? 'VoipGroupEnd' : 'VoipGroupLeave')}\n </Button>\n <Button isText className=\"confirm-dialog-button\" onClick={handleCloseConfirmLeaveModal}>\n {lang('Cancel')}\n </Button>\n </Modal>\n </Modal>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global, { groupCallId }): StateProps => {\n const {\n connectionState, title, isSpeakerDisabled, participants, participantsCount,\n } = selectGroupCall(global, groupCallId)! || {};\n\n return {\n connectionState,\n title,\n isSpeakerEnabled: !isSpeakerDisabled,\n participantsCount,\n meParticipant: selectGroupCallParticipant(global, groupCallId, global.currentUserId!),\n isCallPanelVisible: Boolean(global.isCallPanelVisible),\n isAdmin: selectIsAdminInActiveGroupCall(global),\n participants,\n };\n },\n)(GroupCall));\n","import type { FC } from '../../lib/teact/teact';\nimport React, { memo, useEffect } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport type { ApiGroupCall, ApiUser } from '../../api/types';\n\nimport { selectActiveGroupCall, selectPhoneCallUser } from '../../global/selectors/calls';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './ActiveCallHeader.scss';\n\ntype StateProps = {\n isCallPanelVisible?: boolean;\n groupCall?: ApiGroupCall;\n phoneCallUser?: ApiUser;\n};\n\nconst ActiveCallHeader: FC<StateProps> = ({\n groupCall,\n phoneCallUser,\n isCallPanelVisible,\n}) => {\n const { toggleGroupCallPanel } = getActions();\n\n const lang = useLang();\n\n useEffect(() => {\n document.body.classList.toggle('has-call-header', Boolean(isCallPanelVisible));\n\n return () => {\n document.body.classList.toggle('has-call-header', false);\n };\n }, [isCallPanelVisible]);\n\n if (!groupCall && !phoneCallUser) return undefined;\n\n return (\n <div\n className={buildClassName(\n 'ActiveCallHeader',\n isCallPanelVisible && 'open',\n )}\n onClick={toggleGroupCallPanel}\n >\n <span className=\"title\">{phoneCallUser?.firstName || groupCall?.title || lang('VoipGroupVoiceChat')}</span>\n </div>\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n groupCall: selectActiveGroupCall(global),\n isCallPanelVisible: global.isCallPanelVisible,\n phoneCallUser: selectPhoneCallUser(global),\n };\n },\n)(ActiveCallHeader));\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"src-components-calls-phone-PhoneCallButton-module__root\",\"button\":\"src-components-calls-phone-PhoneCallButton-module__button\",\"active\":\"src-components-calls-phone-PhoneCallButton-module__active\",\"button-text\":\"src-components-calls-phone-PhoneCallButton-module__button-text\",\"buttonText\":\"src-components-calls-phone-PhoneCallButton-module__button-text\"};","import type { FC } from '../../../lib/teact/teact';\nimport React, { memo } from '../../../lib/teact/teact';\n\nimport buildClassName from '../../../util/buildClassName';\n\nimport Button from '../../ui/Button';\n\nimport styles from './PhoneCallButton.module.scss';\n\ntype OwnProps = {\n onClick: VoidFunction;\n label: string;\n icon?: string;\n iconClassName?: string;\n customIcon?: React.ReactNode;\n className?: string;\n isDisabled?: boolean;\n isActive?: boolean;\n};\n\nconst PhoneCallButton: FC<OwnProps> = ({\n onClick,\n label,\n customIcon,\n icon,\n iconClassName,\n className,\n isDisabled,\n isActive,\n}) => {\n return (\n <div className={styles.root}>\n <Button\n round\n className={buildClassName(className, styles.button, isActive && styles.active)}\n onClick={onClick}\n disabled={isDisabled}\n >\n {customIcon || <i className={buildClassName(iconClassName, `icon-${icon}`)} />}\n </Button>\n <div className={styles.buttonText}>{label}</div>\n </div>\n );\n};\n\nexport default memo(PhoneCallButton);\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"src-components-calls-phone-PhoneCall-module__root\",\"blurred\":\"src-components-calls-phone-PhoneCall-module__blurred\",\"single-column\":\"src-components-calls-phone-PhoneCall-module__single-column\",\"singleColumn\":\"src-components-calls-phone-PhoneCall-module__single-column\",\"header\":\"src-components-calls-phone-PhoneCall-module__header\",\"close-button\":\"src-components-calls-phone-PhoneCall-module__close-button\",\"closeButton\":\"src-components-calls-phone-PhoneCall-module__close-button\",\"emojis-backdrop\":\"src-components-calls-phone-PhoneCall-module__emojis-backdrop\",\"emojisBackdrop\":\"src-components-calls-phone-PhoneCall-module__emojis-backdrop\",\"open\":\"src-components-calls-phone-PhoneCall-module__open\",\"emojis\":\"src-components-calls-phone-PhoneCall-module__emojis\",\"emoji-tooltip\":\"src-components-calls-phone-PhoneCall-module__emoji-tooltip\",\"emojiTooltip\":\"src-components-calls-phone-PhoneCall-module__emoji-tooltip\",\"user-info\":\"src-components-calls-phone-PhoneCall-module__user-info\",\"userInfo\":\"src-components-calls-phone-PhoneCall-module__user-info\",\"buttons\":\"src-components-calls-phone-PhoneCall-module__buttons\",\"leave\":\"src-components-calls-phone-PhoneCall-module__leave\",\"accept\":\"src-components-calls-phone-PhoneCall-module__accept\",\"accept-icon\":\"src-components-calls-phone-PhoneCall-module__accept-icon\",\"acceptIcon\":\"src-components-calls-phone-PhoneCall-module__accept-icon\",\"main-video\":\"src-components-calls-phone-PhoneCall-module__main-video\",\"mainVideo\":\"src-components-calls-phone-PhoneCall-module__main-video\",\"second-video\":\"src-components-calls-phone-PhoneCall-module__second-video\",\"secondVideo\":\"src-components-calls-phone-PhoneCall-module__second-video\",\"visible\":\"src-components-calls-phone-PhoneCall-module__visible\",\"fullscreen\":\"src-components-calls-phone-PhoneCall-module__fullscreen\"};","import type { FC } from '../../../lib/teact/teact';\nimport React, {\n memo, useCallback, useEffect, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\nimport '../../../global/actions/calls';\n\nimport type { ApiPhoneCall, ApiUser } from '../../../api/types';\n\nimport {\n IS_ANDROID,\n IS_IOS,\n IS_REQUEST_FULLSCREEN_SUPPORTED,\n IS_SINGLE_COLUMN_LAYOUT,\n} from '../../../util/environment';\nimport { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';\nimport buildClassName from '../../../util/buildClassName';\nimport { selectPhoneCallUser } from '../../../global/selectors/calls';\nimport useLang from '../../../hooks/useLang';\nimport renderText from '../../common/helpers/renderText';\nimport useFlag from '../../../hooks/useFlag';\nimport { formatMediaDuration } from '../../../util/dateFormat';\nimport {\n getStreams, IS_SCREENSHARE_SUPPORTED, switchCameraInputP2p, toggleStreamP2p,\n} from '../../../lib/secret-sauce';\nimport useInterval from '../../../hooks/useInterval';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\n\nimport Modal from '../../ui/Modal';\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport PhoneCallButton from './PhoneCallButton';\nimport AnimatedIcon from '../../common/AnimatedIcon';\n\nimport styles from './PhoneCall.module.scss';\n\ntype StateProps = {\n user?: ApiUser;\n phoneCall?: ApiPhoneCall;\n isOutgoing: boolean;\n isCallPanelVisible?: boolean;\n};\n\nconst PhoneCall: FC<StateProps> = ({\n user,\n isOutgoing,\n phoneCall,\n isCallPanelVisible,\n}) => {\n const lang = useLang();\n const {\n hangUp, acceptCall, playGroupCallSound, toggleGroupCallPanel, connectToActivePhoneCall,\n } = getActions();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [isFullscreen, openFullscreen, closeFullscreen] = useFlag();\n\n const toggleFullscreen = useCallback(() => {\n if (isFullscreen) {\n closeFullscreen();\n } else {\n openFullscreen();\n }\n }, [closeFullscreen, isFullscreen, openFullscreen]);\n\n const handleToggleFullscreen = useCallback(() => {\n if (!containerRef.current) return;\n\n if (isFullscreen) {\n document.exitFullscreen().then(closeFullscreen);\n } else {\n containerRef.current.requestFullscreen().then(openFullscreen);\n }\n }, [closeFullscreen, isFullscreen, openFullscreen]);\n\n useEffect(() => {\n if (!IS_REQUEST_FULLSCREEN_SUPPORTED) return undefined;\n const container = containerRef.current;\n if (!container) return undefined;\n\n container.addEventListener('fullscreenchange', toggleFullscreen);\n\n return () => {\n container.removeEventListener('fullscreenchange', toggleFullscreen);\n };\n }, [toggleFullscreen]);\n\n const handleClose = useCallback(() => {\n toggleGroupCallPanel();\n if (isFullscreen) {\n closeFullscreen();\n }\n }, [closeFullscreen, isFullscreen, toggleGroupCallPanel]);\n\n const isDiscarded = phoneCall?.state === 'discarded';\n const isBusy = phoneCall?.reason === 'busy';\n\n const isIncomingRequested = phoneCall?.state === 'requested' && !isOutgoing;\n const isOutgoingRequested = (phoneCall?.state === 'requested' || phoneCall?.state === 'waiting') && isOutgoing;\n const isActive = phoneCall?.state === 'active';\n const isConnected = phoneCall?.isConnected;\n\n useEffect(() => {\n if (isIncomingRequested) {\n playGroupCallSound({ sound: 'incoming' });\n } else if (isBusy) {\n playGroupCallSound({ sound: 'busy' });\n } else if (isDiscarded) {\n playGroupCallSound({ sound: 'end' });\n } else if (isOutgoingRequested) {\n playGroupCallSound({ sound: 'ringing' });\n } else if (isConnected) {\n playGroupCallSound({ sound: 'connect' });\n }\n }, [isBusy, isDiscarded, isIncomingRequested, isOutgoingRequested, isConnected, playGroupCallSound]);\n\n const [isHangingUp, startHangingUp, stopHangingUp] = useFlag();\n const handleHangUp = useCallback(() => {\n startHangingUp();\n hangUp();\n }, [hangUp, startHangingUp]);\n\n useEffect(() => {\n if (phoneCall?.id) {\n stopHangingUp();\n } else {\n connectToActivePhoneCall();\n }\n }, [connectToActivePhoneCall, phoneCall?.id, stopHangingUp]);\n\n const forceUpdate = useForceUpdate();\n\n useInterval(() => {\n forceUpdate();\n }, isConnected ? 1000 : undefined);\n\n const callStatus = useMemo(() => {\n const state = phoneCall?.state;\n if (isHangingUp) {\n return lang('lng_call_status_hanging');\n }\n if (isBusy) return 'busy';\n if (state === 'requesting') {\n return lang('lng_call_status_requesting');\n } else if (state === 'requested') {\n return isOutgoing ? lang('lng_call_status_ringing') : lang('lng_call_status_incoming');\n } else if (state === 'waiting') {\n return lang('lng_call_status_waiting');\n } else if (state === 'active' && isConnected) {\n return undefined;\n } else {\n return lang('lng_call_status_exchanging');\n }\n }, [isBusy, isConnected, isHangingUp, isOutgoing, lang, phoneCall?.state]);\n\n const hasVideo = phoneCall?.videoState === 'active';\n const hasPresentation = phoneCall?.screencastState === 'active';\n\n const streams = getStreams();\n const hasOwnAudio = streams?.ownAudio?.getTracks()[0].enabled;\n const hasOwnPresentation = streams?.ownPresentation?.getTracks()[0].enabled;\n const hasOwnVideo = streams?.ownVideo?.getTracks()[0].enabled;\n\n const [isHidingPresentation, startHidingPresentation, stopHidingPresentation] = useFlag();\n const [isHidingVideo, startHidingVideo, stopHidingVideo] = useFlag();\n\n const handleTogglePresentation = useCallback(() => {\n if (hasOwnPresentation) {\n startHidingPresentation();\n }\n if (hasOwnVideo) {\n startHidingVideo();\n }\n setTimeout(async () => {\n await toggleStreamP2p('presentation');\n stopHidingPresentation();\n stopHidingVideo();\n }, 250);\n }, [\n hasOwnPresentation, hasOwnVideo, startHidingPresentation, startHidingVideo, stopHidingPresentation, stopHidingVideo,\n ]);\n\n const handleToggleVideo = useCallback(() => {\n if (hasOwnVideo) {\n startHidingVideo();\n }\n if (hasOwnPresentation) {\n startHidingPresentation();\n }\n setTimeout(async () => {\n await toggleStreamP2p('video');\n stopHidingPresentation();\n stopHidingVideo();\n }, 250);\n }, [\n hasOwnPresentation, hasOwnVideo, startHidingPresentation, startHidingVideo, stopHidingPresentation, stopHidingVideo,\n ]);\n\n const handleToggleAudio = useCallback(() => {\n void toggleStreamP2p('audio');\n }, []);\n\n const [isEmojiOpen, openEmoji, closeEmoji] = useFlag();\n\n const [isFlipping, startFlipping, stopFlipping] = useFlag();\n\n const handleFlipCamera = useCallback(() => {\n startFlipping();\n switchCameraInputP2p();\n setTimeout(stopFlipping, 250);\n }, [startFlipping, stopFlipping]);\n\n const timeElapsed = phoneCall?.startDate && (Number(new Date()) / 1000 - phoneCall.startDate);\n\n useEffect(() => {\n if (phoneCall?.state === 'discarded') {\n setTimeout(hangUp, 250);\n }\n }, [hangUp, phoneCall?.reason, phoneCall?.state]);\n\n return (\n <Modal\n isOpen={phoneCall && phoneCall?.state !== 'discarded' && !isCallPanelVisible}\n onClose={handleClose}\n className={buildClassName(\n styles.root,\n IS_SINGLE_COLUMN_LAYOUT && styles.singleColumn,\n )}\n dialogRef={containerRef}\n >\n <Avatar user={user} size=\"jumbo\" className={hasVideo || hasPresentation ? styles.blurred : ''} />\n {phoneCall?.screencastState === 'active' && streams?.presentation\n && <video className={styles.mainVideo} muted autoPlay playsInline srcObject={streams.presentation} />}\n {phoneCall?.videoState === 'active' && streams?.video\n && <video className={styles.mainVideo} muted autoPlay playsInline srcObject={streams.video} />}\n <video\n className={buildClassName(\n styles.secondVideo,\n !isHidingPresentation && hasOwnPresentation && styles.visible,\n isFullscreen && styles.fullscreen,\n )}\n muted\n autoPlay\n playsInline\n srcObject={streams?.ownPresentation}\n />\n <video\n className={buildClassName(\n styles.secondVideo,\n !isHidingVideo && hasOwnVideo && styles.visible,\n isFullscreen && styles.fullscreen,\n )}\n muted\n autoPlay\n playsInline\n srcObject={streams?.ownVideo}\n />\n <div className={styles.header}>\n {IS_REQUEST_FULLSCREEN_SUPPORTED && (\n <Button\n round\n size=\"smaller\"\n color=\"translucent\"\n onClick={handleToggleFullscreen}\n ariaLabel={lang(isFullscreen ? 'AccExitFullscreen' : 'AccSwitchToFullscreen')}\n >\n <i className={isFullscreen ? 'icon-smallscreen' : 'icon-fullscreen'} />\n </Button>\n )}\n\n <Button\n round\n size=\"smaller\"\n color=\"translucent\"\n onClick={handleClose}\n className={styles.closeButton}\n >\n <i className=\"icon-close\" />\n </Button>\n </div>\n <div\n className={buildClassName(styles.emojisBackdrop, isEmojiOpen && styles.open)}\n onClick={!isEmojiOpen ? openEmoji : closeEmoji}\n >\n <div className={buildClassName(styles.emojis, isEmojiOpen && styles.open)}>\n {phoneCall?.isConnected && phoneCall?.emojis && renderText(phoneCall.emojis, ['emoji'])}\n </div>\n <div className={buildClassName(styles.emojiTooltip, isEmojiOpen && styles.open)}>\n {lang('CallEmojiKeyTooltip', user?.firstName).replace('%%', '%')}\n </div>\n </div>\n <div className={styles.userInfo}>\n <h1>{user?.firstName}</h1>\n <span className={styles.status}>{callStatus || formatMediaDuration(timeElapsed || 0)}</span>\n </div>\n <div className={styles.buttons}>\n <PhoneCallButton\n onClick={handleToggleAudio}\n icon=\"microphone\"\n isDisabled={!isActive}\n isActive={hasOwnAudio}\n label={lang(hasOwnAudio ? 'lng_call_mute_audio' : 'lng_call_unmute_audio')}\n />\n <PhoneCallButton\n onClick={handleToggleVideo}\n icon=\"video\"\n isDisabled={!isActive}\n isActive={hasOwnVideo}\n label={lang(hasOwnVideo ? 'lng_call_stop_video' : 'lng_call_start_video')}\n />\n {hasOwnVideo && (IS_ANDROID || IS_IOS) && (\n <PhoneCallButton\n onClick={handleFlipCamera}\n customIcon={(\n <AnimatedIcon\n tgsUrl={LOCAL_TGS_URLS.CameraFlip}\n playSegment={!isFlipping ? [0, 1] : [0, 10]}\n size={32}\n />\n )}\n isDisabled={!isActive}\n label={lang('VoipFlip')}\n />\n )}\n {IS_SCREENSHARE_SUPPORTED && (\n <PhoneCallButton\n onClick={handleTogglePresentation}\n icon=\"share-screen\"\n isDisabled={!isActive}\n isActive={hasOwnPresentation}\n label={lang('lng_call_screencast')}\n />\n )}\n {isIncomingRequested && (\n <PhoneCallButton\n onClick={acceptCall}\n icon=\"phone-discard\"\n isDisabled={isDiscarded}\n label={lang('lng_call_accept')}\n className={styles.accept}\n iconClassName={styles.acceptIcon}\n />\n )}\n <PhoneCallButton\n onClick={handleHangUp}\n icon=\"phone-discard\"\n isDisabled={isDiscarded}\n label={lang(isIncomingRequested ? 'lng_call_decline' : 'lng_call_end_call')}\n className={styles.leave}\n />\n </div>\n </Modal>\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { phoneCall, currentUserId } = global;\n\n return {\n isCallPanelVisible: Boolean(global.isCallPanelVisible),\n user: selectPhoneCallUser(global),\n isOutgoing: phoneCall?.adminId === currentUserId,\n phoneCall,\n };\n },\n)(PhoneCall));\n","// extracted by mini-css-extract-plugin\nexport default {\"stars\":\"src-components-calls-phone-RatePhoneCallModal-module__stars\",\"star\":\"src-components-calls-phone-RatePhoneCallModal-module__star\",\"isFilled\":\"src-components-calls-phone-RatePhoneCallModal-module__isFilled\",\"comment\":\"src-components-calls-phone-RatePhoneCallModal-module__comment\",\"visible\":\"src-components-calls-phone-RatePhoneCallModal-module__visible\"};","import type { FC } from '../../../lib/teact/teact';\nimport React, { memo, useRef, useState } from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\n\nimport Modal from '../../ui/Modal';\nimport Button from '../../ui/Button';\nimport InputText from '../../ui/InputText';\n\nimport styles from './RatePhoneCallModal.module.scss';\n\nexport type OwnProps = {\n isOpen?: boolean;\n};\n\nconst RatePhoneCallModal: FC<OwnProps> = ({\n isOpen,\n}) => {\n const { closeCallRatingModal, setCallRating } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef<HTMLInputElement>(null);\n\n const lang = useLang();\n const [rating, setRating] = useState<number | undefined>();\n\n function handleSend() {\n if (!rating) {\n closeCallRatingModal();\n return;\n }\n setCallRating({\n rating: rating + 1,\n comment: inputRef.current?.value || '',\n });\n }\n\n function handleClickStar(index: number) {\n return () => setRating(rating === index ? undefined : index);\n }\n\n return (\n <Modal title={lang('lng_call_rate_label')} className=\"narrow\" onClose={closeCallRatingModal} isOpen={isOpen}>\n <div className={styles.stars}>\n {new Array(5).fill(undefined).map((_, i) => {\n const isFilled = rating !== undefined && rating >= i;\n return (\n <i\n className={buildClassName(\n isFilled ? 'icon-favorite-filled' : 'icon-favorite',\n isFilled && styles.isFilled,\n styles.star,\n )}\n onClick={handleClickStar(i)}\n />\n );\n })}\n </div>\n <InputText\n ref={inputRef}\n placeholder={lang('lng_call_rate_comment')}\n className={buildClassName(styles.comment, rating !== 4 && rating !== undefined && styles.visible)}\n />\n\n {/* eslint-disable-next-line react/jsx-no-bind */}\n <Button className=\"confirm-dialog-button\" isText onClick={handleSend}>\n {lang('Send')}\n </Button>\n <Button className=\"confirm-dialog-button\" isText onClick={closeCallRatingModal}>{lang('Cancel')}</Button>\n </Modal>\n );\n};\n\nexport default memo(RatePhoneCallModal);\n","/*! For license information please see index.js.LICENSE.txt */\n(()=>{\"use strict\";var e={\"./src/blacksilence.ts\":(e,t,a)=>{a.r(t),a.d(t,{silence:()=>n,black:()=>s});const n=e=>{const t=e.createOscillator(),a=t.connect(e.createMediaStreamDestination());return t.start(),new MediaStream([Object.assign(a.stream.getAudioTracks()[0],{enabled:!1})])},s=({width:e=640,height:t=480}={})=>{const a=Object.assign(document.createElement(\"canvas\"),{width:e,height:t}),n=a.getContext(\"2d\");if(!n)throw Error(\"Cannot create canvas ctx\");n.fillRect(0,0,e,t);const s=a.captureStream();return new MediaStream([Object.assign(s.getVideoTracks()[0],{enabled:!1})])}},\"./src/buildSdp.ts\":(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(\"./src/utils.ts\");const s=(e,t=!1,a=!1,s=!1)=>{const i=[],r=e=>{i.push(e)},{sessionId:o,ssrcs:c,audioExtensions:d,videoExtensions:p,audioPayloadTypes:u,videoPayloadTypes:l,transport:{ufrag:m,pwd:f,fingerprints:g,candidates:v}}=e;r(\"v=0\"),r(`o=- ${o} 2 IN IP4 0.0.0.0`),r(\"s=-\"),r(\"t=0 0\"),r(\"a=ice-options:trickle\"),r(\"a=msid-semantic:WMS *\"),r(`a=group:BUNDLE ${c.map((e=>e.endpoint)).join(\" \")}${a?\"\":\" \"+(s?\"3\":\"2\")}`),s||r(\"a=ice-lite\");const S=e=>{if(e.sdpString)r(`a=${e.sdpString}`);else{let t=\"\";t+=\"a=candidate:\",t+=`${e.foundation} ${e.component} ${e.protocol} ${e.priority} ${e.ip} ${e.port} typ ${e.type}`,\"rel-addr\"in e&&(t+=` raddr ${e[\"rel-addr\"]} rport ${e[\"rel-port\"]}`),t+=` generation ${e.generation}`,r(t)}},y=()=>{r(`a=ice-ufrag:${m}`),r(`a=ice-pwd:${f}`),g.forEach((e=>{r(`a=fingerprint:${e.hash} ${e.fingerprint}`),r(`a=setup:${s?e.setup:\"passive\"}`)})),v.forEach(S)},h=e=>{const{channels:t,id:a,name:n,clockrate:s,parameters:i}=e;var o=t?`/${t}`:\"\";r(`a=rtpmap:${a} ${n}/${s}${o}`),i&&(o=Object.keys(i).map((e=>`${e}=${i[e]};`)).join(\" \"),r(`a=fmtp:${a} ${o}`)),e[\"rtcp-fbs\"]?.forEach((e=>{r(`a=rtcp-fb:${a} ${e.type}${e.subtype?` ${e.subtype}`:\"\"}`)}))};return e=e=>{const a=e.isVideo?l:u;var i=e.isVideo?\"video\":\"audio\";if(r(`m=${i} ${e.isMain?1:0} RTP/SAVPF ${a.map((e=>e.id)).join(\" \")}`),r(\"c=IN IP4 0.0.0.0\"),r(\"b=AS:1300\"),r(`a=mid:${e.endpoint}`),r(\"a=rtcp-mux\"),a.forEach(h),r(\"a=rtcp:1 IN IP4 0.0.0.0\"),e.isVideo&&r(\"a=rtcp-rsize\"),(e.isVideo?p:d).forEach((({id:e,uri:t})=>{r(`a=extmap:${e} ${t}`)})),e.isRemoved)r(\"a=inactive\");else{if(y(),s)r(\"a=sendrecv\"),r(\"a=bundle-only\");else{if(t)return void r(\"a=recvonly\");e.isMain?r(\"a=sendrecv\"):(r(\"a=sendonly\"),r(\"a=bundle-only\"))}e.sourceGroups.forEach((t=>{r(`a=ssrc-group:${t.semantics} ${t.sources.map(n.fromTelegramSource).join(\" \")}`),t.sources.forEach((t=>{t=(0,n.fromTelegramSource)(t),r(`a=ssrc:${t} cname:${e.endpoint}`),r(`a=ssrc:${t} msid:${e.endpoint} ${e.endpoint}`),r(`a=ssrc:${t} mslabel:${e.endpoint}`),r(`a=ssrc:${t} label:${e.endpoint}`)}))}))}},s?c.filter(e):c.filter((e=>\"0\"===e.endpoint||\"1\"===e.endpoint)).map(e),a||(r(\"m=application 1 UDP/DTLS/SCTP webrtc-datachannel\"),r(\"c=IN IP4 0.0.0.0\"),y(),r(\"a=ice-options:trickle\"),r(\"a=mid:\"+(s?\"3\":a?\"1\":\"2\")),r(\"a=sctp-port:5000\"),r(\"a=max-message-size:262144\")),s||c.filter((e=>\"0\"!==e.endpoint&&\"1\"!==e.endpoint)).map(e),`${i.join(\"\\n\")}\\n`}},\"./src/p2p.ts\":(e,t,a)=>{a.r(t),a.d(t,{getStreams:()=>function(){return o?.streams},switchCameraInputP2p:()=>async function(){if(o&&o.facingMode){const e=o.streams.ownVideo;if(e){const t=e.getTracks()[0];if(t){const e=o.connection.getSenders().find((e=>t.id===e.track?.id));if(e){o.facingMode=\"environment\"===o.facingMode?\"user\":\"environment\";try{const t=await d(\"video\",o.facingMode);await e.replaceTrack(t.getTracks()[0]),o.streams.ownVideo=t,c()}catch(e){}}}}}},toggleStreamP2p:()=>p,joinPhoneCall:()=>async function(e,t,a,i,r){const d=new RTCPeerConnection({iceServers:e.map((e=>({urls:[e.isTurn&&`turn:${e.ip}:${e.port}`,e.isStun&&`stun:${e.ip}:${e.port}`].filter(Boolean),username:e.username,credentialType:\"password\",credential:e.password}))),iceCandidatePoolSize:2}),u=(0,n.silence)(new AudioContext),l=(0,n.black)({width:640,height:480}),g=(0,n.black)({width:640,height:480});d.addTrack(u.getTracks()[0],u),d.addTrack(l.getTracks()[0],l),d.addTrack(g.getTracks()[0],g),d.onicecandidate=e=>{e.candidate&&t({\"@type\":\"Candidates\",candidates:[{sdpString:e.candidate.candidate}]})},d.onconnectionstatechange=()=>{r({\"@type\":\"updatePhoneCallConnectionState\",connectionState:d.connectionState})},d.ontrack=e=>{var t;o&&(t=e.streams[0],\"audio\"===e.track.kind?(o.audio.srcObject=t,o.audio.play().catch(),o.streams.audio=t):\"1\"===e.transceiver.mid?o.streams.video=t:o.streams.presentation=t,c())};const v=d.createDataChannel(\"data\",{id:0,negotiated:!0});v.onmessage=e=>{f(JSON.parse(e.data))},e=new Audio,o={audio:e,connection:d,emitSignalingData:t,isOutgoing:a,candidates:[],onUpdate:r,streams:{ownVideo:l,ownAudio:u,ownPresentation:g},mediaState:{isBatteryLow:!1,screencastState:\"inactive\",videoState:\"inactive\",videoRotation:0,isMuted:!0},blackVideo:l,blackPresentation:g,silence:u,dataChannel:v};try{i&&p(\"video\",!0),p(\"audio\",!0)}catch(e){}a&&(a=await d.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0}),await d.setLocalDescription(a),m((0,s.default)(a,!0)))},stopPhoneCall:()=>function(){o&&(o.streams.ownVideo?.getTracks().forEach((e=>e.stop())),o.streams.ownPresentation?.getTracks().forEach((e=>e.stop())),o.streams.ownAudio?.getTracks().forEach((e=>e.stop())),o.dataChannel.close(),o.connection.close(),o=void 0)},processSignalingMessage:()=>f});var n=a(\"./src/blacksilence.ts\"),s=a(\"./src/parseSdp.ts\"),i=a(\"./src/utils.ts\"),r=a(\"./src/buildSdp.ts\");let o;function c(){o?.onUpdate({...o.mediaState,\"@type\":\"updatePhoneCallMediaState\"})}function d(e,t=\"user\"){return\"presentation\"===e?navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0}):navigator.mediaDevices.getUserMedia({audio:\"audio\"===e&&{...i.IS_ECHO_CANCELLATION_SUPPORTED&&{echoCancellation:!0},...i.IS_NOISE_SUPPRESSION_SUPPORTED&&{noiseSuppression:!0}},video:\"video\"===e&&{facingMode:t}})}async function p(e,t){if(o){const a=\"audio\"===e?o.streams.ownAudio:\"video\"===e?o.streams.ownVideo:o.streams.ownPresentation;if(a){const n=a.getTracks()[0];if(n){const a=o.connection.getSenders().find((e=>n.id===e.track?.id));if(a){t=void 0===t?!n.enabled:t;try{if(t&&!n.enabled){const t=await d(e);t.getTracks()[0].onended=()=>{p(e,!1)},await a.replaceTrack(t.getTracks()[0]),\"audio\"===e?o.streams.ownAudio=t:\"video\"===e?(o.streams.ownVideo=t,o.facingMode=\"user\"):o.streams.ownPresentation=t,\"video\"!==e&&\"presentation\"!==e||p(\"video\"===e?\"presentation\":\"video\",!1)}else if(!t&&n.enabled){n.stop();const t=\"audio\"===e?o.silence:\"video\"===e?o.blackVideo:o.blackPresentation;if(!t)return;await a.replaceTrack(t.getTracks()[0]),\"audio\"===e?o.streams.ownAudio=t:\"video\"===e?o.streams.ownVideo=t:o.streams.ownPresentation=t}c(),u()}catch(e){}}}}}}function u(){if(o){const{emitSignalingData:e,streams:t}=o;e({\"@type\":\"MediaState\",videoRotation:0,isMuted:!t.ownAudio?.getTracks()[0].enabled,isBatteryLow:!0,videoState:t.ownVideo?.getTracks()[0].enabled?\"active\":\"inactive\",screencastState:t.ownPresentation?.getTracks()[0].enabled?\"active\":\"inactive\"})}}function l(e){if(!o||o.isOutgoing)return e;const t=e.payloadTypes;var a=t.findIndex((e=>\"VP8\"===e.name));const n=t[a];var s=t.findIndex((e=>Number(e.parameters?.apt)===n.id));return e.payloadTypes=[t[a],t[s]],e}function m(e){if(o){const t=o.emitSignalingData;e.ssrc&&e[\"ssrc-groups\"]&&e[\"ssrc-groups\"][0]&&e[\"ssrc-groups\"][1]&&t({\"@type\":\"InitialSetup\",fingerprints:e.fingerprints,ufrag:e.ufrag,pwd:e.pwd,audio:{ssrc:(0,i.fromTelegramSource)(e.ssrc).toString(),ssrcGroups:[],payloadTypes:e.audioPayloadTypes,rtpExtensions:e.audioExtmap},video:l({ssrc:(0,i.fromTelegramSource)(e[\"ssrc-groups\"][0].sources[0]).toString(),ssrcGroups:[{semantics:e[\"ssrc-groups\"][0].semantics,ssrcs:e[\"ssrc-groups\"][0].sources.map(i.fromTelegramSource)}],payloadTypes:e.videoPayloadTypes,rtpExtensions:e.videoExtmap}),screencast:l({ssrc:(0,i.fromTelegramSource)(e[\"ssrc-groups\"][1].sources[0]).toString(),ssrcGroups:[{semantics:e[\"ssrc-groups\"][1].semantics,ssrcs:e[\"ssrc-groups\"][1].sources.map(i.fromTelegramSource)}],payloadTypes:e.screencastPayloadTypes,rtpExtensions:e.screencastExtmap})})}}async function f(e){if(o&&o.connection)switch(e[\"@type\"]){case\"MediaState\":o.mediaState=e,c(),u();break;case\"Candidates\":var{candidates:t,gotInitialSetup:a}=o;if(!t)return;e.candidates.forEach((e=>{o.candidates.push(e.sdpString)})),a&&await Promise.all(o.candidates.map((e=>o.connection.addIceCandidate({candidate:e,sdpMLineIndex:0}))));break;case\"InitialSetup\":{const{connection:t,isOutgoing:n}=o;if(!t)return;if(a={transport:{candidates:[],ufrag:e.ufrag,pwd:e.pwd,fingerprints:e.fingerprints,\"rtcp-mux\":!1,xmlns:\"\"},sessionId:Date.now(),ssrcs:[e.audio&&{isVideo:!1,isMain:!1,userId:\"123\",endpoint:\"0\",sourceGroups:[{semantics:\"FID\",sources:[e.audio.ssrc]}]},e.video&&{isVideo:!0,isPresentation:!1,isMain:!1,userId:\"123\",endpoint:\"1\",sourceGroups:e.video.ssrcGroups.map((e=>({semantics:e.semantics,sources:e.ssrcs})))},e.screencast&&{isVideo:!0,isPresentation:!0,isMain:!1,userId:\"123\",endpoint:\"2\",sourceGroups:e.screencast.ssrcGroups.map((e=>({semantics:e.semantics,sources:e.ssrcs})))}],audioPayloadTypes:e.audio.payloadTypes?.map(i.p2pPayloadTypeToConference)||[],audioExtensions:e.audio.rtpExtensions,videoPayloadTypes:l(e.video).payloadTypes?.map(i.p2pPayloadTypeToConference)||[],videoExtensions:e.video.rtpExtensions},await t.setRemoteDescription({sdp:(0,r.default)(a,n,void 0,!0),type:n?\"answer\":\"offer\"}),o.conference=a,!n){if(a=await t.createAnswer(),!a)return;await t.setLocalDescription(a),m((0,s.default)(a,!0))}o.gotInitialSetup=!0,await Promise.all(o.candidates.map((e=>t.addIceCandidate({candidate:e,sdpMLineIndex:0}))));break}}}},\"./src/p2pMessage.ts\":(e,t,a)=>{a.r(t)},\"./src/parseSdp.ts\":(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(\"./src/utils.ts\");const s=(e,t=!1)=>{if(!e||!e.sdp)throw Error(\"Failed parsing SDP: session description is null\");const a=e.sdp.split(\"\\r\\nm=\").map(((e,t)=>0===t?e:`m=${e}`)).reduce(((e,t)=>{var a=t.match(/^m=(.+?)\\s/)?.[1]||\"header\";return e[e.hasOwnProperty(a)&&\"video\"===a?\"screencast\":a]=t.split(\"\\r\\n\").filter(Boolean),e}),{});var s=(e,t)=>t?a[t]?.find((t=>t.startsWith(e)))?.substr(e.length):Object.values(a).map((t=>t.find((t=>t.startsWith(e)))?.substr(e.length))).filter(Boolean)[0],i=e=>a[e].filter((e=>e.startsWith(\"a=extmap\"))).map((e=>{var[,t,e]=e.match(/extmap:(\\d+)(?:\\/.+)?\\s(.+)/);return{id:Number(t),uri:e}})),r=e=>{const t=a[e].filter((e=>e.startsWith(\"a=rtpmap\"))).map((e=>{const[,t,a]=e.match(/:(\\d+)\\s(.+)/)||[];var[n,s,e]=a.split(\"/\");return{id:Number(t),name:n,clockrate:Number(s),...e&&{channels:Number(e)}}})),n=a[e].filter((e=>e.startsWith(\"a=rtcp-fb\"))).map((e=>{const[,t,a]=e.match(/:(\\d+)\\s(.+)/)||[];var[n,e]=a.split(\" \");return{id:Number(t),type:n,subtype:e||\"\"}})),s=a[e].filter((e=>e.startsWith(\"a=fmtp\"))).map((e=>{const[,t,a]=e.match(/:(\\d+)\\s(.+)/)||[];if(e=a.split(\";\").reduce(((e,t)=>{var[a,t]=t.split(\"=\");return e[a]=t,e}),{}),!Object.values(e).some((e=>!e)))return{id:Number(t),data:e}})).filter(Boolean);return t.map((e=>{var t=s.filter((t=>t.id===e.id)).map((e=>e.data)).reduce(((e,t)=>Object.assign(e,t)),{}),a=n.filter((t=>t.id===e.id)).map((e=>({type:e.type,subtype:e.subtype})));return{...e,...0<Object.keys(t).length&&{parameters:t},...0<a.length&&{feedbackTypes:a}}}))};const o=s(\"a=ssrc:\",\"audio\");var c=o&&Number(o.split(\" \")[0]);const d=s(\"a=ssrc-group:\",\"video\")?.split(\" \")||void 0,p=s(\"a=ssrc-group:\",\"screencast\")?.split(\" \")||void 0;if(!d)throw Error(\"Failed parsing SDP: no video ssrc\");var[u,l]=s(\"a=fingerprint:\")?.split(\" \")||[],m=s(\"a=setup:\");if(!u||!l)throw Error(\"Failed parsing SDP: no fingerprint\");if(console.log(a),e=s(\"a=ice-ufrag:\"),s=s(\"a=ice-pwd:\"),!e||!s)throw Error(\"Failed parsing SDP: no ICE ufrag or pwd\");return{fingerprints:[{fingerprint:l,hash:u,setup:t?m:\"active\"}],pwd:s,ufrag:e,...c&&{ssrc:(0,n.toTelegramSource)(c)},...d&&{\"ssrc-groups\":[{semantics:d[0],sources:d.slice(1,d.length).map(Number).map(n.toTelegramSource)},t&&p&&{semantics:p[0],sources:p.slice(1,p.length).map(Number).map(n.toTelegramSource)}].filter(Boolean)},...t&&{audioExtmap:i(\"audio\"),videoExtmap:i(\"video\"),screencastExtmap:i(\"screencast\"),audioPayloadTypes:r(\"audio\"),videoPayloadTypes:r(\"video\"),screencastPayloadTypes:r(\"screencast\")}}}},\"./src/secretsauce.ts\":(e,t,a)=>{a.r(t),a.d(t,{getDevices:()=>async function(e,t=!0){return(await navigator.mediaDevices.enumerateDevices()).filter((a=>a.kind===`${e}${t?\"input\":\"output\"}`))},toggleSpeaker:()=>function(){o&&(o.isSpeakerDisabled=!o.isSpeakerDisabled,o?.onUpdate?.({\"@type\":\"updateGroupCallConnectionState\",connectionState:\"connected\",isSpeakerDisabled:o.isSpeakerDisabled}),o.participantFunctions&&Object.values(o.participantFunctions).forEach((e=>{e.toggleMute?.(!!o?.isSpeakerDisabled)})))},toggleNoiseSuppression:()=>function(){if(o&&o.myId&&o.streams){const a=o.streams[o.myId].audio;if(a){const n=a.getTracks()[0];var e,t;n&&(({echoCancellation:e,noiseSuppression:t}=n.getConstraints()),n.applyConstraints({echoCancellation:!e,noiseSuppression:!t}))}}},getUserStreams:()=>d,setVolume:()=>function(e,t){const a=o?.participantFunctions?.[e];a&&a.setVolume?.(t)},isStreamEnabled:()=>p,switchCameraInput:()=>async function(){if(o?.myId&&o.connection&&o.streams&&o.facingMode){const e=d(o.myId)?.video;if(e){const t=e.getTracks()[0];if(t){const e=o.connection.getSenders().find((e=>t.id===e.track?.id));if(e){o.facingMode=\"environment\"===o.facingMode?\"user\":\"environment\";try{const t=await l(\"video\",o.facingMode);await e.replaceTrack(t.getTracks()[0]),o.streams[o.myId].video=t}catch(e){}}}}}},toggleStream:()=>m,leaveGroupCall:()=>g,handleUpdateGroupCallParticipants:()=>async function(e){if(o){const{participants:n,conference:i,connection:r,myId:c}=o;if(n&&i&&r&&i.ssrcs&&i.transport&&c)if(e.find((e=>e.isSelf&&e.source!==o?.conference?.ssrcs?.find((e=>e.isMain&&!e.isVideo))?.sourceGroups[0].sources[0])))g();else{const n=[];if(e.forEach((e=>{if(e.isSelf)e.isMuted&&!e.canSelfUnmute&&(m(\"audio\",!1),m(\"video\",!1),m(\"presentation\",!1));else{var t=e.isLeft;const a=e.isMuted||e.isMutedByMe,s=!e.isVideoJoined||!e.video||t,r=!e.presentation||t;let o=!1,c=!1,d=!1;i.ssrcs.filter((t=>t.userId===e.id)).forEach((t=>{t.isVideo||(t.sourceGroups[0].sources[0]===e.source&&(c=!0),t.isRemoved=a),t.isVideo&&(t.isPresentation||(e.video&&t.endpoint===e.video.endpoint&&(o=!0),t.isRemoved=s),t.isPresentation&&(e.presentation&&t.endpoint===e.presentation.endpoint&&(d=!0),t.isRemoved=r))})),a||c||i.ssrcs.push({userId:e.id,isMain:!1,endpoint:`audio${e.source}`,isVideo:!1,sourceGroups:[{semantics:\"FID\",sources:[e.source]}]}),s||o||!e.video||(n.push(e.video.endpoint),i.ssrcs.push({userId:e.id,isMain:!1,endpoint:e.video.endpoint,isVideo:!0,sourceGroups:e.video.sourceGroups})),r||d||!e.presentation||i.ssrcs.push({isPresentation:!0,userId:e.id,isMain:!1,endpoint:e.presentation.endpoint,isVideo:!0,sourceGroups:e.presentation.sourceGroups})}})),o.updatingParticipantsQueue)o.updatingParticipantsQueue.push(i);else{o.updatingParticipantsQueue=[],e=(0,s.default)(i),await r.setRemoteDescription({type:\"offer\",sdp:e});try{var t=await r.createAnswer();if(await r.setLocalDescription(t),u(c),0<o.updatingParticipantsQueue.length)for(const e of o.updatingParticipantsQueue){await r.setRemoteDescription({type:\"offer\",sdp:(0,s.default)(e)});var a=await r.createAnswer();await r.setLocalDescription(a),u(c)}o.updatingParticipantsQueue=void 0}catch(e){console.error(e)}}}}},handleUpdateGroupCallConnection:()=>async function(e,t){if(o){var a=t?o.screenshareConference:o.conference;const i=t?o.screenshareConnection:o.connection;if(a&&i&&a.ssrcs){var n=Date.now();e={...a,transport:e.transport,sessionId:n,audioExtensions:e.audio?.[\"rtp-hdrexts\"],audioPayloadTypes:e.audio?.[\"payload-types\"],videoExtensions:e.video?.[\"rtp-hdrexts\"],videoPayloadTypes:e.video?.[\"payload-types\"]};o={...o,...t?{screenshareConference:e}:{conference:e}};try{await i.setRemoteDescription({type:\"answer\",sdp:(0,s.default)(e,!0,t)})}catch(e){console.error(e)}}}},startSharingScreen:()=>async function(){if(o)try{const e=await l(\"presentation\");return e?(e.getTracks()[0].onended=()=>{o&&o.myId&&(o.streams?.[o.myId].presentation,u(o.myId),c())},new Promise((t=>{var{connection:a,dataChannel:t}=y([e],t,!0);o={...o,screenshareConnection:a,screenshareDataChannel:t}}))):void 0}catch(e){return}},joinGroupCall:()=>function(e,t,a,n){if(o)throw Error(\"Already in call\");f(\"connecting\");var s=new MediaStream;return a.srcObject=s,a.play().catch((e=>console.warn(e))),o={onUpdate:n,participants:[],myId:e,speaking:{},silence:(0,i.silence)(t),black:(0,i.black)({width:640,height:480}),analyserInterval:setInterval(v,1e3),audioElement:a,audioContext:t,mediaStream:s},new Promise((e=>{o={...o,...y([o.silence,o.black],e)}}))}});var n=a(\"./src/parseSdp.ts\"),s=a(\"./src/buildSdp.ts\"),i=a(\"./src/blacksilence.ts\"),r=a(\"./src/utils.ts\");let o;function c(e){o&&(o.screenshareDataChannel?.close(),o.screenshareConnection?.close(),e||o.onUpdate?.({\"@type\":\"updateGroupCallLeavePresentation\"}))}function d(e){return o?.streams?.[e]}function p(e,t){const a=(t=t||o?.myId)&&d(t)?.[e];return!!a&&a.getTracks()[0]?.enabled}function u(e){o?.onUpdate?.({\"@type\":\"updateGroupCallStreams\",userId:e,hasAudioStream:p(\"audio\",e),hasVideoStream:p(\"video\",e),hasPresentationStream:p(\"presentation\",e),amplitude:o.speaking?.[e]})}function l(e,t=\"user\"){return\"presentation\"===e?navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0}):navigator.mediaDevices.getUserMedia({audio:\"audio\"===e&&{...r.IS_ECHO_CANCELLATION_SUPPORTED&&{echoCancellation:!0},...r.IS_NOISE_SUPPRESSION_SUPPORTED&&{noiseSuppression:!0}},video:\"video\"===e&&{facingMode:t}})}async function m(e,t){if(o&&o.myId&&o.connection&&o.streams){const a=d(o.myId)?.[e];if(a){const n=a.getTracks()[0];if(n){const a=[...o.connection.getSenders(),...o.screenshareConnection?.getSenders()||[]].find((e=>n.id===e.track?.id));if(a){t=void 0===t?!n.enabled:t;try{if(t&&!n.enabled){const t=await l(e);if(await a.replaceTrack(t.getTracks()[0]),o.streams[o.myId][e]=t,\"video\"===e)o.facingMode=\"user\";else if(\"audio\"===e){const e=o.audioContext;if(!e)return;const a=e.createMediaStreamSource(t),n=e.createAnalyser();n.minDecibels=-100,n.maxDecibels=-30,n.smoothingTimeConstant=.05,n.fftSize=1024,a.connect(n),o={...o,participantFunctions:{...o.participantFunctions,[o.myId]:{...o.participantFunctions?.[o.myId],getCurrentAmplitude:()=>{var e=new Uint8Array(n.frequencyBinCount);return n.getByteFrequencyData(e),(0,r.getAmplitude)(e,1.5)}}}}}}else if(!t&&n.enabled){n.stop();const t=\"audio\"===e?o.silence:o.black;if(!t)return;await a.replaceTrack(t.getTracks()[0]),o.streams[o.myId][e]=t,\"video\"===e&&(o.facingMode=void 0)}u(o.myId),\"presentation\"!==e||t||c(!0)}catch(e){}}}}}}function f(e){o?.onUpdate?.({\"@type\":\"updateGroupCallConnectionState\",connectionState:e})}function g(){o&&(o.myId&&o.streams?.[o.myId]&&Object.values(o.streams[o.myId]||{}).forEach((e=>{e?.getTracks().forEach((e=>{e.stop()}))})),c(!0),o.dataChannel?.close(),o.connection?.close(),f(\"disconnected\"),o.analyserInterval&&clearInterval(o.analyserInterval),o=void 0)}function v(){o&&o.participantFunctions&&Object.keys(o.participantFunctions).forEach((e=>{const t=o.participantFunctions[Number(e)].getCurrentAmplitude;var a,n;t&&(a=t(),n=o.speaking[e]||0,((o.speaking[e]=a)>r.THRESHOLD&&n<=r.THRESHOLD||a<=r.THRESHOLD&&n>r.THRESHOLD)&&u(e))}))}function S(e){if(o&&o.audioElement&&o.audioContext&&o.mediaStream){var t=o.conference?.ssrcs?.find((t=>t.endpoint===e.track.id));if(t&&t.userId){const{userId:n,isPresentation:s}=t;var a=o.participants?.find((e=>e.id===n));const i=\"video\"===e.track.kind?s?\"presentation\":\"video\":\"audio\";if(e.track.onended=()=>{o?.streams?.[n][i],u(n)},t=e.streams[0],\"audio\"===e.track.kind){const e=o.mediaStream,s=new window.AudioContext,i=s.createMediaStreamSource(t),c=s.createGain();c.gain.value=(a?.volume||1e4)/1e4;const d=s.createGain();c.gain.value=1;const p=s.createAnalyser();p.minDecibels=-100,p.maxDecibels=-30,p.smoothingTimeConstant=.05,p.fftSize=1024,i.connect(p).connect(d).connect(c).connect(s.destination),e.addTrack(i.mediaStream.getAudioTracks()[0]);const u=new Audio;u.srcObject=t,u.muted=!0,u.remove(),o={...o,participantFunctions:{...o.participantFunctions,[n]:{...o.participantFunctions?.[n],setVolume:e=>{c.gain.value=1<e?2*e:e},toggleMute:e=>{d.gain.value=e?0:1},getCurrentAmplitude:()=>{var e=new Uint8Array(p.frequencyBinCount);return p.getByteFrequencyData(e),(0,r.getAmplitude)(e,1.5)}}}}}o={...o,streams:{...o.streams,[n]:{...o.streams?.[n],[i]:t}}},u(n)}}}function y(e,t,a=!1){const s=new RTCPeerConnection;var i=a?void 0:function(e){const t=e.createDataChannel(\"data\",{id:0});return t.onopen=()=>{},t.onmessage=e=>{JSON.parse(e.data).colibriClass},t.onerror=e=>{console.log(\"%conerror\",\"background: green; font-size: 5em\"),console.error(e)},t}(s);return e.forEach((e=>e.getTracks().forEach((t=>{s.addTrack(t,e)})))),a||(s.oniceconnectionstatechange=()=>{var e=s.iceConnectionState;\"connected\"===e||\"completed\"===e?f(\"connected\"):\"checking\"===e||\"new\"===e?f(\"connecting\"):\"disconnected\"===s.iceConnectionState&&f(\"reconnecting\")}),s.ontrack=S,s.onnegotiationneeded=async()=>{if(o){var i=o.myId;if(i){var r=await s.createOffer({offerToReceiveVideo:!0,offerToReceiveAudio:!a});if(await s.setLocalDescription(r),r.sdp){var c=(0,n.default)(r),d=a?void 0:{userId:\"\",sourceGroups:[{semantics:\"FID\",sources:[c.ssrc||0]}],isRemoved:a,isMain:!0,isVideo:!1,isPresentation:a,endpoint:a?\"1\":\"0\"},p=c[\"ssrc-groups\"]&&{isPresentation:a,userId:\"\",sourceGroups:c[\"ssrc-groups\"],isMain:!0,isVideo:!0,endpoint:a?\"0\":\"1\"};r=a?o.screenshareConference:o.conference;const s=[];a?(p&&s.push(p),d&&s.push(d)):(d&&s.push(d),p&&s.push(p)),d=e.find((e=>\"audio\"===e.getTracks()[0].kind)),p=e.find((e=>\"video\"===e.getTracks()[0].kind)),o={...o,...a?{screenshareConference:{...r,ssrcs:s}}:{conference:{...r,ssrcs:s}},streams:{...o.streams,[i]:{...o.streams?.[i],...d&&{audio:d},...!a&&p?{video:p}:{presentation:p}}}},u(i),t(c)}}}},{connection:s,dataChannel:i}}},\"./src/types.ts\":(e,t,a)=>{a.r(t)},\"./src/utils.ts\":(e,t,a)=>{a.r(t),a.d(t,{toTelegramSource:()=>function(e){return e<<0},fromTelegramSource:()=>function(e){return e>>>0},getAmplitude:()=>function(e,t=3){if(!e)return 0;var a=e.length;let n=0;for(let t=0;t<a;t++)n+=e[t]*e[t];var s=Math.sqrt(n/a)/255;return Math.min(1,s*t)},p2pPayloadTypeToConference:()=>function(e){return{id:e.id,name:e.name,\"rtcp-fbs\":e.feedbackTypes,clockrate:e.clockrate,parameters:e.parameters,channels:e.channels}},THRESHOLD:()=>n,IS_SCREENSHARE_SUPPORTED:()=>s,IS_ECHO_CANCELLATION_SUPPORTED:()=>i,IS_NOISE_SUPPRESSION_SUPPORTED:()=>r});const n=.1,s=\"getDisplayMedia\"in(navigator?.mediaDevices||{}),i=navigator?.mediaDevices?.getSupportedConstraints().echoCancellation,r=navigator?.mediaDevices?.getSupportedConstraints().noiseSuppression}},t={};function a(n){var s=t[n];return void 0!==s||(s=t[n]={exports:{}},e[n](s,s.exports,a)),s.exports}a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var n={};(()=>{a.r(n),a.d(n,{handleUpdateGroupCallConnection:()=>e.handleUpdateGroupCallConnection,startSharingScreen:()=>e.startSharingScreen,joinGroupCall:()=>e.joinGroupCall,getDevices:()=>e.getDevices,getUserStreams:()=>e.getUserStreams,setVolume:()=>e.setVolume,isStreamEnabled:()=>e.isStreamEnabled,toggleStream:()=>e.toggleStream,leaveGroupCall:()=>e.leaveGroupCall,handleUpdateGroupCallParticipants:()=>e.handleUpdateGroupCallParticipants,switchCameraInput:()=>e.switchCameraInput,toggleSpeaker:()=>e.toggleSpeaker,toggleNoiseSuppression:()=>e.toggleNoiseSuppression,joinPhoneCall:()=>t.joinPhoneCall,processSignalingMessage:()=>t.processSignalingMessage,getStreams:()=>t.getStreams,toggleStreamP2p:()=>t.toggleStreamP2p,stopPhoneCall:()=>t.stopPhoneCall,switchCameraInputP2p:()=>t.switchCameraInputP2p,IS_SCREENSHARE_SUPPORTED:()=>s.IS_SCREENSHARE_SUPPORTED,THRESHOLD:()=>s.THRESHOLD});var e=a(\"./src/secretsauce.ts\"),t=a(\"./src/p2p.ts\"),s=(a(\"./src/p2pMessage.ts\"),a(\"./src/utils.ts\"));a(\"./src/types.ts\")})();var s,i=exports;for(s in n)i[s]=n[s];n.__esModule&&Object.defineProperty(i,\"__esModule\",{value:!0})})();"],"names":["addActionHandler","async","global","actions","payload","isFromLibrary","shouldDiscard","shouldRemove","rejoin","groupCall","selectActiveGroupCall","setGlobal","updateActiveGroupCall","connectionState","participantsCount","callApi","call","getGlobal","removeGroupCall","id","removeGroupCallAudioElement","groupCalls","activeGroupCallId","undefined","isCallPanelVisible","leaveGroupCall","joinGroupCall","user","selectUser","currentUserId","toggleStream","videoStopped","isStreamEnabled","participant","value","raiseHand","participantId","volume","setVolume","Math","floor","GROUP_CALL_VOLUME_MULTIPLIER","Number","muted","params","startSharingScreen","presentationPaused","showNotification","message","audioElement","getGroupCallAudioElement","audioContext","getGroupCallAudioContext","apiUpdate","inviteHash","loadMoreGroupCallParticipants","chatId","chat","selectChat","loadFullChat","phoneCall","selectPhoneCallUser","dhConfig","gAHash","isVideo","gB","data","JSON","stringify","encodedData","ratingPhoneCall","rating","comment","state","stopPhoneCall","EMOJI_DATA","Uint16Array","EMOJI_OFFSETS","update","toggleGroupCallPresentation","userId","selectGroupCallParticipant","updateGroupCallParticipant","omit","updateGroupCall","isSpeakerDisabled","groupCallId","participants","handleUpdateGroupCallParticipants","stream","handleUpdateGroupCallConnection","presentation","Object","keys","length","values","ARE_CALLS_SUPPORTED","isOutgoing","adminId","isBusy","accessHash","connections","protocol","libraryVersions","some","version","hangUp","langProvider","firstName","needRating","gA","keyFingerprint","emojis","newCall","gAOrB","joinPhoneCall","sendSignalingData","Boolean","isConnected","then","processSignalingMessage","vibrateShort","navigator","vibrate","memo","withGlobal","meParticipant","raiseHandRating","hasAudioStream","canSelfUnmute","isMuted","hasRequestedToSpeak","noAudioStream","toggleGroupCallMute","requestToSpeak","playGroupCallSound","getActions","lang","useLang","muteMouseDownState","useRef","isRequestingToSpeak","setIsRequestingToSpeak","useState","isConnecting","shouldRaiseHand","prevShouldRaiseHand","usePrevious","useEffect","sound","playSegment","useMemo","r","random","animatedIconName","toggleMute","buttonText","className","buildClassName","onMouseDown","setTimeout","current","onMouseUp","AnimatedIcon","tgsUrl","LOCAL_TGS_URLS","size","SPEAKER_ICON_DISABLED_SEGMENT","SPEAKER_ICON_ENABLED_SEGMENT","isAdmin","selectIsAdminInActiveGroupCall","closeDropdown","isDropdownOpen","anchor","setGroupCallParticipantVolume","toggleGroupCallPanel","openChat","isDeleteUserModalOpen","openDeleteUserModal","closeDeleteUserModal","useFlag","isMutedByMe","isSelf","isRaiseHand","localVolume","setLocalVolume","GROUP_CALL_DEFAULT_VOLUME","runThrottled","fn","deps","ms","noFirst","fnMemo","useCallback","cb","throttle","useThrottledCallback","handleRemove","e","stopPropagation","handleCancelRequestToSpeak","handleMute","handleOpenProfile","speakerIconPlaySegment","Menu","isOpen","positionX","autoClose","style","buildStyle","y","onClose","type","min","max","onChange","target","MenuItem","icon","onClick","destructive","DeleteMemberModal","noColor","isSpeaking","amplitude","THRESHOLD","prevIsRaiseHand","prevIsMuted","microphoneColor","color","isUser","openParticipantMenu","anchorRef","aboutText","aboutColor","toString","replace","about","name","lastName","title","ref","Avatar","createGroupCallInviteLink","participantsIds","viewportIds","getMore","useInfiniteScroll","InfiniteScroll","items","onLoadMore","map","key","isActive","isFullscreen","handleClick","streams","getUserStreams","ENABLE_THUMBNAIL_VIDEO","autoPlay","playsInline","srcObject","onDoubleClick","selectedVideo","setSelectedVideo","presentationParticipants","filter","l","hasPresentationStream","videoParticipants","hasVideoStream","totalVideoCount","columnCount","shouldSpanLastVideo","handleClickVideo","CAMERA_FLIP_PLAY_SEGMENT","selectGroupCall","isSpeakerEnabled","toggleGroupCallVideo","connectToActiveGroupCall","containerRef","isLeaving","setIsLeaving","openFullscreen","closeFullscreen","isSidebarOpen","openSidebar","closeSidebar","hasVideoParticipants","video","isLandscape","IS_SINGLE_COLUMN_LAYOUT","participantMenu","setParticipantMenu","isParticipantMenuOpen","closeParticipantMenu","isConfirmLeaveModalOpen","openConfirmLeaveModal","closeConfirmLeaveModal","isEndGroupCallModal","setIsEndGroupCallModal","shouldEndGroupCall","setShouldEndGroupCall","hasVideo","hasPresentation","handleOpenParticipantMenu","rect","getBoundingClientRect","container","x","left","top","offsetTop","handleCloseConfirmLeaveModal","MainButton","onTrigger","Button","round","ariaLabel","handleToggleFullscreen","document","exitFullscreen","requestFullscreen","handleToggleSidebar","handleStreamsDoubleClick","IS_REQUEST_FULLSCREEN_SUPPORTED","toggleFullscreen","handleClose","addEventListener","removeEventListener","endGroupCall","handleLeaveGroupCall","handleCloseAnimationEnd","Modal","dialogRef","onCloseAnimationEnd","IS_SCREENSHARE_SUPPORTED","DropdownMenu","trigger","Loading","IS_ANDROID","IS_IOS","switchCameraInput","toggleSpeaker","Checkbox","label","checked","onCheck","isText","phoneCallUser","body","classList","toggle","customIcon","iconClassName","isDisabled","disabled","acceptCall","connectToActivePhoneCall","isDiscarded","reason","isIncomingRequested","isOutgoingRequested","isHangingUp","startHangingUp","stopHangingUp","handleHangUp","forceUpdate","useForceUpdate","useInterval","callStatus","videoState","screencastState","getStreams","hasOwnAudio","ownAudio","getTracks","enabled","hasOwnPresentation","ownPresentation","hasOwnVideo","ownVideo","isHidingPresentation","startHidingPresentation","stopHidingPresentation","isHidingVideo","startHidingVideo","stopHidingVideo","handleTogglePresentation","toggleStreamP2p","handleToggleVideo","handleToggleAudio","isEmojiOpen","openEmoji","closeEmoji","isFlipping","startFlipping","stopFlipping","handleFlipCamera","switchCameraInputP2p","timeElapsed","startDate","Date","styles","renderText","formatMediaDuration","closeCallRatingModal","setCallRating","inputRef","setRating","Array","fill","_","i","isFilled","index","InputText","placeholder","t","a","d","silence","n","black","s","createOscillator","connect","createMediaStreamDestination","start","MediaStream","assign","getAudioTracks","width","height","createElement","getContext","Error","fillRect","captureStream","getVideoTracks","default","push","sessionId","o","ssrcs","c","audioExtensions","videoExtensions","p","audioPayloadTypes","u","videoPayloadTypes","transport","ufrag","m","pwd","f","fingerprints","g","candidates","v","endpoint","join","S","sdpString","foundation","component","priority","ip","port","generation","forEach","hash","fingerprint","setup","h","channels","clockrate","parameters","subtype","isMain","uri","isRemoved","sourceGroups","semantics","sources","fromTelegramSource","facingMode","connection","getSenders","find","track","replaceTrack","RTCPeerConnection","iceServers","urls","isTurn","isStun","username","credentialType","credential","password","iceCandidatePoolSize","AudioContext","addTrack","onicecandidate","candidate","onconnectionstatechange","ontrack","kind","audio","play","catch","transceiver","mid","createDataChannel","negotiated","onmessage","parse","Audio","emitSignalingData","onUpdate","mediaState","isBatteryLow","videoRotation","blackVideo","blackPresentation","dataChannel","createOffer","offerToReceiveAudio","offerToReceiveVideo","setLocalDescription","stop","close","mediaDevices","getDisplayMedia","getUserMedia","IS_ECHO_CANCELLATION_SUPPORTED","echoCancellation","IS_NOISE_SUPPRESSION_SUPPORTED","noiseSuppression","onended","payloadTypes","findIndex","apt","ssrc","ssrcGroups","rtpExtensions","audioExtmap","videoExtmap","screencast","screencastPayloadTypes","screencastExtmap","gotInitialSetup","Promise","all","addIceCandidate","sdpMLineIndex","xmlns","now","isPresentation","p2pPayloadTypeToConference","setRemoteDescription","sdp","conference","createAnswer","split","reduce","match","hasOwnProperty","startsWith","substr","feedbackTypes","console","log","toTelegramSource","slice","getDevices","enumerateDevices","participantFunctions","toggleNoiseSuppression","myId","getConstraints","applyConstraints","source","isLeft","isVideoJoined","updatingParticipantsQueue","error","screenshareConference","screenshareConnection","screenshareDataChannel","warn","speaking","analyserInterval","setInterval","mediaStream","createMediaStreamSource","createAnalyser","minDecibels","maxDecibels","smoothingTimeConstant","fftSize","getCurrentAmplitude","Uint8Array","frequencyBinCount","getByteFrequencyData","getAmplitude","clearInterval","window","createGain","gain","destination","remove","onopen","colibriClass","onerror","oniceconnectionstatechange","iceConnectionState","onnegotiationneeded","sqrt","getSupportedConstraints","exports","defineProperty","enumerable","get","prototype","Symbol","toStringTag","__esModule"],"sourceRoot":""} |