mirror of
https://github.com/danog/telegram-tt.git
synced 2025-01-10 14:58:32 +01:00
1 line
113 KiB
Plaintext
1 line
113 KiB
Plaintext
{"version":3,"file":"757.e669f135f9dce66de020.js","mappings":"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","sources":["webpack://telegram-t/./src/modules/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/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/common/helpers/animatedAssets.ts","webpack://telegram-t/./src/lib/secret-sauce/index.js"],"sourcesContent":["import {\n joinGroupCall,\n startSharingScreen,\n leaveGroupCall,\n toggleStream,\n isStreamEnabled,\n setVolume,\n handleUpdateGroupCallParticipants, handleUpdateGroupCallConnection,\n} from '../../../lib/secret-sauce';\nimport { addReducer, getGlobal, setGlobal } from '../../../lib/teact/teactn';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectUser } from '../../selectors';\nimport {\n selectActiveGroupCall,\n selectGroupCallParticipant,\n} from '../../selectors/calls';\nimport {\n removeGroupCall,\n updateActiveGroupCall,\n updateGroupCall,\n updateGroupCallParticipant,\n} from '../../reducers/calls';\nimport { ApiUpdate } from '../../../api/types';\nimport { GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { omit } from '../../../util/iteratees';\nimport { getGroupCallAudioContext, getGroupCallAudioElement, removeGroupCallAudioElement } from '../ui/calls';\nimport { loadFullChat } from './chats';\n\naddReducer('apiUpdate', (global, actions, update: ApiUpdate) => {\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\naddReducer('leaveGroupCall', (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 global = updateActiveGroupCall(global, {\n connectionState: 'disconnected',\n }, groupCall.participantsCount - 1);\n\n (async () => {\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 isGroupCallPanelHidden: true,\n activeGroupCallId: undefined,\n },\n });\n\n if (!isFromLibrary) {\n leaveGroupCall();\n }\n\n if (rejoin) {\n actions.joinGroupCall(rejoin);\n }\n })();\n});\n\naddReducer('toggleGroupCallVideo', (global) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\n await toggleStream('video');\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n videoStopped: !isStreamEnabled('video'),\n participant: user,\n });\n })();\n});\n\naddReducer('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\naddReducer('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\naddReducer('toggleGroupCallMute', (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 (async () => {\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});\n\naddReducer('toggleGroupCallPresentation', (global, actions, payload) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n (async () => {\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});\n\naddReducer('connectToActiveGroupCall', (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 (async () => {\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});\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<Record<string, any>>();\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 { withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalActions } from '../../../global/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { vibrateShort } from '../../../util/vibrate';\nimport { pick } from '../../../util/iteratees';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../../modules/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\ntype DispatchProps = Pick<GlobalActions, 'toggleGroupCallMute' | 'requestToSpeak' | 'playGroupCallSound'>;\n\nconst REQUEST_TO_SPEAK_THROTTLE = 3000;\nconst HOLD_TO_SPEAK_TIME = 200;\nconst ICON_SIZE = 48;\n\nconst MicrophoneButton: FC<StateProps & DispatchProps> = ({\n noAudioStream,\n canSelfUnmute,\n isMuted,\n hasRequestedToSpeak,\n connectionState,\n toggleGroupCallMute,\n requestToSpeak,\n playGroupCallSound,\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 (setGlobal, actions): DispatchProps => pick(actions, [\n 'toggleGroupCallMute',\n 'requestToSpeak',\n 'playGroupCallSound',\n ]),\n)(MicrophoneButton));\n","import { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../lib/teact/teactn';\n\nimport { IAnchorPosition } from '../../../types';\nimport { GlobalActions } from '../../../global/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 '../../../modules/selectors/calls';\nimport { pick } from '../../../util/iteratees';\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\ntype DispatchProps = Pick<GlobalActions, (\n 'toggleGroupCallMute' | 'setGroupCallParticipantVolume' | 'toggleGroupCallPanel' | 'openChat' | 'requestToSpeak'\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 & DispatchProps> = ({\n participant,\n closeDropdown,\n isDropdownOpen,\n anchor,\n\n isAdmin,\n toggleGroupCallMute,\n setGroupCallParticipantVolume,\n toggleGroupCallPanel,\n openChat,\n requestToSpeak,\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 (setGlobal, actions): DispatchProps => pick(actions, [\n 'setGroupCallParticipantVolume',\n 'toggleGroupCallMute',\n 'openChat',\n 'toggleGroupCallPanel',\n 'requestToSpeak',\n ]),\n)(GroupCallParticipantMenu));\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 = !!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 '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../modules/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 { withGlobal } from '../../../lib/teact/teactn';\n\nimport { GlobalActions } from '../../../global/types';\n\nimport { pick } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\nimport { selectActiveGroupCall } from '../../../modules/selectors/calls';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport { selectChat } from '../../../modules/selectors';\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\ntype DispatchProps = Pick<GlobalActions, 'createGroupCallInviteLink' | 'loadMoreGroupCallParticipants'>;\n\nconst GroupCallParticipantList: FC<OwnProps & StateProps & DispatchProps> = ({\n createGroupCallInviteLink,\n loadMoreGroupCallParticipants,\n participants,\n participantsCount,\n openParticipantMenu,\n canInvite,\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 {canInvite && (\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\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, chatId } = selectActiveGroupCall(global) || {};\n const chat = chatId && selectChat(global, chatId);\n\n return {\n participants,\n participantsCount: participantsCount || 0,\n canInvite: !!chat && !!chat.username,\n };\n },\n (setGlobal, actions): DispatchProps => pick(actions, [\n 'createGroupCallInviteLink',\n 'loadMoreGroupCallParticipants',\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 '../../../lib/teact/teactn';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../modules/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 '../../../lib/teact/teactn';\nimport GroupCallParticipantVideo from './GroupCallParticipantVideo';\nimport { selectActiveGroupCall } from '../../../modules/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 // @ts-ignore teact feature\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 { withGlobal } from '../../../lib/teact/teactn';\nimport '../../../modules/actions/calls';\n\nimport { GlobalActions } from '../../../global/types';\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 { pick } from '../../../util/iteratees';\nimport buildClassName from '../../../util/buildClassName';\nimport {\n selectGroupCall,\n selectGroupCallParticipant,\n selectIsAdminInActiveGroupCall,\n} from '../../../modules/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\ntype DispatchProps = Pick<GlobalActions, (\n 'toggleGroupCallVideo' | 'leaveGroupCall' | 'toggleGroupCallPresentation' | 'toggleGroupCallPanel' |\n 'connectToActiveGroupCall' | 'playGroupCallSound'\n)>;\n\nconst GroupCall: FC<OwnProps & StateProps & DispatchProps> = ({\n groupCallId,\n isGroupCallPanelHidden,\n connectionState,\n isSpeakerEnabled,\n title,\n meParticipant,\n isAdmin,\n participants,\n\n toggleGroupCallVideo,\n toggleGroupCallPresentation,\n leaveGroupCall,\n toggleGroupCallPanel,\n connectToActiveGroupCall,\n playGroupCallSound,\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 handleShouldEndGroupCallChange = useCallback(() => {\n setShouldEndGroupCall(!shouldEndGroupCall);\n }, [shouldEndGroupCall]);\n\n const handleCloseConfirmLeaveModal = () => {\n closeConfirmLeaveModal();\n setIsEndGroupCallModal(false);\n };\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 = () => {\n if (isSidebarOpen) {\n closeSidebar();\n } else {\n openSidebar();\n }\n };\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 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 = () => {\n setIsEndGroupCallModal(true);\n setShouldEndGroupCall(true);\n openConfirmLeaveModal();\n if (isFullscreen) {\n handleToggleFullscreen();\n }\n };\n\n const handleLeaveGroupCall = () => {\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\n const handleCloseAnimationEnd = () => {\n if (isLeaving) {\n leaveGroupCall({\n shouldDiscard: shouldEndGroupCall,\n });\n }\n };\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\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 onChange={handleShouldEndGroupCallChange}\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: !!global.groupCalls.isGroupCallPanelHidden,\n isAdmin: selectIsAdminInActiveGroupCall(global),\n participants,\n };\n },\n (setGlobal, actions): DispatchProps => pick(actions, [\n 'toggleGroupCallVideo',\n 'leaveGroupCall',\n 'toggleGroupCallPresentation',\n 'toggleGroupCallPanel',\n 'connectToActiveGroupCall',\n 'playGroupCallSound',\n ]),\n)(GroupCall));\n","import { GroupCallParticipant } from '../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../lib/teact/teactn';\n\nimport { GlobalActions } from '../../global/types';\nimport { ApiGroupCall } from '../../api/types';\n\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../modules/selectors/calls';\nimport { pick } from '../../util/iteratees';\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\ntype DispatchProps = Pick<GlobalActions, 'toggleGroupCallPanel'>;\n\nconst ActiveCallHeader: FC<StateProps & DispatchProps> = ({\n groupCall,\n meParticipant,\n isGroupCallPanelHidden,\n toggleGroupCallPanel,\n}) => {\n const lang = useLang();\n\n useEffect(() => {\n document.body.classList.toggle('has-group-call-header', isGroupCallPanelHidden);\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 (setGlobal, actions) => pick(actions, [\n 'toggleGroupCallPanel',\n ]),\n)(ActiveCallHeader));\n","import { ApiMediaFormat } from '../../../api/types';\n\nimport * as mediaLoader from '../../../util/mediaLoader';\n\n// @ts-ignore\nimport MonkeyIdle from '../../../assets/TwoFactorSetupMonkeyIdle.tgs';\n// @ts-ignore\nimport MonkeyTracking from '../../../assets/TwoFactorSetupMonkeyTracking.tgs';\n// @ts-ignore\nimport MonkeyClose from '../../../assets/TwoFactorSetupMonkeyClose.tgs';\n// @ts-ignore\nimport MonkeyPeek from '../../../assets/TwoFactorSetupMonkeyPeek.tgs';\n// @ts-ignore\nimport FoldersAll from '../../../assets/FoldersAll.tgs';\n// @ts-ignore\nimport FoldersNew from '../../../assets/FoldersNew.tgs';\n// @ts-ignore\nimport DiscussionGroups from '../../../assets/DiscussionGroupsDucks.tgs';\n// @ts-ignore\nimport CameraFlip from '../../../assets/animatedIcons/CameraFlip.tgs';\n// @ts-ignore\nimport HandFilled from '../../../assets/animatedIcons/HandFilled.tgs';\n// @ts-ignore\nimport HandOutline from '../../../assets/animatedIcons/HandOutline.tgs';\n// @ts-ignore\nimport Speaker from '../../../assets/animatedIcons/Speaker.tgs';\n// @ts-ignore\nimport VoiceAllowTalk from '../../../assets/animatedIcons/VoiceAllowTalk.tgs';\n// @ts-ignore\nimport VoiceMini from '../../../assets/animatedIcons/VoiceMini.tgs';\n// @ts-ignore\nimport VoiceMuted from '../../../assets/animatedIcons/VoiceMuted.tgs';\n// @ts-ignore\nimport VoiceOutlined from '../../../assets/animatedIcons/VoiceOutlined.tgs';\n\nexport const ANIMATED_STICKERS_PATHS = {\n MonkeyIdle,\n MonkeyTracking,\n MonkeyClose,\n MonkeyPeek,\n FoldersAll,\n FoldersNew,\n DiscussionGroups,\n CameraFlip,\n HandFilled,\n HandOutline,\n Speaker,\n VoiceAllowTalk,\n VoiceMini,\n VoiceMuted,\n VoiceOutlined,\n};\n\nexport default function getAnimationData(name: keyof typeof ANIMATED_STICKERS_PATHS) {\n const path = ANIMATED_STICKERS_PATHS[name].replace(window.location.origin, '');\n\n return mediaLoader.fetch(`file${path}`, ApiMediaFormat.Lottie);\n}\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:f,fingerprints:m,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 v=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)},S=()=>{r(`a=ice-ufrag:${l}`),r(`a=ice-pwd:${f}`),m.forEach((e=>{r(`a=fingerprint:${e.hash} ${e.fingerprint}`),r(\"a=setup:passive\")})),g.forEach(v)},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\"):(S(),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\"),S(),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:()=>f,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&&(f(\"audio\",!1),f(\"video\",!1),f(\"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\");m(\"connecting\");var i=t.createMediaStreamDestination();return n.srcObject=i.stream,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(v,1e3),audioElement:n,destination:i,audioContext:t},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 f(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 m(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(),m(\"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 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 S(e){if(o&&o.audioElement&&o.destination&&o.audioContext){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.audioContext,i=e.createMediaStreamSource(t),r=e.createGain();r.gain.value=(n?.volume||1e4)/1e4;const c=e.createGain();r.gain.value=1;const d=e.createAnalyser();d.minDecibels=-100,d.maxDecibels=-30,d.smoothingTimeConstant=.05,d.fftSize=1024,i.connect(d).connect(c).connect(r).connect(o.destination);const p=new Audio;p.srcObject=i.mediaStream,p.muted=!0,p.remove(),o={...o,participantFunctions:{...o.participantFunctions,[a]:{...o.participantFunctions?.[a],setVolume:e=>{r.gain.value=1<e?2*e:e},toggleMute:e=>{c.gain.value=e?0:1},getCurrentAmplitude:()=>{var e=new Uint8Array(d.frequencyBinCount);return d.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?m(\"connected\"):\"checking\"===e||\"new\"===e?m(\"connecting\"):\"disconnected\"===i.iceConnectionState&&m(\"reconnecting\")}),i.ontrack=S,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":["addReducer","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","payload","shouldDiscard","shouldRemove","rejoin","updateActiveGroupCall","participantsCount","callApi","call","getGlobal","removeGroupCall","id","removeGroupCallAudioElement","setGlobal","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","chatId","chat","selectChat","loadFullChat","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","pick","toggleGroupCallMute","requestToSpeak","playGroupCallSound","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","openChat","isDeleteUserModalOpen","openDeleteUserModal","closeDeleteUserModal","useFlag","isMutedByMe","isSelf","isRaiseHand","localVolume","setLocalVolume","GROUP_CALL_DEFAULT_VOLUME","runThrottled","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","title","ref","Avatar","canInvite","username","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","handleShouldEndGroupCallChange","handleCloseConfirmLeaveModal","MainButton","onTrigger","Button","round","ariaLabel","handleToggleFullscreen","document","exitFullscreen","requestFullscreen","handleStreamsDoubleClick","IS_REQUEST_FULLSCREEN_SUPPORTED","toggleFullscreen","addEventListener","removeEventListener","handleLeaveGroupCall","Modal","dialogRef","onCloseAnimationEnd","IS_SCREENSHARE_SUPPORTED","DropdownMenu","trigger","Loading","IS_ANDROID","IS_IOS","switchCameraInput","toggleSpeaker","Checkbox","label","checked","isText","body","classList","toggle","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","path","window","location","origin","mediaLoader","ApiMediaFormat","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","f","fingerprints","m","candidates","g","endpoint","join","v","foundation","component","protocol","priority","ip","port","generation","S","forEach","hash","fingerprint","h","channels","clockrate","parameters","subtype","isVideo","isMain","uri","isRemoved","sourceGroups","semantics","sources","fromTelegramSource","sdp","split","reduce","match","find","startsWith","substr","setup","ssrc","toTelegramSource","slice","getDevices","async","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","destination","close","getDisplayMedia","getUserMedia","IS_ECHO_CANCELLATION_SUPPORTED","IS_NOISE_SUPPRESSION_SUPPORTED","createMediaStreamSource","createAnalyser","minDecibels","maxDecibels","smoothingTimeConstant","fftSize","getCurrentAmplitude","Uint8Array","frequencyBinCount","getByteFrequencyData","getAmplitude","stop","clearInterval","createGain","gain","Audio","mediaStream","remove","RTCPeerConnection","createDataChannel","onopen","onmessage","JSON","parse","colibriClass","onerror","log","addTrack","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":""} |