telegram-tt/dist/654.685435e52e1ffc797757.js.map
Alexander Zinchuk 6ec5524fca [Build]
2022-03-25 13:31:23 +01:00

1 line
118 KiB
Plaintext

{"version":3,"file":"654.685435e52e1ffc797757.js","mappings":"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","sources":["webpack://telegram-t/./src/global/actions/api/calls.async.ts","webpack://telegram-t/./src/util/vibrate.ts","webpack://telegram-t/./src/components/common/AnimatedIcon.tsx","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.tsx","webpack://telegram-t/./src/hooks/useThrottle.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/CallFallbackConfirm.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,\n handleUpdateGroupCallParticipants, handleUpdateGroupCallConnection,\n} from '../../../lib/secret-sauce';\n\nimport { GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectCurrentMessageList, selectUser } from '../../selectors';\nimport {\n selectActiveGroupCall,\n selectCallFallbackChannelTitle,\n selectGroupCallParticipant,\n} from '../../selectors/calls';\nimport {\n removeGroupCall,\n updateActiveGroupCall,\n updateGroupCall,\n updateGroupCallParticipant,\n} from '../../reducers/calls';\nimport { omit } from '../../../util/iteratees';\nimport { getServerTime } from '../../../util/serverTime';\nimport { fetchFile } from '../../../util/files';\nimport { getGroupCallAudioContext, getGroupCallAudioElement, removeGroupCallAudioElement } from '../ui/calls';\nimport { loadFullChat } from './chats';\n\nimport callFallbackAvatarPath from '../../../assets/call-fallback-avatar.png';\n\nconst FALLBACK_INVITE_EXPIRE_SECONDS = 1800; // 30 min\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 }\n\n return undefined;\n});\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 let shouldResetFallbackState = false;\n if (shouldDiscard) {\n global = getGlobal();\n\n if (global.groupCalls.fallbackChatId === groupCall.chatId) {\n shouldResetFallbackState = true;\n\n global.groupCalls.fallbackUserIdsToRemove?.forEach((userId) => {\n actions.deleteChatMember({ chatId: global.groupCalls.fallbackChatId, userId });\n });\n }\n\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 isGroupCallPanelHidden: true,\n activeGroupCallId: undefined,\n ...(shouldResetFallbackState && {\n fallbackChatId: undefined,\n fallbackUserIdsToRemove: undefined,\n }),\n },\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('inviteToCallFallback', async (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return;\n }\n\n const user = selectUser(global, chatId);\n if (!user) {\n return;\n }\n\n const { shouldRemove } = payload;\n\n const fallbackChannelTitle = selectCallFallbackChannelTitle(global);\n\n let fallbackChannel = Object.values(global.chats.byId).find((channel) => {\n return (\n channel.title === fallbackChannelTitle\n && channel.isCreator\n && !channel.isRestricted\n );\n });\n if (!fallbackChannel) {\n fallbackChannel = await callApi('createChannel', {\n title: fallbackChannelTitle,\n users: [user],\n });\n\n if (!fallbackChannel) {\n return;\n }\n\n const photo = await fetchFile(callFallbackAvatarPath, 'avatar.png');\n void callApi('editChatPhoto', {\n chatId: fallbackChannel.id,\n accessHash: fallbackChannel.accessHash,\n photo,\n });\n } else {\n actions.updateChatMemberBannedRights({\n chatId: fallbackChannel.id,\n userId: chatId,\n bannedRights: {},\n });\n\n void callApi('addChatMembers', fallbackChannel, [user], true);\n }\n\n const inviteLink = await callApi('updatePrivateLink', {\n chat: fallbackChannel,\n usageLimit: 1,\n expireDate: getServerTime(global.serverTimeOffset) + FALLBACK_INVITE_EXPIRE_SECONDS,\n });\n if (!inviteLink) {\n return;\n }\n\n if (shouldRemove) {\n global = getGlobal();\n const fallbackUserIdsToRemove = global.groupCalls.fallbackUserIdsToRemove || [];\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n fallbackChatId: fallbackChannel.id,\n fallbackUserIdsToRemove: [...fallbackUserIdsToRemove, chatId],\n },\n });\n }\n\n actions.sendMessage({ text: `Join a call: ${inviteLink}` });\n actions.openChat({ id: fallbackChannel.id });\n actions.createGroupCall({ chatId: fallbackChannel.id });\n actions.closeCallFallbackConfirm();\n});\n","export const vibrateShort = () => {\n navigator.vibrate?.(50);\n};\n","import React, {\n FC, memo, useEffect, useState,\n} from '../../lib/teact/teact';\n\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\ntype OwnProps = {\n name: keyof typeof ANIMATED_STICKERS_PATHS;\n size: number;\n playSegment?: [number, number];\n color?: [number, number, number];\n};\n\nconst AnimatedIcon: FC<OwnProps> = ({\n size,\n name,\n playSegment,\n color,\n}) => {\n const [iconData, setIconData] = useState<string>();\n\n useEffect(() => {\n getAnimationData(name).then(setIconData);\n }, [name]);\n\n return (\n <AnimatedSticker\n id={name}\n play\n noLoop\n playSegment={playSegment}\n size={size}\n speed={1}\n animationData={iconData}\n color={color}\n />\n );\n};\n\nexport default memo(AnimatedIcon);\n","import { GroupCallConnectionState } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\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('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 name={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 { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { IAnchorPosition } from '../../../types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useThrottle from '../../../hooks/useThrottle';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport { selectIsAdminInActiveGroupCall } from '../../../global/selectors/calls';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\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 = useThrottle(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={anchor ? `right: 1rem; top: ${anchor.y}px;` : undefined}\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 name=\"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 { useMemo } from '../lib/teact/teact';\n\nimport { throttle } from '../util/schedulers';\n\nconst useThrottle = (ms: number, noFirst = false) => {\n return useMemo(() => {\n return throttle((cb) => cb(), ms, !noFirst);\n }, [ms, noFirst]);\n};\n\nexport default useThrottle;\n","import { GroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport usePrevious from '../../../hooks/usePrevious';\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 name=\"VoiceOutlined\"\n playSegment={playSegment}\n size={28}\n color={microphoneColor}\n />\n );\n};\n\nexport default memo(OutlinedMicrophoneIcon);\n","import { GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { 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 { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, { FC, 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 { getUserStreams, GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { 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 { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, 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 {\n GroupCallConnectionState, GroupCallParticipant as TypeGroupCallParticipant,\n IS_SCREENSHARE_SUPPORTED, switchCameraInput, toggleSpeaker,\n} from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\nimport '../../../global/actions/calls';\n\nimport { 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 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 isGroupCallPanelHidden: 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 isGroupCallPanelHidden,\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={!isGroupCallPanelHidden && !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\"\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 name=\"CameraFlip\" playSegment={CAMERA_FLIP_PLAY_SEGMENT} size={24} />\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 isGroupCallPanelHidden: Boolean(global.groupCalls.isGroupCallPanelHidden),\n isAdmin: selectIsAdminInActiveGroupCall(global),\n participants,\n };\n },\n)(GroupCall));\n","import { GroupCallParticipant } from '../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiGroupCall } from '../../api/types';\n\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../global/selectors/calls';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './ActiveCallHeader.scss';\n\ntype StateProps = {\n isGroupCallPanelHidden?: boolean;\n meParticipant: GroupCallParticipant;\n groupCall?: ApiGroupCall;\n};\n\nconst ActiveCallHeader: FC<StateProps> = ({\n groupCall,\n meParticipant,\n isGroupCallPanelHidden,\n}) => {\n const { toggleGroupCallPanel } = getActions();\n\n const lang = useLang();\n\n useEffect(() => {\n document.body.classList.toggle('has-group-call-header', isGroupCallPanelHidden);\n\n return () => {\n document.body.classList.toggle('has-group-call-header', false);\n };\n }, [isGroupCallPanelHidden]);\n\n if (!groupCall || !meParticipant) return undefined;\n\n return (\n <div\n className={buildClassName(\n 'ActiveCallHeader',\n isGroupCallPanelHidden && 'open',\n )}\n onClick={toggleGroupCallPanel}\n >\n <span className=\"title\">{groupCall.title || lang('VoipGroupVoiceChat')}</span>\n </div>\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n groupCall: selectActiveGroupCall(global),\n isGroupCallPanelHidden: global.groupCalls.isGroupCallPanelHidden,\n meParticipant: selectGroupCallParticipant(global, global.groupCalls.activeGroupCallId!, global.currentUserId!),\n };\n },\n)(ActiveCallHeader));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\nimport Checkbox from '../ui/Checkbox';\nimport { selectCallFallbackChannelTitle } from '../../global/selectors/calls';\nimport { getUserFullName } from '../../global/helpers';\nimport { selectCurrentMessageList, selectUser } from '../../global/selectors';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ninterface StateProps {\n userFullName?: string;\n channelTitle: string;\n}\n\nconst CallFallbackConfirm: FC<OwnProps & StateProps> = ({\n isOpen,\n channelTitle,\n userFullName,\n}) => {\n const {\n closeCallFallbackConfirm,\n inviteToCallFallback,\n } = getActions();\n\n const [shouldRemove, setShouldRemove] = useState(true);\n const renderingUserFullName = useCurrentOrPrev(userFullName, true);\n\n const handleConfirm = useCallback(() => {\n inviteToCallFallback({ shouldRemove });\n }, [inviteToCallFallback, shouldRemove]);\n\n return (\n <ConfirmDialog\n title=\"Start Call\"\n isOpen={isOpen}\n confirmHandler={handleConfirm}\n onClose={closeCallFallbackConfirm}\n >\n <p>The call will be started in a private channel <b>{channelTitle}</b>.</p>\n <Checkbox\n label={`Remove ${renderingUserFullName} from this channel after the call`}\n checked={shouldRemove}\n onCheck={setShouldRemove}\n />\n </ConfirmDialog>\n );\n};\n\nexport default memo(withGlobal<OwnProps>(\n (global): StateProps => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const user = chatId ? selectUser(global, chatId) : undefined;\n\n return {\n userFullName: user ? getUserFullName(user) : undefined,\n channelTitle: selectCallFallbackChannelTitle(global),\n };\n },\n)(CallFallbackConfirm));\n","/*! For license information please see index.js.LICENSE.txt */\n(()=>{\"use strict\";var e={\"./src/blacksilence.ts\":(e,t,n)=>{n.r(t),n.d(t,{silence:()=>a,black:()=>i});const a=e=>{const t=e.createOscillator(),n=t.connect(e.createMediaStreamDestination());return t.start(),new MediaStream([Object.assign(n.stream.getAudioTracks()[0],{enabled:!1})])},i=({width:e=640,height:t=480}={})=>{const n=Object.assign(document.createElement(\"canvas\"),{width:e,height:t}),a=n.getContext(\"2d\");if(!a)throw Error(\"Cannot create canvas ctx\");a.fillRect(0,0,e,t);const i=n.captureStream();return new MediaStream([Object.assign(i.getVideoTracks()[0],{enabled:!1})])}},\"./src/buildSdp.ts\":(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(\"./src/utils.ts\");const i=(e,t=!1,n=!1)=>{const i=[],r=e=>{i.push(e)},{sessionId:s,ssrcs:o,audioExtensions:c,videoExtensions:d,audioPayloadTypes:p,videoPayloadTypes:u,transport:{ufrag:l,pwd:m,fingerprints:f,candidates:g}}=e;r(\"v=0\"),r(`o=- ${s} 2 IN IP4 0.0.0.0`),r(\"s=-\"),r(\"t=0 0\"),r(`a=group:BUNDLE ${o.map((e=>e.endpoint)).join(\" \")}${n?\"\":\" 2\"}`),r(\"a=ice-lite\");const S=e=>{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)},v=()=>{r(`a=ice-ufrag:${l}`),r(`a=ice-pwd:${m}`),f.forEach((e=>{r(`a=fingerprint:${e.hash} ${e.fingerprint}`),r(\"a=setup:passive\")})),g.forEach(S)},h=e=>{const{channels:t,id:n,name:a,clockrate:i,parameters:s}=e;var o=t?`/${t}`:\"\";r(`a=rtpmap:${n} ${a}/${i}${o}`),s&&(o=Object.keys(s).map((e=>`${e}=${s[e]};`)).join(\" \"),r(`a=fmtp:${n} ${o}`)),e[\"rtcp-fbs\"]?.forEach((e=>{r(`a=rtcp-fb:${n} ${e.type}${e.subtype?` ${e.subtype}`:\"\"}`)}))};return e=e=>{const n=e.isVideo?u:p;var i=e.isVideo?\"video\":\"audio\";r(`m=${i} ${e.isMain?1:0} RTP/SAVPF ${n.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\"),n.forEach(h),r(\"a=rtcp:1 IN IP4 0.0.0.0\"),e.isVideo&&r(\"a=rtcp-rsize\"),(e.isVideo?d:c).forEach((({id:e,uri:t})=>{r(`a=extmap:${e} ${t}`)})),e.isRemoved?r(\"a=inactive\"):(v(),t?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(a.fromTelegramSource).join(\" \")}`),t.sources.forEach((t=>{t=(0,a.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}`)}))}))))},o.filter((e=>\"0\"===e.endpoint||\"1\"===e.endpoint)).map(e),n||(r(\"m=application 1 UDP/DTLS/SCTP webrtc-datachannel\"),r(\"c=IN IP4 0.0.0.0\"),v(),r(\"a=ice-options:trickle\"),r(\"a=mid:\"+(n?\"1\":\"2\")),r(\"a=sctp-port:5000\"),r(\"a=max-message-size:262144\")),o.filter((e=>\"0\"!==e.endpoint&&\"1\"!==e.endpoint)).map(e),`${i.join(\"\\n\")}\\n`}},\"./src/parseSdp.ts\":(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(\"./src/utils.ts\");const i=e=>{if(!e||!e.sdp)throw Error(\"Failed parsing SDP: session description is null\");const t=e.sdp.split(\"\\r\\nm=\").map(((e,t)=>0===t?e:`m=${e}`)).reduce(((e,t)=>(e[t.match(/^m=(.+?)\\s/)?.[1]||\"header\"]=t.split(\"\\r\\n\").filter(Boolean),e)),{});var n=(e,n)=>n?t[n]?.find((t=>t.startsWith(e)))?.substr(e.length):Object.values(t).map((t=>t.find((t=>t.startsWith(e)))?.substr(e.length))).filter(Boolean)[0];const i=n(\"a=ssrc:\",\"audio\");var r=i&&Number(i.split(\" \")[0]);const s=n(\"a=ssrc-group:\",\"video\")?.split(\" \")||void 0;if(!s)throw Error(\"Failed parsing SDP: no video ssrc\");var[o,c]=n(\"a=fingerprint:\")?.split(\" \")||[];if(!o||!c)throw Error(\"Failed parsing SDP: no fingerprint\");if(e=n(\"a=ice-ufrag:\"),n=n(\"a=ice-pwd:\"),!e||!n)throw Error(\"Failed parsing SDP: no ICE ufrag or pwd\");return{fingerprints:[{fingerprint:c,hash:o,setup:\"active\"}],pwd:n,ufrag:e,...r&&{ssrc:(0,a.toTelegramSource)(r)},...s&&{\"ssrc-groups\":[{semantics:s[0],sources:s.slice(1,s.length).map(Number).map(a.toTelegramSource)}]}}}},\"./src/secretsauce.ts\":(e,t,n)=>{n.r(t),n.d(t,{getDevices:()=>async function(e,t=!0){return(await navigator.mediaDevices.enumerateDevices()).filter((n=>n.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 n=o.streams[o.myId].audio;if(n){const a=n.getTracks()[0];var e,t;a&&(({echoCancellation:e,noiseSuppression:t}=a.getConstraints()),a.applyConstraints({echoCancellation:!e,noiseSuppression:!t}))}}},getUserStreams:()=>d,setVolume:()=>function(e,t){const n=o?.participantFunctions?.[e];n&&n.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:a,conference:r,connection:s,myId:c}=o;if(a&&r&&s&&r.ssrcs&&r.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 a=[];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 n=e.isMuted||e.isMutedByMe,i=!e.isVideoJoined||!e.video||t,s=!e.presentation||t;let o=!1,c=!1,d=!1;r.ssrcs.filter((t=>t.userId===e.id)).forEach((t=>{t.isVideo||(t.sourceGroups[0].sources[0]===e.source&&(c=!0),t.isRemoved=n),t.isVideo&&(t.isPresentation||(e.video&&t.endpoint===e.video.endpoint&&(o=!0),t.isRemoved=i),t.isPresentation&&(e.presentation&&t.endpoint===e.presentation.endpoint&&(d=!0),t.isRemoved=s))})),n||c||r.ssrcs.push({userId:e.id,isMain:!1,endpoint:`audio${e.source}`,isVideo:!1,sourceGroups:[{semantics:\"FID\",sources:[e.source]}]}),i||o||!e.video||(a.push(e.video.endpoint),r.ssrcs.push({userId:e.id,isMain:!1,endpoint:e.video.endpoint,isVideo:!0,sourceGroups:e.video.sourceGroups})),s||d||!e.presentation||r.ssrcs.push({isPresentation:!0,userId:e.id,isMain:!1,endpoint:e.presentation.endpoint,isVideo:!0,sourceGroups:e.presentation.sourceGroups})}})),o.updatingParticipantsQueue)o.updatingParticipantsQueue.push(r);else{o.updatingParticipantsQueue=[],e=(0,i.default)(r),await s.setRemoteDescription({type:\"offer\",sdp:e});try{var t=await s.createAnswer();if(await s.setLocalDescription(t),u(c),0<o.updatingParticipantsQueue.length)for(const e of o.updatingParticipantsQueue){await s.setRemoteDescription({type:\"offer\",sdp:(0,i.default)(e)});var n=await s.createAnswer();await s.setLocalDescription(n),u(c)}o.updatingParticipantsQueue=void 0}catch(e){console.error(e)}}}}},handleUpdateGroupCallConnection:()=>async function(e,t){if(o){var n=t?o.screenshareConference:o.conference;const r=t?o.screenshareConnection:o.connection;if(n&&r&&n.ssrcs){var a=Date.now();e={...n,transport:e.transport,sessionId:a,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 r.setRemoteDescription({type:\"answer\",sdp:(0,i.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:n,dataChannel:t}=h([e],t,!0);o={...o,screenshareConnection:n,screenshareDataChannel:t}}))):void 0}catch(e){return}},joinGroupCall:()=>function(e,t,n,a){if(o)throw Error(\"Already in call\");f(\"connecting\");var i=new MediaStream;return n.srcObject=i,n.play().catch((e=>console.warn(e))),o={onUpdate:a,participants:[],myId:e,speaking:{},silence:(0,r.silence)(t),black:(0,r.black)({width:640,height:480}),analyserInterval:setInterval(S,1e3),audioElement:n,audioContext:t,mediaStream:i},new Promise((e=>{o={...o,...h([o.silence,o.black],e)}}))}});var a=n(\"./src/parseSdp.ts\"),i=n(\"./src/buildSdp.ts\"),r=n(\"./src/blacksilence.ts\"),s=n(\"./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 n=(t=t||o?.myId)&&d(t)?.[e];return!!n&&n.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&&{...s.IS_ECHO_CANCELLATION_SUPPORTED&&{echoCancellation:!0},...s.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 n=d(o.myId)?.[e];if(n){const a=n.getTracks()[0];if(a){const n=[...o.connection.getSenders(),...o.screenshareConnection?.getSenders()||[]].find((e=>a.id===e.track?.id));if(n){t=void 0===t?!a.enabled:t;try{if(t&&!a.enabled){const t=await l(e);if(await n.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 n=e.createMediaStreamSource(t),a=e.createAnalyser();a.minDecibels=-100,a.maxDecibels=-30,a.smoothingTimeConstant=.05,a.fftSize=1024,n.connect(a),o={...o,participantFunctions:{...o.participantFunctions,[o.myId]:{...o.participantFunctions?.[o.myId],getCurrentAmplitude:()=>{var e=new Uint8Array(a.frequencyBinCount);return a.getByteFrequencyData(e),(0,s.getAmplitude)(e,1.5)}}}}}}else if(!t&&a.enabled){a.stop();const t=\"audio\"===e?o.silence:o.black;if(!t)return;await n.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 S(){o&&o.participantFunctions&&Object.keys(o.participantFunctions).forEach((e=>{const t=o.participantFunctions[Number(e)].getCurrentAmplitude;var n,a;t&&(n=t(),a=o.speaking[e]||0,((o.speaking[e]=n)>s.THRESHOLD&&a<=s.THRESHOLD||n<=s.THRESHOLD&&a>s.THRESHOLD)&&u(e))}))}function v(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:a,isPresentation:i}=t;var n=o.participants?.find((e=>e.id===a));const r=\"video\"===e.track.kind?i?\"presentation\":\"video\":\"audio\";if(e.track.onended=()=>{o?.streams?.[a][r],u(a)},t=e.streams[0],\"audio\"===e.track.kind){const e=o.mediaStream,i=new window.AudioContext,r=i.createMediaStreamSource(t),c=i.createGain();c.gain.value=(n?.volume||1e4)/1e4;const d=i.createGain();c.gain.value=1;const p=i.createAnalyser();p.minDecibels=-100,p.maxDecibels=-30,p.smoothingTimeConstant=.05,p.fftSize=1024,r.connect(p).connect(d).connect(c).connect(i.destination),e.addTrack(r.mediaStream.getAudioTracks()[0]);const u=new Audio;u.srcObject=t,u.muted=!0,u.remove(),o={...o,participantFunctions:{...o.participantFunctions,[a]:{...o.participantFunctions?.[a],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,s.getAmplitude)(e,1.5)}}}}}o={...o,streams:{...o.streams,[a]:{...o.streams?.[a],[r]:t}}},u(a)}}}function h(e,t,n=!1){const i=new RTCPeerConnection;var r=n?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}(i);return e.forEach((e=>e.getTracks().forEach((t=>{i.addTrack(t,e)})))),n||(i.oniceconnectionstatechange=()=>{var e=i.iceConnectionState;\"connected\"===e||\"completed\"===e?f(\"connected\"):\"checking\"===e||\"new\"===e?f(\"connecting\"):\"disconnected\"===i.iceConnectionState&&f(\"reconnecting\")}),i.ontrack=v,i.onnegotiationneeded=async()=>{if(o){var r=o.myId;if(r){var s=await i.createOffer({offerToReceiveVideo:!0,offerToReceiveAudio:!n});if(await i.setLocalDescription(s),s.sdp){var c=(0,a.default)(s),d=n?void 0:{userId:\"\",sourceGroups:[{semantics:\"FID\",sources:[c.ssrc||0]}],isRemoved:n,isMain:!0,isVideo:!1,isPresentation:n,endpoint:n?\"1\":\"0\"},p=c[\"ssrc-groups\"]&&{isPresentation:n,userId:\"\",sourceGroups:c[\"ssrc-groups\"],isMain:!0,isVideo:!0,endpoint:n?\"0\":\"1\"};s=n?o.screenshareConference:o.conference;const i=[];n?(p&&i.push(p),d&&i.push(d)):(d&&i.push(d),p&&i.push(p)),d=e.find((e=>\"audio\"===e.getTracks()[0].kind)),p=e.find((e=>\"video\"===e.getTracks()[0].kind)),o={...o,...n?{screenshareConference:{...s,ssrcs:i}}:{conference:{...s,ssrcs:i}},streams:{...o.streams,[r]:{...o.streams?.[r],...d&&{audio:d},...!n&&p?{video:p}:{presentation:p}}}},u(r),t(c)}}}},{connection:i,dataChannel:r}}},\"./src/types.ts\":(e,t,n)=>{n.r(t)},\"./src/utils.ts\":(e,t,n)=>{function a(){var{userAgent:e,platform:t}=window.navigator;let n;return-1!==[\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"].indexOf(t)?n=\"macOS\":-1!==[\"iPhone\",\"iPad\",\"iPod\"].indexOf(t)?n=\"iOS\":-1!==[\"Win32\",\"Win64\",\"Windows\",\"WinCE\"].indexOf(t)?n=\"Windows\":/Android/.test(e)?n=\"Android\":/Linux/.test(t)&&(n=\"Linux\"),n}n.r(t),n.d(t,{toTelegramSource:()=>function(e){return e<<0},fromTelegramSource:()=>function(e){return e>>>0},getAmplitude:()=>function(e,t=3){if(!e)return 0;var n=e.length;let a=0;for(let t=0;t<n;t++)a+=e[t]*e[t];var i=Math.sqrt(a/n)/255;return Math.min(1,i*t)},getPlatform:()=>a,THRESHOLD:()=>i,PLATFORM_ENV:()=>r,IS_MAC_OS:()=>s,IS_IOS:()=>o,IS_SCREENSHARE_SUPPORTED:()=>c,IS_ECHO_CANCELLATION_SUPPORTED:()=>d,IS_NOISE_SUPPRESSION_SUPPORTED:()=>p});const i=.1,r=a(),s=\"macOS\"===r,o=\"iOS\"===r,c=\"getDisplayMedia\"in(navigator?.mediaDevices||{}),d=navigator?.mediaDevices?.getSupportedConstraints().echoCancellation,p=navigator?.mediaDevices?.getSupportedConstraints().noiseSuppression}},t={};function n(a){var i=t[a];return void 0!==i||(i=t[a]={exports:{}},e[a](i,i.exports,n)),i.exports}n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var a={};(()=>{n.r(a),n.d(a,{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,IS_SCREENSHARE_SUPPORTED:()=>t.IS_SCREENSHARE_SUPPORTED,THRESHOLD:()=>t.THRESHOLD});var e=n(\"./src/secretsauce.ts\"),t=n(\"./src/utils.ts\");n(\"./src/types.ts\")})();var i,r=exports;for(i in a)r[i]=a[i];a.__esModule&&Object.defineProperty(r,\"__esModule\",{value:!0})})();"],"names":["addActionHandler","global","actions","update","activeGroupCallId","groupCalls","toggleGroupCallPresentation","value","userId","selectGroupCallParticipant","updateGroupCallParticipant","omit","connectionState","leaveGroupCall","isFromLibrary","updateGroupCall","isSpeakerDisabled","groupCallId","participants","handleUpdateGroupCallParticipants","data","stream","showNotification","message","handleUpdateGroupCallConnection","presentation","groupCall","selectActiveGroupCall","Object","keys","length","values","async","payload","shouldDiscard","shouldRemove","rejoin","setGlobal","updateActiveGroupCall","participantsCount","callApi","call","shouldResetFallbackState","getGlobal","fallbackChatId","chatId","fallbackUserIdsToRemove","forEach","deleteChatMember","removeGroupCall","id","removeGroupCallAudioElement","isGroupCallPanelHidden","undefined","joinGroupCall","user","selectUser","currentUserId","toggleStream","videoStopped","isStreamEnabled","participant","raiseHand","participantId","volume","setVolume","Math","floor","GROUP_CALL_VOLUME_MULTIPLIER","Number","muted","params","startSharingScreen","presentationPaused","audioElement","getGroupCallAudioElement","audioContext","getGroupCallAudioContext","apiUpdate","inviteHash","loadMoreGroupCallParticipants","chat","selectChat","loadFullChat","selectCurrentMessageList","fallbackChannelTitle","selectCallFallbackChannelTitle","fallbackChannel","chats","byId","find","channel","title","isCreator","isRestricted","updateChatMemberBannedRights","bannedRights","users","photo","fetchFile","callFallbackAvatarPath","accessHash","inviteLink","usageLimit","expireDate","getServerTime","serverTimeOffset","sendMessage","text","openChat","createGroupCall","closeCallFallbackConfirm","vibrateShort","navigator","vibrate","memo","size","name","playSegment","color","iconData","setIconData","useState","useEffect","getAnimationData","then","AnimatedSticker","play","noLoop","speed","animationData","withGlobal","meParticipant","raiseHandRating","hasAudioStream","canSelfUnmute","isMuted","hasRequestedToSpeak","Boolean","noAudioStream","toggleGroupCallMute","requestToSpeak","playGroupCallSound","getActions","lang","useLang","muteMouseDownState","useRef","isRequestingToSpeak","setIsRequestingToSpeak","isConnecting","shouldRaiseHand","prevShouldRaiseHand","usePrevious","useMemo","r","random","animatedIconName","toggleMute","buttonText","className","buildClassName","onMouseDown","setTimeout","current","onMouseUp","SPEAKER_ICON_DISABLED_SEGMENT","SPEAKER_ICON_ENABLED_SEGMENT","isAdmin","selectIsAdminInActiveGroupCall","closeDropdown","isDropdownOpen","anchor","setGroupCallParticipantVolume","toggleGroupCallPanel","isDeleteUserModalOpen","openDeleteUserModal","closeDeleteUserModal","useFlag","isMutedByMe","isSelf","isRaiseHand","localVolume","setLocalVolume","GROUP_CALL_DEFAULT_VOLUME","runThrottled","ms","noFirst","throttle","cb","useThrottle","handleRemove","useCallback","e","stopPropagation","handleCancelRequestToSpeak","handleMute","handleOpenProfile","speakerIconPlaySegment","Menu","isOpen","positionX","autoClose","style","y","onClose","type","min","max","onChange","target","MenuItem","icon","onClick","destructive","DeleteMemberModal","noColor","isSpeaking","amplitude","THRESHOLD","prevIsRaiseHand","prevIsMuted","microphoneColor","isUser","openParticipantMenu","anchorRef","aboutText","aboutColor","toString","replace","about","firstName","lastName","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","some","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","sound","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","body","classList","toggle","userFullName","getUserFullName","channelTitle","inviteToCallFallback","setShouldRemove","renderingUserFullName","useCurrentOrPrev","handleConfirm","ConfirmDialog","confirmHandler","t","n","d","silence","a","black","i","createOscillator","connect","createMediaStreamDestination","start","MediaStream","assign","getAudioTracks","enabled","width","height","createElement","getContext","Error","fillRect","captureStream","getVideoTracks","default","push","sessionId","s","ssrcs","o","audioExtensions","c","videoExtensions","audioPayloadTypes","p","videoPayloadTypes","u","transport","ufrag","pwd","m","fingerprints","f","candidates","g","endpoint","join","S","foundation","component","protocol","priority","ip","port","generation","v","hash","fingerprint","h","channels","clockrate","parameters","subtype","isVideo","isMain","uri","isRemoved","sourceGroups","semantics","sources","fromTelegramSource","sdp","split","reduce","match","startsWith","substr","setup","ssrc","toTelegramSource","slice","getDevices","mediaDevices","enumerateDevices","kind","onUpdate","participantFunctions","toggleNoiseSuppression","myId","audio","getTracks","echoCancellation","noiseSuppression","getConstraints","applyConstraints","connection","facingMode","getSenders","track","replaceTrack","conference","source","isLeft","isVideoJoined","isPresentation","updatingParticipantsQueue","setRemoteDescription","createAnswer","setLocalDescription","console","error","screenshareConference","screenshareConnection","Date","now","onended","Promise","dataChannel","screenshareDataChannel","catch","warn","speaking","analyserInterval","setInterval","mediaStream","close","getDisplayMedia","getUserMedia","IS_ECHO_CANCELLATION_SUPPORTED","IS_NOISE_SUPPRESSION_SUPPORTED","createMediaStreamSource","createAnalyser","minDecibels","maxDecibels","smoothingTimeConstant","fftSize","getCurrentAmplitude","Uint8Array","frequencyBinCount","getByteFrequencyData","getAmplitude","stop","clearInterval","window","AudioContext","createGain","gain","destination","addTrack","Audio","remove","RTCPeerConnection","createDataChannel","onopen","onmessage","JSON","parse","colibriClass","onerror","log","oniceconnectionstatechange","iceConnectionState","ontrack","onnegotiationneeded","createOffer","offerToReceiveVideo","offerToReceiveAudio","userAgent","platform","indexOf","test","sqrt","getPlatform","PLATFORM_ENV","IS_MAC_OS","getSupportedConstraints","exports","defineProperty","enumerable","get","prototype","hasOwnProperty","Symbol","toStringTag","__esModule"],"sourceRoot":""}