{"version":3,"file":"static/chunks/342-ec96a5f115471f1e.js","mappings":"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","sources":["webpack://_N_E/./components/twilio/Buttons/EndCallButton/EndCallButton.tsx","webpack://_N_E/./components/twilio/AboutDialog/AboutDialog.tsx","webpack://_N_E/./hooks/twilio/useIsTrackEnabled/useIsTrackEnabled.tsx","webpack://_N_E/./hooks/twilio/useMediaStreamTrack/useMediaStreamTrack.ts","webpack://_N_E/./components/twilio/AudioLevelIndicator/AudioLevelIndicator.tsx","webpack://_N_E/./components/twilio/DeviceSelectionDialog/AudioInputList/AudioInputList.tsx","webpack://_N_E/./components/twilio/DeviceSelectionDialog/AudioOutputList/AudioOutputList.tsx","webpack://_N_E/./hooks/twilio/useVideoTrackDimensions/useVideoTrackDimensions.tsx","webpack://_N_E/./components/twilio/VideoTrack/VideoTrack.tsx","webpack://_N_E/./components/twilio/DeviceSelectionDialog/VideoInputList/VideoInputList.tsx","webpack://_N_E/./components/twilio/DeviceSelectionDialog/DeviceSelectionDialog.tsx","webpack://_N_E/./components/icons/video/InfoIconOutlined.tsx","webpack://_N_E/./components/icons/video/SettingsIcon.tsx","webpack://_N_E/./components/icons/video/FlipCameraIcon.tsx","webpack://_N_E/./hooks/twilio/useFlipCameraToggle/useFlipCameraToggle.tsx","webpack://_N_E/./components/twilio/MenuBar/Menu/Menu.tsx","webpack://_N_E/./hooks/twilio/useRoomState/useRoomState.tsx","webpack://_N_E/./hooks/twilio/useLocalAudioToggle/useLocalAudioToggle.tsx","webpack://_N_E/./components/twilio/Buttons/ToggleAudioButton/ToggleAudioButton.tsx","webpack://_N_E/./components/twilio/Buttons/ToggleVideoButton/ToggleVideoButton.tsx","webpack://_N_E/./hooks/twilio/useScreenShareParticipant/useScreenShareParticipant.tsx","webpack://_N_E/./components/twilio/Buttons/ToogleScreenShareButton/ToggleScreenShareButton.tsx","webpack://_N_E/./components/twilio/Buttons/FullScreenButton/ToggleFullScreenButton.tsx","webpack://_N_E/./components/twilio/MenuBar/MenuBar.tsx","webpack://_N_E/./components/icons/video/AvatarIcon.tsx","webpack://_N_E/./components/twilio/LocalAudioLevelIndicator/LocalAudioLevelIndicator.tsx","webpack://_N_E/./components/twilio/PreJoinScreens/DeviceSelectionScreen/LocalVideoPreview/LocalVideoPreview.tsx","webpack://_N_E/./components/twilio/ConnectionOptionsDialog/ConnectionOptionsDialog.tsx","webpack://_N_E/./components/twilio/PreJoinScreens/DeviceSelectionScreen/SettingsMenu/SettingsMenu.tsx","webpack://_N_E/./components/twilio/PreJoinScreens/DeviceSelectionScreen/DeviceSelectionScreen.tsx","webpack://_N_E/./components/twilio/IntroContainer/IntroContainer.tsx","webpack://_N_E/./components/twilio/PreJoinScreens/RoomNameScreen/RoomNameScreen.tsx","webpack://_N_E/./components/twilio/PreJoinScreens/PreJoinScreens.tsx","webpack://_N_E/./components/twilio/ReconnectingNotification/ReconnectingNotification.tsx","webpack://_N_E/./hooks/twilio/useParticipantNetworkQualityLevel/useParticipantNetworkQualityLevel.tsx","webpack://_N_E/./components/twilio/NetworkQualityLevel/NetworkQualityLevel.tsx","webpack://_N_E/./components/twilio/ParticipantInfo/PinIcon/PinIcon.tsx","webpack://_N_E/./components/icons/video/ScreenShareIcon.tsx","webpack://_N_E/./hooks/twilio/useIsTrackSwitchedOff/useIsTrackSwitchedOff.tsx","webpack://_N_E/./hooks/twilio/usePublications/usePublications.tsx","webpack://_N_E/./hooks/twilio/useTrack/useTrack.tsx","webpack://_N_E/./hooks/twilio/useParticipantIsReconnecting/useParticipantIsReconnecting.ts","webpack://_N_E/./components/twilio/ParticipantInfo/ParticipantInfo.tsx","webpack://_N_E/./components/twilio/AudioTrack/AudioTrack.tsx","webpack://_N_E/./components/twilio/Publication/Publication.tsx","webpack://_N_E/./components/twilio/ParticipantTracks/ParticipantTracks.tsx","webpack://_N_E/./components/twilio/Participant/Participant.tsx","webpack://_N_E/./hooks/twilio/useDominantSpeaker/useDominantSpeaker.tsx","webpack://_N_E/./hooks/twilio/useParticipants/useParticipants.tsx","webpack://_N_E/./hooks/twilio/useMainParticipant/useMainParticipant.tsx","webpack://_N_E/./components/twilio/ParticipantList/ParticipantList.tsx","webpack://_N_E/./components/twilio/MainParticipantInfo/MainParticipantInfo.tsx","webpack://_N_E/./components/twilio/MainParticipant/MainParticipant.tsx","webpack://_N_E/./components/twilio/Room/Room.tsx","webpack://_N_E/./components/twilio/twilio.tsx","webpack://_N_E/"],"sourcesContent":["import { Theme, Button, Tooltip, useMediaQuery } from \"@mui/material\";\nimport CallEndTwoToneIcon from \"@mui/icons-material/CallEndTwoTone\";\n\nimport { useVideoContext } from \"../../../../providers/video\";\nimport { useProfile } from \"../../../../providers/profile\";\nimport { useCallback } from \"react\";\nimport { useRouter } from \"next/router\";\nimport { useVideoState } from \"../../../../providers/twilio\";\nimport { Steps } from \"../../../../types/twilio\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\n\nexport default function EndCallButton() {\n const isMobile = useMediaQuery((theme: Theme) =>\n theme.breakpoints.down(\"sm\")\n );\n const { room, localTracks } = useVideoContext();\n const {\n account,\n viewProfile,\n selectViewProfile,\n updateLessonStatus,\n updateActiveLesson,\n } = useProfile();\n const router = useRouter();\n const { setRoomStep, setVideoOpen } = useVideoState();\n const { isAuthenticated } = useAuth0();\n\n const endCall = useCallback(() => {\n localTracks.forEach((track) => track.stop());\n\n if (room) {\n room.disconnect();\n }\n\n updateLessonStatus(false);\n updateActiveLesson(undefined);\n setRoomStep(Steps.roomNameStep);\n setVideoOpen(false);\n\n if (\n isAuthenticated &&\n account &&\n account?.roles?.some((r) =>\n [\"teacher\", \"admin\", \"superadmin\"].includes(r as string)\n )\n ) {\n router.push(\"/teacher/lessons\");\n } else if (isAuthenticated && account) {\n router.push(\"/lessons\");\n }\n }, [\n localTracks,\n room,\n viewProfile,\n selectViewProfile,\n updateLessonStatus,\n updateActiveLesson,\n ]);\n\n return (\n \n }\n onClick={endCall}\n data-cy-disconnect\n >\n \n );\n}\n","import { PropsWithChildren } from \"react\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Divider,\n} from \"@mui/material\";\nimport { useVideoState } from \"../../../providers/twilio\";\n\ninterface AboutDialogProps {\n open: boolean;\n onClose(): void;\n}\n\nfunction AboutDialog({ open, onClose }: PropsWithChildren) {\n const { roomType } = useVideoState();\n return (\n \n About: \n \n \n {roomType && (\n Room Type: {roomType}\n )}\n \n \n \n \n \n \n );\n}\n\nexport default AboutDialog;\n","import { useState, useEffect } from 'react';\nimport { LocalAudioTrack, LocalVideoTrack, RemoteAudioTrack, RemoteVideoTrack } from 'twilio-video';\n\ntype TrackType = LocalAudioTrack | LocalVideoTrack | RemoteAudioTrack | RemoteVideoTrack | undefined;\n\nexport default function useIsTrackEnabled(track: TrackType) {\n const [isEnabled, setIsEnabled] = useState(track ? track.isEnabled : false);\n\n useEffect(() => {\n setIsEnabled(track ? track.isEnabled : false);\n\n if (track) {\n const setEnabled = () => setIsEnabled(true);\n const setDisabled = () => setIsEnabled(false);\n track.on('enabled', setEnabled);\n track.on('disabled', setDisabled);\n return () => {\n track.off('enabled', setEnabled);\n track.off('disabled', setDisabled);\n };\n }\n }, [track]);\n\n return isEnabled;\n}\n","import { useState, useEffect } from 'react';\nimport { AudioTrack, VideoTrack } from 'twilio-video';\n\n/*\n * This hook allows components to reliably use the 'mediaStreamTrack' property of\n * an AudioTrack or a VideoTrack. Whenever 'localTrack.restart(...)' is called, it\n * will replace the mediaStreamTrack property of the localTrack, but the localTrack\n * object will stay the same. Therefore this hook is needed in order for components\n * to rerender in response to the mediaStreamTrack changing.\n */\nexport default function useMediaStreamTrack(track?: AudioTrack | VideoTrack) {\n const [mediaStreamTrack, setMediaStreamTrack] = useState(track?.mediaStreamTrack);\n\n useEffect(() => {\n setMediaStreamTrack(track?.mediaStreamTrack);\n\n if (track) {\n const handleStarted = () => setMediaStreamTrack(track.mediaStreamTrack);\n track.on('started', handleStarted);\n return () => {\n track.off('started', handleStarted);\n };\n }\n }, [track]);\n\n return mediaStreamTrack;\n}\n","import { memo, useEffect, useRef, useState } from \"react\";\nimport { AudioTrack, LocalAudioTrack, RemoteAudioTrack } from \"twilio-video\";\nimport useIsTrackEnabled from \"../../../hooks/twilio/useIsTrackEnabled/useIsTrackEnabled\";\nimport useMediaStreamTrack from \"../../../hooks/twilio/useMediaStreamTrack/useMediaStreamTrack\";\n\nlet clipId = 0;\nconst getUniqueClipId = () => clipId++;\n\n// @ts-ignore\nlet audioContext: AudioContext;\nif (typeof window !== \"undefined\") {\n const AudioContext = window.AudioContext;\n}\n\nexport function initializeAnalyser(stream: MediaStream) {\n audioContext = audioContext || new AudioContext();\n const audioSource = audioContext.createMediaStreamSource(stream);\n\n const analyser = audioContext.createAnalyser();\n analyser.smoothingTimeConstant = 0.2;\n analyser.fftSize = 256;\n\n audioSource.connect(analyser);\n return analyser;\n}\n\nfunction AudioLevelIndicator({\n audioTrack,\n color = \"white\",\n}: {\n audioTrack?: AudioTrack;\n color?: string;\n}) {\n const SVGRectRef = useRef(null);\n const [analyser, setAnalyser] = useState();\n const isTrackEnabled = useIsTrackEnabled(\n audioTrack as LocalAudioTrack | RemoteAudioTrack\n );\n const mediaStreamTrack = useMediaStreamTrack(audioTrack);\n\n useEffect(() => {\n if (audioTrack && mediaStreamTrack && isTrackEnabled) {\n // Here we create a new MediaStream from a clone of the mediaStreamTrack.\n // A clone is created to allow multiple instances of this component for a single\n // AudioTrack on iOS Safari.\n let newMediaStream = new MediaStream([mediaStreamTrack.clone()]);\n\n // Here we listen for the 'stopped' event on the audioTrack. When the audioTrack is stopped,\n // we stop the cloned track that is stored in 'newMediaStream'. It is important that we stop\n // all tracks when they are not in use. Browsers like Firefox don't let you create a new stream\n // from a new audio device while the active audio device still has active tracks.\n const stopAllMediaStreamTracks = () =>\n newMediaStream.getTracks().forEach((track) => track.stop());\n audioTrack.on(\"stopped\", stopAllMediaStreamTracks);\n\n const reinitializeAnalyser = () => {\n stopAllMediaStreamTracks();\n newMediaStream = new MediaStream([mediaStreamTrack.clone()]);\n setAnalyser(initializeAnalyser(newMediaStream));\n };\n\n setAnalyser(initializeAnalyser(newMediaStream));\n\n // Here we reinitialize the AnalyserNode on focus to avoid an issue in Safari\n // where the analysers stop functioning when the user switches to a new tab\n // and switches back to the app.\n window.addEventListener(\"focus\", reinitializeAnalyser);\n\n return () => {\n stopAllMediaStreamTracks();\n window.removeEventListener(\"focus\", reinitializeAnalyser);\n audioTrack.off(\"stopped\", stopAllMediaStreamTracks);\n };\n }\n }, [isTrackEnabled, mediaStreamTrack, audioTrack]);\n\n useEffect(() => {\n const SVGClipElement = SVGRectRef.current;\n\n if (isTrackEnabled && SVGClipElement && analyser) {\n const sampleArray = new Uint8Array(analyser.frequencyBinCount);\n\n const timer = setInterval(() => {\n analyser.getByteFrequencyData(sampleArray);\n let values = 0;\n\n const length = sampleArray.length;\n for (let i = 0; i < length; i++) {\n values += sampleArray[i];\n }\n\n const volume = Math.min(\n 14,\n Math.max(0, Math.log10(values / length / 3) * 7)\n );\n\n SVGClipElement?.setAttribute(\"y\", String(14 - volume));\n }, 200);\n\n return () => {\n SVGClipElement.setAttribute(\"y\", \"14\");\n clearInterval(timer);\n };\n }\n }, [isTrackEnabled, analyser]);\n\n // Each instance of this component will need a unique HTML ID\n const clipPathId = `audio-level-clip-${getUniqueClipId()}`;\n\n return isTrackEnabled ? (\n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n );\n}\n\nexport default memo(AudioLevelIndicator);\n","import AudioLevelIndicator from '../../AudioLevelIndicator/AudioLevelIndicator';\nimport { LocalAudioTrack } from 'twilio-video';\nimport { FormControl, MenuItem, Typography, Select, Grid } from '@mui/material';\nimport { SELECTED_AUDIO_INPUT_KEY } from '../../../../utilities/video/constants';\nimport useDevices from '../../../../hooks/twilio/useDevices/useDevices';\nimport useMediaStreamTrack from '../../../../hooks/twilio/useMediaStreamTrack/useMediaStreamTrack';\nimport { useVideoContext } from '../../../../providers/video';\n\nexport default function AudioInputList() {\n const { audioInputDevices } = useDevices();\n const { localTracks } = useVideoContext();\n\n const localAudioTrack = localTracks.find((track) => track.kind === 'audio') as LocalAudioTrack;\n const mediaStreamTrack = useMediaStreamTrack(localAudioTrack);\n const localAudioInputDeviceId = mediaStreamTrack?.getSettings().deviceId;\n\n function replaceTrack(newDeviceId: string) {\n window.localStorage.setItem(SELECTED_AUDIO_INPUT_KEY, newDeviceId);\n localAudioTrack?.restart({ deviceId: { exact: newDeviceId } });\n }\n\n return (\n
\n \n Audio Input\n \n \n
\n {audioInputDevices.length > 1 ? (\n \n \n \n ) : (\n {localAudioTrack?.mediaStreamTrack.label || 'No Local Audio'}\n )}\n
\n \n
\n
\n );\n}\n","import { FormControl, MenuItem, Typography, Select } from \"@mui/material\";\nimport { useVideoState } from \"../../../../providers/twilio\";\nimport useDevices from \"../../../../hooks/twilio/useDevices/useDevices\";\n\nexport default function AudioOutputList() {\n const { audioOutputDevices } = useDevices();\n const { activeSinkId, setActiveSinkId } = useVideoState();\n const activeOutputLabel = audioOutputDevices.find(\n (device) => device.deviceId === activeSinkId\n )?.label;\n\n return (\n
\n {audioOutputDevices.length > 1 ? (\n \n \n Audio Output\n \n setActiveSinkId(e.target.value as string)}\n value={activeSinkId}\n variant=\"outlined\"\n >\n {audioOutputDevices.map((device) => (\n \n {device.label}\n \n ))}\n \n \n ) : (\n <>\n Audio Output\n \n {activeOutputLabel || \"System Default Audio Output\"}\n \n \n )}\n
\n );\n}\n","import { useState, useEffect } from 'react';\nimport { LocalVideoTrack, RemoteVideoTrack } from 'twilio-video';\n\ntype TrackType = LocalVideoTrack | RemoteVideoTrack;\n\nexport default function useVideoTrackDimensions(track?: TrackType) {\n const [dimensions, setDimensions] = useState(track?.dimensions);\n\n useEffect(() => {\n setDimensions(track?.dimensions);\n\n if (track) {\n const handleDimensionsChanged = (newTrack: TrackType) =>\n setDimensions({\n width: newTrack.dimensions.width,\n height: newTrack.dimensions.height\n });\n track.on('dimensionsChanged', handleDimensionsChanged);\n return () => {\n track.off('dimensionsChanged', handleDimensionsChanged);\n };\n }\n }, [track]);\n\n return dimensions;\n}\n","import { useRef, useEffect } from 'react';\nimport { IVideoTrack } from '../../../types/twilio';\nimport { Track } from 'twilio-video';\nimport useMediaStreamTrack from '../../../hooks/twilio/useMediaStreamTrack/useMediaStreamTrack';\nimport useVideoTrackDimensions from '../../../hooks/twilio/useVideoTrackDimensions/useVideoTrackDimensions';\nimport { Box } from '@mui/material';\nimport { AspectRatio } from '@mui/icons-material';\n\ninterface VideoTrackProps {\n track: IVideoTrack;\n isLocal?: boolean;\n priority?: Track.Priority | null;\n}\n\nexport default function VideoTrack({ track, isLocal, priority }: VideoTrackProps) {\n const ref = useRef(null!);\n const mediaStreamTrack = useMediaStreamTrack(track);\n const dimensions = useVideoTrackDimensions(track);\n const isPortrait = (dimensions?.height ?? 0) > (dimensions?.width ?? 0);\n\n useEffect(() => {\n const el = ref.current;\n el.muted = true;\n if (track.setPriority && priority) {\n track.setPriority(priority);\n }\n track.attach(el);\n return () => {\n track.detach(el);\n\n // This addresses a Chrome issue where the number of WebMediaPlayers is limited.\n // See: https://github.com/twilio/twilio-video.js/issues/1528\n el.srcObject = null;\n\n if (track.setPriority && priority) {\n // Passing `null` to setPriority will set the track's priority to that which it was published with.\n track.setPriority(null);\n }\n };\n }, [track, priority]);\n\n // The local video track is mirrored if it is not facing the environment.\n const isFrontFacing = mediaStreamTrack?.getSettings().facingMode !== 'environment';\n const style = {\n transform: isLocal && isFrontFacing ? 'rotateY(180deg)' : '',\n objectFit: isPortrait || track.name.includes('screen') ? ('contain' as const) : ('cover' as const),\n aspectRatio: isLocal ? `calc(${track.dimensions.width}/${track.dimensions.height})/1` : '16/9'\n };\n\n return (\n \n );\n}\n","import { useState } from 'react';\nimport { DEFAULT_VIDEO_CONSTRAINTS, SELECTED_VIDEO_INPUT_KEY } from '../../../../utilities/video/constants';\nimport { FormControl, MenuItem, Typography, Select, Box } from '@mui/material';\nimport { LocalVideoTrack } from 'twilio-video';\nimport VideoTrack from '../../VideoTrack/VideoTrack';\nimport useDevices from '../../../../hooks/twilio/useDevices/useDevices';\nimport useMediaStreamTrack from '../../../../hooks/twilio/useMediaStreamTrack/useMediaStreamTrack';\nimport { useVideoContext } from '../../../../providers/video';\n\nexport default function VideoInputList() {\n const { videoInputDevices } = useDevices();\n const { localTracks } = useVideoContext();\n\n const localVideoTrack = localTracks.find((track) => track.kind === 'video') as LocalVideoTrack | undefined;\n const mediaStreamTrack = useMediaStreamTrack(localVideoTrack);\n const [storedLocalVideoDeviceId, setStoredLocalVideoDeviceId] = useState(window.localStorage.getItem(SELECTED_VIDEO_INPUT_KEY));\n const localVideoInputDeviceId = mediaStreamTrack?.getSettings().deviceId || storedLocalVideoDeviceId;\n\n function replaceTrack(newDeviceId: string) {\n // Here we store the device ID in the component state. This is so we can re-render this component display\n // to display the name of the selected device when it is changed while the users camera is off.\n setStoredLocalVideoDeviceId(newDeviceId);\n window.localStorage.setItem(SELECTED_VIDEO_INPUT_KEY, newDeviceId);\n localVideoTrack?.restart({\n ...(DEFAULT_VIDEO_CONSTRAINTS as {}),\n deviceId: { exact: newDeviceId }\n });\n }\n\n return (\n
\n {localVideoTrack && (\n \n \n \n )}\n {videoInputDevices.length > 1 ? (\n \n \n Video Input\n \n \n \n ) : (\n <>\n \n Video Input\n \n {localVideoTrack?.mediaStreamTrack.label || 'No Local Video'}\n \n )}\n
\n );\n}\n","import AudioInputList from './AudioInputList/AudioInputList';\nimport AudioOutputList from './AudioOutputList/AudioOutputList';\nimport { DialogContent, Typography, Divider, Dialog, DialogActions, Button, Theme, DialogTitle, Box } from '@mui/material';\nimport VideoInputList from './VideoInputList/VideoInputList';\n\nexport default function DeviceSelectionDialog({ open, onClose }: { open: boolean; onClose: () => void }) {\n return (\n \n Audio and Video Settings\n \n \n \n \n Video\n \n \n \n \n \n \n Audio\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","export default function InfoIconOutlined() {\n return (\n \n \n \n \n \n \n \n );\n}\n","export default function SettingsIcon() {\n return (\n \n \n \n );\n}\n","export default function FlipCameraIcon() {\n return (\n \n \n \n \n \n \n \n );\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { DEFAULT_VIDEO_CONSTRAINTS } from '../../../utilities/video/constants';\nimport { LocalVideoTrack } from 'twilio-video';\nimport useDevices from '../useDevices/useDevices';\nimport useMediaStreamTrack from '../useMediaStreamTrack/useMediaStreamTrack';\nimport { useVideoContext } from '../../../providers/video';\n\nexport default function useFlipCameraToggle() {\n const { localTracks } = useVideoContext();\n const [supportsFacingMode, setSupportsFacingMode] = useState(false);\n const videoTrack = localTracks.find((track) => !track.name.includes('screen') && track.kind === 'video') as LocalVideoTrack | undefined;\n const mediaStreamTrack = useMediaStreamTrack(videoTrack);\n const { videoInputDevices } = useDevices();\n\n useEffect(() => {\n // The 'supportsFacingMode' variable determines if this component is rendered\n // If 'facingMode' exists, we will set supportsFacingMode to true.\n // However, if facingMode is ever undefined again (when the user unpublishes video), we\n // won't set 'supportsFacingMode' to false. This prevents the icon from briefly\n // disappearing when the user switches their front/rear camera.\n const currentFacingMode = mediaStreamTrack?.getSettings().facingMode;\n if (currentFacingMode && supportsFacingMode === false) {\n setSupportsFacingMode(true);\n }\n }, [mediaStreamTrack, supportsFacingMode]);\n\n const toggleFacingMode = useCallback(() => {\n const newFacingMode = mediaStreamTrack?.getSettings().facingMode === 'user' ? 'environment' : 'user';\n videoTrack?.restart({\n ...(DEFAULT_VIDEO_CONSTRAINTS as {}),\n facingMode: newFacingMode\n });\n }, [mediaStreamTrack, videoTrack]);\n\n return {\n flipCameraDisabled: !videoTrack,\n toggleFacingMode,\n flipCameraSupported: supportsFacingMode && videoInputDevices.length > 1\n };\n}\n","import { useState, useRef } from 'react';\nimport AboutDialog from '../../AboutDialog/AboutDialog';\nimport DeviceSelectionDialog from '../../DeviceSelectionDialog/DeviceSelectionDialog';\nimport { MoreVert } from '@mui/icons-material';\nimport SettingsTwoToneIcon from '@mui/icons-material/SettingsTwoTone';\nimport InfoIconOutlined from '../../../icons/video/InfoIconOutlined';\nimport SettingsIcon from '../../../icons/video/SettingsIcon';\nimport { Button, Theme, Menu as MenuContainer, MenuItem, Typography, useMediaQuery, Box } from '@mui/material';\n\nimport FlipCameraIcon from '../../../icons/video/FlipCameraIcon';\nimport useFlipCameraToggle from '../../../../hooks/twilio/useFlipCameraToggle/useFlipCameraToggle';\n\nexport default function Menu() {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n\n const [aboutOpen, setAboutOpen] = useState(false);\n const [menuOpen, setMenuOpen] = useState(false);\n const [settingsOpen, setSettingsOpen] = useState(false);\n\n const anchorRef = useRef(null);\n const { flipCameraDisabled, toggleFacingMode, flipCameraSupported } = useFlipCameraToggle();\n\n return (\n <>\n setMenuOpen((isOpen) => !isOpen)}\n ref={anchorRef}\n data-cy-more-button\n >\n {isMobile ? (\n \n ) : (\n <>\n \n \n )}\n \n setMenuOpen((isOpen) => !isOpen)}\n anchorEl={anchorRef.current}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: isMobile ? -55 : 'bottom',\n horizontal: 'center'\n }}\n >\n setSettingsOpen(true)}>\n \n \n \n Audio and Video Settings\n \n\n {flipCameraSupported && (\n \n \n \n \n Flip Camera\n \n )}\n\n setAboutOpen(true)}>\n \n \n \n About\n \n \n {\n setAboutOpen(false);\n setMenuOpen(false);\n }}\n />\n {\n setSettingsOpen(false);\n setMenuOpen(false);\n }}\n />\n \n );\n}\n","import { useEffect, useState } from 'react';\nimport { useVideoContext } from '../../../providers/video';\n\ntype RoomStateType = 'disconnected' | 'connected' | 'reconnecting';\n\nexport default function useRoomState() {\n const { room } = useVideoContext();\n const [state, setState] = useState('disconnected');\n\n useEffect(() => {\n const setRoomState = () => setState(room?.state as RoomStateType);\n if (room) {\n setRoomState();\n room.on('disconnected', setRoomState).on('reconnected', setRoomState).on('reconnecting', setRoomState);\n return () => {\n room.off('disconnected', setRoomState).off('reconnected', setRoomState).off('reconnecting', setRoomState);\n };\n }\n });\n\n return state;\n}\n","import { LocalAudioTrack } from 'twilio-video';\nimport { useCallback } from 'react';\nimport useIsTrackEnabled from '../useIsTrackEnabled/useIsTrackEnabled';\nimport { useVideoContext } from '../../../providers/video';\n\nexport default function useLocalAudioToggle() {\n const { localTracks } = useVideoContext();\n const audioTrack = localTracks.find((track) => track.kind === 'audio') as LocalAudioTrack;\n const isEnabled = useIsTrackEnabled(audioTrack);\n\n const toggleAudioEnabled = useCallback(() => {\n if (audioTrack) {\n audioTrack.isEnabled ? audioTrack.disable() : audioTrack.enable();\n }\n }, [audioTrack]);\n\n return [isEnabled, toggleAudioEnabled] as const;\n}\n","import { Button, useMediaQuery, Theme, Tooltip } from '@mui/material';\nimport MicSharpIcon from '@mui/icons-material/MicSharp';\nimport MicOffSharpIcon from '@mui/icons-material/MicOffSharp';\n\nimport useLocalAudioToggle from '../../../../hooks/twilio/useLocalAudioToggle/useLocalAudioToggle';\nimport { useVideoContext } from '../../../../providers/video';\n\ninterface ToggleAudioButtonProps {\n isDisabled?: boolean;\n includeBorder?: boolean;\n}\n\nexport default function ToggleAudioButton({ isDisabled = false, includeBorder = false }: ToggleAudioButtonProps) {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const [isAudioEnabled, toggleAudioEnabled] = useLocalAudioToggle();\n const { localTracks } = useVideoContext();\n const hasAudioTrack = localTracks.some((track) => track.kind === 'audio');\n\n let tooltipMessage = isAudioEnabled ? 'Mute' : 'Unmute';\n\n return (\n \n \n : }\n data-cy-audio-toggle\n >\n \n \n );\n}\n","import { useCallback, useRef } from 'react';\n\nimport { Button, Theme, useMediaQuery, Tooltip } from '@mui/material';\n\nimport useDevices from '../../../../hooks/twilio/useDevices/useDevices';\nimport useLocalVideoToggle from '../../../../hooks/twilio/useLocalVideoToggle/useLocalVideoToggle';\nimport VideocamSharpIcon from '@mui/icons-material/VideocamSharp';\nimport VideocamOffSharpIcon from '@mui/icons-material/VideocamOffSharp';\n\ninterface ToggleVideoButtonProps {\n isDisabled?: boolean;\n includeBorder?: boolean;\n}\n\nexport default function ToggleVideoButton({ isDisabled, includeBorder }: ToggleVideoButtonProps) {\n const [isVideoEnabled, toggleVideoEnabled] = useLocalVideoToggle();\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const lastClickTimeRef = useRef(0);\n const { hasVideoInputDevices } = useDevices();\n\n const toggleVideo = useCallback(() => {\n if (Date.now() - lastClickTimeRef.current > 500) {\n lastClickTimeRef.current = Date.now();\n toggleVideoEnabled();\n }\n }, [toggleVideoEnabled]);\n\n let toolTipMessage = isVideoEnabled ? 'Camera off' : 'Camera on';\n\n return (\n \n \n : }\n >\n \n \n );\n}\n","import { useEffect, useState } from 'react';\nimport { useVideoContext } from '../../../providers/video';\n\nimport { Participant, TrackPublication } from 'twilio-video';\n\n/*\n Returns the participant that is sharing their screen (if any). This hook assumes that only one participant\n can share their screen at a time.\n*/\nexport default function useScreenShareParticipant() {\n const { room } = useVideoContext();\n const [screenShareParticipant, setScreenShareParticipant] = useState();\n\n useEffect(() => {\n if (room) {\n const updateScreenShareParticipant = () => {\n setScreenShareParticipant(\n Array.from(room.participants.values())\n // the screenshare participant could be the localParticipant\n .concat(room.localParticipant)\n .find((participant: Participant) =>\n Array.from(participant.tracks.values()).find((track) => track.trackName.includes('screen'))\n )\n );\n };\n updateScreenShareParticipant();\n\n room.on('trackPublished', updateScreenShareParticipant);\n room.on('trackUnpublished', updateScreenShareParticipant);\n room.on('participantDisconnected', updateScreenShareParticipant);\n\n // the room object does not emit 'trackPublished' events for the localParticipant,\n // so we need to listen for them here.\n room.localParticipant.on('trackPublished', updateScreenShareParticipant);\n room.localParticipant.on('trackUnpublished', updateScreenShareParticipant);\n return () => {\n room.off('trackPublished', updateScreenShareParticipant);\n room.off('trackUnpublished', updateScreenShareParticipant);\n room.off('participantDisconnected', updateScreenShareParticipant);\n\n room.localParticipant.off('trackPublished', updateScreenShareParticipant);\n room.localParticipant.off('trackUnpublished', updateScreenShareParticipant);\n };\n }\n }, [room]);\n\n return screenShareParticipant;\n}\n","import { Theme, Button, Tooltip, useMediaQuery } from '@mui/material';\n\nimport ScreenShareSharpIcon from '@mui/icons-material/ScreenShareSharp';\n\nimport useScreenShareParticipant from '../../../../hooks/twilio/useScreenShareParticipant/useScreenShareParticipant';\nimport { useVideoContext } from '../../../../providers/video';\n\nexport const STOP_SCREEN_SHARE_TEXT = 'Stop Sharing Screen';\nexport const SHARE_IN_PROGRESS_TEXT = 'Cannot share screen when another user is sharing';\nexport const SHARE_NOT_SUPPORTED_TEXT = 'Screen sharing is not supported with this browser';\n\nexport default function ToggleScreenShareButton(props: { disabled?: boolean }) {\n const screenShareParticipant = useScreenShareParticipant();\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const { toggleScreenShare, isSharingScreen } = useVideoContext();\n const disableScreenShareButton = Boolean(screenShareParticipant);\n const isScreenShareSupported = navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia;\n const isDisabled = props.disabled || disableScreenShareButton || !isScreenShareSupported;\n\n let tooltipMessage = isSharingScreen ? 'Stop Sharing' : 'Share Your Screen';\n\n if (disableScreenShareButton) {\n tooltipMessage = SHARE_IN_PROGRESS_TEXT;\n }\n\n if (!isScreenShareSupported) {\n tooltipMessage = SHARE_NOT_SUPPORTED_TEXT;\n }\n\n return (\n \n }\n data-cy-share-screen\n sx={{\n margin: '1em 0',\n ...(isMobile && { padding: '0.8em 0', margin: 0 }),\n ...(isDisabled && {\n color: '#bbb',\n '& svg *': {\n fill: '#bbb'\n }\n })\n }}\n >\n \n );\n}\n","import { useCallback, useEffect } from 'react';\n\nimport { Button, useMediaQuery, Theme, Tooltip } from '@mui/material';\nimport FullscreenExitOutlinedIcon from '@mui/icons-material/FullscreenExitOutlined';\nimport FullscreenOutlinedIcon from '@mui/icons-material/FullscreenOutlined';\nimport { useVideoContext } from '../../../../providers/video';\n\ninterface ToggleFullScreenButtonProps {\n isDisabled?: boolean;\n}\n\nexport default function ToggleFullScreenButton({ isDisabled }: ToggleFullScreenButtonProps) {\n const { fullScreenMode, setFullScreenMode } = useVideoContext();\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n\n let toolTipMessage = fullScreenMode ? 'Minimize' : 'Full Screen';\n const toggleFullScreen = useCallback(() => {\n setFullScreenMode(!fullScreenMode);\n }, [fullScreenMode, setFullScreenMode]);\n\n return (\n \n : }\n data-cy-audio-toggle\n onClick={toggleFullScreen}\n >\n \n );\n}\n","import { Button, Typography, Grid, Hidden, Box } from '@mui/material';\nimport EndCallButton from '../Buttons/EndCallButton/EndCallButton';\nimport { isMobile } from '../../../utilities/video/videoDefaults';\nimport Menu from './Menu/Menu';\nimport useRoomState from '../../../hooks/twilio/useRoomState/useRoomState';\nimport { useVideoContext } from '../../../providers/video';\nimport ToggleAudioButton from '../Buttons/ToggleAudioButton/ToggleAudioButton';\nimport ToggleVideoButton from '../Buttons/ToggleVideoButton/ToggleVideoButton';\nimport ToggleScreenShareButton from '../Buttons/ToogleScreenShareButton/ToggleScreenShareButton';\nimport ToggleFullScreenButton from '../Buttons/FullScreenButton/ToggleFullScreenButton';\nimport { useVideoState } from '../../../providers/twilio';\n\nexport default function MenuBar() {\n const { isSharingScreen, toggleScreenShare, room } = useVideoContext();\n const { appointment } = useVideoState();\n const roomState = useRoomState();\n const isReconnecting = roomState === 'reconnecting';\n\n return (\n <>\n \n \n \n \n {appointment?.type}\n \n \n \n \n \n \n \n {!isSharingScreen && !isMobile && }\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","export default function AvatarIcon() {\n return (\n \n \n \n \n \n \n );\n}\n","import { LocalAudioTrack } from 'twilio-video';\nimport { useVideoContext } from '../../../providers/video';\nimport AudioLevelIndicator from '../AudioLevelIndicator/AudioLevelIndicator';\n\nexport default function LocalAudioLevelIndicator() {\n const { localTracks } = useVideoContext();\n const audioTrack = localTracks.find((track) => track.kind === 'audio') as LocalAudioTrack;\n\n return ;\n}\n","import AvatarIcon from '../../../../icons/video/AvatarIcon';\nimport { Box, Theme, Typography, useMediaQuery } from '@mui/material';\nimport LocalAudioLevelIndicator from '../../../LocalAudioLevelIndicator/LocalAudioLevelIndicator';\nimport { LocalVideoTrack } from 'twilio-video';\nimport VideoTrack from '../../../VideoTrack/VideoTrack';\nimport { useVideoContext } from '../../../../../providers/video';\n\nexport default function LocalVideoPreview({ identity }: { identity: string }) {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n\n const { localTracks } = useVideoContext();\n\n const videoTrack = localTracks.find((track) => !track.name.includes('screen') && track.kind === 'video') as LocalVideoTrack;\n\n return (\n \n \n {videoTrack ? (\n \n ) : (\n \n \n \n )}\n \n\n \n \n \n \n {identity}\n \n \n \n \n );\n}\n","import { useCallback } from \"react\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FormControl,\n Grid,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport {\n inputLabels,\n Settings,\n} from \"../../../providers/twilio/settings/settingsReducer\";\nimport { useVideoState } from \"../../../providers/twilio\";\nimport useRoomState from \"../../../hooks/twilio/useRoomState/useRoomState\";\n\nconst withDefault = (val?: string) =>\n typeof val === \"undefined\" ? \"default\" : val;\n\nexport default function ConnectionOptionsDialog({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const { settings, dispatchSetting } = useVideoState();\n const roomState = useRoomState();\n const isDisabled = roomState !== \"disconnected\";\n\n const handleChange = useCallback(\n (event: any) => {\n dispatchSetting({\n name: event.target.name as keyof Settings,\n value: event.target.value as string,\n });\n },\n [dispatchSetting]\n );\n\n const handleNumberChange = useCallback(\n (event: any) => {\n if (!/[^\\d]/.test(event.target.value as string)) handleChange(event);\n },\n [handleChange]\n );\n\n return (\n \n Connection Settings\n \n \n \n \n \n \n\n \n \n \n Dominant Speaker Priority:\n \n \n Low\n Standard\n High\n Server Default\n \n \n\n \n \n Track Switch Off Mode:\n \n \n Predicted\n Detected\n Disabled\n Server Default\n \n \n\n \n \n Mode:\n \n \n Grid\n Collaboration\n Presentation\n Server Default\n \n \n \n \n \n \n Client Track Switch Off Control:\n \n \n Auto\n Manual\n Default\n \n \n\n \n \n Content Preferences Mode:\n \n \n Auto\n Manual\n Default\n \n \n\n \n \n \n \n \n \n \n \n \n Done\n \n \n \n );\n}\n","import { useState, useRef } from 'react';\nimport { Button, MenuItem, Typography, Theme, Menu } from '@mui/material';\nimport { MoreHoriz } from '@mui/icons-material';\nimport { useMediaQuery } from '@mui/material';\n\nimport AboutDialog from '../../../AboutDialog/AboutDialog';\nimport ConnectionOptionsDialog from '../../../ConnectionOptionsDialog/ConnectionOptionsDialog';\nimport DeviceSelectionDialog from '../../../DeviceSelectionDialog/DeviceSelectionDialog';\nimport SettingsIcon from '../../../../icons/video/SettingsIcon';\nimport { useVideoState } from '../../../../../providers/twilio';\n\nexport default function SettingsMenu() {\n const { roomType } = useVideoState();\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const [menuOpen, setMenuOpen] = useState(false);\n const [aboutOpen, setAboutOpen] = useState(false);\n const [deviceSettingsOpen, setDeviceSettingsOpen] = useState(false);\n const [connectionSettingsOpen, setConnectionSettingsOpen] = useState(false);\n\n const anchorRef = useRef(null);\n\n return (\n <>\n {isMobile ? (\n setMenuOpen(true)}\n startIcon={}\n >\n More\n \n ) : (\n \n )}\n setMenuOpen((isOpen) => !isOpen)}\n anchorEl={anchorRef.current}\n anchorOrigin={{\n vertical: 'top',\n horizontal: isMobile ? 'left' : 'right'\n }}\n transformOrigin={{\n vertical: 0,\n horizontal: 'center'\n }}\n >\n setAboutOpen(true)}>\n About\n \n setDeviceSettingsOpen(true)}>\n Audio and Video Settings\n \n {roomType !== 'peer-to-peer' && roomType !== 'go' && (\n setConnectionSettingsOpen(true)}>\n Connection Settings\n \n )}\n \n {\n setAboutOpen(false);\n setMenuOpen(false);\n }}\n />\n {\n setDeviceSettingsOpen(false);\n setMenuOpen(false);\n }}\n />\n {\n setConnectionSettingsOpen(false);\n setMenuOpen(false);\n }}\n />\n \n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n Typography,\n Button,\n Grid,\n Theme,\n Hidden,\n CircularProgress,\n useMediaQuery,\n Box,\n Stack,\n} from \"@mui/material\";\n\nimport LocalVideoPreview from \"./LocalVideoPreview/LocalVideoPreview\";\nimport SettingsMenu from \"./SettingsMenu/SettingsMenu\";\nimport { Steps } from \"../../../../types/twilio\";\nimport ToggleAudioButton from \"../../Buttons/ToggleAudioButton/ToggleAudioButton\";\nimport ToggleVideoButton from \"../../Buttons/ToggleVideoButton/ToggleVideoButton\";\nimport { useVideoState } from \"../../../../providers/twilio\";\nimport { useVideoContext } from \"../../../../providers/video\";\nimport { useProfile } from \"../../../../providers/profile\";\nimport { useSnackbar } from \"notistack\";\nimport { useRouter } from \"next/router\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\nimport { LocalAudioTrack } from \"twilio-video\";\n\nconst crypto = require(\"crypto\");\n\ninterface DeviceSelectionScreenProps {\n name: string;\n roomName: string; //room from query string, if one was passed\n displayName: string;\n setStep: (step: Steps) => void;\n appointmentId?: number;\n}\n\nexport default function DeviceSelectionScreen({\n name,\n roomName,\n displayName,\n setStep,\n appointmentId,\n}: DeviceSelectionScreenProps) {\n const sha256 = (x: String) =>\n crypto.createHash(\"sha256\").update(x, \"utf8\").digest(\"hex\");\n const { isAuthenticated } = useAuth0();\n const isMobile = useMediaQuery((theme: Theme) =>\n theme.breakpoints.down(\"sm\")\n );\n const { isFetching, setVideoOpen } = useVideoState();\n const {\n account,\n updateLessonStatus,\n isInLesson,\n activeLesson,\n updateActiveLesson,\n } = useProfile();\n const [busy, setBusy] = useState(false);\n const joinOnLoad = useRef(isInLesson && activeLesson);\n const { enqueueSnackbar } = useSnackbar();\n\n const {\n connect: videoConnect,\n isAcquiringLocalTracks,\n isConnecting,\n localTracks,\n getLocalAudioTrack,\n room,\n } = useVideoContext();\n const disableButtons = isFetching || isAcquiringLocalTracks || isConnecting;\n const router = useRouter();\n\n const handleJoin = useCallback(async () => {\n setBusy(true);\n const displayName =\n account !== undefined && account.name ? account.name : name ?? \"Guest\";\n const lessonRoomName = roomName\n ? roomName\n : activeLesson\n ? sha256(activeLesson.toString())\n : \"\";\n\n try {\n const result = await fetch(\"/api/twilio/token\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n identity: displayName,\n room: lessonRoomName,\n }),\n });\n const data = await result.json();\n\n if (!data || !data.twilioToken) throw \"cannot join a call\";\n\n videoConnect(data.twilioToken);\n\n // @ts-ignore\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n window.addEventListener(\"visibilitychange\", tabFocused);\n }\n\n updateLessonStatus(true);\n if (roomName && !activeLesson) {\n updateActiveLesson(appointmentId);\n }\n\n setBusy(false);\n if (isAuthenticated && account) {\n router.push(\"/chat\");\n }\n } catch (error) {\n enqueueSnackbar(\n \"Problem scheduling lesson, please try again or refresh.\",\n { variant: \"error\" }\n );\n setBusy(false);\n }\n }, [\n account,\n activeLesson,\n roomName,\n videoConnect,\n updateLessonStatus,\n updateActiveLesson,\n setBusy,\n enqueueSnackbar,\n localTracks,\n ]);\n\n const tabFocused = () => {\n console.log(\"tab focused\");\n console.log(localTracks);\n const audioTrack = localTracks.find(\n (track) => track.kind === \"audio\"\n ) as LocalAudioTrack;\n\n console.log(audioTrack);\n\n if (!audioTrack) {\n getLocalAudioTrack()\n .then((track: LocalAudioTrack) =>\n room?.localParticipant?.publishTrack(track, { priority: \"low\" })\n )\n .catch(() => {\n console.log(\"encountered an error publishing an audio track\");\n })\n .finally(() => {\n console.log(\"Re-published local audio track\");\n });\n } else if (audioTrack && !audioTrack.isEnabled) {\n audioTrack.enable();\n } else {\n console.log(\"audio should work\");\n }\n };\n\n const handleCancel = useCallback(() => {\n setStep(Steps.roomNameStep);\n setVideoOpen(false);\n updateLessonStatus(false);\n updateActiveLesson(undefined);\n\n if (room) {\n room.disconnect();\n }\n\n if (localTracks?.length > 0) {\n localTracks.forEach((track) => track.stop());\n }\n }, [\n setStep,\n setVideoOpen,\n updateLessonStatus,\n updateActiveLesson,\n room,\n localTracks,\n ]);\n\n useEffect(() => {\n if (joinOnLoad.current && activeLesson && !isAcquiringLocalTracks) {\n handleJoin();\n }\n }, [joinOnLoad.current, activeLesson, isAcquiringLocalTracks]);\n\n if (busy || isConnecting) {\n return (\n \n
\n \n
\n
\n \n Joining Meeting\n \n
\n
\n );\n }\n\n return (\n <>\n \n Join {displayName}\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
\n \n \n \n Join Now\n \n \n
\n
\n
\n \n );\n}\n","import { Box } from '@mui/material';\n\ninterface IntroContainerProps {\n children: React.ReactNode;\n}\n\nconst IntroContainer = (props: IntroContainerProps) => {\n return (\n \n \n \n \n {props.children}\n \n \n \n \n );\n};\n\nexport default IntroContainer;\n","import { Typography, Button, Grid, Theme, useMediaQuery, TextField } from '@mui/material';\nimport useSWR from 'swr';\nimport { fetcher } from '../../../../utilities/fetcher';\nimport { useAuth0 } from '@auth0/auth0-react';\nimport { useProfile } from '../../../../providers/profile';\nimport { useEffect, useState } from 'react';\n\ninterface RoomNameScreenProps {\n name: string;\n roomName: string;\n roomDisplayName: string;\n handleSubmit: (event: any, name?: string) => void;\n}\n\nexport default function RoomNameScreen({ name, roomName, roomDisplayName, handleSubmit }: RoomNameScreenProps) {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const { getAccessTokenSilently } = useAuth0();\n const { account } = useProfile();\n const [guestName, setGuestName] = useState('');\n\n // for now, we check if user can join and/or create a room based on following rules\n // 1. Any user other that student can join, b/c they will be able to create a room if one doesn't already exist\n // 2. If user is student, we check if room exists. If yes, they can join, if not, they need to come back when it exists\n const { data: canJoin } = useSWR(\n roomName ? `/api/twilio/room/${encodeURIComponent(roomName as string)}` : null,\n (url) => fetcher(url, getAccessTokenSilently),\n {\n refreshInterval: 5000\n }\n );\n\n if (\n roomName !== 'AppleTestRoom' &&\n account &&\n !canJoin &&\n !account?.roles?.some((r) => ['teacher', 'admin', 'superadmin'].includes(r as string))\n ) {\n return (\n \n
\n \n Your lesson has not started yet. Please wait for your teacher to begin the lesson.\n \n
\n
\n );\n }\n\n return (\n <>\n {roomDisplayName}\n {!account && (\n setGuestName(e.target.value)}\n helperText='Please enter your name'\n required\n />\n )}\n \n Join a Lesson\n \n handleSubmit(e, guestName)}\n variant='contained'\n disabled={(!guestName && !name) || !roomName}\n >\n Continue\n \n \n );\n}\n","import { useState, useEffect, FormEvent } from 'react';\nimport DeviceSelectionScreen from './DeviceSelectionScreen/DeviceSelectionScreen';\nimport IntroContainer from '../IntroContainer/IntroContainer';\nimport RoomNameScreen from './RoomNameScreen/RoomNameScreen';\nimport { useVideoState } from '../../../providers/twilio';\nimport { useVideoContext } from '../../../providers/video';\nimport { useProfile } from '../../../providers/profile';\nimport { Steps } from '../../../types/twilio';\nimport { Appointment } from '../../../types/acuity';\n\nconst crypto = require('crypto');\n\nexport default function PreJoinScreens({ appointment, room }: { appointment?: Appointment; room?: string }) {\n const sha256 = (x: String) => crypto.createHash('sha256').update(x, 'utf8').digest('hex');\n const { account } = useProfile();\n const { getAudioAndVideoTracks, isAcquiringLocalTracks } = useVideoContext();\n const { roomStep, setRoomStep } = useVideoState();\n\n const [userName, setUserName] = useState(account?.name || '');\n const [roomName, setRoomName] = useState(appointment?.id ? sha256(appointment.id.toString()) : '');\n const [roomDisplayName] = useState(appointment?.type ? `${appointment.type}` : '');\n\n const [mediaError, setMediaError] = useState();\n const [hasTriedGettingLocalTracks, setHasTriedGettingLocalTracks] = useState(false);\n\n useEffect(() => {\n if (room !== undefined && room !== '') {\n setRoomName(room);\n setRoomStep(Steps.roomNameStep);\n }\n }, [room, setRoomName, setRoomStep]);\n\n useEffect(() => {\n if (roomStep === Steps.deviceSelectionStep && !mediaError && !isAcquiringLocalTracks && !hasTriedGettingLocalTracks) {\n getAudioAndVideoTracks().catch((error) => {\n console.log('Error acquiring local media:');\n console.dir(error);\n setMediaError(error);\n });\n setHasTriedGettingLocalTracks(true);\n }\n }, [getAudioAndVideoTracks, roomStep, mediaError, isAcquiringLocalTracks, hasTriedGettingLocalTracks, setHasTriedGettingLocalTracks]);\n\n const handleSubmit = (event: FormEvent, name?: string) => {\n event.preventDefault();\n if (name && name !== '') {\n setUserName(name);\n }\n setRoomStep(Steps.deviceSelectionStep);\n };\n\n return (\n \n {roomStep === Steps.roomNameStep && (\n \n )}\n\n {roomStep === Steps.deviceSelectionStep && hasTriedGettingLocalTracks && (\n \n )}\n \n );\n}\n","import { useEffect } from 'react';\nimport { useSnackbar } from 'notistack';\nimport useRoomState from '../../../hooks/twilio/useRoomState/useRoomState';\n\nexport default function ReconnectingNotification() {\n const roomState = useRoomState();\n const { enqueueSnackbar } = useSnackbar();\n\n useEffect(() => {\n enqueueSnackbar('Reconnecting to room...', { variant: 'error' });\n }, [enqueueSnackbar]);\n return <>;\n}\n","import { useEffect, useState } from 'react';\nimport { Participant } from 'twilio-video';\n\nexport default function useParticipantNetworkQualityLevel(participant: Participant) {\n const [networkQualityLevel, setNetworkQualityLevel] = useState(participant.networkQualityLevel);\n\n useEffect(() => {\n const handleNewtorkQualityLevelChange = (newNetworkQualityLevel: number) => setNetworkQualityLevel(newNetworkQualityLevel);\n\n setNetworkQualityLevel(participant.networkQualityLevel);\n participant.on('networkQualityLevelChanged', handleNewtorkQualityLevelChange);\n return () => {\n participant.off('networkQualityLevelChanged', handleNewtorkQualityLevelChange);\n };\n }, [participant]);\n\n return networkQualityLevel;\n}\n","import { Box } from '@mui/material';\nimport { Participant } from 'twilio-video';\nimport useParticipantNetworkQualityLevel from '../../../hooks/twilio/useParticipantNetworkQualityLevel/useParticipantNetworkQualityLevel';\n\nconst STEP = 3;\nconst BARS_ARRAY = [0, 1, 2, 3, 4];\n\nexport default function NetworkQualityLevel({ participant }: { participant: Participant }) {\n const networkQualityLevel = useParticipantNetworkQualityLevel(participant);\n\n if (networkQualityLevel === null) return null;\n\n return (\n \n \n {BARS_ARRAY.map((level) => (\n level ? 'white' : 'rgba(255, 255, 255, 0.2)'\n }}\n />\n ))}\n \n \n );\n}\n","import { Tooltip, SvgIcon } from \"@mui/material\";\n\nexport default function PinIcon() {\n return (\n \n \n \n \n \n );\n}\n","export default function ScreenShareIcon() {\n return (\n \n \n \n );\n}\n","import { useState, useEffect } from 'react';\nimport { LocalVideoTrack, RemoteVideoTrack } from 'twilio-video';\n\ntype TrackType = RemoteVideoTrack | LocalVideoTrack | undefined | null;\n\n// The 'switchedOff' event is emitted when there is not enough bandwidth to support\n// a track. See: https://www.twilio.com/docs/video/tutorials/using-bandwidth-profile-api#understanding-track-switch-offs\n\nexport default function useIsTrackSwitchedOff(track: TrackType) {\n const [isSwitchedOff, setIsSwitchedOff] = useState(track && track.isSwitchedOff);\n\n useEffect(() => {\n // Reset the value if the 'track' variable changes\n setIsSwitchedOff(track && track.isSwitchedOff);\n\n if (track) {\n const handleSwitchedOff = () => setIsSwitchedOff(true);\n const handleSwitchedOn = () => setIsSwitchedOff(false);\n track.on('switchedOff', handleSwitchedOff);\n track.on('switchedOn', handleSwitchedOn);\n return () => {\n track.off('switchedOff', handleSwitchedOff);\n track.off('switchedOn', handleSwitchedOn);\n };\n }\n }, [track]);\n\n return !!isSwitchedOff;\n}\n","import { useEffect, useState } from 'react';\nimport { LocalTrackPublication, Participant, RemoteTrackPublication } from 'twilio-video';\n\ntype TrackPublication = LocalTrackPublication | RemoteTrackPublication;\n\nexport default function usePublications(participant: Participant) {\n const [publications, setPublications] = useState([]);\n\n useEffect(() => {\n // Reset the publications when the 'participant' variable changes.\n setPublications(Array.from(participant.tracks.values()) as TrackPublication[]);\n\n const publicationAdded = (publication: TrackPublication) => setPublications((prevPublications) => [...prevPublications, publication]);\n const publicationRemoved = (publication: TrackPublication) =>\n setPublications((prevPublications) => prevPublications.filter((p) => p !== publication));\n\n participant.on('trackPublished', publicationAdded);\n participant.on('trackUnpublished', publicationRemoved);\n return () => {\n participant.off('trackPublished', publicationAdded);\n participant.off('trackUnpublished', publicationRemoved);\n };\n }, [participant]);\n\n return publications;\n}\n","import { useEffect, useState } from 'react';\nimport { LocalTrackPublication, RemoteTrackPublication } from 'twilio-video';\n\nexport default function useTrack(publication: LocalTrackPublication | RemoteTrackPublication | undefined) {\n const [track, setTrack] = useState(publication && publication.track);\n\n useEffect(() => {\n // Reset the track when the 'publication' variable changes.\n setTrack(publication && publication.track);\n\n if (publication) {\n const removeTrack = () => setTrack(null);\n\n publication.on('subscribed', setTrack);\n publication.on('unsubscribed', removeTrack);\n return () => {\n publication.off('subscribed', setTrack);\n publication.off('unsubscribed', removeTrack);\n };\n }\n }, [publication]);\n\n return track;\n}\n","import { useEffect, useState } from 'react';\nimport { Participant } from 'twilio-video';\n\nexport default function useParticipantIsReconnecting(participant: Participant) {\n const [isReconnecting, setIsReconnecting] = useState(false);\n\n useEffect(() => {\n const handleReconnecting = () => setIsReconnecting(true);\n const handleReconnected = () => setIsReconnecting(false);\n\n handleReconnected(); // Reset state when there is a new participant\n\n participant.on('reconnecting', handleReconnecting);\n participant.on('reconnected', handleReconnected);\n return () => {\n participant.off('reconnecting', handleReconnecting);\n participant.off('reconnected', handleReconnected);\n };\n }, [participant]);\n\n return isReconnecting;\n}\n","import { Typography, Theme, useMediaQuery, Box } from '@mui/material';\nimport { LocalAudioTrack, LocalVideoTrack, Participant, RemoteAudioTrack, RemoteVideoTrack } from 'twilio-video';\n\nimport AudioLevelIndicator from '../AudioLevelIndicator/AudioLevelIndicator';\nimport AvatarIcon from '../../icons/video/AvatarIcon';\nimport NetworkQualityLevel from '../NetworkQualityLevel/NetworkQualityLevel';\nimport PinIcon from './PinIcon/PinIcon';\nimport ScreenShareIcon from '../../icons/video/ScreenShareIcon';\n\nimport useIsTrackSwitchedOff from '../../../hooks/twilio/useIsTrackSwitchedOff/useIsTrackSwitchedOff';\nimport usePublications from '../../../hooks/twilio/usePublications/usePublications';\nimport useTrack from '../../../hooks/twilio/useTrack/useTrack';\nimport useParticipantIsReconnecting from '../../../hooks/twilio/useParticipantIsReconnecting/useParticipantIsReconnecting';\n\ninterface ParticipantInfoProps {\n participant: Participant;\n children: React.ReactNode;\n onClick?: () => void;\n isSelected?: boolean;\n isLocalParticipant?: boolean;\n hideParticipant?: boolean;\n}\n\nexport default function ParticipantInfo({ participant, onClick, isSelected, children, isLocalParticipant, hideParticipant }: ParticipantInfoProps) {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const publications = usePublications(participant);\n\n const audioPublication = publications.find((p) => p.kind === 'audio');\n const videoPublication = publications.find((p) => !p.trackName.includes('screen') && p.kind === 'video');\n\n const isVideoEnabled = Boolean(videoPublication);\n const isScreenShareEnabled = publications.find((p) => p.trackName.includes('screen'));\n\n const videoTrack = useTrack(videoPublication);\n const isVideoSwitchedOff = useIsTrackSwitchedOff(videoTrack as LocalVideoTrack | RemoteVideoTrack);\n\n const audioTrack = useTrack(audioPublication) as LocalAudioTrack | RemoteAudioTrack | undefined;\n const isParticipantReconnecting = useParticipantIsReconnecting(participant);\n\n return (\n \n \n \n \n {isScreenShareEnabled && (\n \n \n \n )}\n \n \n \n {participant.identity}\n {isLocalParticipant && ' (You)'}\n \n \n \n
{isSelected && }
\n \n \n {(!isVideoEnabled || isVideoSwitchedOff) && (\n \n \n \n )}\n {isParticipantReconnecting && (\n \n \n Reconnecting...\n \n \n )}\n {children}\n \n \n );\n}\n","import { useEffect, useRef } from 'react';\nimport { AudioTrack as IAudioTrack } from 'twilio-video';\nimport { useVideoState } from '../../../providers/twilio';\n\ninterface AudioTrackProps {\n track: IAudioTrack;\n}\n\nexport default function AudioTrack({ track }: AudioTrackProps) {\n const { activeSinkId } = useVideoState();\n const audioEl = useRef();\n\n useEffect(() => {\n audioEl.current = track.attach();\n audioEl.current.setAttribute('data-cy-audio-track-name', track.name);\n document.body.appendChild(audioEl.current);\n return () =>\n track.detach().forEach((el) => {\n el.remove();\n\n // This addresses a Chrome issue where the number of WebMediaPlayers is limited.\n // See: https://github.com/twilio/twilio-video.js/issues/1528\n el.srcObject = null;\n });\n }, [track]);\n\n useEffect(() => {\n audioEl.current?.setSinkId?.(activeSinkId);\n }, [activeSinkId]);\n\n return null;\n}\n","import useTrack from '../../../hooks/twilio/useTrack/useTrack';\nimport AudioTrack from '../AudioTrack/AudioTrack';\nimport VideoTrack from '../VideoTrack/VideoTrack';\n\nimport { IVideoTrack } from '../../../types/twilio';\nimport { AudioTrack as IAudioTrack, LocalTrackPublication, Participant, RemoteTrackPublication, Track } from 'twilio-video';\n\ninterface PublicationProps {\n publication: LocalTrackPublication | RemoteTrackPublication;\n participant: Participant;\n isLocalParticipant?: boolean;\n videoOnly?: boolean;\n videoPriority?: Track.Priority | null;\n}\n\nexport default function Publication({ publication, isLocalParticipant, videoOnly, videoPriority }: PublicationProps) {\n const track = useTrack(publication);\n\n if (!track) return null;\n\n switch (track.kind) {\n case 'video':\n return (\n \n );\n case 'audio':\n return videoOnly ? null : ;\n default:\n return null;\n }\n}\n","import { Participant, Track } from \"twilio-video\";\nimport Publication from \"../Publication/Publication\";\nimport usePublications from \"../../../hooks/twilio/usePublications/usePublications\";\n\ninterface ParticipantTracksProps {\n participant: Participant;\n videoOnly?: boolean;\n enableScreenShare?: boolean;\n videoPriority?: Track.Priority | null;\n isLocalParticipant?: boolean;\n}\n\n/*\n * The object model for the Room object (found here: https://www.twilio.com/docs/video/migrating-1x-2x#object-model) shows\n * that Participant objects have TrackPublications, and TrackPublication objects have Tracks.\n *\n * The React components in this application follow the same pattern. This ParticipantTracks component renders Publications,\n * and the Publication component renders Tracks.\n */\n\nexport default function ParticipantTracks({\n participant,\n videoOnly,\n enableScreenShare,\n videoPriority,\n isLocalParticipant,\n}: ParticipantTracksProps) {\n const publications = usePublications(participant);\n\n let filteredPublications;\n\n if (\n enableScreenShare &&\n publications.some((p) => p.trackName.includes(\"screen\"))\n ) {\n // When displaying a screenshare track is allowed, and a screen share track exists,\n // remove all video tracks without the name 'screen'.\n filteredPublications = publications.filter(\n (p) => p.trackName.includes(\"screen\") || p.kind !== \"video\"\n );\n } else {\n // Else, remove all screenshare tracks\n filteredPublications = publications.filter(\n (p) => !p.trackName.includes(\"screen\")\n );\n }\n\n return (\n <>\n {filteredPublications.map((publication, i) => (\n \n ))}\n \n );\n}\n","import ParticipantInfo from '../ParticipantInfo/ParticipantInfo';\nimport ParticipantTracks from '../ParticipantTracks/ParticipantTracks';\nimport { Participant as IParticipant } from 'twilio-video';\n\ninterface ParticipantProps {\n participant: IParticipant;\n videoOnly?: boolean;\n enableScreenShare?: boolean;\n onClick?: () => void;\n isSelected?: boolean;\n isLocalParticipant?: boolean;\n hideParticipant?: boolean;\n}\n\nexport default function Participant({\n participant,\n videoOnly,\n enableScreenShare,\n onClick,\n isSelected,\n isLocalParticipant,\n hideParticipant\n}: ParticipantProps) {\n return (\n \n \n \n );\n}\n","import { useEffect, useState } from 'react';\nimport { useVideoContext } from '../../../providers/video';\nimport { RemoteParticipant } from 'twilio-video';\n\nexport default function useDominantSpeaker() {\n const { room } = useVideoContext();\n const [dominantSpeaker, setDominantSpeaker] = useState(room?.dominantSpeaker ?? null);\n\n useEffect(() => {\n if (room) {\n // Sometimes, the 'dominantSpeakerChanged' event can emit 'null', which means that\n // there is no dominant speaker. If we change the main participant when 'null' is\n // emitted, the effect can be jarring to the user. Here we ignore any 'null' values\n // and continue to display the previous dominant speaker as the main participant.\n const handleDominantSpeakerChanged = (newDominantSpeaker: RemoteParticipant) => {\n if (newDominantSpeaker !== null) {\n setDominantSpeaker(newDominantSpeaker);\n }\n };\n\n // Since 'null' values are ignored, we will need to listen for the 'participantDisconnected'\n // event, so we can set the dominantSpeaker to 'null' when they disconnect.\n const handleParticipantDisconnected = (participant: RemoteParticipant) => {\n setDominantSpeaker((prevDominantSpeaker) => {\n return prevDominantSpeaker === participant ? null : prevDominantSpeaker;\n });\n };\n\n room.on('dominantSpeakerChanged', handleDominantSpeakerChanged);\n room.on('participantDisconnected', handleParticipantDisconnected);\n return () => {\n room.off('dominantSpeakerChanged', handleDominantSpeakerChanged);\n room.off('participantDisconnected', handleParticipantDisconnected);\n };\n }\n }, [room]);\n\n return dominantSpeaker;\n}\n","import { useEffect, useState } from 'react';\nimport { RemoteParticipant } from 'twilio-video';\nimport useDominantSpeaker from '../useDominantSpeaker/useDominantSpeaker';\nimport { useVideoContext } from '../../../providers/video';\n\nexport default function useParticipants() {\n const { room } = useVideoContext();\n const dominantSpeaker = useDominantSpeaker();\n const [participants, setParticipants] = useState(Array.from(room?.participants.values() ?? []));\n\n // When the dominant speaker changes, they are moved to the front of the participants array.\n // This means that the most recent dominant speakers will always be near the top of the\n // ParticipantStrip component.\n useEffect(() => {\n if (dominantSpeaker) {\n setParticipants((prevParticipants) => [dominantSpeaker, ...prevParticipants.filter((participant) => participant !== dominantSpeaker)]);\n }\n }, [dominantSpeaker]);\n\n useEffect(() => {\n if (room) {\n const participantConnected = (participant: RemoteParticipant) =>\n setParticipants((prevParticipants) => [...prevParticipants, participant]);\n const participantDisconnected = (participant: RemoteParticipant) =>\n setParticipants((prevParticipants) => prevParticipants.filter((p) => p !== participant));\n room.on('participantConnected', participantConnected);\n room.on('participantDisconnected', participantDisconnected);\n return () => {\n room.off('participantConnected', participantConnected);\n room.off('participantDisconnected', participantDisconnected);\n };\n }\n }, [room]);\n\n return participants;\n}\n","import { useVideoContext } from '../../../providers/video';\nimport useDominantSpeaker from '../useDominantSpeaker/useDominantSpeaker';\nimport useParticipants from '../useParticipants/useParticipants';\nimport useScreenShareParticipant from '../useScreenShareParticipant/useScreenShareParticipant';\nimport useSelectedParticipant from '../../../components/twilio/VideoProvider/useSelectedParticipant/useSelectedParticipant';\n\nexport default function useMainParticipant() {\n const [selectedParticipant] = useSelectedParticipant();\n const screenShareParticipant = useScreenShareParticipant();\n const dominantSpeaker = useDominantSpeaker();\n const participants = useParticipants();\n const { room } = useVideoContext();\n const localParticipant = room?.localParticipant;\n const remoteScreenShareParticipant = screenShareParticipant !== localParticipant ? screenShareParticipant : null;\n\n // The participant that is returned is displayed in the main video area. Changing the order of the following\n // variables will change the how the main speaker is determined.\n return selectedParticipant || remoteScreenShareParticipant || dominantSpeaker || participants[0] || localParticipant;\n}\n","import Participant from '../Participant/Participant';\nimport { Box, Theme, useMediaQuery } from '@mui/material';\nimport useMainParticipant from '../../../hooks/twilio/useMainParticipant/useMainParticipant';\nimport useParticipants from '../../../hooks/twilio/useParticipants/useParticipants';\nimport { useVideoContext } from '../../../providers/video';\nimport useSelectedParticipant from '../VideoProvider/useSelectedParticipant/useSelectedParticipant';\nimport useScreenShareParticipant from '../../../hooks/twilio/useScreenShareParticipant/useScreenShareParticipant';\nimport { useEffect } from 'react';\n\nexport default function ParticipantList() {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const { room } = useVideoContext();\n const localParticipant = room!.localParticipant;\n const participants = useParticipants();\n const [selectedParticipant, setSelectedParticipant] = useSelectedParticipant();\n const screenShareParticipant = useScreenShareParticipant();\n const mainParticipant = useMainParticipant();\n const isRemoteParticipantScreenSharing = screenShareParticipant && screenShareParticipant !== localParticipant;\n\n if (participants.length === 0) return null; // Don't render this component if there are no remote participants.\n\n return (\n \n \n \n \n {participants.map((participant) => {\n const isSelected = participant === selectedParticipant;\n const hideParticipant = participant === mainParticipant && participant !== screenShareParticipant && !isSelected;\n return (\n setSelectedParticipant(participant)}\n hideParticipant={hideParticipant}\n />\n );\n })}\n \n \n \n );\n}\n","import { LocalAudioTrack, LocalVideoTrack, Participant, RemoteAudioTrack, RemoteVideoTrack } from 'twilio-video';\n\nimport AudioLevelIndicator from '../AudioLevelIndicator/AudioLevelIndicator';\nimport AvatarIcon from '../../icons/video/AvatarIcon';\nimport NetworkQualityLevel from '../NetworkQualityLevel/NetworkQualityLevel';\nimport { Typography, Box } from '@mui/material';\n\nimport useIsTrackSwitchedOff from '../../../hooks/twilio/useIsTrackSwitchedOff/useIsTrackSwitchedOff';\nimport useParticipantIsReconnecting from '../../../hooks/twilio/useParticipantIsReconnecting/useParticipantIsReconnecting';\nimport usePublications from '../../../hooks/twilio/usePublications/usePublications';\nimport useScreenShareParticipant from '../../../hooks/twilio/useScreenShareParticipant/useScreenShareParticipant';\nimport useTrack from '../../../hooks/twilio/useTrack/useTrack';\nimport { useVideoContext } from '../../../providers/video';\n\ninterface MainParticipantInfoProps {\n participant: Participant;\n children: React.ReactNode;\n}\n\nexport default function MainParticipantInfo({ participant, children }: MainParticipantInfoProps) {\n const { room } = useVideoContext();\n const localParticipant = room!.localParticipant;\n const isLocal = localParticipant === participant;\n\n const screenShareParticipant = useScreenShareParticipant();\n const isRemoteParticipantScreenSharing = screenShareParticipant && screenShareParticipant !== localParticipant;\n\n const publications = usePublications(participant);\n const videoPublication = publications.find((p) => !p.trackName.includes('screen') && p.kind === 'video');\n const screenSharePublication = publications.find((p) => p.trackName.includes('screen'));\n\n const videoTrack = useTrack(screenSharePublication || videoPublication);\n const isVideoEnabled = Boolean(videoTrack);\n\n const audioPublication = publications.find((p) => p.kind === 'audio');\n const audioTrack = useTrack(audioPublication) as LocalAudioTrack | RemoteAudioTrack | undefined;\n\n const isVideoSwitchedOff = useIsTrackSwitchedOff(videoTrack as LocalVideoTrack | RemoteVideoTrack);\n const isParticipantReconnecting = useParticipantIsReconnecting(participant);\n\n return (\n \n \n \n \n \n \n {participant.identity}\n {isLocal && ' (You)'}\n {screenSharePublication && ' - Screen'}\n \n \n \n \n \n {(!isVideoEnabled || isVideoSwitchedOff) && (\n \n \n \n )}\n {isParticipantReconnecting && (\n \n \n Reconnecting...\n \n \n )}\n {children}\n \n );\n}\n","import MainParticipantInfo from '../MainParticipantInfo/MainParticipantInfo';\nimport ParticipantTracks from '../ParticipantTracks/ParticipantTracks';\nimport useMainParticipant from '../../../hooks/twilio/useMainParticipant/useMainParticipant';\nimport useSelectedParticipant from '../VideoProvider/useSelectedParticipant/useSelectedParticipant';\nimport useScreenShareParticipant from '../../../hooks/twilio/useScreenShareParticipant/useScreenShareParticipant';\nimport { useVideoContext } from '../../../providers/video';\n\nexport default function MainParticipant() {\n const mainParticipant = useMainParticipant();\n const { room } = useVideoContext();\n const localParticipant = room?.localParticipant;\n const [selectedParticipant] = useSelectedParticipant();\n const screenShareParticipant = useScreenShareParticipant();\n\n const videoPriority =\n (mainParticipant === selectedParticipant || mainParticipant === screenShareParticipant) && mainParticipant !== localParticipant\n ? 'high'\n : null;\n\n return (\n /* audio is disabled for this participant component because this participant's audio \n is already being rendered in the component. */\n \n \n \n );\n}\n","import { Box, Theme, useMediaQuery } from '@mui/material';\nimport ParticipantList from '../ParticipantList/ParticipantList';\nimport MainParticipant from '../MainParticipant/MainParticipant';\n\nexport default function Room() {\n const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));\n const totalMobileSidebarHeight = `${90 + 8 * 2 + 2}px`;\n return (\n \n \n \n \n );\n}\n","import MenuBar from \"./MenuBar/MenuBar\";\nimport MobileTopMenuBar from \"./MobileTopMenuBar/MobileTopMenuBar\";\nimport PreJoinScreens from \"./PreJoinScreens/PreJoinScreens\";\nimport ReconnectingNotification from \"./ReconnectingNotification/ReconnectingNotification\";\nimport Room from \"./Room/Room\";\n\nimport useRoomState from \"../../hooks/twilio/useRoomState/useRoomState\";\nimport { useVideoState } from \"../../providers/twilio\";\nimport { useVideoContext } from \"../../providers/video\";\n\nimport Box from \"@mui/material/Box\";\n\nexport default function Twilio({ roomId }: { roomId?: String }) {\n const roomState = useRoomState();\n const { room, isAcquiringLocalTracks } = useVideoContext();\n const { appointment } = useVideoState();\n\n console.log(room);\n\n return (\n \n {roomState === \"disconnected\" || isAcquiringLocalTracks || !room ? (\n \n ) : (\n \n \n \n \n \n )}\n \n );\n}\n"],"names":["audioContext","EndCallButton","isMobile","useMediaQuery","theme","breakpoints","down","room","localTracks","useVideoContext","account","viewProfile","selectViewProfile","updateLessonStatus","updateActiveLesson","useProfile","router","useRouter","setRoomStep","setVideoOpen","useVideoState","isAuthenticated","useAuth0","endCall","useCallback","forEach","track","stop","disconnect","undefined","Steps","roles","some","includes","r","push","jsx_runtime","jsx","Tooltip","placement","title","arrow","Button","sx","background","color","height","fontSize","padding","startIcon","CallEndTwoToneIcon","onClick","data-cy-disconnect","AboutDialog_AboutDialog","param","open","onClose","roomType","jsxs","Dialog","fullWidth","maxWidth","DialogTitle","Divider","DialogContent","DialogContentText","DialogActions","variant","autoFocus","useIsTrackEnabled","isEnabled","setIsEnabled","useState","useEffect","setEnabled","setDisabled","on","off","useMediaStreamTrack","mediaStreamTrack","setMediaStreamTrack","handleStarted","clipId","getUniqueClipId","initializeAnalyser","stream","AudioContext","audioSource","createMediaStreamSource","analyser","createAnalyser","smoothingTimeConstant","fftSize","connect","window","AudioLevelIndicator_AudioLevelIndicator","memo","audioTrack","SVGRectRef","useRef","setAnalyser","isTrackEnabled","newMediaStream","MediaStream","clone","stopAllMediaStreamTracks","getTracks","reinitializeAnalyser","addEventListener","removeEventListener","SVGClipElement","current","sampleArray","Uint8Array","frequencyBinCount","timer","setInterval","getByteFrequencyData","values","length","i","volume","Math","min","max","log10","setAttribute","String","clearInterval","clipPathId","concat","svg","xmlns","width","viewBox","data-test-audio-indicator","defs","clipPath","id","rect","ref","x","y","g","fill","fillRule","transform","rx","ry","path","strokeWidth","d","data-test-audio-mute-icon","AudioInputList","audioInputDevices","useDevices","localAudioTrack","find","kind","localAudioInputDeviceId","getSettings","deviceId","div","Typography","gutterBottom","Grid","container","alignItems","justifyContent","className","FormControl","Select","onChange","newDeviceId","e","target","value","localStorage","setItem","SELECTED_AUDIO_INPUT_KEY","restart","exact","map","MenuItem","device","label","AudioLevelIndicator","AudioOutputList","audioOutputDevices","activeSinkId","setActiveSinkId","activeOutputLabel","Fragment","VideoTrack","dimensions","isLocal","priority","useVideoTrackDimensions","setDimensions","handleDimensionsChanged","newTrack","isPortrait","el","muted","setPriority","attach","detach","srcObject","isFrontFacing","facingMode","style","objectFit","name","aspectRatio","Box","component","VideoInputList","videoInputDevices","localVideoTrack","storedLocalVideoDeviceId","setStoredLocalVideoDeviceId","getItem","SELECTED_VIDEO_INPUT_KEY","localVideoInputDeviceId","maxHeight","margin","DEFAULT_VIDEO_CONSTRAINTS","DeviceSelectionDialog","xs","sm","minHeight","marginBottom","float","InfoIconOutlined","SettingsIcon","clipRule","FlipCameraIcon","Menu","aboutOpen","setAboutOpen","menuOpen","setMenuOpen","settingsOpen","setSettingsOpen","anchorRef","flipCameraDisabled","toggleFacingMode","flipCameraSupported","useFlipCameraToggle","supportsFacingMode","setSupportsFacingMode","videoTrack","currentFacingMode","newFacingMode","minWidth","border","isOpen","data-cy-more-button","MoreVert","SettingsTwoToneIcon","MenuContainer","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","display","marginRight","disabled","AboutDialog","useRoomState","state","setState","setRoomState","ToggleAudioButton","isDisabled","includeBorder","isAudioEnabled","toggleAudioEnabled","useLocalAudioToggle","disable","enable","hasAudioTrack","span","MicSharpIcon","MicOffSharpIcon","data-cy-audio-toggle","ToggleVideoButton","isVideoEnabled","toggleVideoEnabled","useLocalVideoToggle","lastClickTimeRef","hasVideoInputDevices","toggleVideo","Date","now","VideocamSharpIcon","VideocamOffSharpIcon","useScreenShareParticipant","screenShareParticipant","setScreenShareParticipant","updateScreenShareParticipant","Array","from","participants","localParticipant","participant","tracks","trackName","ToggleScreenShareButton","props","toggleScreenShare","isSharingScreen","disableScreenShareButton","Boolean","isScreenShareSupported","navigator","mediaDevices","getDisplayMedia","tooltipMessage","SHARE_IN_PROGRESS_TEXT","SHARE_NOT_SUPPORTED_TEXT","PopperProps","disablePortal","cursor","ScreenShareSharpIcon","data-cy-share-screen","ToggleFullScreenButton","fullScreenMode","setFullScreenMode","toggleFullScreen","FullscreenExitOutlinedIcon","FullscreenOutlinedIcon","MenuBar","appointment","roomState","isReconnecting","bottom","md","zIndex","Hidden","smDown","flex","type","item","AvatarIcon","circle","cx","cy","strokeLinejoin","LocalAudioLevelIndicator","LocalVideoPreview","identity","position","overflow","paddingTop","top","left","right","withDefault","val","ConnectionOptionsDialog","settings","dispatchSetting","handleChange","event","handleNumberChange","test","spacing","hidden","InputLabel","inputLabels","dominantSpeakerPriority","trackSwitchOffMode","bandwidthProfileMode","clientTrackSwitchOffControl","contentPreferencesMode","TextField","placeholder","maxAudioBitrate","SettingsMenu","deviceSettingsOpen","setDeviceSettingsOpen","connectionSettingsOpen","setConnectionSettingsOpen","MoreHoriz","crypto","require","DeviceSelectionScreen","roomName","displayName","setStep","appointmentId","sha256","createHash","update","digest","isFetching","isInLesson","activeLesson","busy","setBusy","joinOnLoad","enqueueSnackbar","useSnackbar","videoConnect","isAcquiringLocalTracks","isConnecting","getLocalAudioTrack","disableButtons","handleJoin","lessonRoomName","toString","result","fetch","method","headers","body","JSON","stringify","data","json","twilioToken","tabFocused","error","console","log","then","publishTrack","catch","finally","handleCancel","direction","CircularProgress","fontWeight","paddingRight","mdUp","Stack","flexDirection","data-cy-join-now","IntroContainer","borderRadius","boxShadow","children","RoomNameScreen","roomDisplayName","handleSubmit","getAccessTokenSilently","guestName","setGuestName","canJoin","useSWR","encodeURIComponent","fetcher","url","refreshInterval","helperText","required","PreJoinScreens","getAudioAndVideoTracks","roomStep","userName","setUserName","setRoomName","mediaError","setMediaError","hasTriedGettingLocalTracks","setHasTriedGettingLocalTracks","dir","preventDefault","ReconnectingNotification","BARS_ARRAY","NetworkQualityLevel","networkQualityLevel","useParticipantNetworkQualityLevel","setNetworkQualityLevel","handleNewtorkQualityLevelChange","newNetworkQualityLevel","borderRight","STEP","level","PinIcon","SvgIcon","boxSizing","ScreenShareIcon","useIsTrackSwitchedOff","isSwitchedOff","setIsSwitchedOff","handleSwitchedOff","handleSwitchedOn","usePublications","publications","setPublications","publicationAdded","prevPublications","publication","publicationRemoved","filter","p","useTrack","setTrack","removeTrack","useParticipantIsReconnecting","setIsReconnecting","handleReconnecting","handleReconnected","ParticipantInfo","isSelected","isLocalParticipant","hideParticipant","audioPublication","videoPublication","isScreenShareEnabled","isVideoSwitchedOff","isParticipantReconnecting","data-cy-participant","AudioTrack","audioEl","document","appendChild","remove","setSinkId","Publication","videoOnly","videoPriority","ParticipantTracks","filteredPublications","enableScreenShare","Participant","useDominantSpeaker","dominantSpeaker","setDominantSpeaker","handleDominantSpeakerChanged","newDominantSpeaker","handleParticipantDisconnected","prevDominantSpeaker","useParticipants","setParticipants","prevParticipants","participantConnected","participantDisconnected","useMainParticipant","selectedParticipant","useSelectedParticipant","ParticipantList","setSelectedParticipant","mainParticipant","overflowY","gridArea","overflowX","sid","MainParticipantInfo","screenSharePublication","data-cy-main-participant","marginLeft","MainParticipant","Room","totalMobileSidebarHeight","gridTemplateColumns","gridTemplateRows","Twilio","roomId","paddingBottom"],"sourceRoot":""}